Skip to content

Commit 2d9d9cb

Browse files
authored
ci: announce releases in Comms (#37)
Co-authored-by: Henning Muszynski <henningmu@users.noreply.github.com>
1 parent 1595c6f commit 2d9d9cb

1 file changed

Lines changed: 67 additions & 3 deletions

File tree

.github/workflows/release.yml

Lines changed: 67 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
release:
2727
name: Release
2828
runs-on: ubuntu-latest
29-
timeout-minutes: 30
29+
timeout-minutes: 60
3030

3131
steps:
3232
- name: Generate bot token
@@ -52,13 +52,13 @@ jobs:
5252
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
5353

5454
- name: Checkout repository
55-
uses: actions/checkout@v4
55+
uses: actions/checkout@v6
5656
with:
5757
token: ${{ steps.generate_token.outputs.token }}
5858
fetch-depth: 0
5959

6060
- name: Setup Node.js
61-
uses: actions/setup-node@v4
61+
uses: actions/setup-node@v6
6262
with:
6363
node-version: '22'
6464
cache: npm
@@ -68,6 +68,11 @@ jobs:
6868
- name: Install dependencies
6969
run: npm ci
7070

71+
- name: Capture previous tag
72+
if: github.ref_name == 'main'
73+
id: previous_tag
74+
run: echo "tag=$(git describe --tags --abbrev=0 --exclude='*-*' 2>/dev/null || true)" >> "$GITHUB_OUTPUT"
75+
7176
- name: Release
7277
run: npx semantic-release
7378
env:
@@ -76,3 +81,62 @@ jobs:
7681
GIT_AUTHOR_EMAIL: ${{ steps.bot_user.outputs.id }}+${{ steps.generate_token.outputs.app-slug }}[bot]@users.noreply.github.com
7782
GIT_COMMITTER_NAME: ${{ steps.generate_token.outputs.app-slug }}[bot]
7883
GIT_COMMITTER_EMAIL: ${{ steps.bot_user.outputs.id }}+${{ steps.generate_token.outputs.app-slug }}[bot]@users.noreply.github.com
84+
85+
- name: Derive release announcement
86+
if: github.ref_name == 'main'
87+
id: announcement
88+
env:
89+
PREVIOUS_TAG: ${{ steps.previous_tag.outputs.tag }}
90+
run: |
91+
git fetch --force --tags origin
92+
93+
new_tag="$(git describe --tags --abbrev=0 2>/dev/null || true)"
94+
if [ -z "${new_tag}" ] || [ "${new_tag}" = "${PREVIOUS_TAG}" ]; then
95+
echo "should_announce=false" >> "$GITHUB_OUTPUT"
96+
exit 0
97+
fi
98+
99+
package_name="$(node -p "JSON.parse(require('fs').readFileSync('package.json', 'utf8')).name")"
100+
package_version="$(node -p "JSON.parse(require('fs').readFileSync('package.json', 'utf8')).version")"
101+
release_version="${new_tag#v}"
102+
103+
package_url="https://www.npmjs.com/package/${package_name}/v/${package_version}"
104+
release_url="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/releases/tag/${new_tag}"
105+
repo_url="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}"
106+
107+
if [ -n "${PREVIOUS_TAG}" ]; then
108+
changelog="$(git log --no-merges --reverse --pretty='format:- %s (%H-%h)' "${PREVIOUS_TAG}..${new_tag}" | grep -v '^- chore(release): ' || true)"
109+
else
110+
changelog="$(git log --no-merges --reverse --pretty='format:- %s (%H-%h)' "${new_tag}" | grep -v '^- chore(release): ' || true)"
111+
fi
112+
113+
if [ -z "${changelog}" ]; then
114+
changelog='- No additional commits listed.'
115+
else
116+
changelog="$(printf '%s\n' "${changelog}" | sed -E -e 's,\(([a-f0-9]+)-([a-f0-9]+)\),([`\2`]('"${repo_url}"'/commit/\1)),g' | sed -E -e 's,\(#([0-9]+)\),([#\1]('"${repo_url}"'/pull/\1)),g')"
117+
fi
118+
119+
{
120+
echo "should_announce=true"
121+
echo "message<<EOF"
122+
echo "**Comms CLI ${new_tag} published 🚀**"
123+
echo
124+
printf '%s\n' "${changelog}"
125+
echo
126+
echo "[GitHub release](${release_url}) | [npm package](${package_url})"
127+
echo "EOF"
128+
} >> "$GITHUB_OUTPUT"
129+
130+
- name: Announce release in Comms
131+
if: github.ref_name == 'main' && steps.announcement.outputs.should_announce == 'true'
132+
uses: Doist/comms-actions/post-comment-action@main
133+
with:
134+
comms-client-id: ${{ secrets.COMMS_CLIENT_ID }}
135+
comms-client-secret: ${{ secrets.COMMS_CLIENT_SECRET }}
136+
comms-username: ${{ secrets.COMMS_USERNAME }}
137+
comms-password: ${{ secrets.COMMS_PASSWORD }}
138+
workspace-id: 69
139+
thread-id: CZECS4Yebwx7c1c8hDRmB
140+
content: ${{ steps.announcement.outputs.message }}
141+
audience: channel
142+
continue-on-error: true

0 commit comments

Comments
 (0)