@kaikybrofc/omnizap-system 2.1.10 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +18 -0
- package/README.md +17 -2
- package/package.json +1 -1
- package/scripts/github-release-notify.mjs +11 -3
- package/scripts/release.sh +216 -19
package/.env.example
CHANGED
|
@@ -521,6 +521,13 @@ DEPLOY_PACKAGE_SECONDARY_TOKEN_KEYS=
|
|
|
521
521
|
# ==============================
|
|
522
522
|
# Release (auto commit/push)
|
|
523
523
|
# ==============================
|
|
524
|
+
# Tipo de bump padrão no npm run release (patch/minor/major...)
|
|
525
|
+
RELEASE_TYPE=patch
|
|
526
|
+
# Opcional: força versão exata (ex: 2.2.0), ignorando RELEASE_TYPE
|
|
527
|
+
RELEASE_FORCE_VERSION=
|
|
528
|
+
# Rollover automático de patch: quando patch >= RELEASE_PATCH_ROLLOVER_AT, vira (major).(minor+1).0
|
|
529
|
+
RELEASE_PATCH_ROLLOVER_ENABLED=1
|
|
530
|
+
RELEASE_PATCH_ROLLOVER_AT=10
|
|
524
531
|
# Faz commit automatico de alteracoes pendentes antes do release
|
|
525
532
|
RELEASE_GIT_AUTO_COMMIT=1
|
|
526
533
|
# Faz push automatico dos commits gerados no release
|
|
@@ -535,6 +542,8 @@ RELEASE_GIT_VERSION_COMMIT_PREFIX=chore(release): v
|
|
|
535
542
|
|
|
536
543
|
# Cria/atualiza GitHub Release (aba Releases) automaticamente no npm run release
|
|
537
544
|
RELEASE_GITHUB_RELEASE=1
|
|
545
|
+
# Se 1, falha o release caso GitHub Release esteja desativado
|
|
546
|
+
RELEASE_REQUIRE_GITHUB_RELEASE=1
|
|
538
547
|
RELEASE_GITHUB_REPO=kaikybrofc/omnizap-system
|
|
539
548
|
RELEASE_GITHUB_TOKEN=
|
|
540
549
|
RELEASE_GITHUB_TAG_PREFIX=v
|
|
@@ -545,3 +554,12 @@ RELEASE_GITHUB_PRERELEASE=
|
|
|
545
554
|
RELEASE_GITHUB_DRAFT=0
|
|
546
555
|
# Opcional: commit/tag alvo (vazio usa HEAD atual)
|
|
547
556
|
RELEASE_GITHUB_TARGET=
|
|
557
|
+
|
|
558
|
+
# Se 1, exige publish em ambos os registries no release (GitHub Packages + npmjs)
|
|
559
|
+
RELEASE_REQUIRE_DUAL_PUBLISH=1
|
|
560
|
+
# Verificação final: local + registries + GitHub Release na mesma versão
|
|
561
|
+
RELEASE_VERIFY_UNIFIED_VERSION=1
|
|
562
|
+
RELEASE_VERIFY_PRIMARY_REGISTRY=https://npm.pkg.github.com
|
|
563
|
+
RELEASE_VERIFY_SECONDARY_REGISTRY=https://registry.npmjs.org
|
|
564
|
+
RELEASE_VERIFY_PRIMARY_TOKEN_KEYS=DEPLOY_PACKAGE_TOKEN,DEPLOY_GITHUB_TOKEN,GITHUB_TOKEN,GH_TOKEN,NPM_TOKEN,NODE_AUTH_TOKEN
|
|
565
|
+
RELEASE_VERIFY_SECONDARY_TOKEN_KEYS=DEPLOY_PACKAGE_SECONDARY_TOKEN,NPM_TOKEN,NODE_AUTH_TOKEN
|
package/README.md
CHANGED
|
@@ -132,7 +132,7 @@ Variáveis legadas foram mantidas por compatibilidade (`QUOTE_API_URL`, `WAIFU_A
|
|
|
132
132
|
- `npm run pm2:prod`: sobe com PM2 usando `ecosystem.prod.config.cjs`.
|
|
133
133
|
- `npm run deploy`: deploy automático de `public/` com cache-bust, backup, validação e reload do Nginx.
|
|
134
134
|
- `npm run deploy:dry-run`: simula o deploy sem publicar/recarregar serviços.
|
|
135
|
-
- `npm run release`:
|
|
135
|
+
- `npm run release`: release completo com versão unificada (npmjs + GitHub Packages + GitHub Release) e verificação final.
|
|
136
136
|
- `npm run release:minor`: bump `minor` + deploy + publish do package.
|
|
137
137
|
- `npm run release:major`: bump `major` + deploy + publish do package.
|
|
138
138
|
- `npm run test`: executa testes Node (`node --test`).
|
|
@@ -224,10 +224,14 @@ Comando único de release (patch + deploy + publish):
|
|
|
224
224
|
npm run release
|
|
225
225
|
```
|
|
226
226
|
|
|
227
|
-
`npm run release`
|
|
227
|
+
`npm run release` executa publish primário + secundário por padrão e valida consistência final de versão.
|
|
228
228
|
|
|
229
229
|
Variáveis do fluxo de release (git):
|
|
230
230
|
|
|
231
|
+
- `RELEASE_TYPE` (default: `patch`)
|
|
232
|
+
- `RELEASE_FORCE_VERSION` (opcional) - força versão exata (ex.: `2.2.0`)
|
|
233
|
+
- `RELEASE_PATCH_ROLLOVER_ENABLED` (default: `1`) - rollover automático de patch
|
|
234
|
+
- `RELEASE_PATCH_ROLLOVER_AT` (default: `10`) - quando patch atingir este valor, próximo release vira `major.(minor+1).0`
|
|
231
235
|
- `RELEASE_GIT_AUTO_COMMIT` (default: `1`) - commit automático se houver alterações pendentes
|
|
232
236
|
- `RELEASE_GIT_AUTO_PUSH` (default: `1`) - push automático dos commits gerados
|
|
233
237
|
- `RELEASE_GIT_REMOTE` (default: `origin`)
|
|
@@ -236,6 +240,7 @@ Variáveis do fluxo de release (git):
|
|
|
236
240
|
- `RELEASE_GIT_COMMIT_VERSION` (default: `1`) - commita alteração da versão após sucesso
|
|
237
241
|
- `RELEASE_GIT_VERSION_COMMIT_PREFIX` (default: `chore(release): v`)
|
|
238
242
|
- `RELEASE_GITHUB_RELEASE` (default: `1`) - cria/atualiza GitHub Release na aba Releases
|
|
243
|
+
- `RELEASE_REQUIRE_GITHUB_RELEASE` (default: `1`) - falha se GitHub Release estiver desativado
|
|
239
244
|
- `RELEASE_GITHUB_REPO` (opcional; ex.: `kaikybrofc/omnizap-system`)
|
|
240
245
|
- `RELEASE_GITHUB_TOKEN` (opcional; fallback: `DEPLOY_GITHUB_TOKEN`/`GITHUB_TOKEN`/`GH_TOKEN`)
|
|
241
246
|
- `RELEASE_GITHUB_TAG_PREFIX` (default: `v`) - prefixo da tag (`v2.1.9`)
|
|
@@ -244,6 +249,16 @@ Variáveis do fluxo de release (git):
|
|
|
244
249
|
- `RELEASE_GITHUB_PRERELEASE` (default: auto) - vazio detecta `-` na versão como prerelease
|
|
245
250
|
- `RELEASE_GITHUB_DRAFT` (default: `0`)
|
|
246
251
|
- `RELEASE_GITHUB_TARGET` (opcional; vazio usa `HEAD`)
|
|
252
|
+
- `RELEASE_REQUIRE_DUAL_PUBLISH` (default: `1`) - exige publish em GitHub Packages e npmjs
|
|
253
|
+
- `RELEASE_VERIFY_UNIFIED_VERSION` (default: `1`) - valida versão final em local + registries + GitHub Release
|
|
254
|
+
- `RELEASE_VERIFY_PRIMARY_REGISTRY` (default: `https://npm.pkg.github.com`)
|
|
255
|
+
- `RELEASE_VERIFY_SECONDARY_REGISTRY` (default: `https://registry.npmjs.org`)
|
|
256
|
+
- `RELEASE_VERIFY_PRIMARY_TOKEN_KEYS` / `RELEASE_VERIFY_SECONDARY_TOKEN_KEYS` - ordem de fallback de tokens para verificação
|
|
257
|
+
|
|
258
|
+
Exemplo de rollover automático:
|
|
259
|
+
|
|
260
|
+
- `2.1.9` + `npm run release` -> `2.1.10`
|
|
261
|
+
- `2.1.10` + `npm run release` -> `2.2.0`
|
|
247
262
|
|
|
248
263
|
## Execução com PM2
|
|
249
264
|
|
package/package.json
CHANGED
|
@@ -59,8 +59,8 @@ const parseRepoFromRemote = () => {
|
|
|
59
59
|
const token = env('RELEASE_GITHUB_TOKEN', 'DEPLOY_GITHUB_TOKEN', 'GITHUB_TOKEN', 'GH_TOKEN');
|
|
60
60
|
const repository = env('RELEASE_GITHUB_REPO', 'DEPLOY_GITHUB_REPO', 'GITHUB_REPOSITORY') || parseRepoFromRemote();
|
|
61
61
|
|
|
62
|
-
if (!action ||
|
|
63
|
-
console.error('Uso: node scripts/github-release-notify.mjs upsert --tag vX.Y.Z [opções]');
|
|
62
|
+
if (!action || !['upsert', 'get'].includes(action)) {
|
|
63
|
+
console.error('Uso: node scripts/github-release-notify.mjs <upsert|get> --tag vX.Y.Z [opções]');
|
|
64
64
|
process.exit(1);
|
|
65
65
|
}
|
|
66
66
|
|
|
@@ -137,6 +137,15 @@ const run = async () => {
|
|
|
137
137
|
failFromResponse(byTag, 'GitHub API');
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
+
if (action === 'get') {
|
|
141
|
+
if (!existingRelease) {
|
|
142
|
+
throw new Error(`GitHub release não encontrada para tag ${tag}`);
|
|
143
|
+
}
|
|
144
|
+
const url = existingRelease.html_url || '';
|
|
145
|
+
process.stdout.write(`found id=${existingRelease.id} tag=${tag} url=${url}`);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
|
|
140
149
|
const commonPayload = {
|
|
141
150
|
tag_name: tag,
|
|
142
151
|
target_commitish: target || undefined,
|
|
@@ -177,4 +186,3 @@ run().catch((error) => {
|
|
|
177
186
|
console.error(error?.message || error);
|
|
178
187
|
process.exit(1);
|
|
179
188
|
});
|
|
180
|
-
|
package/scripts/release.sh
CHANGED
|
@@ -3,6 +3,9 @@ set -euo pipefail
|
|
|
3
3
|
|
|
4
4
|
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
5
5
|
RELEASE_TYPE="${RELEASE_TYPE:-patch}"
|
|
6
|
+
RELEASE_FORCE_VERSION="${RELEASE_FORCE_VERSION:-}"
|
|
7
|
+
RELEASE_PATCH_ROLLOVER_ENABLED="${RELEASE_PATCH_ROLLOVER_ENABLED:-1}"
|
|
8
|
+
RELEASE_PATCH_ROLLOVER_AT="${RELEASE_PATCH_ROLLOVER_AT:-10}"
|
|
6
9
|
RELEASE_GIT_AUTO_COMMIT="${RELEASE_GIT_AUTO_COMMIT:-1}"
|
|
7
10
|
RELEASE_GIT_AUTO_PUSH="${RELEASE_GIT_AUTO_PUSH:-1}"
|
|
8
11
|
RELEASE_GIT_REMOTE="${RELEASE_GIT_REMOTE:-origin}"
|
|
@@ -11,12 +14,20 @@ RELEASE_GIT_PRE_COMMIT_MESSAGE="${RELEASE_GIT_PRE_COMMIT_MESSAGE:-chore(release)
|
|
|
11
14
|
RELEASE_GIT_COMMIT_VERSION="${RELEASE_GIT_COMMIT_VERSION:-1}"
|
|
12
15
|
RELEASE_GIT_VERSION_COMMIT_PREFIX="${RELEASE_GIT_VERSION_COMMIT_PREFIX:-chore(release): v}"
|
|
13
16
|
RELEASE_GITHUB_RELEASE="${RELEASE_GITHUB_RELEASE:-1}"
|
|
17
|
+
RELEASE_REQUIRE_GITHUB_RELEASE="${RELEASE_REQUIRE_GITHUB_RELEASE:-1}"
|
|
14
18
|
RELEASE_GITHUB_TAG_PREFIX="${RELEASE_GITHUB_TAG_PREFIX:-v}"
|
|
15
19
|
RELEASE_GITHUB_NAME_PREFIX="${RELEASE_GITHUB_NAME_PREFIX:-v}"
|
|
16
20
|
RELEASE_GITHUB_GENERATE_NOTES="${RELEASE_GITHUB_GENERATE_NOTES:-1}"
|
|
17
21
|
RELEASE_GITHUB_PRERELEASE="${RELEASE_GITHUB_PRERELEASE:-}"
|
|
18
22
|
RELEASE_GITHUB_DRAFT="${RELEASE_GITHUB_DRAFT:-0}"
|
|
19
23
|
RELEASE_GITHUB_TARGET="${RELEASE_GITHUB_TARGET:-}"
|
|
24
|
+
RELEASE_REQUIRE_DUAL_PUBLISH="${RELEASE_REQUIRE_DUAL_PUBLISH:-1}"
|
|
25
|
+
RELEASE_VERIFY_UNIFIED_VERSION="${RELEASE_VERIFY_UNIFIED_VERSION:-1}"
|
|
26
|
+
RELEASE_VERIFY_PRIMARY_REGISTRY="${RELEASE_VERIFY_PRIMARY_REGISTRY:-${DEPLOY_PACKAGE_REGISTRY:-https://npm.pkg.github.com}}"
|
|
27
|
+
RELEASE_VERIFY_SECONDARY_REGISTRY="${RELEASE_VERIFY_SECONDARY_REGISTRY:-${DEPLOY_PACKAGE_SECONDARY_REGISTRY:-https://registry.npmjs.org}}"
|
|
28
|
+
RELEASE_VERIFY_PRIMARY_TOKEN_KEYS="${RELEASE_VERIFY_PRIMARY_TOKEN_KEYS:-DEPLOY_PACKAGE_TOKEN,DEPLOY_GITHUB_TOKEN,GITHUB_TOKEN,GH_TOKEN,NPM_TOKEN,NODE_AUTH_TOKEN}"
|
|
29
|
+
RELEASE_VERIFY_SECONDARY_TOKEN_KEYS="${RELEASE_VERIFY_SECONDARY_TOKEN_KEYS:-DEPLOY_PACKAGE_SECONDARY_TOKEN,NPM_TOKEN,NODE_AUTH_TOKEN}"
|
|
30
|
+
TMP_NPMRC_FILES=()
|
|
20
31
|
|
|
21
32
|
case "$RELEASE_TYPE" in
|
|
22
33
|
patch|minor|major|prepatch|preminor|premajor|prerelease)
|
|
@@ -32,6 +43,15 @@ log() {
|
|
|
32
43
|
printf '[release] %s\n' "$*"
|
|
33
44
|
}
|
|
34
45
|
|
|
46
|
+
cleanup_tmp_npmrcs() {
|
|
47
|
+
for npmrc_tmp in "${TMP_NPMRC_FILES[@]:-}"; do
|
|
48
|
+
if [ -n "$npmrc_tmp" ] && [ -f "$npmrc_tmp" ]; then
|
|
49
|
+
rm -f "$npmrc_tmp"
|
|
50
|
+
fi
|
|
51
|
+
done
|
|
52
|
+
}
|
|
53
|
+
trap cleanup_tmp_npmrcs EXIT
|
|
54
|
+
|
|
35
55
|
require_cmd() {
|
|
36
56
|
if ! command -v "$1" >/dev/null 2>&1; then
|
|
37
57
|
printf '[release] comando ausente: %s\n' "$1" >&2
|
|
@@ -39,6 +59,23 @@ require_cmd() {
|
|
|
39
59
|
fi
|
|
40
60
|
}
|
|
41
61
|
|
|
62
|
+
to_bool() {
|
|
63
|
+
local value
|
|
64
|
+
value="$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]')"
|
|
65
|
+
case "$value" in
|
|
66
|
+
1|true|yes|on)
|
|
67
|
+
printf 'true'
|
|
68
|
+
;;
|
|
69
|
+
*)
|
|
70
|
+
printf 'false'
|
|
71
|
+
;;
|
|
72
|
+
esac
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
sanitize_npm_output() {
|
|
76
|
+
printf '%s' "$1" | tr -d "\"'[:space:]"
|
|
77
|
+
}
|
|
78
|
+
|
|
42
79
|
resolve_branch() {
|
|
43
80
|
if [ -n "$RELEASE_GIT_BRANCH" ]; then
|
|
44
81
|
printf '%s' "$RELEASE_GIT_BRANCH"
|
|
@@ -56,6 +93,130 @@ resolve_branch() {
|
|
|
56
93
|
printf '%s' "$branch"
|
|
57
94
|
}
|
|
58
95
|
|
|
96
|
+
resolve_token_from_dotenv() {
|
|
97
|
+
local token_keys="$1"
|
|
98
|
+
if [ -z "$token_keys" ]; then
|
|
99
|
+
return 0
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
(
|
|
103
|
+
cd "$PROJECT_ROOT" && TOKEN_KEYS="$token_keys" node --input-type=module -e "
|
|
104
|
+
import dotenv from 'dotenv';
|
|
105
|
+
dotenv.config({ path: '.env' });
|
|
106
|
+
const keys = String(process.env.TOKEN_KEYS || '')
|
|
107
|
+
.split(',')
|
|
108
|
+
.map((item) => item.trim())
|
|
109
|
+
.filter(Boolean);
|
|
110
|
+
for (const key of keys) {
|
|
111
|
+
const value = process.env[key];
|
|
112
|
+
if (value && String(value).trim()) {
|
|
113
|
+
process.stdout.write(String(value).trim());
|
|
114
|
+
process.exit(0);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
" 2>/dev/null || true
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
create_npmrc_for_registry() {
|
|
122
|
+
local registry="$1"
|
|
123
|
+
local token="$2"
|
|
124
|
+
local scope_owner="$3"
|
|
125
|
+
local registry_host=""
|
|
126
|
+
registry_host="$(printf '%s' "$registry" | sed -E 's#^https?://##; s#/*$##')"
|
|
127
|
+
|
|
128
|
+
local npmrc_tmp=""
|
|
129
|
+
npmrc_tmp="$(mktemp /tmp/omnizap-release-npmrc.XXXXXX)"
|
|
130
|
+
{
|
|
131
|
+
printf 'registry=%s\n' "$registry"
|
|
132
|
+
if [ -n "$scope_owner" ]; then
|
|
133
|
+
printf '@%s:registry=%s\n' "$scope_owner" "$registry"
|
|
134
|
+
fi
|
|
135
|
+
if [ -n "$token" ]; then
|
|
136
|
+
printf '//%s/:_authToken=%s\n' "$registry_host" "$token"
|
|
137
|
+
printf '//%s:_authToken=%s\n' "$registry_host" "$token"
|
|
138
|
+
fi
|
|
139
|
+
} > "$npmrc_tmp"
|
|
140
|
+
chmod 600 "$npmrc_tmp"
|
|
141
|
+
TMP_NPMRC_FILES+=("$npmrc_tmp")
|
|
142
|
+
printf '%s' "$npmrc_tmp"
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
verify_registry_version() {
|
|
146
|
+
local pkg_name="$1"
|
|
147
|
+
local pkg_version="$2"
|
|
148
|
+
local registry="$3"
|
|
149
|
+
local token_keys="$4"
|
|
150
|
+
local auth_required="$5"
|
|
151
|
+
|
|
152
|
+
local token=""
|
|
153
|
+
token="$(resolve_token_from_dotenv "$token_keys")"
|
|
154
|
+
if [ "$auth_required" = "1" ] && [ -z "$token" ]; then
|
|
155
|
+
printf '[release] Verificação em %s requer token (keys: %s).\n' "$registry" "$token_keys" >&2
|
|
156
|
+
exit 1
|
|
157
|
+
fi
|
|
158
|
+
|
|
159
|
+
local scope_owner=""
|
|
160
|
+
scope_owner="$(printf '%s' "$pkg_name" | sed -nE 's#^@([^/]+)/.*#\1#p')"
|
|
161
|
+
local npmrc_tmp=""
|
|
162
|
+
npmrc_tmp="$(create_npmrc_for_registry "$registry" "$token" "$scope_owner")"
|
|
163
|
+
|
|
164
|
+
local version_raw=""
|
|
165
|
+
if ! version_raw="$(
|
|
166
|
+
cd "$PROJECT_ROOT" &&
|
|
167
|
+
npm_config_userconfig="$npmrc_tmp" npm view "${pkg_name}@${pkg_version}" version --registry "$registry" --userconfig "$npmrc_tmp" 2>/dev/null
|
|
168
|
+
)"; then
|
|
169
|
+
printf '[release] Falha ao validar versão %s em %s.\n' "$pkg_version" "$registry" >&2
|
|
170
|
+
exit 1
|
|
171
|
+
fi
|
|
172
|
+
local version_value=""
|
|
173
|
+
version_value="$(sanitize_npm_output "$version_raw")"
|
|
174
|
+
if [ "$version_value" != "$pkg_version" ]; then
|
|
175
|
+
printf '[release] Versão divergente em %s: esperado=%s encontrado=%s\n' "$registry" "$pkg_version" "${version_value:-vazio}" >&2
|
|
176
|
+
exit 1
|
|
177
|
+
fi
|
|
178
|
+
|
|
179
|
+
local latest_raw=""
|
|
180
|
+
if ! latest_raw="$(
|
|
181
|
+
cd "$PROJECT_ROOT" &&
|
|
182
|
+
npm_config_userconfig="$npmrc_tmp" npm view "$pkg_name" dist-tags.latest --registry "$registry" --userconfig "$npmrc_tmp" 2>/dev/null
|
|
183
|
+
)"; then
|
|
184
|
+
printf '[release] Falha ao validar dist-tag latest em %s.\n' "$registry" >&2
|
|
185
|
+
exit 1
|
|
186
|
+
fi
|
|
187
|
+
local latest_value=""
|
|
188
|
+
latest_value="$(sanitize_npm_output "$latest_raw")"
|
|
189
|
+
if [ "$latest_value" != "$pkg_version" ]; then
|
|
190
|
+
printf '[release] Dist-tag latest divergente em %s: esperado=%s latest=%s\n' "$registry" "$pkg_version" "${latest_value:-vazio}" >&2
|
|
191
|
+
exit 1
|
|
192
|
+
fi
|
|
193
|
+
|
|
194
|
+
log "Verificado em $registry: versão=$pkg_version latest=$latest_value"
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
compute_target_version() {
|
|
198
|
+
local current="$1"
|
|
199
|
+
|
|
200
|
+
if [ -n "$RELEASE_FORCE_VERSION" ]; then
|
|
201
|
+
printf '%s' "$RELEASE_FORCE_VERSION"
|
|
202
|
+
return 0
|
|
203
|
+
fi
|
|
204
|
+
|
|
205
|
+
if [ "$RELEASE_TYPE" = "patch" ] && [ "$RELEASE_PATCH_ROLLOVER_ENABLED" = "1" ]; then
|
|
206
|
+
if [[ "$RELEASE_PATCH_ROLLOVER_AT" =~ ^[0-9]+$ ]] && [[ "$current" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
|
|
207
|
+
local major="${BASH_REMATCH[1]}"
|
|
208
|
+
local minor="${BASH_REMATCH[2]}"
|
|
209
|
+
local patch="${BASH_REMATCH[3]}"
|
|
210
|
+
if [ "$patch" -ge "$RELEASE_PATCH_ROLLOVER_AT" ]; then
|
|
211
|
+
printf '%s.%s.0' "$major" "$((minor + 1))"
|
|
212
|
+
return 0
|
|
213
|
+
fi
|
|
214
|
+
fi
|
|
215
|
+
fi
|
|
216
|
+
|
|
217
|
+
printf ''
|
|
218
|
+
}
|
|
219
|
+
|
|
59
220
|
commit_and_push_if_dirty() {
|
|
60
221
|
local commit_message="$1"
|
|
61
222
|
|
|
@@ -100,37 +261,48 @@ if ! (cd "$PROJECT_ROOT" && git rev-parse --is-inside-work-tree >/dev/null 2>&1)
|
|
|
100
261
|
exit 1
|
|
101
262
|
fi
|
|
102
263
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
1|true|yes|on)
|
|
108
|
-
printf 'true'
|
|
109
|
-
;;
|
|
110
|
-
*)
|
|
111
|
-
printf 'false'
|
|
112
|
-
;;
|
|
113
|
-
esac
|
|
114
|
-
}
|
|
264
|
+
if [ "$RELEASE_REQUIRE_GITHUB_RELEASE" = "1" ] && [ "$RELEASE_GITHUB_RELEASE" != "1" ]; then
|
|
265
|
+
printf '[release] RELEASE_REQUIRE_GITHUB_RELEASE=1 exige RELEASE_GITHUB_RELEASE=1.\n' >&2
|
|
266
|
+
exit 1
|
|
267
|
+
fi
|
|
115
268
|
|
|
116
269
|
commit_and_push_if_dirty "$RELEASE_GIT_PRE_COMMIT_MESSAGE"
|
|
117
270
|
|
|
118
271
|
current_version="$(cd "$PROJECT_ROOT" && npm pkg get version | tr -d '"[:space:]')"
|
|
119
272
|
log "Versão atual: $current_version"
|
|
120
|
-
|
|
273
|
+
target_version="$(compute_target_version "$current_version")"
|
|
121
274
|
|
|
122
|
-
|
|
275
|
+
if [ -n "$target_version" ]; then
|
|
276
|
+
if [ "$target_version" = "$current_version" ]; then
|
|
277
|
+
printf '[release] versão alvo igual à versão atual (%s). Verifique regras de bump.\n' "$current_version" >&2
|
|
278
|
+
exit 1
|
|
279
|
+
fi
|
|
280
|
+
log "Aplicando versão alvo: $target_version"
|
|
281
|
+
(cd "$PROJECT_ROOT" && npm version "$target_version" --no-git-tag-version >/dev/null)
|
|
282
|
+
else
|
|
283
|
+
log "Aplicando bump: $RELEASE_TYPE"
|
|
284
|
+
(cd "$PROJECT_ROOT" && npm version "$RELEASE_TYPE" --no-git-tag-version >/dev/null)
|
|
285
|
+
fi
|
|
123
286
|
|
|
124
287
|
new_version="$(cd "$PROJECT_ROOT" && npm pkg get version | tr -d '"[:space:]')"
|
|
125
288
|
log "Nova versão: $new_version"
|
|
126
289
|
|
|
127
290
|
log "Executando deploy com publish de package"
|
|
291
|
+
deploy_publish_primary="${DEPLOY_PACKAGE_PUBLISH:-1}"
|
|
292
|
+
deploy_publish_secondary="${DEPLOY_PACKAGE_PUBLISH_SECONDARY:-1}"
|
|
293
|
+
|
|
294
|
+
if [ "$RELEASE_REQUIRE_DUAL_PUBLISH" = "1" ]; then
|
|
295
|
+
if [ "$deploy_publish_primary" != "1" ] || [ "$deploy_publish_secondary" != "1" ]; then
|
|
296
|
+
printf '[release] RELEASE_REQUIRE_DUAL_PUBLISH=1 exige DEPLOY_PACKAGE_PUBLISH=1 e DEPLOY_PACKAGE_PUBLISH_SECONDARY=1.\n' >&2
|
|
297
|
+
exit 1
|
|
298
|
+
fi
|
|
299
|
+
fi
|
|
128
300
|
|
|
129
301
|
if ! (
|
|
130
302
|
cd "$PROJECT_ROOT"
|
|
131
303
|
DEPLOY_PACKAGE_STEP="${DEPLOY_PACKAGE_STEP:-1}" \
|
|
132
|
-
DEPLOY_PACKAGE_PUBLISH="$
|
|
133
|
-
DEPLOY_PACKAGE_PUBLISH_SECONDARY="$
|
|
304
|
+
DEPLOY_PACKAGE_PUBLISH="$deploy_publish_primary" \
|
|
305
|
+
DEPLOY_PACKAGE_PUBLISH_SECONDARY="$deploy_publish_secondary" \
|
|
134
306
|
DEPLOY_PACKAGE_SECONDARY_REGISTRY="${DEPLOY_PACKAGE_SECONDARY_REGISTRY:-https://registry.npmjs.org}" \
|
|
135
307
|
DEPLOY_PACKAGE_SECONDARY_ACCESS="${DEPLOY_PACKAGE_SECONDARY_ACCESS:-public}" \
|
|
136
308
|
DEPLOY_PACKAGE_INSTALL="${DEPLOY_PACKAGE_INSTALL:-0}" \
|
|
@@ -147,13 +319,14 @@ if [ "$RELEASE_GIT_COMMIT_VERSION" = "1" ]; then
|
|
|
147
319
|
commit_and_push_if_dirty "${RELEASE_GIT_VERSION_COMMIT_PREFIX}${new_version}"
|
|
148
320
|
fi
|
|
149
321
|
|
|
322
|
+
release_tag="${RELEASE_GITHUB_TAG_PREFIX}${new_version}"
|
|
323
|
+
|
|
150
324
|
if [ "$RELEASE_GITHUB_RELEASE" = "1" ]; then
|
|
151
325
|
if [ "$RELEASE_GIT_AUTO_PUSH" != "1" ]; then
|
|
152
326
|
printf '[release] RELEASE_GITHUB_RELEASE=1 requer RELEASE_GIT_AUTO_PUSH=1 para garantir commit acessível no GitHub.\n' >&2
|
|
153
327
|
exit 1
|
|
154
328
|
fi
|
|
155
329
|
|
|
156
|
-
local_tag="${RELEASE_GITHUB_TAG_PREFIX}${new_version}"
|
|
157
330
|
local_name="${RELEASE_GITHUB_NAME_PREFIX}${new_version}"
|
|
158
331
|
local_target="$RELEASE_GITHUB_TARGET"
|
|
159
332
|
if [ -z "$local_target" ]; then
|
|
@@ -176,10 +349,10 @@ if [ "$RELEASE_GITHUB_RELEASE" = "1" ]; then
|
|
|
176
349
|
local draft_bool=""
|
|
177
350
|
draft_bool="$(to_bool "$RELEASE_GITHUB_DRAFT")"
|
|
178
351
|
|
|
179
|
-
log "Criando/atualizando GitHub Release ($
|
|
352
|
+
log "Criando/atualizando GitHub Release ($release_tag)"
|
|
180
353
|
release_output="$(
|
|
181
354
|
cd "$PROJECT_ROOT" && node ./scripts/github-release-notify.mjs upsert \
|
|
182
|
-
--tag "$
|
|
355
|
+
--tag "$release_tag" \
|
|
183
356
|
--target "$local_target" \
|
|
184
357
|
--name "$local_name" \
|
|
185
358
|
--generate-notes "$generate_notes_bool" \
|
|
@@ -189,4 +362,28 @@ if [ "$RELEASE_GITHUB_RELEASE" = "1" ]; then
|
|
|
189
362
|
log "GitHub Release atualizado: $release_output"
|
|
190
363
|
fi
|
|
191
364
|
|
|
365
|
+
if [ "$RELEASE_VERIFY_UNIFIED_VERSION" = "1" ]; then
|
|
366
|
+
pkg_name="$(cd "$PROJECT_ROOT" && npm pkg get name | tr -d '"[:space:]')"
|
|
367
|
+
if [ -z "$pkg_name" ]; then
|
|
368
|
+
printf '[release] Falha ao ler nome do pacote para verificação final.\n' >&2
|
|
369
|
+
exit 1
|
|
370
|
+
fi
|
|
371
|
+
|
|
372
|
+
local_version_now="$(cd "$PROJECT_ROOT" && npm pkg get version | tr -d '"[:space:]')"
|
|
373
|
+
if [ "$local_version_now" != "$new_version" ]; then
|
|
374
|
+
printf '[release] Versão local divergente após release: esperado=%s encontrado=%s\n' "$new_version" "$local_version_now" >&2
|
|
375
|
+
exit 1
|
|
376
|
+
fi
|
|
377
|
+
log "Verificado localmente: versão=$local_version_now"
|
|
378
|
+
|
|
379
|
+
verify_registry_version "$pkg_name" "$new_version" "$RELEASE_VERIFY_PRIMARY_REGISTRY" "$RELEASE_VERIFY_PRIMARY_TOKEN_KEYS" "1"
|
|
380
|
+
verify_registry_version "$pkg_name" "$new_version" "$RELEASE_VERIFY_SECONDARY_REGISTRY" "$RELEASE_VERIFY_SECONDARY_TOKEN_KEYS" "0"
|
|
381
|
+
|
|
382
|
+
gh_release_check="$(
|
|
383
|
+
cd "$PROJECT_ROOT" && node ./scripts/github-release-notify.mjs get --tag "$release_tag"
|
|
384
|
+
)"
|
|
385
|
+
log "Verificado GitHub Release: $gh_release_check"
|
|
386
|
+
log "Verificação final concluída: todas as versões estão em $new_version"
|
|
387
|
+
fi
|
|
388
|
+
|
|
192
389
|
log "Release concluída: $new_version"
|