Skip to content

Commit 35ccba8

Browse files
authored
Publish platform-scoped release alias assets
1 parent 542fdef commit 35ccba8

1 file changed

Lines changed: 66 additions & 2 deletions

File tree

.github/workflows/release-download-alias.yml

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,88 @@ jobs:
2323
steps:
2424
- name: Download release assets from source release
2525
run: |
26+
set -euo pipefail
2627
mkdir -p release-assets
2728
gh release download "$SOURCE_TAG" --repo "$REPOSITORY" --pattern "*" --dir release-assets --clobber
2829
2930
- name: Recreate rolling release alias
3031
run: |
32+
set -euo pipefail
3133
shopt -s nullglob
3234
assets=(release-assets/*)
3335
if [ ${#assets[@]} -eq 0 ]; then
3436
echo "No assets were found on release $SOURCE_TAG."
3537
exit 1
3638
fi
3739
40+
find_asset() {
41+
local platform="$1"
42+
local f name
43+
for f in release-assets/*; do
44+
name=$(basename "$f")
45+
name=${name,,}
46+
case "$platform" in
47+
windows-x64)
48+
[[ "$name" == *win* && "$name" != *arm* && ( "$name" == *x64* || "$name" == *amd64* || "$name" == *x86_64* ) ]] && { echo "$f"; return 0; }
49+
;;
50+
windows-arm)
51+
[[ "$name" == *win* && ( "$name" == *arm* || "$name" == *aarch64* ) ]] && { echo "$f"; return 0; }
52+
;;
53+
macos)
54+
[[ ( "$name" == *macos* || "$name" == *darwin* || "$name" == *osx* ) && ( "$name" == *arm* || "$name" == *aarch64* || "$name" == *apple* ) ]] && { echo "$f"; return 0; }
55+
;;
56+
linux-x64)
57+
[[ "$name" == *linux* && "$name" != *arm* && ( "$name" == *x64* || "$name" == *amd64* || "$name" == *x86_64* ) ]] && { echo "$f"; return 0; }
58+
;;
59+
linux-arm)
60+
[[ "$name" == *linux* && ( "$name" == *arm* || "$name" == *aarch64* ) ]] && { echo "$f"; return 0; }
61+
;;
62+
esac
63+
done
64+
return 1
65+
}
66+
67+
win_x64_asset="$(find_asset windows-x64 || true)"
68+
win_arm_asset="$(find_asset windows-arm || true)"
69+
macos_asset="$(find_asset macos || true)"
70+
linux_x64_asset="$(find_asset linux-x64 || true)"
71+
linux_arm_asset="$(find_asset linux-arm || true)"
72+
73+
if [ -z "$win_x64_asset" ] || [ -z "$win_arm_asset" ] || [ -z "$macos_asset" ] || [ -z "$linux_x64_asset" ] || [ -z "$linux_arm_asset" ]; then
74+
echo "Unable to map all required platform assets from release $SOURCE_TAG."
75+
echo "Found files:"
76+
printf ' - %s\n' "${assets[@]}"
77+
exit 1
78+
fi
79+
3880
if gh release view release --repo "$REPOSITORY" >/dev/null 2>&1; then
3981
gh release delete release --repo "$REPOSITORY" --yes --cleanup-tag
4082
fi
4183
42-
gh release create release "${assets[@]}" \
84+
gh release create release \
4385
--repo "$REPOSITORY" \
4486
--target "$SOURCE_TAG" \
4587
--title "Latest release" \
46-
--notes "Rolling release that keeps https://github.com/$REPOSITORY/releases/download/release/pict.exe pointed at the newest published binary."
88+
--notes "Rolling release that keeps platform-scoped download aliases in sync with the newest published binaries."
89+
90+
upload_url="$(gh api "repos/$REPOSITORY/releases/tags/release" --jq .upload_url)"
91+
upload_url="${upload_url%\{*}"
92+
93+
upload_asset() {
94+
local src="$1"
95+
local alias_name="$2"
96+
local encoded_name
97+
encoded_name="$(jq -rn --arg v "$alias_name" '$v|@uri')"
98+
curl --fail-with-body --silent --show-error \
99+
-X POST \
100+
-H "Authorization: Bearer $GH_TOKEN" \
101+
-H "Content-Type: application/octet-stream" \
102+
--data-binary @"$src" \
103+
"$upload_url?name=$encoded_name" >/dev/null
104+
}
105+
106+
upload_asset "$win_x64_asset" "windows-x64/pict.exe"
107+
upload_asset "$win_arm_asset" "windows-arm/pict.exe"
108+
upload_asset "$macos_asset" "macos/pict.exe"
109+
upload_asset "$linux_x64_asset" "linux-x64/pict.exe"
110+
upload_asset "$linux_arm_asset" "linux-arm/pict.exe"

0 commit comments

Comments
 (0)