Files
TallyNote/.gitea/workflows/release.yml
T
Qiufeng 620362823b
TallyNote release / linux-x64 (push) Failing after 13s
release: 1.2.0
2026-09-05 08:42:47 +08:00

63 lines
2.9 KiB
YAML

name: TallyNote release
on:
push:
tags:
- "v*.*.*"
# A tag is the immutable input to a release. Publishing is kept in one job so
# SHA256SUMS covers every archive exactly once and the Gitea Release API never
# receives duplicate checksum assets from parallel architecture jobs.
permissions:
contents: write
jobs:
linux-x64:
runs-on: ubuntu-latest
steps:
- name: Checkout tag
uses: actions/checkout@v4
with:
# Release notes are derived from the previous version tag. A shallow
# checkout would leave only the synthetic release commit available.
fetch-depth: 0
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 24
- name: Enable pnpm
run: corepack enable && corepack prepare pnpm@9.0.6 --activate
- name: Verify tag and test gate
run: |
set -euo pipefail
target_version="${GITHUB_REF_NAME#v}"
package_version="$(node -p 'require("./package.json").version')"
test "$package_version" = "$target_version"
previous_tag="$(git tag --list 'v*.*.*' --sort=-version:refname | grep -Fxv "$GITHUB_REF_NAME" | head -n 1 || true)"
if [[ -n "$previous_tag" ]]; then
node - "$target_version" "${previous_tag#v}" <<'NODE'
const [target, previous] = process.argv.slice(2).map((value) => value.split(/[.+-]/, 1)[0].split('.').map(Number));
if (target.length !== 3 || previous.length !== 3 || target.some((n) => !Number.isSafeInteger(n)) || previous.some((n) => !Number.isSafeInteger(n))) process.exit(2);
const newer = target[0] > previous[0] || (target[0] === previous[0] && (target[1] > previous[1] || (target[1] === previous[1] && target[2] > previous[2])));
if (!newer) { console.error(`release ${process.argv[2]} must be newer than ${process.argv[3]}`); process.exit(1); }
NODE
fi
pnpm install --frozen-lockfile
pnpm check
# better-sqlite3 is a native addon; a single Vitest worker avoids a
# Node cleanup race observed on the hosted runner while preserving
# the complete test suite.
pnpm test -- --pool=threads --poolOptions.threads.singleThread=true
pnpm test:installer
- name: Build Linux release
run: pnpm release:build "${GITHUB_REF_NAME#v}" ./release
- name: Create and publish Gitea Release
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
run: ./scripts/publish-gitea-release.sh "$GITHUB_REF_NAME" ./release
# Linux x86 (i386/i686) is intentionally not published: Node.js 24 and the
# better-sqlite3/argon2/sharp native modules have no maintained 32-bit build.
# Add an ARM64 job only on a runner with native ARM64 support, then let the
# publisher aggregate all archives before signing one SHA256SUMS file.