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 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,65 @@
1
1
  {
2
2
  "name": "release-me-sh",
3
- "version": "0.9.0",
4
- "author": "Davlatjon Shavkatov <opensource@dalisoft.uz>",
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
- "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": [
59
+ "@biomejs/biome",
60
+ "@swc/core",
61
+ "core-js",
62
+ "core-js-pure",
63
+ "dprint"
64
+ ]
22
65
  }
@@ -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,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
- # TODO: This `node` trick for bypassing coverage bug in Bashcov
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 "${OS}-${ARCH}\",$" | head -1 | xargs | tr -d ',' | xargs)
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 ~/.docker/cli-plugins/
17
- curl --silent -L --output ~/.docker/cli-plugins/docker-buildx "${BUILDX_URL}"
18
- 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"
19
16
 
20
- 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
21
18
  }
22
19
 
23
20
  cleanup() {
24
- rm -rf ~/.docker/cli-plugins/
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
- 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
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
- 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
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 "
@@ -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
- 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
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
- 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
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
@@ -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