mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-22 07:15:47 +00:00
8d424fbc98
* fix(release): create missing app-v tag before release verification Ensure reusable publish creates and pushes the expected app-v tag when absent, then validates it points to source_ref. This prevents release records with tag_name but no git refs/tags object, which previously broke Source code archives. * fix(release): pin tauri publish to tagged release metadata Pass tagName/releaseName/releaseDraft/prerelease to tauri-action in addition to releaseId, so asset upload fallback remains bound to the expected app-v release instead of creating untagged releases. * chore(ci): align workflow action versions for release flow Update github-script usage to v9 across release-related workflows and keep the current tauri-action release binding changes in the same branch for testing. * fix(release): harden tagged release resolution for source-only promote Canonicalize release_id via getReleaseByTag after create/update and fail fast on invalid tag/commit inputs to avoid untagged release binding. Also propagate source-only marker through promote push events so push-triggered channel runs skip platform artifacts and verify-nix consistently.
80 lines
2.9 KiB
YAML
80 lines
2.9 KiB
YAML
name: Promote next to release
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
source_only:
|
|
description: "Create/refresh tagged release only (skip platform builds and verify-nix)"
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
|
|
jobs:
|
|
promote:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
actions: write
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
with:
|
|
fetch-depth: 0
|
|
ref: release
|
|
- name: setup node
|
|
uses: actions/setup-node@v5
|
|
with:
|
|
node-version: lts/*
|
|
- name: fast-forward release to next
|
|
run: |
|
|
set -euo pipefail
|
|
git fetch origin next release
|
|
# Reset stable channel to next snapshot, then finalize version on top.
|
|
git reset --hard origin/next
|
|
- name: finalize package version for release
|
|
run: |
|
|
set -euo pipefail
|
|
CURRENT_VERSION="$(node -p 'require("./package.json").version')"
|
|
FINAL_VERSION="$(node -p 'const v=require("./package.json").version; const m=v.match(/^(\d+\.\d+\.\d+)/); if(!m){throw new Error("Invalid version: "+v)}; m[1]')"
|
|
if [[ "$CURRENT_VERSION" == "$FINAL_VERSION" ]]; then
|
|
echo "package.json is already final: $FINAL_VERSION"
|
|
exit 0
|
|
fi
|
|
npm version --no-git-tag-version "$FINAL_VERSION"
|
|
- name: sync Tauri version from package.json
|
|
run: node scripts/sync-tauri-version-from-package.js
|
|
- name: commit final version bump
|
|
run: |
|
|
set -euo pipefail
|
|
git config user.name "github-actions[bot]"
|
|
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
git add package.json package-lock.json src-tauri/Cargo.toml src-tauri/tauri.conf.json
|
|
if git diff --cached --quiet; then
|
|
echo "No finalization changes to commit."
|
|
exit 0
|
|
fi
|
|
NEW_VERSION="$(node -p 'require("./package.json").version')"
|
|
MSG="chore(release): finalize release version ${NEW_VERSION}"
|
|
if [[ "${{ inputs.source_only }}" == "true" ]]; then
|
|
MSG="${MSG} [source-only]"
|
|
fi
|
|
git commit -m "$MSG"
|
|
- name: push release
|
|
run: git push --force-with-lease origin HEAD:release
|
|
- name: dispatch Release Channel workflow
|
|
uses: actions/github-script@v9
|
|
env:
|
|
SOURCE_ONLY: ${{ inputs.source_only && 'true' || 'false' }}
|
|
with:
|
|
script: |
|
|
const sourceOnly = process.env.SOURCE_ONLY === "true";
|
|
await github.rest.actions.createWorkflowDispatch({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
workflow_id: "release.yml",
|
|
ref: "main",
|
|
inputs: {
|
|
source_only: sourceOnly ? "true" : "false",
|
|
},
|
|
});
|
|
core.info(`Dispatched release.yml with source_only=${sourceOnly}`);
|