-
-
Notifications
You must be signed in to change notification settings - Fork 67
120 lines (101 loc) · 3.82 KB
/
publish-style-spec.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
name: publish-style-spec
on:
push:
branches: [main]
workflow_dispatch:
jobs:
release-check:
name: Check if version changed
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: main
- name: Use Node.js from nvmrc
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
- name: Check if version changed
id: check
run: |
latestNpmPackageVersion=$( npm view @maplibre/maplibre-gl-style-spec versions --json | jq '.[-1]' -r )
currentVersion=$( node -e "console.log(require('./package.json').version)" )
if [ "$latestNpmPackageVersion" == "$currentVersion" ]; then
echo "changed=false" >> $GITHUB_OUTPUT
else
echo "changed=true" >> $GITHUB_OUTPUT
fi
outputs:
publish: ${{ steps.check.outputs.changed }}
publish:
name: Build, publish
needs: release-check
if: ${{ needs.release-check.outputs.publish == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Use Node.js from nvmrc
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
registry-url: 'https://registry.npmjs.org'
- name: Get version
id: package-version
uses: martinbeentjes/npm-get-version-action@v1.3.1
- name: Check tag does not exist yet
run: if git rev-list v${{ steps.package-version.outputs.current-version }}; then echo "Tag already exists. Aborting the release process."; exit 1; fi
- name: Tag commit and push
uses: mathieudutour/github-tag-action@v6.2
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
custom_tag: ${{ steps.package-version.outputs.current-version }}
- name: Install NPM packages
run: npm ci
- name: Prepare release
id: prepare_release
run: |
echo "version_tag=v${{ steps.package-version.outputs.current-version }}" >> $GITHUB_OUTPUT
RELEASE_TYPE=$(node -e "console.log(require('semver').prerelease('${{ steps.package-version.outputs.current-version }}') ? 'prerelease' : 'regular')")
echo "release_type=$RELEASE_TYPE" >> $GITHUB_OUTPUT
- name: Build style spec
run: |
npm run generate-style-spec
npm run generate-typings
npm run build
- name: Build Release Notes
id: release_notes
if: ${{ steps.prepare_release.outputs.release_type == 'regular' }}
run: |
RELEASE_NOTES_PATH="${PWD}/release_notes.txt"
./build/release-notes.js > ${RELEASE_NOTES_PATH}
echo "release_notes=${RELEASE_NOTES_PATH}" >> $GITHUB_OUTPUT
- name: Create GitHub Release (regular)
id: create_regular_release
if: ${{ steps.prepare_release.outputs.release_type == 'regular' }}
uses: ncipollo/release-action@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag: ${{ steps.prepare_release.outputs.version_tag }}
name: ${{steps.prepare_release.outputs.version_tag }}
bodyFile: ${{ steps.release_notes.outputs.release_notes }}
draft: false
prerelease: false
- name: Publish NPM package (regular)
if: ${{ steps.prepare_release.outputs.release_type == 'regular' }}
run: |
npm publish --access=public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_ORG_TOKEN }}
- name: Publish NPM package (pre-release)
if: ${{ steps.prepare_release.outputs.release_type == 'prerelease' }}
run: |
npm publish --access=public --tag next
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_ORG_TOKEN }}