Linux_frogg-profile.d/func/git.sh

213 lines
4.9 KiB
Bash

#!/bin/bash
if [[ -z "${WELCOME_SCRIPT_PATH}" ]]; then
WELCOME_SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." &>/dev/null && pwd)"
fi
#region INCLUDES
. "${WELCOME_SCRIPT_PATH}/config/config_git.sh"
#endregion
getbranch(){
local branch
# Récupère le nom de la branche actuelle
branch=$(git branch --show-current 2>/dev/null)
if [[ -z "$branch" ]]; then
msg_error "Pas dans un dépôt Git"
exit
fi
echo "$branch"
}
gitinit(){
local git_user git_email repo_name
# prepare vars
git_user="${1:-$CONFIG_GIT_USER}"
git_email="${2:-$CONFIG_GIT_EMAIL}"
repo_name="${3:-$CONFIG_GIT_SERVER}${git_user}/$(basename "$(pwd)").git"
msg_info "Set git user : ${git_user} ${git_email}"
git config --global --replace-all user.name "${git_user}"
git config --global --replace-all user.email "${git_email}"
msg_info "Init git repository"
git init
git add .
git commit -m "Initial commit"
git branch -M main
msg_info "Adding origin : ${repo_name}"
git remote add origin "${repo_name}"
msg_info "Try to create repository on git server...
curl -X POST \"${CONFIG_GIT_SERVER}api/v1/user/repos\" \\
-H \"accept: application/json\" \\
-H \"Authorization: token ${CONFIG_GIT_TOKEN_INIT}\" \\
-H \"Content-Type: application/json\" \\
-d \"{\\\"name\\\":\\\"frogg_ssl_check\\\", \\\"private\\\":true}\""
# Create repo on git server
if ! curl -f -s -X POST "${CONFIG_GIT_SERVER}api/v1/user/repos" \
-H "accept: application/json" \
-H "Authorization: token ${CONFIG_GIT_TOKEN_INIT}" \
-H "Content-Type: application/json" \
-d "{\"name\":\"frogg_ssl_check\", \"private\":true}"; then
msg_error "Error while creating new repository on ${CONFIG_GIT_SERVER}"
return 1
fi
# Push repo on git server
if ! git push -u origin main; then
msg_error "Error while pushing to ${repo_name}"
return 2
fi
}
gitreset(){
local branch
branch=$(getbranch)
git fetch origin
git reset --hard origin/"${1:-$branch}"
git clean -fd
msg_success "Dépôt synchronisé et nettoyé."
}
gitsync(){
local branch
branch=$(getbranch)
git fetch
git pull origin "${1:-$branch}"
}
gitclone(){
if [[ -z "$1" ]]; then
msg_warning "Veuillez préciser l'adresse d'un dépôt Git"
return 1
fi
git init
git remote add origin "$1"
git fetch
git reset --hard origin/main
git clean -fd
msg_success "Dépôt cloné."
}
giturl(){
local branch
branch=$(getbranch)
git remote set-url origin "$1"
msg_success "Url du dépôt changé en $1."
}
gitssl() {
local choice="${1:-true}"
git config --global http.sslVerify "$choice"
}
gitversion(){
local version
# --- RÉCUPÉRATION DYNAMIQUE DE LA version ---
# On récupère le dernier tag existant.
# Si aucune erreur, on le stocke. Sinon, on part de 1.0.0 par défaut.
version=$(git describe --tags --abbrev=0 2>/dev/null)
if [ -z "$version" ]; then
version="1.0.0"
msg_warning "Aucun tag trouvé, initialisation à la version $version"
else
msg_info "Version actuelle détectée : $version"
fi
# --- SAISIE DU MESSAGE ---
read -p "Commit message for version $version: " msg
# Message par défaut si vide
msg=${msg:-"Release version $version"}
# --- OPÉRATIONS GIT ---
# On s'assure d'être à jour
msg_info "Synchronisation locale...🔄"
git pull --rebase
# Ajout et commit
git add .
# On vérifie s'il y a quelque chose à commiter pour éviter l'erreur
if git diff-index --quiet HEAD --; then
msg_info "Rien à commiter, passage direct aux tags."
else
git commit -m "$msg"
git push
fi
# --- GESTION DES TAGS ---
msg_info "Mise à jour du tag $version..."
# Supprimer le tag localement
git tag -d "$version" 2>/dev/null
# Supprimer le tag distant (syntaxe moderne)
git push origin --delete "$version" 2>/dev/null
# Créer le nouveau tag annoté
git tag -a "$version" -m "version $version"
# Pousser le tag
git push origin "$version"
msg_success " Terminé ! La version $version est à jour."
}
script_update() {
local BRANCH LOCAL REMOTE current_path
current_path="$PWD"
cd "$WELCOME_SCRIPT_PATH" || return 2
if ! git fetch origin >/dev/null 2>&1; then
msg_error "Erreur lors du Fetch"
cd "$current_path" || :
return 3
fi
BRANCH=$(git rev-parse --abbrev-ref HEAD)
LOCAL=$(git rev-parse HEAD)
REMOTE=$(git rev-parse origin/"$BRANCH")
if [ "$LOCAL" = "$REMOTE" ] && git diff --quiet && git diff --cached --quiet; then
cd "$current_path" || :
return 0
fi
# update
echo ""
if git reset --hard origin/"$BRANCH"; then
msg_success "Les script de welcome a été mis à jour !! relancer le ssh pour profiter des nouvelles fonctionnalités"
echo ""
cd "$current_path" || :
return 1
else
msg_error "Erreur lors de la mise à jour du script"
cd "$current_path" || :
return 4
fi
}