Skip to content

Customise the PR and fix gh pr merge commands #41

Customise the PR and fix gh pr merge commands

Customise the PR and fix gh pr merge commands #41

name: Release Workflow
on:
push:
branches:
- main
paths:
- 'manifest.json'
- '.github/workflows/release-extension.yaml'
jobs:
check_version:
runs-on: ubuntu-latest
outputs:
version_changed: ${{ steps.version_changed.outputs.changed }}
new_version: ${{ steps.get_new_version.outputs.version }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Read new version from manifest
id: get_new_version
run: |
VERSION=$(jq -r '.version' manifest.json)
echo "NEW_VERSION=$VERSION" >> $GITHUB_ENV
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Get old version from last release's manifest
id: get_old_version
run: |
git fetch --tags
PREV_TAG=$(git describe --tags --abbrev=0)
git checkout $PREV_TAG
VERSION=$(jq -r '.version' manifest.json)
echo "OLD_VERSION=$VERSION" >> $GITHUB_ENV
- name: Print versions
run: |
echo "Old version: $OLD_VERSION"
echo "New version: $NEW_VERSION"
- name: Compare versions
id: version_changed
run: |
if [ "$(printf '%s\n' "$NEW_VERSION" "$OLD_VERSION" | sort -V | head -n1)" = "$OLD_VERSION" ] && [ "$NEW_VERSION" != "$OLD_VERSION" ]; then
echo "Version has been updated from $OLD_VERSION to $NEW_VERSION"
echo "changed=true" >> $GITHUB_OUTPUT
else
echo "No version update detected or new version is not greater than old version."
echo "changed=false" >> $GITHUB_OUTPUT
exit 0
fi
update_files:
runs-on: ubuntu-latest
needs: check_version
if: needs.check_version.outputs.version_changed == 'true'
outputs:
release_log: ${{ steps.get_changes.outputs.release_log }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get changes since last release
id: get_changes
run: |
PREV_TAG=$(git describe --tags --abbrev=0)
RELEASELOG=$(git log $PREV_TAG..HEAD --merges --pretty=format:"%h: %b by %aN" | sed ':a;N;$!ba;s/\n/\\n/g')
CHANGELOG=$(git log $PREV_TAG..HEAD --merges --pretty=format:"%b" | sed ':a;N;$!ba;s/\n/\\n/g')
echo "release_log=${RELEASELOG}" >> $GITHUB_OUTPUT
echo "CHANGELOG=${CHANGELOG}" >> $GITHUB_ENV
- name: Debug logs
run: |
echo "Release log:"
echo "${{ steps.get_changes.outputs.release_log }}"
echo "Changelog:"
echo "$CHANGELOG"
- name: Update README
run: |
VERSION=${{ needs.check_version.outputs.new_version }}
sed -E -i.bak 's/Version-[0-9]+\.[0-9]+(\.[0-9]+)?/Version-'${VERSION}'/' README.md
rm README.md.bak
- name: Update CHANGELOG
run: |
VERSION=${{ needs.check_version.outputs.new_version }}
FORMATTED_CHANGELOG=$(echo "$CHANGELOG" | sed 's/\\n/\n/g' | sed 's/^/ - /')
NEW_CHANGELOG=$(echo "- \`v${VERSION}\`\n${FORMATTED_CHANGELOG}\n" | sed 's/\\n/\n/g')
awk -v new_changelog="$NEW_CHANGELOG" 'NR==3{print new_changelog}1' CHANGELOG.md > tmpfile && mv tmpfile CHANGELOG.md
- name: Commit changes
run: |
git config --global user.name 'github-actions'
git config --global user.email 'github-actions@github.com'
git add README.md CHANGELOG.md
git diff --staged
git commit -m "Update README and CHANGELOG for v${{ needs.check_version.outputs.new_version }}"
- name: Create Pull Request
id: create_pr
uses: peter-evans/create-pull-request@v6
with:
title: "Update README and CHANGELOG for v${{ needs.check_version.outputs.new_version }}"
branch: "update-docs-${{ needs.check_version.outputs.new_version }}"
commit-message: "Update README and CHANGELOG for v${{ needs.check_version.outputs.new_version }}"
body: "This PR updates the README and CHANGELOG files for the new version v${{ needs.check_version.outputs.new_version }}."
labels: documentation, release, github-actions
delete-branch: true
- name: Merge Pull Request
id: merge_pr
run: gh pr merge "${{ steps.create_pr.outputs.pull-request-number }}"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
create_release:
runs-on: ubuntu-latest
needs:
- check_version
- update_files
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Zip Chromium extension
run: |
VERSION=${{ needs.check_version.outputs.new_version }}
zip -r ../signature-sync-chrome-${VERSION}.zip . -x '.*' -x '__MACOSX' -x '*.md'
- name: Zip Firefox extension
run: |
git config --global user.email "developer@pratyushvashisht.com"
git config --global user.name "Pratyush Vashisht"
git fetch --all
git checkout firefox
git rebase -X theirs origin/main # assuming the branch is already up-to-date other than version number
git push origin origin/firefox --force
VERSION=${{ needs.check_version.outputs.new_version }}
zip -r ../signature-sync-firefox-${VERSION}.zip . -x '.*' -x '__MACOSX' -x '*.md'
git checkout main
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# - name: Upload Chrome zip
# uses: actions/upload-artifact@v4
# with:
# name: signature-sync-chrome-${{ needs.check_version.outputs.new_version }}.zip
# path: ~/signature-sync-chrome-${{ needs.check_version.outputs.new_version }}.zip
# - name: Upload Firefox zip
# uses: actions/upload-artifact@v4
# with:
# name: signature-sync-firefox-${{ needs.check_version.outputs.new_version }}.zip
# path: ~/signature-sync-firefox-${{ needs.check_version.outputs.new_version }}.zip
- name: Print files list
run: |
echo "printing files"
ls -la ..
echo "done printing files"
- name: Create GitHub Release
id: create_release
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ needs.check_version.outputs.new_version }}
generate_release_notes: true
files: |
../signature-sync-chrome-${{ needs.check_version.outputs.new_version }}.zip
../signature-sync-firefox-${{ needs.check_version.outputs.new_version }}.zip