Files
MaaAssistantArknights/.github/workflows/release-package-distribution.yml
Kaleb Luedtke c14685311b ci:请使用 wingetcreate 代替 winget-releaser (#16813)
* fix: Use wingetcreate instead of winget-releaser

* fix: Pin to a version and hash

* fix: Specify to use PowerShell

* fix: Use GitHub API for fetching the download URLs

* fix: Don't set GITHUB_TOKEN

* fix: Trim leading character from version

* fix: Anchor regex for safety

* chore: Use newer API version

* fix: Ensure terminating errors terminate
2026-05-23 22:33:14 +08:00

190 lines
6.1 KiB
YAML

name: Release Package Distribution
on:
workflow_dispatch:
inputs:
release_tag:
description: "Release Tag (empty for latest)"
type: string
required: false
default: ""
mirrorchyan:
description: "Upload to MirrorChyan"
type: boolean
required: false
default: true
winget:
description: "Upload to WinGet"
type: boolean
required: false
default: true
maa_cos:
description: "Upload to MAA COS"
type: boolean
required: false
default: true
env:
RELEASE_TAG_RAW: ${{ github.event.inputs.release_tag || 'latest' }}
jobs:
meta:
name: Define Release Tag
if: ${{ github.repository_owner == 'MaaAssistantArknights' }}
runs-on: ubuntu-latest
outputs:
RELEASE_TAG: ${{ steps.define_release_tag.outputs.RELEASE_TAG }}
steps:
- name: Get latest release tag
id: get_latest
if: ${{ env.RELEASE_TAG_RAW == 'latest' }}
uses: pozetroninc/github-action-get-latest-release@master
with:
owner: ${{ github.repository_owner }}
repo: ${{ github.event.repository.name }}
token: ${{ secrets.GITHUB_TOKEN }}
excludes: "draft"
- name: Define release tag
id: define_release_tag
run: |
if [ "${{ env.RELEASE_TAG_RAW }}" == "latest" ]; then
echo "RELEASE_TAG=${{ steps.get_latest.outputs.release }}" >> $GITHUB_OUTPUT
else
echo "RELEASE_TAG=${{ env.RELEASE_TAG_RAW }}" >> $GITHUB_OUTPUT
fi
mirrorchyan:
name: Upload to MirrorChyan
needs: meta
if: ${{ github.event.inputs.mirrorchyan == 'true' }}
runs-on: ubuntu-latest
continue-on-error: true
strategy:
fail-fast: false
matrix:
include:
- os: win
arch: x64
filename: "*MAA-*-win-x64.zip"
extra_zip: false
- os: win
arch: arm64
filename: "*MAA-*-win-arm64.zip"
extra_zip: false
- os: macos
arch: arm64
filename: "MAA-*-macos-universal.dmg"
extra_zip: true
- os: macos
arch: x64
filename: "MAA-*-macos-universal.dmg"
extra_zip: true
env:
RELEASE_TAG: ${{ needs.meta.outputs.RELEASE_TAG }}
steps:
- name: Upload MAA ${{ matrix.os }} ${{ matrix.arch }}
uses: MirrorChyan/uploading-action@v1
continue-on-error: true
with:
filetype: latest-release
filename: ${{ matrix.filename }}
extra_zip: ${{ matrix.extra_zip }}
tag: ${{ env.RELEASE_TAG }}
mirrorchyan_rid: MAA
github_token: ${{ secrets.GITHUB_TOKEN }}
owner: ${{ github.repository_owner }}
repo: ${{ github.event.repository.name }}
upload_token: ${{ secrets.MirrorChyanUploadToken }}
os: ${{ matrix.os }}
arch: ${{ matrix.arch }}
winget:
name: Upload to WinGet
needs: meta
if: ${{ github.event.inputs.winget == 'true' }}
runs-on: windows-latest
continue-on-error: true
env:
RELEASE_TAG: ${{ needs.meta.outputs.RELEASE_TAG }}
WINGET_CREATE_GITHUB_TOKEN: ${{ secrets.MAABOT_WINGET_TOKEN }}
WINGET_CREATE_VERSION: 'v1.12.8.0'
WINGET_CREATE_SHA256: '8BD738851B524885410112678E3771B341C5C716DE60FBBECB88AB0A363ED85D'
steps:
- name: Upload MAA to WinGet
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
$RELEASE_TAG = "${{ env.RELEASE_TAG }}"
# Fetch the release assets from GitHub Releases API and resolve actual download URLs
$headers = @{
Accept = "application/vnd.github+json"
"X-GitHub-Api-Version" = "2026-03-10"
}
if ($env:WINGET_CREATE_GITHUB_TOKEN) {
$headers.Authorization = "Bearer $env:WINGET_CREATE_GITHUB_TOKEN"
}
$release = Invoke-RestMethod `
-Uri "https://api.github.com/repos/MaaAssistantArknights/MaaAssistantArknights/releases/tags/$RELEASE_TAG" `
-Headers $headers
$URL_x64 = $release.assets | Where-Object { $_.name -match "-win-x64.zip$" } | Select-Object -First 1 -ExpandProperty browser_download_url
$URL_arm64 = $release.assets | Where-Object { $_.name -match "-win-arm64.zip$" } | Select-Object -First 1 -ExpandProperty browser_download_url
if (-not $URL_x64 -or -not $URL_arm64) {
Write-Error "Failed to resolve release assets from GitHub API for tag '$RELEASE_TAG'."
exit 1
}
# Download winget-create
curl.exe -JLO "https://github.com/microsoft/winget-create/releases/download/$env:WINGET_CREATE_VERSION/wingetcreate.exe"
# Verify the hash of wingetcreate.exe
if ((Get-FileHash wingetcreate.exe).Hash -ne $env:WINGET_CREATE_SHA256) {
Write-Error "wingetcreate.exe hash does not match expected value. Aborting."
exit 1
}
# Update the package using wingetcreate
.\wingetcreate.exe update MaaAssistantArknights.MaaAssistantArknights `
--version $RELEASE_TAG.TrimStart('v') `
--urls "$URL_x64|x64" "$URL_arm64|arm64" `
--submit
maa_cos:
name: Upload to MAA COS
needs: meta
if: false
runs-on: ubuntu-latest
continue-on-error: true
env:
FILENAME: MAA-${{ needs.meta.outputs.RELEASE_TAG }}-win-x64.zip
steps:
- uses: robinraju/release-downloader@v1
with:
repository: 'MaaAssistantArknights/MaaAssistantArknights'
latest: true
fileName: ${{ env.FILENAME }}
out-file-path: 'downloads'
token: ${{ secrets.GITHUB_TOKEN }}
- name: Upload to COS
uses: zkqiang/tencent-cos-action@v1.0.0
with:
args: sync -r downloads/${{ env.FILENAME }} cos://default/MAA/${{ env.FILENAME }}
secret_id: ${{ secrets.MISTEO_MAA_COS_SECRET_ID }}
secret_key: ${{ secrets.MISTEO_MAA_COS_SECRET_KEY }}
bucket: ${{ secrets.MISTEO_MAA_COS_BUCKET }}
region: ${{ secrets.MISTEO_MAA_COS_REG }}