chore(ci): macOS merge
This commit is contained in:
@@ -302,6 +302,22 @@ jobs:
|
||||
run: |
|
||||
pnpm run -F @proj-airi/stage-tamagotchi rename-artifacts ${{ matrix.target }} --release ${{ !inputs.build_only && !inputs.artifacts_only }} --tag ${{ inputs.tag }} --auto-tag ${{ !inputs.build_only }}
|
||||
|
||||
# NOTICE: electron-builder emits `latest-mac.yml` per macOS architecture, but GitHub Releases can only keep one asset with that exact name.
|
||||
# NOTICE: publishing both matrix outputs under the generic name causes the last upload to win, which can leave auto-update metadata pinned to a single architecture instead of the merged manifest.
|
||||
# NOTICE: rename the per-arch manifests before upload so the follow-up merge job can publish the only generic `latest-mac.yml`, whose `files` list contains both arm64 and x64 ZIPs for electron-updater to choose from.
|
||||
- name: Rename macOS update info (Manual + Release + macOS Only)
|
||||
if: ${{ github.event_name == 'workflow_dispatch' && !inputs.build_only && !inputs.artifacts_only && (matrix.os == 'macos-26' || matrix.os == 'macos-15-intel') }}
|
||||
run: |
|
||||
mv apps/stage-tamagotchi/bundle/latest-mac.yml apps/stage-tamagotchi/bundle/latest-mac-${{ matrix.arch }}.yml
|
||||
|
||||
- name: Upload macOS update info (Manual + Release + macOS Only)
|
||||
if: ${{ github.event_name == 'workflow_dispatch' && !inputs.build_only && !inputs.artifacts_only && (matrix.os == 'macos-26' || matrix.os == 'macos-15-intel') }}
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: latest-mac-yml-${{ matrix.arch }}
|
||||
path: apps/stage-tamagotchi/bundle/latest-mac-${{ matrix.arch }}.yml
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Get Linux Artifact Names (Manual + Non-Release + Linux Only)
|
||||
if: ${{ github.event_name == 'workflow_dispatch' && !inputs.build_only && inputs.artifacts_only && (matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-24.04-arm') }}
|
||||
working-directory: ./apps/stage-tamagotchi
|
||||
@@ -387,7 +403,8 @@ jobs:
|
||||
apps/stage-tamagotchi/bundle/${{ env.PRODUCT_NAME }}-*.rpm
|
||||
apps/stage-tamagotchi/bundle/${{ env.PRODUCT_NAME }}-*.flatpak
|
||||
apps/stage-tamagotchi/bundle/latest.yml
|
||||
apps/stage-tamagotchi/bundle/latest-*.yml
|
||||
apps/stage-tamagotchi/bundle/latest-linux*.yml
|
||||
apps/stage-tamagotchi/bundle/latest-mac-*.yml
|
||||
append_body: true
|
||||
tag_name: ${{ inputs.tag }}
|
||||
|
||||
@@ -400,12 +417,20 @@ jobs:
|
||||
run: |
|
||||
pnpm run -F @proj-airi/stage-tamagotchi rename-artifacts ${{ matrix.target }} --release --auto-tag
|
||||
|
||||
# NOTICE: electron-builder emits `latest-mac.yml` per macOS architecture, but GitHub Releases can only keep one asset with that exact name.
|
||||
# NOTICE: publishing both matrix outputs under the generic name causes the last upload to win, which can leave auto-update metadata pinned to a single architecture instead of the merged manifest.
|
||||
# NOTICE: rename the per-arch manifests before upload so the follow-up merge job can publish the only generic `latest-mac.yml`, whose `files` list contains both arm64 and x64 ZIPs for electron-updater to choose from.
|
||||
- name: Rename macOS update info (Automatic + macOS Only)
|
||||
if: ${{ github.event_name == 'release' && (matrix.os == 'macos-26' || matrix.os == 'macos-15-intel') }}
|
||||
run: |
|
||||
mv apps/stage-tamagotchi/bundle/latest-mac.yml apps/stage-tamagotchi/bundle/latest-mac-${{ matrix.arch }}.yml
|
||||
|
||||
- name: Upload macOS update info (Automatic + macOS Only)
|
||||
if: ${{ github.event_name == 'release' && (matrix.os == 'macos-26' || matrix.os == 'macos-15-intel') }}
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: latest-mac-yml-${{ matrix.arch }}
|
||||
path: apps/stage-tamagotchi/bundle/latest-mac.yml
|
||||
path: apps/stage-tamagotchi/bundle/latest-mac-${{ matrix.arch }}.yml
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Get Artifacts Envs (Automatic + Windows Only)
|
||||
@@ -458,7 +483,7 @@ jobs:
|
||||
with:
|
||||
# Possible auto updater files:
|
||||
# Windows: latest.yml
|
||||
# macOS: latest-mac.yml (arm64), latest-mac.yml (x64)
|
||||
# macOS: latest-mac-arm64.yml, latest-mac-x64.yml, latest-mac.yml (merged in follow-up job)
|
||||
# Linux: latest-linux-arm64.yml (arm64), latest-linux.yml (x64)
|
||||
files: |
|
||||
apps/stage-tamagotchi/bundle/${{ env.PRODUCT_NAME }}-*.exe
|
||||
@@ -468,12 +493,13 @@ jobs:
|
||||
apps/stage-tamagotchi/bundle/${{ env.PRODUCT_NAME }}-*.rpm
|
||||
apps/stage-tamagotchi/bundle/${{ env.PRODUCT_NAME }}-*.flatpak
|
||||
apps/stage-tamagotchi/bundle/latest.yml
|
||||
apps/stage-tamagotchi/bundle/latest-*.yml
|
||||
apps/stage-tamagotchi/bundle/latest-linux*.yml
|
||||
apps/stage-tamagotchi/bundle/latest-mac-*.yml
|
||||
append_body: true
|
||||
|
||||
merge-mac-latest:
|
||||
name: Merge macOS latest-mac.yml
|
||||
if: ${{ github.event_name == 'release' }} # Skipping will only exist when triggered by workflow_dispatch. No need to handle here
|
||||
if: ${{ github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && !inputs.build_only && !inputs.artifacts_only) }}
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@@ -500,6 +526,8 @@ jobs:
|
||||
name: latest-mac-yml-arm64
|
||||
path: artifacts/arm64
|
||||
|
||||
# NOTICE: the merged `latest-mac.yml` must be the only generic macOS update manifest published to the release.
|
||||
# NOTICE: electron-updater resolves the correct macOS ZIP from the merged `files` list; if we skip this merge or publish a single-arch file as `latest-mac.yml`, Apple Silicon users can be routed to the wrong build.
|
||||
- name: Merge latest-mac.yml
|
||||
run: |
|
||||
pnpm -F @proj-airi/stage-tamagotchi exec tsx scripts/merge-latest-mac.ts \
|
||||
@@ -510,4 +538,4 @@ jobs:
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
files: apps/stage-tamagotchi/bundle/latest-mac.yml
|
||||
tag_name: ${{ github.event.release.tag_name }}
|
||||
tag_name: ${{ github.event_name == 'release' && github.event.release.tag_name || inputs.tag }}
|
||||
|
||||
Reference in New Issue
Block a user