-
-
Notifications
You must be signed in to change notification settings - Fork 0
106 lines (105 loc) · 3.73 KB
/
release.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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