no CI, no acceptance runs (the owner's decision): Forgejo's ci and acceptance jobs are off (if: false), the record job needs only the Linux / Windows installers; release.ts skips ci:quick, the macOS acceptance matrix and its report (TESTS = false); build, signing, notarization, privacy scans and verify stay
This commit is contained in:
parent
e7e26db4aa
commit
9d41fcdc50
2 changed files with 19 additions and 28 deletions
|
|
@ -55,9 +55,10 @@ jobs:
|
|||
export PATH="$HOME/.bun/bin:$PATH"
|
||||
bun tools/release-candidate.ts gate --sha "$SHA" --wait 40
|
||||
|
||||
# off by the owner's decision (2026-10-15: no CI, no acceptance runs); the jobs stay for a manual comeback
|
||||
ci:
|
||||
needs: gate
|
||||
if: needs.gate.outputs.reuse != 'true'
|
||||
if: false
|
||||
# runner label: ubuntu-22.04:docker://ghcr.io/catthehacker/ubuntu:act-22.04
|
||||
runs-on: ubuntu-22.04
|
||||
timeout-minutes: 60
|
||||
|
|
@ -77,7 +78,7 @@ jobs:
|
|||
# (tools/release.ts, cached per CLI key).
|
||||
acceptance:
|
||||
needs: gate
|
||||
if: needs.gate.outputs.reuse != 'true'
|
||||
if: false
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
|
|
@ -288,7 +289,7 @@ jobs:
|
|||
|
||||
record:
|
||||
needs: [gate, ci, acceptance, linux, windows]
|
||||
if: ${{ always() && github.event_name != 'pull_request' && needs.gate.result == 'success' && needs.linux.result == 'success' && needs.windows.result == 'success' && ((needs.gate.outputs.reuse == 'true' && needs.ci.result == 'skipped' && needs.acceptance.result == 'skipped') || (needs.ci.result == 'success' && needs.acceptance.result == 'success')) }}
|
||||
if: ${{ always() && github.event_name != 'pull_request' && needs.gate.result == 'success' && needs.linux.result == 'success' && needs.windows.result == 'success' }}
|
||||
runs-on: ubuntu-22.04
|
||||
timeout-minutes: 30
|
||||
env:
|
||||
|
|
@ -315,21 +316,6 @@ jobs:
|
|||
with:
|
||||
name: storebound-desktop-windows
|
||||
path: cand
|
||||
- uses: actions/download-artifact@v3
|
||||
if: ${{ needs.gate.outputs.reuse != 'true' }}
|
||||
with:
|
||||
path: runs
|
||||
- name: Acceptance runs (this run's, or the version-only parent's)
|
||||
run: |
|
||||
mkdir -p cand/acceptance
|
||||
if [ "$REUSE" = true ]; then
|
||||
bun tools/release-candidate.ts fetch --sha "$FROM" --dir cand/acceptance --only '^acceptance-.*\.json$'
|
||||
else
|
||||
find runs -path '*acceptance-*' -name '*.json' -exec cp {} cand/acceptance/ \;
|
||||
fi
|
||||
ls cand/acceptance
|
||||
V=$(bun tools/desktop-version.ts --print)
|
||||
bun tools/acceptance.ts report cand/acceptance --md "cand/storebound_${V}_acceptance.md" --expect 6 --strict
|
||||
- name: Checksums file of the build jobs is not shipped as is
|
||||
run: rm -f cand/SHA256SUMS
|
||||
- name: Record the candidate (draft rc-<sha>, green.json last)
|
||||
|
|
|
|||
|
|
@ -46,6 +46,9 @@ const KEYS = process.env.STOREBOUND_KEYS_DIR ?? join(HOME, '.storebound-keys');
|
|||
const ACC_CACHE = join(RELEASES, 'acceptance-cache');
|
||||
const APP_ID = 'dev.storebound.desktop';
|
||||
const HEARTBEAT_MS = 30_000;
|
||||
/** The owner's decision (2026-10-15): no CI and no acceptance runs in a release (no ci:quick, no macOS matrix, no
|
||||
* matrix report); the build, signing, notarization, privacy scans and verify stay. */
|
||||
const TESTS = false;
|
||||
|
||||
// ---------------------------------------------------------------------------------------------------------------------
|
||||
// Pure parts (tests/release.test.ts)
|
||||
|
|
@ -270,7 +273,7 @@ async function main(): Promise<void> {
|
|||
${rehearsal ? 'app copied to a scratch folder; then the tag, release, candidates, branch and storebound.dev files of the rehearsal are deleted' : 'update /Applications/storebound.app; print npm publish + npm deprecate'}`);
|
||||
if (!yes) { console.log('\ndry run: nothing changed (--yes to release)'); return; }
|
||||
|
||||
const accP = phase('macOS acceptance (cache or 3 runs)', () => macAcceptance(key, logDir));
|
||||
const accP = TESTS ? phase('macOS acceptance (cache or 3 runs)', () => macAcceptance(key, logDir)) : Promise.resolve('');
|
||||
accP.catch(() => undefined);
|
||||
|
||||
// ---------------------------------------------------------------- 2. + 3. bump, gate, commit, push
|
||||
|
|
@ -280,7 +283,7 @@ async function main(): Promise<void> {
|
|||
if (rehearsal) sh(['git', 'checkout', '-q', '-b', branch]);
|
||||
setVersion(version);
|
||||
if (!rehearsal) writeFileSync(join(ROOT, 'CHANGELOG.md'), cutChangelog(readFileSync(join(ROOT, 'CHANGELOG.md'), 'utf8'), version, new Date().toISOString().slice(0, 10)));
|
||||
const code = await bg('ci:quick', ['bun', 'run', 'ci:quick'], join(logDir, 'ci-quick.log'), { timeoutMs: 15 * 60_000 });
|
||||
const code = TESTS ? await bg('ci:quick', ['bun', 'run', 'ci:quick'], join(logDir, 'ci-quick.log'), { timeoutMs: 15 * 60_000 }) : 0;
|
||||
if (code !== 0) {
|
||||
// nothing was committed or pushed: put the checkout back as it was
|
||||
sh(['git', 'checkout', '-q', '--', '.']);
|
||||
|
|
@ -320,15 +323,17 @@ async function main(): Promise<void> {
|
|||
await phase('add Linux / Windows + acceptance matrix + verify', async () => {
|
||||
const files = readdirSync(dl).filter(f => /\.(AppImage|deb|exe)$/.test(f)).map(f => join(dl, f));
|
||||
sh(['bun', 'tools/desktop-release.ts', 'add', '--out', out, '--commit', sha, '--run', cand.record.run, ...files]);
|
||||
const accDir = mkdtempSync(join(tmpdir(), 'sb-acc-'));
|
||||
for (const f of readdirSync(dl).filter(f => /^acceptance-.*\.json$/.test(f))) writeFileSync(join(accDir, f), readFileSync(join(dl, f)));
|
||||
const macDir = await accP;
|
||||
for (const r of RUNTIMES) writeFileSync(join(accDir, r.file), readFileSync(join(macDir, r.file)));
|
||||
const md = join(logDir, `storebound_${version}_acceptance.md`);
|
||||
sh(['bun', 'tools/acceptance.ts', 'report', accDir, '--md', md, '--expect', '9', '--strict']);
|
||||
rmSync(accDir, { recursive: true, force: true });
|
||||
if (TESTS) {
|
||||
const accDir = mkdtempSync(join(tmpdir(), 'sb-acc-'));
|
||||
for (const f of readdirSync(dl).filter(f => /^acceptance-.*\.json$/.test(f))) writeFileSync(join(accDir, f), readFileSync(join(dl, f)));
|
||||
const macDir = await accP;
|
||||
for (const r of RUNTIMES) writeFileSync(join(accDir, r.file), readFileSync(join(macDir, r.file)));
|
||||
const md = join(logDir, `storebound_${version}_acceptance.md`);
|
||||
sh(['bun', 'tools/acceptance.ts', 'report', accDir, '--md', md, '--expect', '9', '--strict']);
|
||||
rmSync(accDir, { recursive: true, force: true });
|
||||
await upsert({ tag, files: [md], create: false, yes: true });
|
||||
}
|
||||
sh(['bun', 'tools/desktop-release.ts', 'verify', '--out', out]);
|
||||
await upsert({ tag, files: [md], create: false, yes: true });
|
||||
});
|
||||
|
||||
// ---------------------------------------------------------------- 6. publish
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue