Release main #230
This file contains 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: Release | |
run-name: Release ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag_name || github.ref_name }} | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
on: | |
workflow_dispatch: | |
inputs: | |
tag_name: | |
description: 'Tag name for the release (semver format required: x.x.x)' | |
required: true | |
push: | |
tags: | |
- '*' | |
workflow_run: | |
workflows: ["E2E Tests", "Unit Tests"] | |
types: [completed] | |
env: | |
TAG_NAME: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag_name || github.ref_name }} | |
jobs: | |
validate-tag: | |
name: Validate tag | |
runs-on: ubuntu-latest | |
if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} | |
steps: | |
- name: Validate tag Format | |
run: | | |
if [[ ! "${{ env.TAG_NAME }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then | |
echo "Error: Invalid tag format. Please use semver format (x.x.x)." | |
exit 1 | |
fi | |
check-tag: | |
name: Check tag | |
runs-on: ubuntu-latest | |
needs: validate-tag | |
if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} | |
steps: | |
- name: Check out the repository | |
uses: actions/checkout@v4 | |
- name: Check if tag exists | |
id: check_tag | |
run: | | |
git fetch --tags | |
if git rev-parse "${{ env.TAG_NAME }}" >/dev/null 2>&1; then | |
echo "Tag already exists. Cancelling the release." | |
exit 1 | |
fi | |
check-version: | |
name: Check Version | |
runs-on: ubuntu-latest | |
needs: check-tag | |
steps: | |
- name: Check out the repository | |
uses: actions/checkout@v4 | |
- name: Install semver | |
run: npm install -g semver | |
- name: Verify new version | |
run: | | |
CURRENT_VERSION=$(jq -r '.version' package.json) | |
echo "Current version: $CURRENT_VERSION" | |
if ! semver -r ">$CURRENT_VERSION" "${{ env.TAG_NAME }}"; then | |
echo "Error: The new version ${{ env.TAG_NAME }} is not greater than the current version $CURRENT_VERSION." | |
exit 1 | |
fi | |
shell: bash | |
update-version: | |
name: Update version | |
runs-on: ubuntu-latest | |
needs: check-version | |
steps: | |
- name: Check out the repository | |
uses: actions/checkout@v4 | |
- name: Update package.json version to match tag | |
run: | | |
VERSION="${{ env.TAG_NAME }}" | |
jq --arg version "$VERSION" '.version = $version' package.json > package.json.tmp && mv package.json.tmp package.json | |
- name: Commit version update | |
run: | | |
git config user.name "github-actions" | |
git config user.email "[email protected]" | |
git commit -am "chore: update package.json version to ${{ env.TAG_NAME }}" | |
git push origin HEAD | |
create-release: | |
name: Create Release | |
runs-on: ubuntu-latest | |
needs: update-version | |
steps: | |
- name: Check out the repository | |
uses: actions/checkout@v4 | |
- name: Create tag (only for workflow_dispatch) | |
if: ${{ github.event_name == 'workflow_dispatch' }} | |
run: | | |
git config user.name "github-actions" | |
git config user.email "[email protected]" | |
git tag ${{ env.TAG_NAME }} | |
git push origin ${{ env.TAG_NAME }} | |
- name: Set up GitHub CLI | |
run: | | |
sudo apt-get install -y gh | |
echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token | |
- name: Create Release with GitHub CLI | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
gh release create ${{ env.TAG_NAME }} --title "Release ${{ env.TAG_NAME }}" --notes "Release notes generated automatically." --generate-notes |