-
Notifications
You must be signed in to change notification settings - Fork 1
129 lines (112 loc) · 4.38 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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
name: Release
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
permissions:
contents: write
issues: write
pull-requests: write
on:
push:
branches:
- release
jobs:
release:
runs-on: ubuntu-latest
timeout-minutes: 30
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
ref: ${{ inputs.git-ref }}
- name: Setup GIT
run: |
git config user.email "[email protected]"
git config user.name "$GITHUB_ACTOR"
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18
cache: "npm"
cache-dependency-path: "package-lock.json"
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
env:
CI: true
run: |
npm ci
- name: Get workspaces
id: get-workspaces
run: |
echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT
echo "commit=${{ github.sha }}" >> $GITHUB_OUTPUT
ws=$(npm ls --omit=dev --depth 1 -json | jq -r '.dependencies[].resolved[11:]')
echo 'ws<<EOF' >> $GITHUB_OUTPUT
echo $ws >> $GITHUB_OUTPUT
echo 'EOF' >> $GITHUB_OUTPUT
- name: Build workspaces
env:
CI: true
run: |
npm run build -ws
- name: Release workspaces
if: steps.get-workspaces.outputs.ws != ''
env:
CI: true
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
topdir=$(pwd)
for workspace in ${{ steps.get-workspaces.outputs.ws }}; do
echo "Potentially going to version and release $workspace"
cd $workspace
mkdir .git
PCKG_NAME=`node -pe "require('./package.json').name"`
CUR_VERSION_NO=`node -pe "require('./package.json').version"`
FROM_PARAM=""
if [ "$CUR_VERSION_NO" != "0.0.0" ]; then
TAG_NAME="${PCKG_NAME}_v${CUR_VERSION_NO}"
REMOTE_TAGS=`git ls-remote --tags "https://$GITHUB_ACTOR:[email protected]/$GITHUB_REPOSITORY"`
if echo "$REMOTE_TAGS" | grep -q "refs/tags/${TAG_NAME}"; then
echo "Identified previous release as ${TAG_NAME}."
FROM_PARAM="--from $TAG_NAME"
else
echo "::warning title=No previous tag found under ${TAG_NAME}:: This release will be based on the current branch."
fi
fi
DEBUG_FLAG=
if [ "${{ runner.debug}}" == "1" ]; then
DEBUG_FLAG="-vv"
fi
VERSION=`npx auto version $FROM_PARAM`
if [ ! -z "$VERSION" ]; then
echo "::notice title=✅ Detected $VERSION version change for $PCKG_NAME::Bumping version"
npx auto changelog --base-branch ${{ steps.get-workspaces.outputs.branch }} $FROM_PARAM
npm version $VERSION -m "chore: bump release version to %s [skip ci]" || true
NEW_VERSION_NO=`node -pe "require('./package.json').version"`
git tag -d v$NEW_VERSION_NO || true
NEW_TAG=${PCKG_NAME}_v$NEW_VERSION_NO
echo "Going to create a new release for $NEW_TAG"
git add -A
git commit -m "chore: release v$NEW_VERSION_NO [skip ci]" || true
git tag -a $NEW_TAG -m "chore: tag v$NEW_VERSION_NO [skip ci]"
git push "https://$GITHUB_ACTOR:[email protected]/$GITHUB_REPOSITORY" HEAD:${{ steps.get-workspaces.outputs.branch }} --follow-tags
npx auto release --use-version $NEW_TAG $FROM_PARAM --base-branch ${{ steps.get-workspaces.outputs.branch }}
IS_PRIVATE=`node -pe "require('./package.json').private"`
if [ "$IS_PRIVATE" != "true" ]; then
npm publish ./dist
echo "::notice title=🚀 ${PCKG_NAME} v$NEW_VERSION_NO::Package versioned and published"
fi
rm -rf .git
else
echo "::notice title=Versioning of $PCKG_NAME skipped::No relevant changes detected."
fi
cd $topdir
done
- if: ${{ always() }}
name: Clean working directory
run: |
rm -r *