Merge pull request #173 from augustocdias/workflows #20
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Create Release on Version Bump | |
| on: | |
| workflow_dispatch: # Manually trigger | |
| push: | |
| branches: [master] | |
| jobs: | |
| publish_release: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| new_version: ${{ steps.extract.outputs.new_version }} | |
| prev_version: ${{ steps.extract.outputs.prev_version }} | |
| changelog: ${{ steps.extract.outputs.changelog }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Extract versions | |
| id: version | |
| run: | | |
| set -eo pipefail | |
| # Extract version headings and their positions | |
| mapfile -t versions < <(grep -En '^##[[:space:]]*\[?[0-9]+\.[0-9]+\.[0-9]+\]?' CHANGELOG.md | head -n 3) | |
| line1=$(echo "${versions[0]}" | cut -d: -f1) | |
| line2=$(echo "${versions[1]}" | cut -d: -f1) | |
| line3=$(echo "${versions[2]}" | cut -d: -f1 || echo "\$") | |
| new_version=$(echo "${versions[0]}" | sed -E 's/^.*##[[:space:]]*\[?([0-9]+\.[0-9]+\.[0-9]+)\]?.*/\1/') | |
| prev_version=$(echo "${versions[1]}" | sed -E 's/^.*##[[:space:]]*\[?([0-9]+\.[0-9]+\.[0-9]+)\]?.*/\1/') | |
| changelog=$(sed -n "$line1,$((line2 - 1))p" CHANGELOG.md | tail -n +2) | |
| echo "new_version=$new_version" | tee --append "$GITHUB_OUTPUT" | |
| echo "prev_version=$prev_version" | tee --append "$GITHUB_OUTPUT" | |
| echo "changelog<<EOF" | tee --append "$GITHUB_OUTPUT" | |
| echo "$changelog" | tee --append "$GITHUB_OUTPUT" | |
| echo "EOF" | tee --append "$GITHUB_OUTPUT" | |
| - name: Verify version matches package.json and package-lock.json | |
| run: | | |
| changelog_version="${{ steps.version.outputs.new_version }}" | |
| pkg_version=$(jq -r .version package.json) | |
| lock_version=$(jq -r .version package-lock.json) | |
| echo "CHANGELOG.md: $changelog_version" | |
| echo "package.json: $pkg_version" | |
| echo "package-lock.json: $lock_version" | |
| if [[ "$pkg_version" != "$changelog_version" ]]; then | |
| echo "❌ Version mismatch: package.json ($pkg_version) != CHANGELOG.md ($changelog_version)" | |
| exit 1 | |
| fi | |
| if [[ "$lock_version" != "$changelog_version" ]]; then | |
| echo "❌ Version mismatch: package-lock.json ($lock_version) != CHANGELOG.md ($changelog_version)" | |
| exit 1 | |
| fi | |
| echo "✅ Versions match" | |
| - name: Create tag and release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: v${{ steps.version.outputs.new_version }} | |
| name: Release v${{ steps.version.outputs.new_version }} | |
| body: | | |
| ${{ env.changelog }} | |
| **Full Changelog**: https://github.com/augustocdias/vscode-shell-command/compare/v${{ steps.version.outputs.prev_version }}...v${{ steps.version.outputs.new_version }} | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |