mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-16 01:40:46 +08:00
* 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
190 lines
6.1 KiB
YAML
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 }}
|