-
Notifications
You must be signed in to change notification settings - Fork 1
129 lines (110 loc) · 5.09 KB
/
Copy pathrelease-please.yml
File metadata and controls
129 lines (110 loc) · 5.09 KB
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 Please
on:
push:
branches:
- main
workflow_dispatch:
permissions:
contents: write
pull-requests: write
actions: write
concurrency:
group: release-please-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
release-please:
name: Create Release PR / Tag
runs-on: ubuntu-latest
outputs:
release_created: ${{ steps.release.outputs.release_created }}
tag_name: ${{ steps.release.outputs.tag_name }}
steps:
- name: Run Release Please
id: release
uses: googleapis/release-please-action@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
config-file: release-please-config.json
manifest-file: .release-please-manifest.json
- name: Checkout
if: ${{ steps.release.outputs.release_created != 'true' }}
uses: actions/checkout@v4
- name: Sync PAD version, release date and changelog
if: ${{ steps.release.outputs.release_created != 'true' }}
shell: bash
run: |
if ! git ls-remote --exit-code --heads origin release-please--branches--main >/dev/null 2>&1; then
echo "No open release-please PR branch, nothing to sync"
exit 0
fi
git fetch origin release-please--branches--main:release-please--branches--main
git checkout release-please--branches--main
version=$(grep -m1 '^version = "' src-egui/Cargo.toml | sed -E 's/^version = "([^"]+)".*/\1/')
if [ -z "$version" ]; then
echo "Could not find version in src-egui/Cargo.toml"
exit 1
fi
sed -i "s#<Program_Version>.*</Program_Version>#<Program_Version>${version}</Program_Version>#" website/pad.xml
sed -i "s#<Primary_Download_URL>.*</Primary_Download_URL>#<Primary_Download_URL>https://github.com/dvalfrid/rigstats/releases/download/v${version}/RIGStats_${version}_x64-setup.exe</Primary_Download_URL>#" website/pad.xml
expected_url="https://github.com/dvalfrid/rigstats/releases/download/v${version}/RIGStats_${version}_x64-setup.exe"
if ! grep -qF "<Program_Version>${version}</Program_Version>" website/pad.xml || \
! grep -qF "<Primary_Download_URL>${expected_url}</Primary_Download_URL>" website/pad.xml; then
echo "::error::website/pad.xml did not sync to the expected version/URL"
exit 1
fi
section=$(awk '/^## \[/{if (++n==2) exit} n==1' CHANGELOG.md)
date=$(echo "$section" | grep -m1 -oP '^## \[[^]]+\].*\(\K[0-9]{4}-[0-9]{2}-[0-9]{2}' || true)
if [ -z "$date" ]; then
echo "Could not find a release date in CHANGELOG.md"
exit 0
fi
year=${date%%-*}
rest=${date#*-}
month=${rest%%-*}
day=${rest#*-}
# Turn "* **scope:** subject ([hash](url)), closes [#N](url)" bullets into
# "scope: subject; scope: subject" -- plain text, no markdown/links.
changeInfo=$(echo "$section" \
| grep '^\* ' \
| sed -E 's/^\* //; s/\*\*//g; s/ \(\[[0-9a-f]+\]\([^)]+\)\)(, closes \[#[0-9]+\]\([^)]+\))?//' \
| sed 's/&/\&/g; s/</\</g; s/>/\>/g' \
| paste -sd';' - \
| sed 's/;/; /g')
if [ -z "$changeInfo" ]; then
echo "Could not find any changelog bullets, leaving Program_Change_Info as-is"
fi
sed -i "s#<Program_Release_Month>.*</Program_Release_Month>#<Program_Release_Month>${month}</Program_Release_Month>#" website/pad.xml
sed -i "s#<Program_Release_Day>.*</Program_Release_Day>#<Program_Release_Day>${day}</Program_Release_Day>#" website/pad.xml
sed -i "s#<Program_Release_Year>.*</Program_Release_Year>#<Program_Release_Year>${year}</Program_Release_Year>#" website/pad.xml
if [ -n "$changeInfo" ]; then
sed -i "s|<Program_Change_Info>.*</Program_Change_Info>|<Program_Change_Info>${changeInfo}</Program_Change_Info>|" website/pad.xml
fi
if git diff --quiet -- website/pad.xml; then
echo "PAD file already up to date"
exit 0
fi
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add website/pad.xml
git commit -m "chore(distribution): sync PAD release date and changelog"
git push origin HEAD:release-please--branches--main
trigger-build:
name: Trigger Release Build
needs: release-please
if: ${{ needs.release-please.outputs.release_created == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Dispatch release workflow
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
await github.rest.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'release.yml',
ref: 'main',
inputs: {
tag: '${{ needs.release-please.outputs.tag_name }}'
}
})