@@ -383,35 +383,108 @@ jobs:
383383 echo "npm publish for tag ${{ needs.validate.outputs.tag }} will be handled automatically by release.yaml"
384384
385385 # ─────────────────────────────────────────────
386- # 7. SNAP-NOTIFY — reminder to run snap publish
386+ # 7. SNAP — publish to Snap Store
387387 # ─────────────────────────────────────────────
388- snap-notify :
389- name : Snap Store (manual reminder)
388+ snap :
389+ name : Snap Store
390390 needs : validate
391+ if : needs.validate.outputs.build_linux_os == 'true'
392+ uses : ./.github/workflows/snap-publish.yml
393+ with :
394+ version : ${{ needs.validate.outputs.version }}
395+ channel : ${{ needs.validate.outputs.channel == 'stable' && 'stable' || 'edge' }}
396+ tag : ${{ needs.validate.outputs.tag }}
397+ secrets : inherit
398+
399+ # ─────────────────────────────────────────────
400+ # 8. WINDOWS STORE — build + submit MSIX
401+ # ─────────────────────────────────────────────
402+ windows-store :
403+ name : Windows Store (MSIX)
404+ needs : [validate, desktop]
405+ if : needs.validate.outputs.build_desktop == 'true' && needs.desktop.result == 'success'
406+ uses : ./.github/workflows/windows-store-release.yml
407+ with :
408+ version : ${{ needs.validate.outputs.version }}
409+ tag : ${{ needs.validate.outputs.tag }}
410+ submit_to_store : true
411+ secrets : inherit
412+
413+ # ─────────────────────────────────────────────
414+ # 9. ANDROID SIDELOAD MANIFEST — publish after
415+ # Android build succeeds.
416+ # version_code is computed from the semver:
417+ # MAJOR*10000 + MINOR*100 + PATCH (pre-release
418+ # suffix stripped) so it is deterministic from
419+ # the version string alone.
420+ # Uses gh workflow run because version_code
421+ # must be derived at runtime and reusable
422+ # workflow calls do not support computed inputs.
423+ # ─────────────────────────────────────────────
424+ android-update-manifest :
425+ name : Android Sideload Manifest
426+ needs : [validate, android]
427+ if : needs.validate.outputs.build_android == 'true' && needs.android.result == 'success'
391428 runs-on : ubuntu-24.04
429+ env :
430+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
392431 steps :
393- - name : Snap Store publish reminder
432+ - name : Compute version_code and dispatch manifest publish
394433 run : |
395- echo "## Snap Store" >> "$GITHUB_STEP_SUMMARY"
396- echo "" >> "$GITHUB_STEP_SUMMARY"
397- echo "**Action required:** Snap Store publish must be triggered manually." >> "$GITHUB_STEP_SUMMARY"
398- echo "" >> "$GITHUB_STEP_SUMMARY"
399- echo "Run \`.github/workflows/snap-build-test.yml\` for this version:" >> "$GITHUB_STEP_SUMMARY"
400- echo "https://github.com/${{ github.repository }}/actions/workflows/snap-build-test.yml" >> "$GITHUB_STEP_SUMMARY"
401- echo "" >> "$GITHUB_STEP_SUMMARY"
402- echo "The snap workflow only builds and tests; a separate Snap Store credential" >> "$GITHUB_STEP_SUMMARY"
403- echo "setup and \`snapcraft upload\` step is required to publish to the Snap Store." >> "$GITHUB_STEP_SUMMARY"
404- echo ""
405- echo "Snap Store publish: run snap-build-test.yml manually for version ${{ needs.validate.outputs.tag }}"
406- echo "Workflow: https://github.com/${{ github.repository }}/actions/workflows/snap-build-test.yml"
434+ VERSION="${{ needs.validate.outputs.version }}"
435+ TAG="${{ needs.validate.outputs.tag }}"
436+ CHANNEL="${{ needs.validate.outputs.channel }}"
437+
438+ # Strip pre-release suffix (e.g. 2.0.1-beta.0 → 2.0.1) before arithmetic
439+ BASE_VERSION="${VERSION%%-*}"
440+ IFS='.' read -r MAJOR MINOR PATCH <<< "$BASE_VERSION"
441+ VERSION_CODE=$(( MAJOR * 10000 + MINOR * 100 + PATCH ))
442+ echo "version_code=$VERSION_CODE for version $VERSION (channel: $CHANNEL)"
443+
444+ gh workflow run publish-android-update-manifest.yml \
445+ --ref "$TAG" \
446+ -f version="$VERSION" \
447+ -f version_code="$VERSION_CODE" \
448+ -f channel="$CHANNEL" \
449+ -f tag="$TAG"
450+
451+ # ─────────────────────────────────────────────
452+ # 10. AOSP MANIFEST — publish after Linux OS
453+ # build succeeds.
454+ # ─────────────────────────────────────────────
455+ aosp-update-manifest :
456+ name : AOSP Update Manifest
457+ needs : [validate, linux-os-iso]
458+ if : needs.validate.outputs.build_linux_os == 'true' && needs.linux-os-iso.result == 'success'
459+ uses : ./.github/workflows/publish-aosp-update-manifest.yml
460+ with :
461+ version : ${{ needs.validate.outputs.version }}
462+ channel : ${{ needs.validate.outputs.channel }}
463+ tag : ${{ needs.validate.outputs.tag }}
464+ secrets : inherit
465+
466+ # ─────────────────────────────────────────────
467+ # 11. APT REPO — publish .deb after Linux deb
468+ # build succeeds.
469+ # ─────────────────────────────────────────────
470+ apt-repo :
471+ name : apt Repository
472+ needs : [validate, linux-os-deb]
473+ if : needs.validate.outputs.build_linux_os == 'true' && needs.linux-os-deb.result == 'success'
474+ uses : ./.github/workflows/publish-apt-repo.yml
475+ with :
476+ version : ${{ needs.validate.outputs.version }}
477+ tag : ${{ needs.validate.outputs.tag }}
478+ channel : ${{ needs.validate.outputs.channel == 'stable' && 'stable' || 'beta' }}
479+ secrets : inherit
407480
408481 # ─────────────────────────────────────────────
409- # 8 . SUMMARY — report all results; optionally
482+ # 12 . SUMMARY — report all results; optionally
410483 # publish the GitHub release draft.
411484 # ─────────────────────────────────────────────
412485 summary :
413486 name : Release Summary
414- needs : [validate, desktop, android, apple, linux-os-iso, linux-os-deb, linux-os-vm, npm, snap-notify ]
487+ needs : [validate, desktop, android, apple, linux-os-iso, linux-os-deb, linux-os-vm, npm, snap, windows-store, android-update-manifest, aosp-update-manifest, apt-repo ]
415488 if : always()
416489 runs-on : ubuntu-24.04
417490 env :
@@ -453,17 +526,18 @@ jobs:
453526 echo ""
454527 echo "| Platform | Result |"
455528 echo "|----------|--------|"
456- echo "| Desktop (Electrobun) | $(result_icon '${{ needs.desktop.result }}') |"
457- echo "| Android | $(result_icon '${{ needs.android.result }}') |"
458- echo "| Apple (iOS + macOS) | $(result_icon '${{ needs.apple.result }}') |"
459- echo "| Linux ISO | $(result_icon "$ISO_R") |"
460- echo "| Linux .deb | $(result_icon "$DEB_R") |"
461- echo "| Linux VM image | $(result_icon "$VM_R") |"
462- echo "| npm (auto-triggered) | $(result_icon '${{ needs.npm.result }}') |"
463- echo "| Snap (manual reminder) | $(result_icon '${{ needs.snap-notify.result }}') |"
464- echo ""
465- echo "### Snap Store"
466- echo "Run [snap-build-test.yml](https://github.com/${{ github.repository }}/actions/workflows/snap-build-test.yml) manually and then publish to the Snap Store."
529+ echo "| Desktop (Electrobun) | $(result_icon '${{ needs.desktop.result }}') |"
530+ echo "| Android | $(result_icon '${{ needs.android.result }}') |"
531+ echo "| Apple (iOS + macOS) | $(result_icon '${{ needs.apple.result }}') |"
532+ echo "| Linux ISO | $(result_icon "$ISO_R") |"
533+ echo "| Linux .deb | $(result_icon "$DEB_R") |"
534+ echo "| Linux VM image | $(result_icon "$VM_R") |"
535+ echo "| npm (auto-triggered) | $(result_icon '${{ needs.npm.result }}') |"
536+ echo "| Snap Store | $(result_icon '${{ needs.snap.result }}') |"
537+ echo "| Windows Store (MSIX) | $(result_icon '${{ needs.windows-store.result }}') |"
538+ echo "| Android sideload manifest | $(result_icon '${{ needs.android-update-manifest.result }}') |"
539+ echo "| AOSP update manifest | $(result_icon '${{ needs.aosp-update-manifest.result }}') |"
540+ echo "| apt repository | $(result_icon '${{ needs.apt-repo.result }}') |"
467541 } >> "$GITHUB_STEP_SUMMARY"
468542
469543 - name : Publish GitHub release (if all succeeded and not draft)
0 commit comments