Skip to content

Commit 71d2c4e

Browse files
Add github action to create the release
1 parent fd8cec9 commit 71d2c4e

1 file changed

Lines changed: 78 additions & 0 deletions

File tree

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
name: Create Release on Version Bump
2+
3+
on:
4+
push:
5+
branches: [main]
6+
7+
jobs:
8+
extract:
9+
runs-on: ubuntu-latest
10+
outputs:
11+
newest_version: ${{ steps.extract.outputs.newest_version }}
12+
old_version: ${{ steps.extract.outputs.old_version }}
13+
prev_newest_version: ${{ steps.extract.outputs.prev_newest_version }}
14+
changelog: ${{ steps.extract.outputs.changelog }}
15+
16+
steps:
17+
- uses: actions/checkout@v4
18+
19+
- name: Extract versions
20+
id: version
21+
run: |
22+
set -eo pipefail
23+
24+
# Extract version headings and their positions
25+
mapfile -t versions < <(grep -En '^##[[:space:]]*\[?[0-9]+\.[0-9]+\.[0-9]+\]?' CHANGELOG.md | head -n 3)
26+
27+
line1=$(echo "${versions[0]}" | cut -d: -f1)
28+
line2=$(echo "${versions[1]}" | cut -d: -f1)
29+
line3=$(echo "${versions[2]}" | cut -d: -f1 || echo "\$")
30+
31+
newest_version=$(echo "${versions[0]}" | sed -E 's/^.*##[[:space:]]*\[?([0-9]+\.[0-9]+\.[0-9]+)\]?.*/\1/')
32+
old_version=$(echo "${versions[1]}" | sed -E 's/^.*##[[:space:]]*\[?([0-9]+\.[0-9]+\.[0-9]+)\]?.*/\1/')
33+
prev_newest_version=$(git show ${{ steps.prev.outputs.sha }}:package.json | jq -r .version)
34+
35+
changelog=$(sed -n "$line1,$((line2 - 1))p" CHANGELOG.md | tail -n +2)
36+
37+
echo "newest_version=$newest_version" >> "$GITHUB_OUTPUT"
38+
echo "old_version=$old_version" >> "$GITHUB_OUTPUT"
39+
echo "prev_newest_version=$prev_newest_version" >> "$GITHUB_OUTPUT"
40+
echo "changelog<<EOF" >> "$GITHUB_OUTPUT"
41+
echo "$changelog" >> "$GITHUB_OUTPUT"
42+
echo "EOF" >> "$GITHUB_OUTPUT"
43+
44+
- name: Verify version matches package.json and package-lock.json
45+
run: |
46+
changelog_version="${{ steps.extract.outputs.newest_version }}"
47+
48+
pkg_version=$(jq -r .version package.json)
49+
lock_version=$(jq -r .version package-lock.json)
50+
51+
echo "CHANGELOG.md: $changelog_version"
52+
echo "package.json: $pkg_version"
53+
echo "package-lock.json:$lock_version"
54+
55+
if [[ "$pkg_version" != "$changelog_version" ]]; then
56+
echo "❌ Version mismatch: package.json ($pkg_version) != CHANGELOG.md ($changelog_version)"
57+
exit 1
58+
fi
59+
60+
if [[ "$lock_version" != "$changelog_version" ]]; then
61+
echo "❌ Version mismatch: package-lock.json ($lock_version) != CHANGELOG.md ($changelog_version)"
62+
exit 1
63+
fi
64+
65+
echo "✅ Versions match"
66+
67+
- name: Create tag and release
68+
if: steps.version.outputs.newest_version != steps.version.outputs.prev_newest_version
69+
uses: softprops/action-gh-release@v1
70+
with:
71+
tag_name: v${{ steps.version.outputs.newest_version }}
72+
name: Release v${{ steps.version.outputs.newest_version }}
73+
body: |
74+
${{ env.changelog }}
75+
76+
**Full Changelog**: https://github.com/augustocdias/vscode-shell-command/compare/v${{ steps.version.outputs.old_version }}...v${{ steps.version.outputs.newest_version }}
77+
env:
78+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

0 commit comments

Comments
 (0)