-
Notifications
You must be signed in to change notification settings - Fork 14
223 lines (195 loc) · 7.11 KB
/
release.yaml
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
name: 🏭 Create Release
on:
workflow_dispatch:
inputs:
bump:
description: "Semver Bump Type"
required: true
default: "patch"
type: choice
options:
- "patch"
- "minor"
- "major"
permissions:
contents: write
jobs:
create-tag:
if: github.repository == 'open-goal/launcher'
name: "Create New Tag"
runs-on: ubuntu-latest
outputs:
new_tag: ${{ steps.version_bump.outputs.new_tag }}
steps:
- uses: actions/checkout@v4
# TODO - still have to use PAT to bypass branch protections
# https://github.com/orgs/community/discussions/13836
with:
token: ${{ secrets.BOT_PAT }}
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: yarn
- name: Install Rust Stable
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Install Appstreamcli
run: sudo apt-get update && sudo apt-get install -y appstream
- name: Bump Version
id: version_bump
run: |
yarn version --${{ github.event.inputs.bump }} --no-git-tag-version
NEW_VERSION=$(awk '/version/{gsub(/("|",)/,"",$2);print $2}' package.json)
sed -i "/APP_VERSION/c\version = \""$NEW_VERSION"\" # APP_VERSION" ./src-tauri/Cargo.toml
sed -i "/\"version\":/c\ \"version\": \""$NEW_VERSION"\"" ./src-tauri/tauri.conf.json
cd ./src-tauri
cargo generate-lockfile
cd ..
echo "new_tag=v${NEW_VERSION}" >> $GITHUB_OUTPUT
echo -e "---\nVersion: $NEW_VERSION\nDate: $(date +'%Y-%m-%d')\n---" > metadata/news.yaml
appstreamcli news-to-metainfo metadata/news.yaml metadata/dev.opengoal.OpenGOAL.appdata.xml
rm metadata/news.yaml
- name: Commit Version Bump
uses: EndBug/add-and-commit@v9
with:
default_author: github_actor
author_name: "OpenGOALBot"
author_email: "[email protected]"
message: "release: bump to version - ${{ steps.version_bump.outputs.new_tag }}"
tag: "${{ steps.version_bump.outputs.new_tag }}"
create-release:
needs: [create-tag]
if: github.repository == 'open-goal/launcher'
name: "Create Release"
runs-on: ubuntu-latest
outputs:
release_id: ${{ steps.get_release_id.outputs.release_id }}
steps:
- uses: actions/checkout@v4
with:
ref: "main"
# Create the release, use `gh` CLI so we can auto generate the notes
- name: Create Release
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release create ${{needs.create-tag.outputs.new_tag}} --generate-notes --draft --repo open-goal/launcher
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: yarn
- name: Install NPM Dependencies
run: |
yarn install --frozen-lockfile
# Get the internal ID of the release so that Tauri's action can use it to upload assets
- name: Get Release ID
id: get_release_id
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
RELEASE_ID=$(TAG_NAME="${{needs.create-tag.outputs.new_tag}}" yarn --silent release-id)
echo "release_id=${RELEASE_ID}" >> $GITHUB_OUTPUT
build-app:
if: github.repository == 'open-goal/launcher'
needs: [create-release]
strategy:
fail-fast: false
matrix:
platform: [ubuntu-20.04, windows-latest, macos-12]
runs-on: ${{ matrix.platform }}
steps:
# NOTE - there is technically a race condition here if multiple releases go out
# but the build needs to have the up to date version files
# In the past this was handled by a two-stage release, but now it's all in one workflow
- uses: actions/checkout@v4
with:
ref: "main"
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: yarn
- name: Install Rust Stable
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- uses: Swatinem/rust-cache@v2
name: Cache Rust Build
with:
shared-key: tauri-build-${{ matrix.platform }}
workspaces: src-tauri
- name: Install Linux Dependencies
if: matrix.platform == 'ubuntu-20.04'
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf
- name: Install NPM Dependencies
run: |
yarn install --frozen-lockfile
yarn build
- uses: tauri-apps/tauri-action@v0
name: Build Tauri App
timeout-minutes: 30
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
with:
args: "--verbose --config ./.tauri/release-config.json"
releaseId: ${{needs.create-release.outputs.release_id}}
verify-release:
if: github.repository == 'open-goal/launcher'
needs: [create-release, build-app]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: "main"
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: yarn
- name: Install NPM Dependencies
run: |
yarn install --frozen-lockfile
# Get the internal ID of the release so that Tauri's action can use it to upload assets
- name: Verify Release Assets
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_ID: ${{needs.create-release.outputs.release_id}}
EXPECTED_ASSET_NAME_REGEXES: '[".*AppImage", ".*AppImage.tar.gz", ".*AppImage.tar.gz.sig", ".*msi", ".*msi.zip", ".*msi.zip.sig", ".*dmg", ".*app", ".*app.tar.gz", ".*app.tar.gz.sig", "latest.json"]'
run: yarn verify-release-assets
publish-release:
if: github.repository == 'open-goal/launcher'
needs: [create-release, build-app, verify-release]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: "main"
# TODO - still have to use PAT to bypass branch protections
# https://github.com/orgs/community/discussions/13836
token: ${{ secrets.BOT_PAT }}
- name: setup node
uses: actions/setup-node@v4
with:
node-version: 20
cache: yarn
- name: update release metadata and publish the release
env:
RELEASE_ID: ${{needs.create-release.outputs.release_id}}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
yarn install --frozen-lockfile
yarn update-release-meta
- name: commit release metadata change
uses: EndBug/add-and-commit@v9
with:
default_author: github_actor
author_name: "OpenGOALBot"
author_email: "[email protected]"
message: "release: update release metadata to latest"