18
18
- Cargo.toml
19
19
- Cargo.lock
20
20
- ' crates/**'
21
- - .github/workflows/rust_binaries_release .yml
21
+ - .github/workflows/release .yml
22
22
23
23
jobs :
24
24
prepare :
25
25
runs-on : ubuntu-latest
26
26
outputs :
27
- is_release_candidate : ${{ steps.check_release_candidate.outputs.is_release_candidate }}
28
27
binary_matrix : ${{ steps.setup_matrix.outputs.binary_matrix }}
28
+ version : ${{ steps.version_info.outputs.version }}
29
+ release_required : ${{ steps.version_info.outputs.release_required }}
30
+ build_required : ${{ steps.version_info.outputs.build_required }}
31
+ target_commit : ${{ steps.version_info.outputs.target_commit }}
32
+ prerelease : ${{ steps.version_info.outputs.prerelease }}
33
+ overwrite_release : ${{ steps.version_info.outputs.overwrite_release }}
29
34
steps :
30
- - name : Check if release candidate
31
- id : check_release_candidate
32
- run : |
33
- # Additional checks for head_ref when PR because GH doesn't support that
34
- if [ "${{ github.event_name }}" == "pull_request" ] && ! [[ "${{ github.head_ref }}" == prerelease/* ]]; then
35
- echo 'is_release_candidate=false' >> "$GITHUB_OUTPUT"
36
- else
37
- echo 'is_release_candidate=true' >> "$GITHUB_OUTPUT"
38
- fi
35
+ - name : Checkout code
36
+ uses : actions/checkout@v4
39
37
40
38
- name : Setup matrix
41
39
id : setup_matrix
42
40
run : |
43
41
echo 'binary_matrix=["merod", "meroctl"]' >> "$GITHUB_OUTPUT"
44
42
43
+ - name : Get version info
44
+ id : version_info
45
+ shell : bash
46
+ run : |
47
+ version_candidate=""
48
+
49
+ for binary in $(echo '${{ steps.setup_matrix.outputs.binary_matrix }}' | jq -r '.[]'); do
50
+ binary_version=$(cargo metadata --format-version 1 --no-deps | jq -r '.packages[] | select(.name == "${{ matrix.binary }}") | .version')
51
+ if [ -z "$version_candidate" ]; then
52
+ version_candidate="$binary_version"
53
+ elif [ "$version" != "$binary_version" ]; then
54
+ echo "Version mismatch between binaries"
55
+ echo "Make sure all binaries have the same version"
56
+ echo "All binaries: '${{ steps.setup_matrix.outputs.binary_matrix }}'"
57
+ exit 1
58
+ fi
59
+ done
60
+
61
+ echo "target_commit=${{ github.sha }}" >> $GITHUB_OUTPUT
62
+
63
+ if [ "${{ github.ref }}" == "refs/heads/master" ]; then
64
+ version="$version_candidate"
65
+ echo "Master version: $version"
66
+
67
+ if gh release view "$version" --repo ${{ github.repository }} >/dev/null 2>&1; then
68
+ echo "Master release for this version already exists"
69
+ echo "release_required=false" >> $GITHUB_OUTPUT
70
+ else
71
+ echo "New master release required"
72
+ echo "release_required=true" >> $GITHUB_OUTPUT
73
+ fi
74
+
75
+ echo "build_required=true" >> $GITHUB_OUTPUT
76
+ echo "prerelease=false" >> $GITHUB_OUTPUT
77
+ echo "overwrite_release=false">> $GITHUB_OUTPUT
78
+ echo "version=$version" >> $GITHUB_OUTPUT
79
+ elif [ "${{ github.event_name }}" == "pull_request" ] && [[ "${{ github.head_ref }}" == release/* ]]; then
80
+ version="prerelease-${{ github.event.number }}"
81
+ echo "Prerelease version: $version"
82
+
83
+ echo "build_required=true" >> $GITHUB_OUTPUT
84
+ echo "release_required=true" >> $GITHUB_OUTPUT
85
+ echo "prerelease=true" >> $GITHUB_OUTPUT
86
+ echo "overwrite_release=true">> $GITHUB_OUTPUT
87
+ echo "version=$version" >> $GITHUB_OUTPUT
88
+ else
89
+ echo "This is not a master branch or a release PR"
90
+ echo "build_required=false" >> $GITHUB_OUTPUT
91
+ echo "release_required=false" >> $GITHUB_OUTPUT
92
+ fi
93
+
45
94
build :
46
- if : needs.prepare.outputs.is_release_candidate == 'true'
95
+ if : needs.prepare.outputs.build_required == 'true'
47
96
strategy :
48
97
matrix :
49
98
include :
@@ -169,12 +218,9 @@ jobs:
169
218
retention-days : 2
170
219
171
220
release :
172
- if : needs.prepare.outputs.is_release_candidate == 'true'
221
+ if : needs.prepare.outputs.release_required == 'true'
173
222
runs-on : ubuntu-latest
174
223
needs : [prepare, build]
175
- strategy :
176
- matrix :
177
- binary : ${{ fromJSON(needs.prepare.outputs.binary_matrix) }}
178
224
steps :
179
225
- name : Checkout code
180
226
uses : actions/checkout@v4
@@ -185,73 +231,21 @@ jobs:
185
231
path : artifacts/
186
232
merge-multiple : true
187
233
188
- - name : Get version info
189
- id : version_info
190
- shell : bash
191
- env :
192
- GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
193
- run : |
194
- echo "target_commit=${{ github.sha }}" >> $GITHUB_OUTPUT
195
-
196
- if [ "${{ github.ref }}" == "refs/heads/master" ]; then
197
- binary_version=$(cargo metadata --format-version 1 --no-deps | jq -r '.packages[] | select(.name == "${{ matrix.binary }}") | .version')
198
- version="${{ matrix.binary }}-$binary_version"
199
- echo "Master version: $version"
200
-
201
- if gh release view "$version" --repo ${{ github.repository }} >/dev/null 2>&1; then
202
- echo "Master release for this version already exists"
203
- echo "release_required=false" >> $GITHUB_OUTPUT
204
- else
205
- echo "New master release required"
206
- echo "release_required=true" >> $GITHUB_OUTPUT
207
- fi
208
- echo "prerelease=false" >> $GITHUB_OUTPUT
209
- echo "overwrite=false">> $GITHUB_OUTPUT
210
- echo "binary_version=$binary_version" >> $GITHUB_OUTPUT
211
- echo "version=$version" >> $GITHUB_OUTPUT
212
- elif [ "${{ github.event_name }}" == "pull_request" ] && [[ "${{ github.head_ref }}" == prerelease/* ]]; then
213
- version="prerelease-${{ github.event.number }}"
214
- echo "Prerelease version: $version"
215
-
216
- echo "release_required=true" >> $GITHUB_OUTPUT
217
- echo "prerelease=true" >> $GITHUB_OUTPUT
218
- echo "overwrite=true">> $GITHUB_OUTPUT
219
- echo "version=$version" >> $GITHUB_OUTPUT
220
- else
221
- echo "This is not a master branch or a prerelease PR"
222
- echo "release_required=false" >> $GITHUB_OUTPUT
223
- fi
224
-
225
- - name : Set release matrix outputs
226
- uses : cloudposse/github-action-matrix-outputs-write@v1
227
- with :
228
- matrix-step-name : release
229
- matrix-key : ${{ matrix.binary }}
230
- outputs : |-
231
- releaseRequired: ${{ steps.version_info.outputs.release_required }}
232
- version: ${{ steps.version_info.outputs.binary_version }}
233
-
234
- - name : Remove other binaries from artifacts
235
- if : steps.version_info.outputs.release_required == 'true'
236
- run : |
237
- ls -al artifacts/
238
- find artifacts/ -type f ! -name '${{ matrix.binary }}*' -exec rm {} +
239
- ls -al artifacts/
240
-
241
234
- name : Upload binaries to release
242
- if : steps.version_info.outputs.release_required == 'true'
243
235
uses : svenstaro/upload-release-action@v2
244
236
with :
245
237
repo_token : ${{ secrets.GITHUB_TOKEN }}
246
238
file : artifacts/*
247
239
file_glob : true
248
- tag : ${{ steps.version_info .outputs.version }}
249
- prerelease : ${{ steps.version_info .outputs.prerelease }}
250
- overwrite : ${{ steps.version_info .outputs.overwrite }}
251
- target_commit : ${{ steps.version_info .outputs.target_commit }}
240
+ tag : ${{ needs.prepare .outputs.version }}
241
+ prerelease : ${{ needs.prepare .outputs.prerelease }}
242
+ overwrite : ${{ needs.prepare .outputs.overwrite_release }}
243
+ target_commit : ${{ needs.prepare .outputs.target_commit }}
252
244
253
245
brew-update :
254
- if : needs.prepare.outputs.is_release_candidate == 'true' && github.ref == 'refs/heads/master'
246
+ if : |
247
+ needs.prepare.outputs.release_required == 'true' &&
248
+ github.ref == 'refs/heads/master'
255
249
runs-on : ubuntu-latest
256
250
needs : [prepare, build, release]
257
251
steps :
@@ -324,74 +318,3 @@ jobs:
324
318
git push origin "${target_branch}"
325
319
326
320
gh pr create -f || true
327
-
328
- installation-script-update :
329
- if : needs.prepare.outputs.is_release_candidate == 'true' && github.ref == 'refs/heads/master'
330
- runs-on : ubuntu-latest
331
- needs : [prepare, build, release]
332
- steps :
333
- - name : Get release matrix outputs
334
- id : release-matrix-outputs
335
- uses : cloudposse/github-action-matrix-outputs-read@v1
336
- with :
337
- matrix-step-name : release
338
-
339
- - name : Create GitHub App Token
340
- uses : actions/create-github-app-token@v1
341
- id : app-token
342
- with :
343
- app-id : ${{ vars.GH_APP_ID }}
344
- private-key : ${{ secrets.GH_APP_PRIVATE_KEY }}
345
- owner : ${{ github.repository_owner }}
346
-
347
- - name : Checkout core
348
- uses : actions/checkout@v4
349
- with :
350
- token : ${{ steps.app-token.outputs.token }}
351
- persist-credentials : false
352
-
353
- - name : Get GitHub App User ID
354
- id : get-user-id
355
- run : echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT"
356
- env :
357
- GH_TOKEN : ${{ steps.app-token.outputs.token }}
358
-
359
- - name : Configure Git
360
- env :
361
- GH_TOKEN : ${{ steps.app-token.outputs.token }}
362
- run : |
363
- gh auth setup-git
364
- git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]'
365
- git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com'
366
-
367
- - name : Process each binary and create PRs
368
- env :
369
- GH_TOKEN : ${{ steps.app-token.outputs.token }}
370
- run : |
371
- for binary in $(echo '${{ needs.prepare.outputs.binary_matrix }}' | jq -r '.[]'); do
372
- release_required=$(echo '${{ steps.release-matrix-outputs.outputs.result }}' | jq -r --arg key "${binary}" '.releaseRequired[$key]')
373
- version=$(echo '${{ steps.release-matrix-outputs.outputs.result }}' | jq -r --arg key "${binary}" '.version[$key]')
374
-
375
- if [ "${release_required}" == "true" ]; then
376
- echo "Updating installation script for ${binary}, version: ${version}"
377
-
378
- target_branch="chore/bump-${binary}-installation-script-to-v${version}"
379
- git fetch origin "${target_branch}" || true
380
- git checkout "${target_branch}" || git checkout -b "${target_branch}"
381
- ./scripts/generate-installation-script.sh "${binary}" "${version}"
382
-
383
- git add scripts/
384
- git commit -m "chore: bump ${binary} installation script to v${version}" || true
385
- git push origin "${target_branch}"
386
-
387
- gh pr create \
388
- --title "chore: bump ${binary} installation script to v${version}" \
389
- --body "This PR updates the installation script for **${binary}** to version **${version}**." \
390
- --head "${target_branch}" \
391
- --base master \
392
- -f || true
393
-
394
- else
395
- echo "No update required for ${binary}"
396
- fi
397
- done
0 commit comments