213 lines
4.9 KiB
Bash
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
|
|
} |