-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgit-task.sh
executable file
·152 lines (134 loc) · 4.72 KB
/
git-task.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/bin/bash
set -e
check_uncommitted_changes() {
if ! git diff --quiet || ! git diff --cached --quiet; then
echo ""
echo ""
echo "❌ Existem alterações não commitadas. Faça o commit ou stash antes de continuar."
echo ""
echo ""
exit 1
fi
}
load_config() {
PROD_BRANCH=$(git config task.prod-branch)
DEV_BRANCH=$(git config task.dev-branch)
if [ -z "$PROD_BRANCH" ] || [ -z "$DEV_BRANCH" ]; then
echo "❌ Configuração não encontrada! Execute 'git task init' primeiro."
exit 1
fi
}
COMMAND=$1
PARAM=$2
case "$COMMAND" in
"init")
echo "🔧 Inicializando Git Task..."
read -p "Qual branch será usado para PRODUÇÃO? (padrão: main) " PROD_BRANCH
PROD_BRANCH=${PROD_BRANCH:-main}
read -p "Qual branch será usado para HOMOLOGAÇÃO? (padrão: develop) " DEV_BRANCH
DEV_BRANCH=${DEV_BRANCH:-develop}
git config task.prod-branch "$PROD_BRANCH"
git config task.dev-branch "$DEV_BRANCH"
if ! git show-ref --quiet refs/heads/"$DEV_BRANCH"; then
git checkout -b "$DEV_BRANCH" >/dev/null 2>&1
fi
if ! git show-ref --quiet refs/heads/"$PROD_BRANCH"; then
git checkout -b "$PROD_BRANCH" >/dev/null 2>&1
fi
git checkout "$DEV_BRANCH" >/dev/null 2>&1
echo "🎉 Git Task inicializado com sucesso!"
;;
"create")
load_config
check_uncommitted_changes
echo "📌 Criando task: $PARAM"
git checkout "$DEV_BRANCH" >/dev/null 2>&1
git pull >/dev/null 2>&1
git checkout -b task/$PARAM >/dev/null 2>&1
echo "✅ Task '$PARAM' criada com sucesso!"
;;
"deploy")
load_config
check_uncommitted_changes
ORIGINAL_BRANCH=$(git branch --show-current)
if [ "$PARAM" = "homolog" ]; then
echo "🚀 Enviando para homologação..."
git checkout "$DEV_BRANCH" >/dev/null 2>&1
git merge --no-ff --no-edit "$ORIGINAL_BRANCH" >/dev/null 2>&1
git push >/dev/null 2>&1
elif [ "$PARAM" = "production" ]; then
echo "🚀 Enviando para produção..."
git checkout "$PROD_BRANCH" >/dev/null 2>&1
git merge --no-ff --no-edit "$DEV_BRANCH" >/dev/null 2>&1
git push >/dev/null 2>&1
else
echo "❌ Destino inválido. Use 'homolog' ou 'production'."
exit 1
fi
git checkout "$ORIGINAL_BRANCH" >/dev/null 2>&1
echo "✅ Deploy concluído!"
;;
"release")
load_config
check_uncommitted_changes
if [ "$PARAM" = "production" ]; then
TARGET_BRANCH="$PROD_BRANCH"
echo "🔖 Criando release para PRODUÇÃO..."
elif [ "$PARAM" = "homolog" ]; then
TARGET_BRANCH="$DEV_BRANCH"
echo "🔖 Criando release para HOMOLOGAÇÃO..."
else
echo "❌ Erro: Você deve especificar 'production' ou 'homolog'."
exit 1
fi
ORIGINAL_BRANCH=$(git branch --show-current)
git checkout "$TARGET_BRANCH" >/dev/null 2>&1
git pull >/dev/null 2>&1
if [ "$TARGET_BRANCH" = "$PROD_BRANCH" ]; then
standard-version >/dev/null 2>&1 && git push >/dev/null 2>&1 && git push --tags >/dev/null 2>&1
git checkout "$DEV_BRANCH" >/dev/null 2>&1
git merge --no-ff --no-edit "$PROD_BRANCH" >/dev/null 2>&1
git push >/dev/null 2>&1
else
standard-version --prerelease beta >/dev/null 2>&1 && git push >/dev/null 2>&1 && git push --tags >/dev/null 2>&1
fi
git checkout "$ORIGINAL_BRANCH" >/dev/null 2>&1
echo "✅ Release concluída!"
;;
"finish")
load_config
check_uncommitted_changes
CURRENT_BRANCH=$(git branch --show-current)
echo "✅ Finalizando a tarefa '$CURRENT_BRANCH'..."
git checkout "$DEV_BRANCH" >/dev/null 2>&1
git pull >/dev/null 2>&1
if git branch --merged | grep -q "$CURRENT_BRANCH"; then
git branch -d "$CURRENT_BRANCH" >/dev/null 2>&1
git push origin --delete "$CURRENT_BRANCH" >/dev/null 2>&1 || true
echo "🎉 Task finalizada e excluída com sucesso!"
else
if [ "$PARAM" = "--force" ]; then
echo "⚠️ ATENÇÃO: A branch '$CURRENT_BRANCH' **NÃO FOI MERGEADA**, mas será excluída mesmo assim."
git branch -D "$CURRENT_BRANCH" >/dev/null 2>&1
git push origin --delete "$CURRENT_BRANCH" >/dev/null 2>&1 || true
echo "✅ Task forçada e excluída com sucesso!"
else
echo ""
echo "❌ A task '$CURRENT_BRANCH' ainda não foi integrada ao '$DEV_BRANCH'."
echo ""
echo "👉 Se quiser excluí-la mesmo assim, use:"
echo " git task finish --force"
echo ""
echo "👉 Ou envie ao '$DEV_BRANCH' usando:"
echo " git task deploy homolog"
echo ""
git checkout "$CURRENT_BRANCH" >/dev/null 2>&1
exit 1
fi
fi
;;
*)
echo "❌ Comando desconhecido. Use: init, create, deploy, release ou finish."
exit 1
;;
esac