@@ -3,10 +3,51 @@ name: Release
3
3
on :
4
4
push :
5
5
branches :
6
+ - main
6
7
- next
7
8
8
9
jobs :
10
+ verify_release :
11
+ name : Verify release 🔍
12
+ if : startsWith(github.event.head_commit.message, 'chore(release)')
13
+ runs-on : ubuntu-latest
14
+ outputs :
15
+ version : ${{ steps.check_tag.outputs.version }}
16
+ is_prerelease : ${{ steps.check_tag.outputs.is_prerelease }}
17
+ tag_exists : ${{ steps.check_tag.outputs.tag_exists }}
18
+
19
+ steps :
20
+ - name : Checkout 🛎️
21
+ uses : actions/checkout@v4
22
+ with :
23
+ fetch-depth : 0
24
+
25
+ - name : Check tag details 🔍
26
+ id : check_tag
27
+ run : |
28
+ VERSION=$(node -p "require('./package.json').version")
29
+ TAG="v$VERSION"
30
+
31
+ if [[ "$VERSION" == *rc* ]] || [[ "$VERSION" == *next* ]] || [[ "$VERSION" == *alpha* ]] || [[ "$VERSION" == *beta* ]]; then
32
+ echo "is_prerelease=true" >> $GITHUB_OUTPUT
33
+ echo "This is a prerelease version"
34
+ else
35
+ echo "is_prerelease=false" >> $GITHUB_OUTPUT
36
+ echo "This is a stable release version"
37
+ fi
38
+
39
+ if [ $(git tag -l "$TAG") ]; then
40
+ echo "Tag $TAG already exists"
41
+ echo "tag_exists=true" >> $GITHUB_OUTPUT
42
+ else
43
+ echo "Tag $TAG does not exist"
44
+ echo "tag_exists=false" >> $GITHUB_OUTPUT
45
+ fi
46
+
9
47
release_to_npm :
48
+ name : Release to NPM 🚀
49
+ needs : verify_release
50
+ if : needs.verify_release.outputs.tag_exists != 'true'
10
51
permissions :
11
52
contents : write
12
53
runs-on : ubuntu-latest
@@ -35,65 +76,40 @@ jobs:
35
76
restore-keys : |
36
77
${{ inputs.os }}-${{ inputs.node }}-release
37
78
38
- - id : version_check
39
- name : Identify new version 🔍
40
- run : |
41
- PKG_VERSION=$(node -p "require('./package.json').version")
42
- PKG_NAME=$(node -p "require('./package.json').name")
43
- PUBLISHED_VERSION=$(npm view $PKG_NAME@next version 2>/dev/null || npm view $PKG_NAME version 2>/dev/null || echo "0.0.0")
44
- echo "version=$PKG_VERSION" >> $GITHUB_OUTPUT
45
- if [ "$PKG_VERSION" = "$PUBLISHED_VERSION" ]; then
46
- echo "is_new_version=false" >> $GITHUB_OUTPUT
47
- else
48
- echo "is_new_version=true" >> $GITHUB_OUTPUT
49
- fi
50
-
51
- - id : release_type
52
- name : Identify release type 🔍
53
- if : ${{ steps.version_check.outputs.is_new_version == 'true' }}
54
- run : echo "is_latest=$LATEST" >> $GITHUB_OUTPUT
55
- env :
56
- # Check on current `version` from the step above to decide whether to publish to `latest`/`next` npm tag
57
- LATEST : ${{ contains(steps.version_check.outputs.version, '-next') != true && contains(steps.version_check.outputs.version, '-rc') != true }}
58
-
59
- - id : create_tag
60
- name : Create and push tag 🔖
61
- if : ${{ steps.version_check.outputs.is_new_version == 'true' }}
79
+ - name : Create and push tag 🔖
80
+ id : create_tag
62
81
run : |
63
- TAG_NAME="v${{ steps.version_check .outputs.version }}"
82
+ TAG_NAME="v${{ needs.verify_release .outputs.version }}"
64
83
echo "tag_name=$TAG_NAME" >> $GITHUB_OUTPUT
65
84
git tag $TAG_NAME
66
85
git push origin $TAG_NAME
67
86
env :
68
87
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
69
88
70
89
- name : Create release 🚢
71
- if : ${{ steps.version_check.outputs.is_new_version == 'true' }}
72
90
uses : softprops/action-gh-release@v2
73
91
env :
74
92
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
75
93
with :
76
94
tag_name : ${{ steps.create_tag.outputs.tag_name }}
77
95
body : Please refer to [CHANGELOG.md](https://github.com/thymikee/jest-preset-angular/blob/${{ steps.create_tag.outputs.tag_name }}/CHANGELOG.md) for details.
78
96
draft : false
79
- prerelease : ${{ steps.release_type .outputs.is_latest ! = 'true' }}
97
+ prerelease : ${{ needs.verify_release .outputs.is_prerelease = = 'true' }}
80
98
81
99
- name : Install 🔧
82
- if : ${{ steps.version_check.outputs.is_new_version == 'true' }}
83
100
run : yarn --immutable
84
101
85
102
- name : Build 🔨
86
- if : ${{ steps.version_check.outputs.is_new_version == 'true' }}
87
103
run : yarn build
88
104
89
105
- name : Publish with latest tag 🚀
90
- if : ${{ steps.version_check .outputs.is_new_version == 'true' && steps.release_type.outputs.is_latest == 'true' }}
106
+ if : needs.verify-release .outputs.is_prerelease != 'true'
91
107
run : npm publish --access public
92
108
env :
93
109
NODE_AUTH_TOKEN : ${{ secrets.NPM_TOKEN }}
94
110
95
111
- name : Publish with next tag 🚀
96
- if : ${{ steps.version_check .outputs.is_new_version == 'true' && steps.release_type.outputs.is_latest != 'true' }}
112
+ if : needs.verify_release .outputs.is_prerelease == 'true'
97
113
run : npm publish --access public --tag next
98
114
env :
99
115
NODE_AUTH_TOKEN : ${{ secrets.NPM_TOKEN }}
0 commit comments