Skip to content

Commit f58bfff

Browse files
authored
Merge d67e5ec into 1ef9d3c
2 parents 1ef9d3c + d67e5ec commit f58bfff

File tree

1 file changed

+69
-146
lines changed

1 file changed

+69
-146
lines changed

.github/workflows/release.yml

+69-146
Original file line numberDiff line numberDiff line change
@@ -18,32 +18,81 @@ on:
1818
- Cargo.toml
1919
- Cargo.lock
2020
- 'crates/**'
21-
- .github/workflows/rust_binaries_release.yml
21+
- .github/workflows/release.yml
2222

2323
jobs:
2424
prepare:
2525
runs-on: ubuntu-latest
2626
outputs:
27-
is_release_candidate: ${{ steps.check_release_candidate.outputs.is_release_candidate }}
2827
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 }}
2934
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
3937

4038
- name: Setup matrix
4139
id: setup_matrix
4240
run: |
4341
echo 'binary_matrix=["merod", "meroctl"]' >> "$GITHUB_OUTPUT"
4442
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+
4594
build:
46-
if: needs.prepare.outputs.is_release_candidate == 'true'
95+
if: needs.prepare.outputs.build_required == 'true'
4796
strategy:
4897
matrix:
4998
include:
@@ -169,12 +218,9 @@ jobs:
169218
retention-days: 2
170219

171220
release:
172-
if: needs.prepare.outputs.is_release_candidate == 'true'
221+
if: needs.prepare.outputs.release_required == 'true'
173222
runs-on: ubuntu-latest
174223
needs: [prepare, build]
175-
strategy:
176-
matrix:
177-
binary: ${{ fromJSON(needs.prepare.outputs.binary_matrix) }}
178224
steps:
179225
- name: Checkout code
180226
uses: actions/checkout@v4
@@ -185,73 +231,21 @@ jobs:
185231
path: artifacts/
186232
merge-multiple: true
187233

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-
241234
- name: Upload binaries to release
242-
if: steps.version_info.outputs.release_required == 'true'
243235
uses: svenstaro/upload-release-action@v2
244236
with:
245237
repo_token: ${{ secrets.GITHUB_TOKEN }}
246238
file: artifacts/*
247239
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 }}
252244

253245
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'
255249
runs-on: ubuntu-latest
256250
needs: [prepare, build, release]
257251
steps:
@@ -324,74 +318,3 @@ jobs:
324318
git push origin "${target_branch}"
325319
326320
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

Comments
 (0)