Publish release assets with canonical names; omit zero patch from label.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-14 00:52:36 +03:00
Unverified
parent f8db6756c7
commit a3d0c65c78
+58 -28
View File
@@ -37,6 +37,7 @@ jobs:
version: ${{ steps.ver.outputs.version }} version: ${{ steps.ver.outputs.version }}
tag: ${{ steps.ver.outputs.tag }} tag: ${{ steps.ver.outputs.tag }}
prerelease: ${{ steps.ver.outputs.prerelease }} prerelease: ${{ steps.ver.outputs.prerelease }}
release_label: ${{ steps.ver.outputs.release_label }}
steps: steps:
- id: ver - id: ver
shell: bash shell: bash
@@ -50,8 +51,21 @@ jobs:
echo "Invalid version: $V" >&2 echo "Invalid version: $V" >&2
exit 1 exit 1
fi fi
if [[ ! "$V" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+) ]]; then
echo "Cannot derive release label from version: $V" >&2
exit 1
fi
MAJOR="${BASH_REMATCH[1]}"
MINOR="${BASH_REMATCH[2]}"
PATCH="${BASH_REMATCH[3]}"
if [[ "$PATCH" == "0" ]]; then
RELEASE_LABEL="${MAJOR}.${MINOR}"
else
RELEASE_LABEL="${MAJOR}.${MINOR}.${PATCH}"
fi
echo "version=$V" >> "$GITHUB_OUTPUT" echo "version=$V" >> "$GITHUB_OUTPUT"
echo "tag=v$V" >> "$GITHUB_OUTPUT" echo "tag=v$V" >> "$GITHUB_OUTPUT"
echo "release_label=$RELEASE_LABEL" >> "$GITHUB_OUTPUT"
case "$V" in case "$V" in
*-beta*) echo "prerelease=true" >> "$GITHUB_OUTPUT" ;; *-beta*) echo "prerelease=true" >> "$GITHUB_OUTPUT" ;;
*) echo "prerelease=false" >> "$GITHUB_OUTPUT" ;; *) echo "prerelease=false" >> "$GITHUB_OUTPUT" ;;
@@ -340,7 +354,7 @@ jobs:
run: | run: |
mkdir -p release-staging mkdir -p release-staging
APK="$(find app/android/build/outputs/apk/release -name '*release*.apk' | head -n 1)" APK="$(find app/android/build/outputs/apk/release -name '*release*.apk' | head -n 1)"
cp "$APK" "release-staging/FromChat-${{ needs.resolve-version.outputs.version }}-android-universal.apk" cp "$APK" "release-staging/FromChat-${{ needs.resolve-version.outputs.release_label }}.apk"
- uses: actions/upload-artifact@v5 - uses: actions/upload-artifact@v5
with: with:
name: android name: android
@@ -374,36 +388,41 @@ jobs:
merge-multiple: true merge-multiple: true
path: artifacts path: artifacts
- name: Collect release assets - name: Collect release assets
env:
LABEL: ${{ needs.resolve-version.outputs.release_label }}
run: | run: |
set -euo pipefail
mkdir -p release-assets mkdir -p release-assets
find artifacts -type f \( \
-name '*.dmg' -o \ pick_one() {
-name '*.deb' -o \ local pattern="$1"
-name '*.rpm' -o \ local dest="$2"
-name '*.AppImage' -o \ local match
-name '*.exe' -o \ match=$(find artifacts -type f -name "$pattern" | head -n 1)
-name '*.apk' \ if [[ -z "$match" ]]; then
\) -exec cp -t release-assets {} + echo "Missing artifact matching $pattern" >&2
ls -la release-assets
VERSION="${{ needs.resolve-version.outputs.version }}"
for pattern in \
"*-windows-x64.exe" \
"*-windows-arm64.exe" \
"*-macOS-x64.dmg" \
"*-macOS-arm64.dmg" \
"*-linux-x64.deb" \
"*-linux-arm64.deb" \
"*-linux-x64.rpm" \
"*-linux-arm64.rpm" \
"*-linux-x64.AppImage" \
"*-linux-arm64.AppImage" \
"*-android-universal.apk"
do
if ! compgen -G "release-assets/$pattern" > /dev/null; then
echo "Missing release asset: $pattern" >&2
exit 1 exit 1
fi fi
done cp "$match" "release-assets/$dest"
}
pick_one "*-windows-x64.exe" "FromChat-${LABEL}-x64.exe"
pick_one "*-windows-arm64.exe" "FromChat-${LABEL}-arm.exe"
pick_one "*-macOS-arm64.dmg" "FromChat-${LABEL}-apple.dmg"
pick_one "*-macOS-x64.dmg" "FromChat-${LABEL}-intel.dmg"
pick_one "*-linux-x64.deb" "FromChat-${LABEL}-x64.deb"
pick_one "*-linux-arm64.deb" "FromChat-${LABEL}-arm.deb"
pick_one "*-linux-x64.rpm" "FromChat-${LABEL}-x64.rpm"
pick_one "*-linux-arm64.rpm" "FromChat-${LABEL}-arm.rpm"
pick_one "*-linux-x64.AppImage" "FromChat-${LABEL}-x64.AppImage"
pick_one "*-linux-arm64.AppImage" "FromChat-${LABEL}-arm.AppImage"
pick_one "*.apk" "FromChat-${LABEL}.apk"
if find release-assets -type f -name '*.zip' | grep -q .; then
echo "Release assets must not be zip archives" >&2
exit 1
fi
ls -la release-assets
- name: Prepare release notes - name: Prepare release notes
run: | run: |
VERSION="${{ needs.resolve-version.outputs.version }}" VERSION="${{ needs.resolve-version.outputs.version }}"
@@ -421,6 +440,17 @@ jobs:
draft: false draft: false
prerelease: ${{ needs.resolve-version.outputs.prerelease == 'true' }} prerelease: ${{ needs.resolve-version.outputs.prerelease == 'true' }}
generate_release_notes: false generate_release_notes: false
files: release-assets/* files: |
release-assets/FromChat-${{ needs.resolve-version.outputs.release_label }}.apk
release-assets/FromChat-${{ needs.resolve-version.outputs.release_label }}-x64.exe
release-assets/FromChat-${{ needs.resolve-version.outputs.release_label }}-arm.exe
release-assets/FromChat-${{ needs.resolve-version.outputs.release_label }}-apple.dmg
release-assets/FromChat-${{ needs.resolve-version.outputs.release_label }}-intel.dmg
release-assets/FromChat-${{ needs.resolve-version.outputs.release_label }}-x64.deb
release-assets/FromChat-${{ needs.resolve-version.outputs.release_label }}-arm.deb
release-assets/FromChat-${{ needs.resolve-version.outputs.release_label }}-x64.rpm
release-assets/FromChat-${{ needs.resolve-version.outputs.release_label }}-arm.rpm
release-assets/FromChat-${{ needs.resolve-version.outputs.release_label }}-x64.AppImage
release-assets/FromChat-${{ needs.resolve-version.outputs.release_label }}-arm.AppImage
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}