release-me-sh 0.9.0 → 0.9.2
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/README.md +1 -1
- package/package.json +53 -10
- package/plugins/PLUGIN_TEMPLATE.sh +1 -1
- package/plugins/changelog.sh +4 -4
- package/plugins/docker.sh +15 -18
- package/plugins/git.sh +23 -23
- package/plugins/github-release.sh +7 -7
- package/plugins/npm-post.sh +30 -20
- package/plugins/npm.sh +9 -9
- package/presets/conventional-commits.sh +26 -26
- package/presets/workspace.sh +25 -25
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ Blazing fast minimal release workflow script written in **Bash** with plugins an
|
|
|
20
20
|
|
|
21
21
|
## Documentation
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
See [here](https://dalisoft.github.io/release-me)
|
|
24
24
|
|
|
25
25
|
## Similar projects
|
|
26
26
|
|
package/package.json
CHANGED
|
@@ -1,22 +1,65 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-me-sh",
|
|
3
|
-
"version": "0.9.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.9.2",
|
|
4
|
+
"description": "Blazing fast minimal release workflow script written in Bash with plugins and presets support",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"bash",
|
|
7
|
+
"workspace",
|
|
8
|
+
"semantic-release",
|
|
9
|
+
"publish",
|
|
10
|
+
"conventional-commits"
|
|
11
|
+
],
|
|
12
|
+
"homepage": "https://dalisoft.github.io/release-me",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/dalisoft/release-me/issues"
|
|
15
|
+
},
|
|
5
16
|
"repository": {
|
|
6
17
|
"type": "git",
|
|
7
18
|
"url": "git+https://github.com/dalisoft/release-me.git"
|
|
8
19
|
},
|
|
20
|
+
"license": "GPL-3.0",
|
|
21
|
+
"author": "Davlatjon Shavkatov <opensource@dalisoft.uz>",
|
|
9
22
|
"bin": "release-me.sh",
|
|
10
|
-
"
|
|
11
|
-
|
|
23
|
+
"files": ["presets", "plugins", "release-me.sh"],
|
|
24
|
+
"browserslist": {
|
|
25
|
+
"production": [">0.5%", "not dead", "not op_mini all"],
|
|
26
|
+
"development": [
|
|
27
|
+
"last 3 chrome version",
|
|
28
|
+
"last 3 firefox version",
|
|
29
|
+
"last 5 safari version"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"docs": "docusaurus",
|
|
34
|
+
"docs:dev": "docusaurus start",
|
|
35
|
+
"docs:build": "docusaurus build",
|
|
36
|
+
"docs:swizzle": "docusaurus swizzle",
|
|
37
|
+
"docs:deploy": "docusaurus deploy",
|
|
38
|
+
"docs:clear": "docusaurus clear",
|
|
39
|
+
"docs:serve": "docusaurus serve",
|
|
40
|
+
"docs:write-translations": "docusaurus write-translations",
|
|
41
|
+
"docs:write-heading-ids": "docusaurus write-heading-ids"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@biomejs/biome": "^1.8.0",
|
|
45
|
+
"@docusaurus/core": "3.4.0",
|
|
46
|
+
"@docusaurus/module-type-aliases": "^3.4.0",
|
|
47
|
+
"@docusaurus/preset-classic": "3.4.0",
|
|
48
|
+
"@docusaurus/types": "^3.4.0",
|
|
49
|
+
"dprint": "^0.46.1",
|
|
50
|
+
"prism-react-renderer": "^2.3.1",
|
|
51
|
+
"prismjs": "^1.29.0",
|
|
52
|
+
"@swc/core": "^1.5.25",
|
|
53
|
+
"swc-loader": "^0.2.6"
|
|
12
54
|
},
|
|
13
|
-
"description": "Blazing fast minimal release workflow script written in Bash with plugins and presets support",
|
|
14
55
|
"engines": {
|
|
15
56
|
"node": ">=18.19.1"
|
|
16
57
|
},
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
58
|
+
"trustedDependencies": [
|
|
59
|
+
"@biomejs/biome",
|
|
60
|
+
"@swc/core",
|
|
61
|
+
"core-js",
|
|
62
|
+
"core-js-pure",
|
|
63
|
+
"dprint"
|
|
64
|
+
]
|
|
22
65
|
}
|
package/plugins/changelog.sh
CHANGED
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
set -eu
|
|
3
3
|
|
|
4
4
|
release() {
|
|
5
|
-
log_verbose "CHANGELOG version: $NEXT_RELEASE_TAG"
|
|
6
|
-
log_verbose "CHANGELOG content: \n$RELEASE_BODY"
|
|
5
|
+
log_verbose "CHANGELOG version: ${NEXT_RELEASE_TAG-}"
|
|
6
|
+
log_verbose "CHANGELOG content: \n${RELEASE_BODY-}"
|
|
7
7
|
|
|
8
8
|
log "Generating Changelog..."
|
|
9
|
-
if ! $IS_DRY_RUN; then
|
|
9
|
+
if ! ${IS_DRY_RUN-}; then
|
|
10
10
|
CONTENT=""
|
|
11
11
|
if [ -f CHANGELOG.md ]; then
|
|
12
12
|
CONTENT="\n$(cat CHANGELOG.md)"
|
|
13
13
|
fi
|
|
14
14
|
rm -rf CHANGELOG.md
|
|
15
|
-
printf "%b%b" "$RELEASE_BODY" "$CONTENT" >>CHANGELOG.md
|
|
15
|
+
printf "%b%b" "${RELEASE_BODY}" "${CONTENT}" >>CHANGELOG.md
|
|
16
16
|
log "Generated Changelog!"
|
|
17
17
|
else
|
|
18
18
|
log "Skipped Changelog creation in DRY-RUN mode..."
|
package/plugins/docker.sh
CHANGED
|
@@ -4,24 +4,21 @@ set -eu
|
|
|
4
4
|
# Docker buildx script was copied from
|
|
5
5
|
# https://docs.docker.com/build/cloud/ci
|
|
6
6
|
# and modified by @dalisoft for AMD64/ARM64 platforms
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
# See https://github.com/infertux/bashcov/issues/86
|
|
10
|
-
ARCH=$(node -p "process.arch.replace('aarch64', 'arm64').replace(/x86_64|x64/, 'amd64')")
|
|
11
|
-
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
7
|
+
arch=$(uname -m | sed 's/aarch64/arm64/' | sed 's/x86_64/amd64/')
|
|
8
|
+
os=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
12
9
|
|
|
13
10
|
prepare() {
|
|
14
|
-
BUILDX_URL=$(curl -s https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/buildx-lab-releases.json | grep "${
|
|
11
|
+
BUILDX_URL=$(curl -s https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/buildx-lab-releases.json | grep "${os}-${arch}\",$" | head -1 | xargs | tr -d ',' | xargs)
|
|
15
12
|
# Download docker buildx with Hyrdobuild support
|
|
16
|
-
mkdir -vp
|
|
17
|
-
curl --silent -L --output
|
|
18
|
-
chmod a+x
|
|
13
|
+
mkdir -vp "${HOME}/.docker/cli-plugins"
|
|
14
|
+
curl --silent -L --output "${HOME}/.docker/cli-plugins/docker-buildx" "${BUILDX_URL}"
|
|
15
|
+
chmod a+x "${HOME}/.docker/cli-plugins/docker-buildx"
|
|
19
16
|
|
|
20
|
-
|
|
17
|
+
printf "%s" "${DOCKER_HUB_PAT-}" | docker login --username "${DOCKER_HUB_USERNAME-}" --password-stdin
|
|
21
18
|
}
|
|
22
19
|
|
|
23
20
|
cleanup() {
|
|
24
|
-
rm -rf
|
|
21
|
+
rm -rf "${HOME}/.docker/cli-plugins"
|
|
25
22
|
|
|
26
23
|
docker logout
|
|
27
24
|
}
|
|
@@ -31,12 +28,12 @@ release() {
|
|
|
31
28
|
if [ -n "${DOCKER_HUB_USERNAME-}" ] && [ -n "${DOCKER_HUB_PAT-}" ]; then
|
|
32
29
|
|
|
33
30
|
log "Building and publishing Docker image..."
|
|
34
|
-
log_verbose "Docker tag: $NEXT_RELEASE_TAG and version: $NEXT_RELEASE_VERSION!"
|
|
31
|
+
log_verbose "Docker tag: ${NEXT_RELEASE_TAG-} and version: ${NEXT_RELEASE_VERSION-}!"
|
|
35
32
|
|
|
36
33
|
# Don't load this plugin if
|
|
37
34
|
# - `--dry-run` used
|
|
38
35
|
# - `Dockerfile` is missing
|
|
39
|
-
if ! $IS_DRY_RUN; then
|
|
36
|
+
if ! ${IS_DRY_RUN-}; then
|
|
40
37
|
if [ ! -f Dockerfile ]; then
|
|
41
38
|
log "Project does not have Dockerfile"
|
|
42
39
|
return 1
|
|
@@ -44,15 +41,15 @@ release() {
|
|
|
44
41
|
|
|
45
42
|
prepare
|
|
46
43
|
|
|
47
|
-
docker build -t "$GIT_REPO_NAME:$NEXT_BUILD_VERSION" . --push
|
|
48
|
-
docker tag "$GIT_REPO_NAME:$NEXT_BUILD_VERSION" "$GIT_REPO_NAME:latest"
|
|
49
|
-
docker push "$GIT_REPO_NAME:latest"
|
|
44
|
+
docker build -t "${GIT_REPO_NAME-}:${NEXT_BUILD_VERSION-}" . --push
|
|
45
|
+
docker tag "${GIT_REPO_NAME}:${NEXT_BUILD_VERSION}" "${GIT_REPO_NAME}:latest"
|
|
46
|
+
docker push "${GIT_REPO_NAME}:latest"
|
|
50
47
|
|
|
51
|
-
log "Docker image published [$NEXT_RELEASE_TAG]!"
|
|
48
|
+
log "Docker image published [${NEXT_RELEASE_TAG}]!"
|
|
52
49
|
|
|
53
50
|
cleanup
|
|
54
51
|
else
|
|
55
|
-
log "Skipped Docker image [$NEXT_RELEASE_TAG] in DRY-RUN mode."
|
|
52
|
+
log "Skipped Docker image [${NEXT_RELEASE_TAG}] in DRY-RUN mode."
|
|
56
53
|
fi
|
|
57
54
|
|
|
58
55
|
else
|
package/plugins/git.sh
CHANGED
|
@@ -5,32 +5,32 @@ prepare() {
|
|
|
5
5
|
unset GIT_CONFIG
|
|
6
6
|
|
|
7
7
|
if [ -n "${GIT_USERNAME-}" ] && [ -n "${GIT_EMAIL-}" ]; then
|
|
8
|
-
git config --local user.email "$GIT_EMAIL"
|
|
9
|
-
git config --local user.name "$GIT_USERNAME"
|
|
10
|
-
log_verbose "Git username [$GIT_USERNAME] and Git e-mail [$GIT_EMAIL] set"
|
|
8
|
+
git config --local user.email "${GIT_EMAIL}"
|
|
9
|
+
git config --local user.name "${GIT_USERNAME}"
|
|
10
|
+
log_verbose "Git username [${GIT_USERNAME}] and Git e-mail [${GIT_EMAIL}] set"
|
|
11
11
|
fi
|
|
12
12
|
|
|
13
13
|
if [ -z "${GPG_NO_SIGN-}" ] && [ -n "${GPG_KEY-}" ] && [ -n "${GPG_KEY_ID-}" ]; then
|
|
14
14
|
git config --local commit.gpgsign true
|
|
15
|
-
git config --local user.signingkey "$GPG_KEY_ID"
|
|
15
|
+
git config --local user.signingkey "${GPG_KEY_ID}"
|
|
16
16
|
git config --local tag.forceSignAnnotated true
|
|
17
17
|
git config --local gpg.program gpg
|
|
18
|
-
log_verbose "Git GPG sign and key ID [$GPG_KEY_ID] are set"
|
|
18
|
+
log_verbose "Git GPG sign and key ID [${GPG_KEY_ID}] are set"
|
|
19
19
|
|
|
20
20
|
if ! gpg --list-keys | grep -q "${GPG_KEY_ID-}"; then
|
|
21
|
-
|
|
21
|
+
printf "%s" "${GPG_KEY}" | base64 --decode | gpg --quiet --batch --import
|
|
22
22
|
log_verbose "Git GPG key import loaded"
|
|
23
23
|
else
|
|
24
24
|
log_verbose "Git GPG key import skipped"
|
|
25
25
|
fi
|
|
26
26
|
|
|
27
27
|
if [ -n "${GPG_PASSPHRASE-}" ]; then
|
|
28
|
-
|
|
28
|
+
printf "%s" "${GPG_PASSPHRASE}" | gpg --quiet --batch --yes --pinentry-mode loopback --sign --local-user "${GPG_KEY_ID-}" --passphrase-fd 0 >/dev/null
|
|
29
29
|
log_verbose "Git GPG passphrase set"
|
|
30
30
|
fi
|
|
31
31
|
elif [ -z "${SSH_NO_SIGN-}" ] && [ -n "${SSH_PUB_KEY-}" ]; then
|
|
32
32
|
git config --local commit.gpgsign true
|
|
33
|
-
git config --local user.signingkey "$SSH_PUB_KEY"
|
|
33
|
+
git config --local user.signingkey "${SSH_PUB_KEY}"
|
|
34
34
|
git config --local tag.forceSignAnnotated true
|
|
35
35
|
git config --local gpg.format ssh
|
|
36
36
|
log_verbose "Git SSH sign is set"
|
|
@@ -49,13 +49,13 @@ cleanup() {
|
|
|
49
49
|
git config --local --unset user.signingkey
|
|
50
50
|
git config --local --unset tag.forceSignAnnotated
|
|
51
51
|
git config --local --unset gpg.program
|
|
52
|
-
log_verbose "Git GPG sign and key ID [$GPG_KEY_ID] are unset"
|
|
52
|
+
log_verbose "Git GPG sign and key ID [${GPG_KEY_ID}] are unset"
|
|
53
53
|
|
|
54
54
|
if gpg --list-keys | grep -q "${GPG_KEY_ID-}"; then
|
|
55
55
|
if [ -n "${GPG_PASSPHRASE-}" ]; then
|
|
56
|
-
|
|
56
|
+
printf "%s" "${GPG_PASSPHRASE}" | gpg --quiet --batch --yes --passphrase-fd 0 --delete-secret-and-public-key "${GPG_KEY_ID}" >/dev/null
|
|
57
57
|
else
|
|
58
|
-
gpg --quiet --batch --yes --delete-secret-and-public-key "$GPG_KEY_ID"
|
|
58
|
+
gpg --quiet --batch --yes --delete-secret-and-public-key "${GPG_KEY_ID}"
|
|
59
59
|
fi
|
|
60
60
|
log_verbose "Git GPG key deleted"
|
|
61
61
|
fi
|
|
@@ -63,7 +63,7 @@ cleanup() {
|
|
|
63
63
|
log_verbose "Git GPG config cleanup"
|
|
64
64
|
elif [ -z "${SSH_NO_SIGN-}" ] && [ -n "${SSH_PUB_KEY-}" ]; then
|
|
65
65
|
git config --local --unset commit.gpgsign true
|
|
66
|
-
git config --local --unset user.signingkey "$SSH_PUB_KEY"
|
|
66
|
+
git config --local --unset user.signingkey "${SSH_PUB_KEY}"
|
|
67
67
|
git config --local --unset tag.forceSignAnnotated true
|
|
68
68
|
git config --local --unset gpg.format ssh
|
|
69
69
|
log_verbose "Git SSH sign is unset"
|
|
@@ -75,24 +75,24 @@ cleanup() {
|
|
|
75
75
|
release() {
|
|
76
76
|
# Create a `git` tag
|
|
77
77
|
log "Creating Git tag..."
|
|
78
|
-
log_verbose "Git hash: $CHECKOUT_SHA!"
|
|
78
|
+
log_verbose "Git hash: ${CHECKOUT_SHA-}!"
|
|
79
79
|
|
|
80
|
-
if ! $IS_DRY_RUN; then
|
|
80
|
+
if ! ${IS_DRY_RUN-}; then
|
|
81
81
|
prepare
|
|
82
82
|
|
|
83
83
|
if [ -z "${GPG_NO_SIGN-}" ] && [ -n "${GPG_KEY-}" ] && [ -n "${GPG_KEY_ID-}" ]; then
|
|
84
|
-
git tag --sign "$NEXT_RELEASE_TAG" "$CHECKOUT_SHA" --message "Release, tag and sign $NEXT_RELEASE_TAG"
|
|
85
|
-
log "Created GPG signed Git tag [$NEXT_RELEASE_TAG]!"
|
|
84
|
+
git tag --sign "${NEXT_RELEASE_TAG-}" "${CHECKOUT_SHA}" --message "Release, tag and sign ${NEXT_RELEASE_TAG}"
|
|
85
|
+
log "Created GPG signed Git tag [${NEXT_RELEASE_TAG}]!"
|
|
86
86
|
elif [ -z "${SSH_NO_SIGN-}" ] && [ -n "${SSH_PUB_KEY-}" ]; then
|
|
87
|
-
git tag --sign "$NEXT_RELEASE_TAG" "$CHECKOUT_SHA" --message "Release, tag and sign $NEXT_RELEASE_TAG"
|
|
88
|
-
log "Created SSH signed Git tag [$NEXT_RELEASE_TAG]!"
|
|
87
|
+
git tag --sign "${NEXT_RELEASE_TAG}" "${CHECKOUT_SHA}" --message "Release, tag and sign ${NEXT_RELEASE_TAG}"
|
|
88
|
+
log "Created SSH signed Git tag [${NEXT_RELEASE_TAG}]!"
|
|
89
89
|
else
|
|
90
|
-
git tag "$NEXT_RELEASE_TAG" "$CHECKOUT_SHA"
|
|
91
|
-
log "Created Git tag [$NEXT_RELEASE_TAG]!"
|
|
90
|
+
git tag "${NEXT_RELEASE_TAG}" "${CHECKOUT_SHA}"
|
|
91
|
+
log "Created Git tag [${NEXT_RELEASE_TAG}]!"
|
|
92
92
|
fi
|
|
93
93
|
|
|
94
|
-
if [ -n "$GIT_REMOTE_ORIGIN" ]; then
|
|
95
|
-
git push origin "refs/tags/$NEXT_RELEASE_TAG"
|
|
94
|
+
if [ -n "${GIT_REMOTE_ORIGIN}" ]; then
|
|
95
|
+
git push origin "refs/tags/${NEXT_RELEASE_TAG}"
|
|
96
96
|
log_verbose "Pushed Git tag to remote"
|
|
97
97
|
else
|
|
98
98
|
log_verbose "No Git remote to push tag"
|
|
@@ -100,6 +100,6 @@ release() {
|
|
|
100
100
|
|
|
101
101
|
cleanup
|
|
102
102
|
else
|
|
103
|
-
log "Skipped Git tag [$NEXT_RELEASE_TAG] in DRY-RUN mode."
|
|
103
|
+
log "Skipped Git tag [${NEXT_RELEASE_TAG}] in DRY-RUN mode."
|
|
104
104
|
fi
|
|
105
105
|
}
|
|
@@ -2,28 +2,28 @@
|
|
|
2
2
|
set -eu
|
|
3
3
|
|
|
4
4
|
release() {
|
|
5
|
-
log_verbose "Release tag: $NEXT_RELEASE_TAG"
|
|
6
|
-
log_verbose "Release title: $RELEASE_BODY_TITLE"
|
|
7
|
-
log_verbose "Release body: \n$RELEASE_BODY"
|
|
5
|
+
log_verbose "Release tag: ${NEXT_RELEASE_TAG-}"
|
|
6
|
+
log_verbose "Release title: ${RELEASE_BODY_TITLE-}"
|
|
7
|
+
log_verbose "Release body: \n${RELEASE_BODY-}"
|
|
8
8
|
|
|
9
9
|
# Create a `GitHub` release
|
|
10
10
|
if [ -n "${GITHUB_TOKEN-}" ]; then
|
|
11
11
|
log "Creating GitHub release..."
|
|
12
|
-
log_verbose "GitHub release hash: $CHECKOUT_SHA!"
|
|
12
|
+
log_verbose "GitHub release hash: ${CHECKOUT_SHA-}!"
|
|
13
13
|
|
|
14
|
-
if ! $IS_DRY_RUN; then
|
|
14
|
+
if ! ${IS_DRY_RUN-}; then
|
|
15
15
|
if ! command -v gh; then
|
|
16
16
|
echo "GitHub CLI not found your machine"
|
|
17
17
|
return 1
|
|
18
18
|
fi
|
|
19
19
|
|
|
20
|
-
if $PRE_RELEASE_VERSION; then
|
|
20
|
+
if ${PRE_RELEASE_VERSION-}; then
|
|
21
21
|
printf "%b" "${RELEASE_BODY-}" | gh release create "${NEXT_RELEASE_TAG-}" --title "${NEXT_RELEASE_TAG-}" --prerelease --notes-file -
|
|
22
22
|
else
|
|
23
23
|
printf "%b" "${RELEASE_BODY-}" | gh release create "${NEXT_RELEASE_TAG-}" --title "${NEXT_RELEASE_TAG-}" --latest --notes-file -
|
|
24
24
|
fi
|
|
25
25
|
else
|
|
26
|
-
log "Skipped GitHub release [$NEXT_RELEASE_TAG] in DRY-RUN mode."
|
|
26
|
+
log "Skipped GitHub release [${NEXT_RELEASE_TAG}] in DRY-RUN mode."
|
|
27
27
|
fi
|
|
28
28
|
else
|
|
29
29
|
echo "
|
package/plugins/npm-post.sh
CHANGED
|
@@ -5,32 +5,32 @@ prepare() {
|
|
|
5
5
|
unset GIT_CONFIG
|
|
6
6
|
|
|
7
7
|
if [ -n "${GIT_USERNAME-}" ] && [ -n "${GIT_EMAIL-}" ]; then
|
|
8
|
-
git config --local user.email "$GIT_EMAIL"
|
|
9
|
-
git config --local user.name "$GIT_USERNAME"
|
|
10
|
-
log_verbose "Git username [$GIT_USERNAME] and Git e-mail [$GIT_EMAIL] set"
|
|
8
|
+
git config --local user.email "${GIT_EMAIL}"
|
|
9
|
+
git config --local user.name "${GIT_USERNAME}"
|
|
10
|
+
log_verbose "Git username [${GIT_USERNAME}] and Git e-mail [${GIT_EMAIL}] set"
|
|
11
11
|
fi
|
|
12
12
|
|
|
13
13
|
if [ -z "${GPG_NO_SIGN-}" ] && [ -n "${GPG_KEY-}" ] && [ -n "${GPG_KEY_ID-}" ]; then
|
|
14
14
|
git config --local commit.gpgsign true
|
|
15
|
-
git config --local user.signingkey "$GPG_KEY_ID"
|
|
15
|
+
git config --local user.signingkey "${GPG_KEY_ID}"
|
|
16
16
|
git config --local tag.forceSignAnnotated true
|
|
17
17
|
git config --local gpg.program gpg
|
|
18
|
-
log_verbose "Git GPG sign and key ID [$GPG_KEY_ID] are set"
|
|
18
|
+
log_verbose "Git GPG sign and key ID [${GPG_KEY_ID}] are set"
|
|
19
19
|
|
|
20
20
|
if ! gpg --list-keys | grep -q "${GPG_KEY_ID-}"; then
|
|
21
|
-
|
|
21
|
+
printf "%s" "${GPG_KEY}" | base64 --decode | gpg --quiet --batch --import
|
|
22
22
|
log_verbose "Git GPG key import loaded"
|
|
23
23
|
else
|
|
24
24
|
log_verbose "Git GPG key import skipped"
|
|
25
25
|
fi
|
|
26
26
|
|
|
27
27
|
if [ -n "${GPG_PASSPHRASE-}" ]; then
|
|
28
|
-
|
|
28
|
+
printf "%s" "${GPG_PASSPHRASE}" | gpg --quiet --batch --yes --pinentry-mode loopback --sign --local-user "${GPG_KEY_ID-}" --passphrase-fd 0 >/dev/null
|
|
29
29
|
log_verbose "Git GPG passphrase set"
|
|
30
30
|
fi
|
|
31
31
|
elif [ -z "${SSH_NO_SIGN-}" ] && [ -n "${SSH_PUB_KEY-}" ]; then
|
|
32
32
|
git config --local commit.gpgsign true
|
|
33
|
-
git config --local user.signingkey "$SSH_PUB_KEY"
|
|
33
|
+
git config --local user.signingkey "${SSH_PUB_KEY}"
|
|
34
34
|
git config --local tag.forceSignAnnotated true
|
|
35
35
|
git config --local gpg.format ssh
|
|
36
36
|
log_verbose "Git SSH sign is set"
|
|
@@ -49,13 +49,13 @@ cleanup() {
|
|
|
49
49
|
git config --local --unset user.signingkey
|
|
50
50
|
git config --local --unset tag.forceSignAnnotated
|
|
51
51
|
git config --local --unset gpg.program
|
|
52
|
-
log_verbose "Git GPG sign and key ID [$GPG_KEY_ID] are unset"
|
|
52
|
+
log_verbose "Git GPG sign and key ID [${GPG_KEY_ID}] are unset"
|
|
53
53
|
|
|
54
54
|
if gpg --list-keys | grep -q "${GPG_KEY_ID-}"; then
|
|
55
55
|
if [ -n "${GPG_PASSPHRASE-}" ]; then
|
|
56
|
-
|
|
56
|
+
printf "%s" "${GPG_PASSPHRASE}" | gpg --quiet --batch --yes --passphrase-fd 0 --delete-secret-and-public-key "${GPG_KEY_ID}" >/dev/null
|
|
57
57
|
else
|
|
58
|
-
gpg --quiet --batch --yes --delete-secret-and-public-key "$GPG_KEY_ID"
|
|
58
|
+
gpg --quiet --batch --yes --delete-secret-and-public-key "${GPG_KEY_ID}"
|
|
59
59
|
fi
|
|
60
60
|
log_verbose "Git GPG key deleted"
|
|
61
61
|
fi
|
|
@@ -63,7 +63,7 @@ cleanup() {
|
|
|
63
63
|
log_verbose "Git GPG config cleanup"
|
|
64
64
|
elif [ -z "${SSH_NO_SIGN-}" ] && [ -n "${SSH_PUB_KEY-}" ]; then
|
|
65
65
|
git config --local --unset commit.gpgsign true
|
|
66
|
-
git config --local --unset user.signingkey "$SSH_PUB_KEY"
|
|
66
|
+
git config --local --unset user.signingkey "${SSH_PUB_KEY}"
|
|
67
67
|
git config --local --unset tag.forceSignAnnotated true
|
|
68
68
|
git config --local --unset gpg.format ssh
|
|
69
69
|
log_verbose "Git SSH sign is unset"
|
|
@@ -73,16 +73,21 @@ cleanup() {
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
release() {
|
|
76
|
+
if [ -z "${IS_WORKSPACE}" ]; then
|
|
77
|
+
log_verbose "[npm-post] Plugin requires a valid release-me release processing"
|
|
78
|
+
return 1
|
|
79
|
+
fi
|
|
80
|
+
|
|
76
81
|
# Committing a `npm` tag
|
|
77
82
|
log "Committing npm tag..."
|
|
78
|
-
log_verbose "Git hash: $CHECKOUT_SHA!"
|
|
83
|
+
log_verbose "Git hash: ${CHECKOUT_SHA}!"
|
|
79
84
|
if [ -n "${NPM_TOKEN-}" ]; then
|
|
80
85
|
|
|
81
86
|
# Don't load this plugin if
|
|
82
87
|
# - `--dry-run` used
|
|
83
88
|
# - `package.json` is missing
|
|
84
89
|
# - `package.json` is not changed on `Git` tracking
|
|
85
|
-
if ! $IS_DRY_RUN; then
|
|
90
|
+
if ! ${IS_DRY_RUN-}; then
|
|
86
91
|
if [ ! -f package.json ] || [ -z "$(git diff --name-only package.json 2>/dev/null)" ]; then
|
|
87
92
|
log "Project does not have package.json or package.json not changed"
|
|
88
93
|
return 1
|
|
@@ -90,9 +95,14 @@ release() {
|
|
|
90
95
|
prepare
|
|
91
96
|
git add package.json
|
|
92
97
|
|
|
93
|
-
if $IS_WORKSPACE; then
|
|
98
|
+
if ${IS_WORKSPACE}; then
|
|
99
|
+
if [ -z "${PKG_NAME}" ]; then
|
|
100
|
+
log_verbose "[npm-post] Workspace defined but no package name defined"
|
|
101
|
+
return 1
|
|
102
|
+
fi
|
|
103
|
+
|
|
94
104
|
if [ -z "${GPG_NO_SIGN-}" ] && [ -n "${GPG_KEY-}" ] && [ -n "${GPG_KEY_ID-}" ]; then
|
|
95
|
-
git commit --sign -m "chore(${PKG_NAME}): update \`package.json\` version to ${NEXT_RELEASE_VERSION}"
|
|
105
|
+
git commit --sign -m "chore(${PKG_NAME}): update \`package.json\` version to ${NEXT_RELEASE_VERSION-}"
|
|
96
106
|
elif [ -z "${SSH_NO_SIGN-}" ] && [ -n "${SSH_PUB_KEY-}" ]; then
|
|
97
107
|
git commit --sign -m "chore(${PKG_NAME}): update \`package.json\` version to ${NEXT_RELEASE_VERSION}"
|
|
98
108
|
else
|
|
@@ -108,17 +118,17 @@ release() {
|
|
|
108
118
|
fi
|
|
109
119
|
fi
|
|
110
120
|
|
|
111
|
-
if [ -n "$GIT_REMOTE_ORIGIN" ]; then
|
|
121
|
+
if [ -n "${GIT_REMOTE_ORIGIN}" ]; then
|
|
112
122
|
git push
|
|
113
123
|
CHECKOUT_SHA=$(git rev-parse HEAD)
|
|
114
|
-
log "Committed npm [$NEXT_RELEASE_TAG] tag"
|
|
124
|
+
log "Committed npm [${NEXT_RELEASE_TAG-}] tag"
|
|
115
125
|
else
|
|
116
|
-
log "Committing npm [$NEXT_RELEASE_TAG] tag failed"
|
|
126
|
+
log "Committing npm [${NEXT_RELEASE_TAG}] tag failed"
|
|
117
127
|
fi
|
|
118
128
|
|
|
119
129
|
cleanup
|
|
120
130
|
else
|
|
121
|
-
log "Skipped committing npm [$NEXT_RELEASE_TAG] tag in DRY-RUN mode."
|
|
131
|
+
log "Skipped committing npm [${NEXT_RELEASE_TAG}] tag in DRY-RUN mode."
|
|
122
132
|
fi
|
|
123
133
|
else
|
|
124
134
|
echo "
|
package/plugins/npm.sh
CHANGED
|
@@ -5,31 +5,31 @@ release() {
|
|
|
5
5
|
# Publish a `npm` tag
|
|
6
6
|
if [ -n "${NPM_TOKEN-}" ]; then
|
|
7
7
|
log "Publishing npm tag..."
|
|
8
|
-
log_verbose "npm tag: $NEXT_RELEASE_TAG and version: $NEXT_RELEASE_VERSION!"
|
|
8
|
+
log_verbose "npm tag: ${NEXT_RELEASE_TAG-} and version: ${NEXT_RELEASE_VERSION-}!"
|
|
9
9
|
|
|
10
10
|
# Don't load this plugin if
|
|
11
11
|
# - `--dry-run` used
|
|
12
12
|
# - `package.json` is missing
|
|
13
|
-
if ! $IS_DRY_RUN; then
|
|
13
|
+
if ! ${IS_DRY_RUN-}; then
|
|
14
14
|
if [ ! -f package.json ]; then
|
|
15
15
|
log "Project does not have package.json"
|
|
16
16
|
return 1
|
|
17
17
|
fi
|
|
18
18
|
|
|
19
19
|
TEMP_FILE=$(mktemp)
|
|
20
|
-
printf "%s\n" "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >>"$TEMP_FILE"
|
|
20
|
+
printf "%s\n" "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" >>"${TEMP_FILE}"
|
|
21
21
|
|
|
22
22
|
# Bump `package.json` `version` for properly publishing
|
|
23
|
-
sed -i.bak "s/\"version\": \"[^\"]*\",/\"version\": \"$NEXT_BUILD_VERSION\",/" "package.json"
|
|
23
|
+
sed -i.bak "s/\"version\": \"[^\"]*\",/\"version\": \"${NEXT_BUILD_VERSION-}\",/" "package.json"
|
|
24
24
|
rm -rf package.json.bak
|
|
25
25
|
|
|
26
|
-
export NODE_AUTH_TOKEN="$NPM_TOKEN"
|
|
27
|
-
npm publish --userconfig "$TEMP_FILE"
|
|
26
|
+
export NODE_AUTH_TOKEN="${NPM_TOKEN}"
|
|
27
|
+
npm publish --userconfig "${TEMP_FILE}"
|
|
28
28
|
|
|
29
|
-
log "Published [$NEXT_RELEASE_TAG]!"
|
|
30
|
-
rm -rf "$TEMP_FILE"
|
|
29
|
+
log "Published [${NEXT_RELEASE_TAG}]!"
|
|
30
|
+
rm -rf "${TEMP_FILE}"
|
|
31
31
|
else
|
|
32
|
-
log "Skipped npm tag [$NEXT_RELEASE_TAG] in DRY-RUN mode."
|
|
32
|
+
log "Skipped npm tag [${NEXT_RELEASE_TAG}] in DRY-RUN mode."
|
|
33
33
|
fi
|
|
34
34
|
else
|
|
35
35
|
echo "
|
|
@@ -34,12 +34,12 @@ parse_commit() {
|
|
|
34
34
|
local description
|
|
35
35
|
|
|
36
36
|
# Extracting the type, scope, and description using Bash regex
|
|
37
|
-
if [[ "$subject" =~ $regexp_commit_primary ]]; then
|
|
37
|
+
if [[ "${subject}" =~ ${regexp_commit_primary} ]]; then
|
|
38
38
|
type="${BASH_REMATCH[1]}"
|
|
39
39
|
scope="${BASH_REMATCH[3]}"
|
|
40
40
|
description="${BASH_REMATCH[4]}"
|
|
41
41
|
|
|
42
|
-
elif [[ "$subject" =~ $regexp_commit_major ]]; then
|
|
42
|
+
elif [[ "${subject}" =~ ${regexp_commit_major} ]]; then
|
|
43
43
|
type="BREAKING CHANGE"
|
|
44
44
|
scope="${BASH_REMATCH[3]}"
|
|
45
45
|
description="${BASH_REMATCH[4]}"
|
|
@@ -48,65 +48,65 @@ parse_commit() {
|
|
|
48
48
|
fi
|
|
49
49
|
|
|
50
50
|
# Extract body
|
|
51
|
-
if [[ -n "$body" && "$body" =~ $string_commit_major ]]; then
|
|
51
|
+
if [[ -n "${body}" && "${body}" =~ ${string_commit_major} ]]; then
|
|
52
52
|
type="BREAKING CHANGE"
|
|
53
|
-
description="$subject"
|
|
53
|
+
description="${subject}"
|
|
54
54
|
fi
|
|
55
55
|
|
|
56
56
|
local line=""
|
|
57
57
|
line+="- "
|
|
58
|
-
if is_valid_commit_type "$type" "${INCLUDE_SCOPE[@]}"; then
|
|
59
|
-
line+="**\`[$type]\`** "
|
|
58
|
+
if is_valid_commit_type "${type}" "${INCLUDE_SCOPE[@]}"; then
|
|
59
|
+
line+="**\`[${type}]\`** "
|
|
60
60
|
fi
|
|
61
61
|
|
|
62
|
-
if [ -n "${scope-}" ]; then
|
|
63
|
-
line+="**$scope**: "
|
|
62
|
+
if [[ -n "${scope-}" ]]; then
|
|
63
|
+
line+="**${scope}**: "
|
|
64
64
|
fi
|
|
65
|
-
line+="$description "
|
|
66
|
-
line+="([\`$hash\`](https://github.com/$GIT_REPO_NAME/commit/$sha256))"
|
|
65
|
+
line+="${description} "
|
|
66
|
+
line+="([\`${hash}\`](https://github.com/${GIT_REPO_NAME-}/commit/${sha256}))"
|
|
67
67
|
|
|
68
68
|
# Handle other type of commits
|
|
69
|
-
if is_valid_commit_type "$type" "${RELEASE_SKIP_TYPES[@]}"; then
|
|
69
|
+
if is_valid_commit_type "${type}" "${RELEASE_SKIP_TYPES[@]}"; then
|
|
70
70
|
return 0
|
|
71
|
-
elif is_valid_commit_type "$type" "${RELEASE_PATCH_TYPES[@]}"; then
|
|
72
|
-
if ! $PATCH_UPGRADED; then
|
|
71
|
+
elif is_valid_commit_type "${type}" "${RELEASE_PATCH_TYPES[@]}"; then
|
|
72
|
+
if ! ${PATCH_UPGRADED}; then
|
|
73
73
|
PATCH_UPGRADED=true
|
|
74
74
|
fi
|
|
75
|
-
CHANGELOG_STORE_PATCH+=("$line")
|
|
76
|
-
elif is_valid_commit_type "$type" "${RELEASE_MINOR_TYPES[@]}"; then
|
|
77
|
-
if ! $MINOR_UPGRADED; then
|
|
75
|
+
CHANGELOG_STORE_PATCH+=("${line}")
|
|
76
|
+
elif is_valid_commit_type "${type}" "${RELEASE_MINOR_TYPES[@]}"; then
|
|
77
|
+
if ! ${MINOR_UPGRADED}; then
|
|
78
78
|
MINOR_UPGRADED=true
|
|
79
79
|
fi
|
|
80
|
-
CHANGELOG_STORE_MINOR+=("$line")
|
|
81
|
-
elif is_valid_commit_type "$type" "${RELEASE_MAJOR_TYPES[@]}"; then
|
|
82
|
-
if ! $MAJOR_UPGRADED; then
|
|
80
|
+
CHANGELOG_STORE_MINOR+=("${line}")
|
|
81
|
+
elif is_valid_commit_type "${type}" "${RELEASE_MAJOR_TYPES[@]}"; then
|
|
82
|
+
if ! ${MAJOR_UPGRADED}; then
|
|
83
83
|
MAJOR_UPGRADED=true
|
|
84
84
|
fi
|
|
85
|
-
CHANGELOG_STORE_MAJOR+=("$line")
|
|
86
|
-
elif is_valid_commit_type "$type" "${UNAFFECTED_TYPES[@]}"; then
|
|
87
|
-
CHANGELOG_STORE_UNCHANGED+=("$line")
|
|
85
|
+
CHANGELOG_STORE_MAJOR+=("${line}")
|
|
86
|
+
elif is_valid_commit_type "${type}" "${UNAFFECTED_TYPES[@]}"; then
|
|
87
|
+
CHANGELOG_STORE_UNCHANGED+=("${line}")
|
|
88
88
|
fi
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
build_release() {
|
|
92
92
|
local IFS=$'\n'
|
|
93
93
|
|
|
94
|
-
if [ ${#CHANGELOG_STORE_MAJOR[@]} -gt 0 ]; then
|
|
94
|
+
if [[ ${#CHANGELOG_STORE_MAJOR[@]} -gt 0 ]]; then
|
|
95
95
|
RELEASE_BODY+="\n## BREAKING CHANGES\n"
|
|
96
96
|
RELEASE_BODY+="${CHANGELOG_STORE_MAJOR[*]}"
|
|
97
97
|
fi
|
|
98
98
|
|
|
99
|
-
if [ ${#CHANGELOG_STORE_MINOR[@]} -gt 0 ]; then
|
|
99
|
+
if [[ ${#CHANGELOG_STORE_MINOR[@]} -gt 0 ]]; then
|
|
100
100
|
RELEASE_BODY+="\n## Features\n"
|
|
101
101
|
RELEASE_BODY+="${CHANGELOG_STORE_MINOR[*]}"
|
|
102
102
|
fi
|
|
103
103
|
|
|
104
|
-
if [ ${#CHANGELOG_STORE_PATCH[@]} -gt 0 ]; then
|
|
104
|
+
if [[ ${#CHANGELOG_STORE_PATCH[@]} -gt 0 ]]; then
|
|
105
105
|
RELEASE_BODY+="\n## Bug Fixes\n"
|
|
106
106
|
RELEASE_BODY+="${CHANGELOG_STORE_PATCH[*]}"
|
|
107
107
|
fi
|
|
108
108
|
|
|
109
|
-
if [ ${#CHANGELOG_STORE_UNCHANGED[@]} -gt 0 ]; then
|
|
109
|
+
if [[ ${#CHANGELOG_STORE_UNCHANGED[@]} -gt 0 ]]; then
|
|
110
110
|
RELEASE_BODY+="\n## Other improvements\n"
|
|
111
111
|
RELEASE_BODY+="${CHANGELOG_STORE_UNCHANGED[*]}"
|
|
112
112
|
fi
|
package/presets/workspace.sh
CHANGED
|
@@ -34,12 +34,12 @@ parse_commit() {
|
|
|
34
34
|
local description
|
|
35
35
|
|
|
36
36
|
# Extracting the type, scope, and description using Bash regex
|
|
37
|
-
if [[ "$subject" =~ $regexp_commit_primary ]]; then
|
|
37
|
+
if [[ "${subject}" =~ ${regexp_commit_primary} ]]; then
|
|
38
38
|
type="${BASH_REMATCH[1]}"
|
|
39
39
|
scope="${BASH_REMATCH[3]}"
|
|
40
40
|
description="${BASH_REMATCH[4]}"
|
|
41
41
|
|
|
42
|
-
elif [[ "$subject" =~ $regexp_commit_major ]]; then
|
|
42
|
+
elif [[ "${subject}" =~ ${regexp_commit_major} ]]; then
|
|
43
43
|
type="BREAKING CHANGE"
|
|
44
44
|
scope="${BASH_REMATCH[3]}"
|
|
45
45
|
description="${BASH_REMATCH[4]}"
|
|
@@ -48,66 +48,66 @@ parse_commit() {
|
|
|
48
48
|
fi
|
|
49
49
|
|
|
50
50
|
# Early catching non-workspace commits
|
|
51
|
-
if [ "${scope-}" != "$PKG_NAME" ]; then
|
|
51
|
+
if [[ "${scope-}" != "${PKG_NAME-}" ]]; then
|
|
52
52
|
return 0
|
|
53
53
|
fi
|
|
54
54
|
|
|
55
55
|
# Extract body
|
|
56
|
-
if [[ -n "$body" && "$body" =~ $string_commit_major ]]; then
|
|
56
|
+
if [[ -n "${body}" && "${body}" =~ ${string_commit_major} ]]; then
|
|
57
57
|
type="BREAKING CHANGE"
|
|
58
|
-
description="$subject"
|
|
58
|
+
description="${subject}"
|
|
59
59
|
fi
|
|
60
60
|
|
|
61
61
|
local line=""
|
|
62
|
-
if is_valid_commit_type "$type" "${INCLUDE_SCOPE[@]}"; then
|
|
63
|
-
line+="- **$PKG_NAME**: **\`[$type]\`** $description "
|
|
62
|
+
if is_valid_commit_type "${type}" "${INCLUDE_SCOPE[@]}"; then
|
|
63
|
+
line+="- **${PKG_NAME}**: **\`[${type}]\`** ${description} "
|
|
64
64
|
else
|
|
65
|
-
line+="- **$PKG_NAME**: $description "
|
|
65
|
+
line+="- **${PKG_NAME}**: ${description} "
|
|
66
66
|
fi
|
|
67
|
-
line+="([\`$hash\`](https://github.com/$GIT_REPO_NAME/commit/$sha256))"
|
|
67
|
+
line+="([\`${hash}\`](https://github.com/${GIT_REPO_NAME-}/commit/${sha256}))"
|
|
68
68
|
|
|
69
69
|
# Handle other type of commits
|
|
70
|
-
if is_valid_commit_type "$type" "${RELEASE_SKIP_TYPES[@]}"; then
|
|
70
|
+
if is_valid_commit_type "${type}" "${RELEASE_SKIP_TYPES[@]}"; then
|
|
71
71
|
return 0
|
|
72
|
-
elif is_valid_commit_type "$type" "${RELEASE_PATCH_TYPES[@]}"; then
|
|
73
|
-
if ! $PATCH_UPGRADED; then
|
|
72
|
+
elif is_valid_commit_type "${type}" "${RELEASE_PATCH_TYPES[@]}"; then
|
|
73
|
+
if ! ${PATCH_UPGRADED}; then
|
|
74
74
|
PATCH_UPGRADED=true
|
|
75
75
|
fi
|
|
76
|
-
CHANGELOG_STORE_PATCH+=("$line")
|
|
77
|
-
elif is_valid_commit_type "$type" "${RELEASE_MINOR_TYPES[@]}"; then
|
|
78
|
-
if ! $MINOR_UPGRADED; then
|
|
76
|
+
CHANGELOG_STORE_PATCH+=("${line}")
|
|
77
|
+
elif is_valid_commit_type "${type}" "${RELEASE_MINOR_TYPES[@]}"; then
|
|
78
|
+
if ! ${MINOR_UPGRADED}; then
|
|
79
79
|
MINOR_UPGRADED=true
|
|
80
80
|
fi
|
|
81
|
-
CHANGELOG_STORE_MINOR+=("$line")
|
|
82
|
-
elif is_valid_commit_type "$type" "${RELEASE_MAJOR_TYPES[@]}"; then
|
|
83
|
-
if ! $MAJOR_UPGRADED; then
|
|
81
|
+
CHANGELOG_STORE_MINOR+=("${line}")
|
|
82
|
+
elif is_valid_commit_type "${type}" "${RELEASE_MAJOR_TYPES[@]}"; then
|
|
83
|
+
if ! ${MAJOR_UPGRADED}; then
|
|
84
84
|
MAJOR_UPGRADED=true
|
|
85
85
|
fi
|
|
86
|
-
CHANGELOG_STORE_MAJOR+=("$line")
|
|
87
|
-
elif is_valid_commit_type "$type" "${UNAFFECTED_TYPES[@]}"; then
|
|
88
|
-
CHANGELOG_STORE_UNCHANGED+=("$line")
|
|
86
|
+
CHANGELOG_STORE_MAJOR+=("${line}")
|
|
87
|
+
elif is_valid_commit_type "${type}" "${UNAFFECTED_TYPES[@]}"; then
|
|
88
|
+
CHANGELOG_STORE_UNCHANGED+=("${line}")
|
|
89
89
|
fi
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
build_release() {
|
|
93
93
|
local IFS=$'\n'
|
|
94
94
|
|
|
95
|
-
if [ ${#CHANGELOG_STORE_MAJOR[@]} -gt 0 ]; then
|
|
95
|
+
if [[ ${#CHANGELOG_STORE_MAJOR[@]} -gt 0 ]]; then
|
|
96
96
|
RELEASE_BODY+="\n## BREAKING CHANGES\n"
|
|
97
97
|
RELEASE_BODY+="${CHANGELOG_STORE_MAJOR[*]}"
|
|
98
98
|
fi
|
|
99
99
|
|
|
100
|
-
if [ ${#CHANGELOG_STORE_MINOR[@]} -gt 0 ]; then
|
|
100
|
+
if [[ ${#CHANGELOG_STORE_MINOR[@]} -gt 0 ]]; then
|
|
101
101
|
RELEASE_BODY+="\n## Features\n"
|
|
102
102
|
RELEASE_BODY+="${CHANGELOG_STORE_MINOR[*]}"
|
|
103
103
|
fi
|
|
104
104
|
|
|
105
|
-
if [ ${#CHANGELOG_STORE_PATCH[@]} -gt 0 ]; then
|
|
105
|
+
if [[ ${#CHANGELOG_STORE_PATCH[@]} -gt 0 ]]; then
|
|
106
106
|
RELEASE_BODY+="\n## Bug Fixes\n"
|
|
107
107
|
RELEASE_BODY+="${CHANGELOG_STORE_PATCH[*]}"
|
|
108
108
|
fi
|
|
109
109
|
|
|
110
|
-
if [ ${#CHANGELOG_STORE_UNCHANGED[@]} -gt 0 ]; then
|
|
110
|
+
if [[ ${#CHANGELOG_STORE_UNCHANGED[@]} -gt 0 ]]; then
|
|
111
111
|
RELEASE_BODY+="\n## Other improvements\n"
|
|
112
112
|
RELEASE_BODY+="${CHANGELOG_STORE_UNCHANGED[*]}"
|
|
113
113
|
fi
|