Update GitHub release actions

This commit is contained in:
Leendert de Borst
2026-05-31 23:55:53 +02:00
parent 3ba473e88b
commit 6cebe6bff6
3 changed files with 123 additions and 32 deletions
+18 -8
View File
@@ -9,10 +9,10 @@ inputs:
description: "Whether to sign the Android build"
required: false
default: "false"
upload_to_release:
description: "Whether to upload the APK to GitHub Release"
release_tag:
description: "If set, upload the resulting APK to the existing GitHub Release at this tag (draft or published). Requires signed=true. Fails if no such release exists."
required: false
default: "false"
default: ""
runs:
using: "composite"
@@ -186,11 +186,21 @@ runs:
retention-days: 14
- name: Upload APK to release
if: ${{ inputs.upload_to_release == 'true' }}
uses: softprops/action-gh-release@v3
with:
files: apps/mobile-app/android/app/build/outputs/apk/release/aliasvault-${{ env.VERSION }}-android.apk
if: ${{ inputs.release_tag != '' && inputs.signed == 'true' }}
shell: bash
env:
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
GH_TOKEN: ${{ env.GITHUB_TOKEN }}
RELEASE_TAG: ${{ inputs.release_tag }}
run: |
if ! gh release view "$RELEASE_TAG" --repo "$GITHUB_REPOSITORY" > /dev/null 2>&1; then
echo "❌ No release exists at tag '$RELEASE_TAG'."
echo "Create a draft release first, e.g.:"
echo " gh release create $RELEASE_TAG --draft --title $RELEASE_TAG --notes ''"
exit 1
fi
APK="apps/mobile-app/android/app/build/outputs/apk/release/aliasvault-${VERSION}-android.apk"
echo "Uploading $APK to release $RELEASE_TAG..."
gh release upload "$RELEASE_TAG" "$APK" --clobber --repo "$GITHUB_REPOSITORY"
@@ -4,10 +4,10 @@ inputs:
browser:
description: "Target browser to build for (chrome, firefox, edge)"
required: true
upload_to_release:
description: "Whether to upload the resulting zip to GitHub Release"
release_tag:
description: "If set, upload the resulting zip(s) to the existing GitHub Release at this tag (draft or published). Fails if no such release exists."
required: false
default: "false"
default: ""
runs:
using: "composite"
@@ -119,18 +119,24 @@ runs:
shell: bash
- name: Upload to GitHub Release
if: ${{ inputs.upload_to_release == 'true' }}
uses: softprops/action-gh-release@v3
with:
files: |
apps/browser-extension/dist/aliasvault-${{ env.VERSION }}-${{ inputs.browser }}.zip
if: ${{ inputs.release_tag != '' }}
shell: bash
env:
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
GH_TOKEN: ${{ env.GITHUB_TOKEN }}
RELEASE_TAG: ${{ inputs.release_tag }}
BROWSER: ${{ inputs.browser }}
run: |
if ! gh release view "$RELEASE_TAG" --repo "$GITHUB_REPOSITORY" > /dev/null 2>&1; then
echo "❌ No release exists at tag '$RELEASE_TAG'."
echo "Create a draft release first, e.g.:"
echo " gh release create $RELEASE_TAG --draft --title $RELEASE_TAG --notes ''"
exit 1
fi
- name: Upload Firefox sources to Release
if: ${{ inputs.upload_to_release == 'true' && inputs.browser == 'firefox' }}
uses: softprops/action-gh-release@v3
with:
files: apps/browser-extension/dist/aliasvault-${{ env.VERSION }}-browser-extension-sources.zip
env:
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
FILES=("apps/browser-extension/dist/aliasvault-${VERSION}-${BROWSER}.zip")
if [ "$BROWSER" = "firefox" ]; then
FILES+=("apps/browser-extension/dist/aliasvault-${VERSION}-browser-extension-sources.zip")
fi
echo "Uploading ${#FILES[@]} file(s) to release $RELEASE_TAG..."
gh release upload "$RELEASE_TAG" "${FILES[@]}" --clobber --repo "$GITHUB_REPOSITORY"
+83 -8
View File
@@ -72,6 +72,10 @@ jobs:
multi_container_exists: ${{ steps.check-images.outputs.multi_container_exists }}
browser_extension_version_matches: ${{ steps.check-app-versions.outputs.browser_extension_matches }}
mobile_app_version_matches: ${{ steps.check-app-versions.outputs.mobile_app_matches }}
chrome_extension_asset_exists: ${{ steps.check-release-assets.outputs.chrome_extension_asset_exists }}
firefox_extension_assets_exist: ${{ steps.check-release-assets.outputs.firefox_extension_assets_exist }}
edge_extension_asset_exists: ${{ steps.check-release-assets.outputs.edge_extension_asset_exists }}
android_apk_asset_exists: ${{ steps.check-release-assets.outputs.android_apk_asset_exists }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
@@ -193,6 +197,67 @@ jobs:
echo "mobile_app_matches=false" >> $GITHUB_OUTPUT
fi
- name: Check if release assets already exist
id: check-release-assets
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
VERSION="${{ steps.detect.outputs.version }}"
if [ -z "$VERSION" ]; then
echo "chrome_extension_asset_exists=false" >> $GITHUB_OUTPUT
echo "firefox_extension_assets_exist=false" >> $GITHUB_OUTPUT
echo "edge_extension_asset_exists=false" >> $GITHUB_OUTPUT
echo "android_apk_asset_exists=false" >> $GITHUB_OUTPUT
echo "No version specified, asset existence checks skipped"
exit 0
fi
# List assets on existing release (draft or published). Empty if release does not exist.
ASSETS=$(gh release view "$VERSION" --repo "$GITHUB_REPOSITORY" --json assets --jq '.assets[].name' 2>/dev/null || true)
if [ -z "$ASSETS" ]; then
echo "No release found at tag $VERSION (or release has no assets)"
fi
has_asset() {
echo "$ASSETS" | grep -Fxq "$1"
}
# Chrome
if has_asset "aliasvault-${VERSION}-chrome.zip"; then
echo "✅ Chrome extension asset exists on release $VERSION"
echo "chrome_extension_asset_exists=true" >> $GITHUB_OUTPUT
else
echo "❌ Chrome extension asset missing"
echo "chrome_extension_asset_exists=false" >> $GITHUB_OUTPUT
fi
# Firefox (must have both the extension zip and the sources zip)
if has_asset "aliasvault-${VERSION}-firefox.zip" && has_asset "aliasvault-${VERSION}-browser-extension-sources.zip"; then
echo "✅ Firefox extension + sources assets exist on release $VERSION"
echo "firefox_extension_assets_exist=true" >> $GITHUB_OUTPUT
else
echo "❌ Firefox extension and/or sources asset missing"
echo "firefox_extension_assets_exist=false" >> $GITHUB_OUTPUT
fi
# Edge
if has_asset "aliasvault-${VERSION}-edge.zip"; then
echo "✅ Edge extension asset exists on release $VERSION"
echo "edge_extension_asset_exists=true" >> $GITHUB_OUTPUT
else
echo "❌ Edge extension asset missing"
echo "edge_extension_asset_exists=false" >> $GITHUB_OUTPUT
fi
# Android APK
if has_asset "aliasvault-${VERSION}-android.apk"; then
echo "✅ Android APK asset exists on release $VERSION"
echo "android_apk_asset_exists=true" >> $GITHUB_OUTPUT
else
echo "❌ Android APK asset missing"
echo "android_apk_asset_exists=false" >> $GITHUB_OUTPUT
fi
upload-install-script:
needs: [valid-release, detect-version]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success')
@@ -212,8 +277,12 @@ jobs:
build-chrome-extension:
needs: [valid-release, detect-version]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_browser_extensions) && needs.detect-version.outputs.browser_extension_version_matches == 'true'
# Skip on release events when the asset already exists (prep run already attached it).
# On workflow_dispatch the build always runs when the flag is set, and re-uploads with --clobber.
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_browser_extensions) && needs.detect-version.outputs.browser_extension_version_matches == 'true' && (github.event_name != 'release' || needs.detect-version.outputs.chrome_extension_asset_exists != 'true')
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
@@ -222,14 +291,16 @@ jobs:
uses: ./.github/actions/build-browser-extension
with:
browser: chrome
upload_to_release: ${{ github.event_name == 'release' }}
release_tag: ${{ needs.detect-version.outputs.version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-firefox-extension:
needs: [valid-release, detect-version]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_browser_extensions) && needs.detect-version.outputs.browser_extension_version_matches == 'true'
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_browser_extensions) && needs.detect-version.outputs.browser_extension_version_matches == 'true' && (github.event_name != 'release' || needs.detect-version.outputs.firefox_extension_assets_exist != 'true')
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
@@ -238,14 +309,16 @@ jobs:
uses: ./.github/actions/build-browser-extension
with:
browser: firefox
upload_to_release: ${{ github.event_name == 'release' }}
release_tag: ${{ needs.detect-version.outputs.version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-edge-extension:
needs: [valid-release, detect-version]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_browser_extensions) && needs.detect-version.outputs.browser_extension_version_matches == 'true'
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_browser_extensions) && needs.detect-version.outputs.browser_extension_version_matches == 'true' && (github.event_name != 'release' || needs.detect-version.outputs.edge_extension_asset_exists != 'true')
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
@@ -254,14 +327,16 @@ jobs:
uses: ./.github/actions/build-browser-extension
with:
browser: edge
upload_to_release: ${{ github.event_name == 'release' }}
release_tag: ${{ needs.detect-version.outputs.version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-android-release:
needs: [valid-release, detect-version]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_mobile_apps) && needs.detect-version.outputs.mobile_app_version_matches == 'true'
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_mobile_apps) && needs.detect-version.outputs.mobile_app_version_matches == 'true' && (github.event_name != 'release' || needs.detect-version.outputs.android_apk_asset_exists != 'true')
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
@@ -270,7 +345,7 @@ jobs:
uses: ./.github/actions/build-android-app
with:
signed: true
upload_to_release: ${{ github.event_name == 'release' }}
release_tag: ${{ needs.detect-version.outputs.version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}