mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 06:25:41 +00:00
Fix/release create tag before verify (#407)
* fix(release): rebind untagged draft releases to expected app-v tag After create/update, fetch release by id and force tag_name/target_commitish when GitHub returns an unexpected tag (including untagged placeholders). This self-heals release metadata before downstream upload steps consume release_id. * fix(release): remove tauri-action release publishing side effects Build macOS/Windows bundles with tauri CLI and upload artifacts explicitly via gh release upload to the expected app-v tag. This prevents tauri-action from creating untagged releases while keeping release assets deterministic. * fix(release): wait for tag ref visibility before release API calls Before create/update release, poll GitHub REST git.getRef(tags/app-v...) until the new tag is visible. This avoids release API timing gaps where tag exists in git but release endpoints still return inconsistent not-found/untagged behavior.
This commit is contained in:
@@ -174,6 +174,27 @@ jobs:
|
||||
throw new Error(`Invalid RELEASE_COMMIT_SHA '${targetCommitish ?? ""}'`);
|
||||
}
|
||||
|
||||
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||
let tagVisible = false;
|
||||
for (let attempt = 1; attempt <= 10; attempt++) {
|
||||
try {
|
||||
await github.rest.git.getRef({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
ref: `tags/${tag}`,
|
||||
});
|
||||
tagVisible = true;
|
||||
break;
|
||||
} catch (e) {
|
||||
if (e.status !== 404) throw e;
|
||||
core.warning(`Tag ref '${tag}' not visible in REST API yet (attempt ${attempt}/10); retrying...`);
|
||||
await sleep(1000 * attempt);
|
||||
}
|
||||
}
|
||||
if (!tagVisible) {
|
||||
throw new Error(`Tag ref 'tags/${tag}' is still not visible in REST API after retries`);
|
||||
}
|
||||
|
||||
try {
|
||||
const { data } = await github.rest.repos.getReleaseByTag({
|
||||
owner: context.repo.owner,
|
||||
@@ -357,9 +378,8 @@ jobs:
|
||||
mkdir -p ~/private_keys
|
||||
echo "${{ secrets.APPLE_API_KEY_B64 }}" | base64 --decode > ~/private_keys/AuthKey.p8
|
||||
echo "APPLE_API_KEY_PATH=$HOME/private_keys/AuthKey.p8" >> "$GITHUB_ENV"
|
||||
- uses: tauri-apps/tauri-action@v1
|
||||
- name: build app bundles (no release side effects)
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
VITE_LASTFM_API_KEY: ${{ secrets.VITE_LASTFM_API_KEY }}
|
||||
VITE_LASTFM_API_SECRET: ${{ secrets.VITE_LASTFM_API_SECRET }}
|
||||
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
||||
@@ -370,13 +390,42 @@ jobs:
|
||||
APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
with:
|
||||
tagName: ${{ needs.create-release.outputs.release_tag }}
|
||||
releaseName: Psysonic v${{ needs.create-release.outputs.package_version }}
|
||||
releaseDraft: ${{ inputs.draft_release }}
|
||||
prerelease: ${{ inputs.prerelease }}
|
||||
releaseId: ${{ needs.create-release.outputs.release_id }}
|
||||
args: ${{ matrix.settings.args }}
|
||||
run: npm run tauri:build -- ${{ matrix.settings.args }}
|
||||
- name: upload macOS artifacts
|
||||
if: runner.os == 'macOS'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
RELEASE_TAG="${{ needs.create-release.outputs.release_tag }}"
|
||||
TARGET_ARG='${{ matrix.settings.args }}'
|
||||
if echo "$TARGET_ARG" | grep -q 'aarch64'; then
|
||||
TARGET="aarch64-apple-darwin"
|
||||
else
|
||||
TARGET="x86_64-apple-darwin"
|
||||
fi
|
||||
mapfile -t FILES < <(find "src-tauri/target/${TARGET}/release/bundle" -type f \
|
||||
\( -name "*.dmg" -o -name "*.app.tar.gz" -o -name "*.sig" \))
|
||||
if [ "${#FILES[@]}" -eq 0 ]; then
|
||||
echo "::error::No macOS artifacts found to upload."
|
||||
exit 1
|
||||
fi
|
||||
gh release upload "$RELEASE_TAG" "${FILES[@]}" --clobber
|
||||
- name: upload Windows artifacts
|
||||
if: runner.os == 'Windows'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
RELEASE_TAG='${{ needs.create-release.outputs.release_tag }}'
|
||||
$files = Get-ChildItem -Path "src-tauri/target/release/bundle" -Recurse -File `
|
||||
| Where-Object { $_.Name -match '\.(exe|msi|msix|zip)$' }
|
||||
if ($files.Count -eq 0) {
|
||||
Write-Error "No Windows artifacts found to upload."
|
||||
exit 1
|
||||
}
|
||||
foreach ($f in $files) {
|
||||
gh release upload "$RELEASE_TAG" "$($f.FullName)" --clobber
|
||||
}
|
||||
- name: re-sign updater bundle + upload .sig (macOS only)
|
||||
if: runner.os == 'macOS'
|
||||
env:
|
||||
|
||||
Reference in New Issue
Block a user