release-me-sh 0.8.8 → 0.9.1

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 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
- Go-to [web-page](https://dalisoft.github.io/release-me) or see [**Getting Started**](./docs/GET_STARTED.md)
23
+ See [here](https://dalisoft.github.io/release-me)
24
24
 
25
25
  ## Similar projects
26
26
 
package/package.json CHANGED
@@ -1,22 +1,59 @@
1
1
  {
2
2
  "name": "release-me-sh",
3
- "version": "0.8.8",
4
- "author": "Davlatjon Shavkatov <opensource@dalisoft.uz>",
3
+ "version": "0.9.1",
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
- "bugs": {
11
- "url": "https://github.com/dalisoft/release-me/issues"
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
- "files": ["presets", "plugins", "release-me.sh"],
18
- "homepage": "https://github.com/dalisoft/release-me#readme",
19
- "keywords": ["bash", "workspace", "semantic-release", "publish", "conventional-commits"],
20
- "license": "GPL-3.0",
21
- "type": "module"
58
+ "trustedDependencies": ["@biomejs/biome", "@swc/core", "core-js", "core-js-pure", "dprint"]
22
59
  }
@@ -2,5 +2,5 @@
2
2
  set -eu
3
3
 
4
4
  release() {
5
- printf "%s" "Template for plug-in"
5
+ echo "Template for plug-in"
6
6
  }
@@ -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,22 +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
- BUILDX_URL=
8
- ARCH=$(uname -m | sed 's/aarch64/arm64/' | sed 's/x86_64/amd64/')
7
+ arch=$(uname -m | sed 's/aarch64/arm64/' | sed 's/x86_64/amd64/')
8
+ os=$(uname -s | tr '[:upper:]' '[:lower:]')
9
9
 
10
10
  prepare() {
11
- BUILDX_URL=$(curl -s https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/buildx-lab-releases.json | jq -r ".latest.assets[] | select(endswith(\"linux-${ARCH}\"))")
12
-
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)
13
12
  # Download docker buildx with Hyrdobuild support
14
- mkdir -vp ~/.docker/cli-plugins/
15
- curl --silent -L --output ~/.docker/cli-plugins/docker-buildx "${BUILDX_URL}"
16
- chmod a+x ~/.docker/cli-plugins/docker-buildx
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"
17
16
 
18
- echo "${DOCKER_HUB_PAT-}" | docker login --username "${DOCKER_HUB_USERNAME-}" --password-stdin
17
+ printf "%s" "${DOCKER_HUB_PAT-}" | docker login --username "${DOCKER_HUB_USERNAME-}" --password-stdin
19
18
  }
20
19
 
21
20
  cleanup() {
22
- rm -rf ~/.docker/cli-plugins/
21
+ rm -rf "${HOME}/.docker/cli-plugins"
23
22
 
24
23
  docker logout
25
24
  }
@@ -29,12 +28,12 @@ release() {
29
28
  if [ -n "${DOCKER_HUB_USERNAME-}" ] && [ -n "${DOCKER_HUB_PAT-}" ]; then
30
29
 
31
30
  log "Building and publishing Docker image..."
32
- 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-}!"
33
32
 
34
33
  # Don't load this plugin if
35
34
  # - `--dry-run` used
36
35
  # - `Dockerfile` is missing
37
- if ! $IS_DRY_RUN; then
36
+ if ! ${IS_DRY_RUN-}; then
38
37
  if [ ! -f Dockerfile ]; then
39
38
  log "Project does not have Dockerfile"
40
39
  return 1
@@ -42,15 +41,15 @@ release() {
42
41
 
43
42
  prepare
44
43
 
45
- docker build -t "$GIT_REPO_NAME:$NEXT_BUILD_VERSION" . --push
46
- docker tag "$GIT_REPO_NAME:$NEXT_BUILD_VERSION" "$GIT_REPO_NAME:latest"
47
- 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"
48
47
 
49
- log "Docker image published [$NEXT_RELEASE_TAG]!"
48
+ log "Docker image published [${NEXT_RELEASE_TAG}]!"
50
49
 
51
50
  cleanup
52
51
  else
53
- log "Skipped Docker image [$NEXT_RELEASE_TAG] in DRY-RUN mode."
52
+ log "Skipped Docker image [${NEXT_RELEASE_TAG}] in DRY-RUN mode."
54
53
  fi
55
54
 
56
55
  else
package/plugins/git.sh CHANGED
@@ -5,29 +5,35 @@ 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
- echo "$GPG_KEY" | base64 --decode | gpg --quiet --batch --import
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
- echo "$GPG_PASSPHRASE" | gpg --quiet --batch --yes --pinentry-mode loopback --sign --local-user "${GPG_KEY_ID-}" --passphrase-fd 0 >/dev/null
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
+ elif [ -z "${SSH_NO_SIGN-}" ] && [ -n "${SSH_PUB_KEY-}" ]; then
32
+ git config --local commit.gpgsign true
33
+ git config --local user.signingkey "${SSH_PUB_KEY}"
34
+ git config --local tag.forceSignAnnotated true
35
+ git config --local gpg.format ssh
36
+ log_verbose "Git SSH sign is set"
31
37
  fi
32
38
  }
33
39
 
@@ -43,18 +49,24 @@ cleanup() {
43
49
  git config --local --unset user.signingkey
44
50
  git config --local --unset tag.forceSignAnnotated
45
51
  git config --local --unset gpg.program
46
- 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"
47
53
 
48
54
  if gpg --list-keys | grep -q "${GPG_KEY_ID-}"; then
49
55
  if [ -n "${GPG_PASSPHRASE-}" ]; then
50
- echo "$GPG_PASSPHRASE" | gpg --quiet --batch --yes --passphrase-fd 0 --delete-secret-and-public-key "$GPG_KEY_ID" >/dev/null
56
+ printf "%s" "${GPG_PASSPHRASE}" | gpg --quiet --batch --yes --passphrase-fd 0 --delete-secret-and-public-key "${GPG_KEY_ID}" >/dev/null
51
57
  else
52
- 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}"
53
59
  fi
54
60
  log_verbose "Git GPG key deleted"
55
61
  fi
56
62
 
57
63
  log_verbose "Git GPG config cleanup"
64
+ elif [ -z "${SSH_NO_SIGN-}" ] && [ -n "${SSH_PUB_KEY-}" ]; then
65
+ git config --local --unset commit.gpgsign true
66
+ git config --local --unset user.signingkey "${SSH_PUB_KEY}"
67
+ git config --local --unset tag.forceSignAnnotated true
68
+ git config --local --unset gpg.format ssh
69
+ log_verbose "Git SSH sign is unset"
58
70
  fi
59
71
 
60
72
  log_verbose "Git config cleanup"
@@ -63,21 +75,24 @@ cleanup() {
63
75
  release() {
64
76
  # Create a `git` tag
65
77
  log "Creating Git tag..."
66
- log_verbose "Git hash: $CHECKOUT_SHA!"
78
+ log_verbose "Git hash: ${CHECKOUT_SHA-}!"
67
79
 
68
- if ! $IS_DRY_RUN; then
80
+ if ! ${IS_DRY_RUN-}; then
69
81
  prepare
70
82
 
71
83
  if [ -z "${GPG_NO_SIGN-}" ] && [ -n "${GPG_KEY-}" ] && [ -n "${GPG_KEY_ID-}" ]; then
72
- git tag --sign "$NEXT_RELEASE_TAG" "$CHECKOUT_SHA" --message "Release, tag and sign $NEXT_RELEASE_TAG"
73
- log "Created 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
+ 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}]!"
74
89
  else
75
- git tag "$NEXT_RELEASE_TAG" "$CHECKOUT_SHA"
76
- log "Created Git tag [$NEXT_RELEASE_TAG]!"
90
+ git tag "${NEXT_RELEASE_TAG}" "${CHECKOUT_SHA}"
91
+ log "Created Git tag [${NEXT_RELEASE_TAG}]!"
77
92
  fi
78
93
 
79
- if [ -n "$GIT_REMOTE_ORIGIN" ]; then
80
- git push origin "refs/tags/$NEXT_RELEASE_TAG"
94
+ if [ -n "${GIT_REMOTE_ORIGIN}" ]; then
95
+ git push origin "refs/tags/${NEXT_RELEASE_TAG}"
81
96
  log_verbose "Pushed Git tag to remote"
82
97
  else
83
98
  log_verbose "No Git remote to push tag"
@@ -85,6 +100,6 @@ release() {
85
100
 
86
101
  cleanup
87
102
  else
88
- log "Skipped Git tag [$NEXT_RELEASE_TAG] in DRY-RUN mode."
103
+ log "Skipped Git tag [${NEXT_RELEASE_TAG}] in DRY-RUN mode."
89
104
  fi
90
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
21
- printf "%b" "${RELEASE_BODY-}" | gh release create "${NEXT_RELEASE_TAG-}" --title "${NEXT_RELEASE_TAG-}" --prerelease --notes-file -
20
+ if ${PRE_RELEASE_VERSION-}; then
21
+ echo "${RELEASE_BODY-}" | gh release create "${NEXT_RELEASE_TAG-}" --title "${NEXT_RELEASE_TAG-}" --prerelease --notes-file -
22
22
  else
23
- printf "%b" "${RELEASE_BODY-}" | gh release create "${NEXT_RELEASE_TAG-}" --title "${NEXT_RELEASE_TAG-}" --latest --notes-file -
23
+ echo "${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 "
@@ -5,29 +5,35 @@ 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
- echo "$GPG_KEY" | base64 --decode | gpg --quiet --batch --import
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
- echo "$GPG_PASSPHRASE" | gpg --quiet --batch --yes --pinentry-mode loopback --sign --local-user "${GPG_KEY_ID-}" --passphrase-fd 0 >/dev/null
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
+ elif [ -z "${SSH_NO_SIGN-}" ] && [ -n "${SSH_PUB_KEY-}" ]; then
32
+ git config --local commit.gpgsign true
33
+ git config --local user.signingkey "${SSH_PUB_KEY}"
34
+ git config --local tag.forceSignAnnotated true
35
+ git config --local gpg.format ssh
36
+ log_verbose "Git SSH sign is set"
31
37
  fi
32
38
  }
33
39
 
@@ -43,34 +49,45 @@ cleanup() {
43
49
  git config --local --unset user.signingkey
44
50
  git config --local --unset tag.forceSignAnnotated
45
51
  git config --local --unset gpg.program
46
- 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"
47
53
 
48
54
  if gpg --list-keys | grep -q "${GPG_KEY_ID-}"; then
49
55
  if [ -n "${GPG_PASSPHRASE-}" ]; then
50
- echo "$GPG_PASSPHRASE" | gpg --quiet --batch --yes --passphrase-fd 0 --delete-secret-and-public-key "$GPG_KEY_ID" >/dev/null
56
+ printf "%s" "${GPG_PASSPHRASE}" | gpg --quiet --batch --yes --passphrase-fd 0 --delete-secret-and-public-key "${GPG_KEY_ID}" >/dev/null
51
57
  else
52
- 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}"
53
59
  fi
54
60
  log_verbose "Git GPG key deleted"
55
61
  fi
56
62
 
57
63
  log_verbose "Git GPG config cleanup"
64
+ elif [ -z "${SSH_NO_SIGN-}" ] && [ -n "${SSH_PUB_KEY-}" ]; then
65
+ git config --local --unset commit.gpgsign true
66
+ git config --local --unset user.signingkey "${SSH_PUB_KEY}"
67
+ git config --local --unset tag.forceSignAnnotated true
68
+ git config --local --unset gpg.format ssh
69
+ log_verbose "Git SSH sign is unset"
58
70
  fi
59
71
 
60
72
  log_verbose "Git config cleanup"
61
73
  }
62
74
 
63
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
+
64
81
  # Committing a `npm` tag
65
82
  log "Committing npm tag..."
66
- log_verbose "Git hash: $CHECKOUT_SHA!"
83
+ log_verbose "Git hash: ${CHECKOUT_SHA}!"
67
84
  if [ -n "${NPM_TOKEN-}" ]; then
68
85
 
69
86
  # Don't load this plugin if
70
87
  # - `--dry-run` used
71
88
  # - `package.json` is missing
72
89
  # - `package.json` is not changed on `Git` tracking
73
- if ! $IS_DRY_RUN; then
90
+ if ! ${IS_DRY_RUN-}; then
74
91
  if [ ! -f package.json ] || [ -z "$(git diff --name-only package.json 2>/dev/null)" ]; then
75
92
  log "Project does not have package.json or package.json not changed"
76
93
  return 1
@@ -78,8 +95,15 @@ release() {
78
95
  prepare
79
96
  git add package.json
80
97
 
81
- 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
+
82
104
  if [ -z "${GPG_NO_SIGN-}" ] && [ -n "${GPG_KEY-}" ] && [ -n "${GPG_KEY_ID-}" ]; then
105
+ git commit --sign -m "chore(${PKG_NAME}): update \`package.json\` version to ${NEXT_RELEASE_VERSION-}"
106
+ elif [ -z "${SSH_NO_SIGN-}" ] && [ -n "${SSH_PUB_KEY-}" ]; then
83
107
  git commit --sign -m "chore(${PKG_NAME}): update \`package.json\` version to ${NEXT_RELEASE_VERSION}"
84
108
  else
85
109
  git commit --no-gpg-sign -m "chore(${PKG_NAME}): update \`package.json\` version to ${NEXT_RELEASE_VERSION}"
@@ -87,22 +111,24 @@ release() {
87
111
  else
88
112
  if [ -z "${GPG_NO_SIGN-}" ] && [ -n "${GPG_KEY-}" ] && [ -n "${GPG_KEY_ID-}" ]; then
89
113
  git commit --sign -m "chore: update \`package.json\` version to ${NEXT_RELEASE_VERSION}"
114
+ elif [ -z "${SSH_NO_SIGN-}" ] && [ -n "${SSH_PUB_KEY-}" ]; then
115
+ git commit --sign -m "chore: update \`package.json\` version to ${NEXT_RELEASE_VERSION}"
90
116
  else
91
117
  git commit --no-gpg-sign -m "chore: update \`package.json\` version to ${NEXT_RELEASE_VERSION}"
92
118
  fi
93
119
  fi
94
120
 
95
- if [ -n "$GIT_REMOTE_ORIGIN" ]; then
121
+ if [ -n "${GIT_REMOTE_ORIGIN}" ]; then
96
122
  git push
97
123
  CHECKOUT_SHA=$(git rev-parse HEAD)
98
- log "Committed npm [$NEXT_RELEASE_TAG] tag"
124
+ log "Committed npm [${NEXT_RELEASE_TAG-}] tag"
99
125
  else
100
- log "Committing npm [$NEXT_RELEASE_TAG] tag failed"
126
+ log "Committing npm [${NEXT_RELEASE_TAG}] tag failed"
101
127
  fi
102
128
 
103
129
  cleanup
104
130
  else
105
- 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."
106
132
  fi
107
133
  else
108
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
@@ -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