refactor(KAN-65): remove release resume mode
This commit is contained in:
@@ -111,38 +111,10 @@ test('manual release on main accepts an existing tag without moving it', (t) =>
|
||||
});
|
||||
assert.equal(result.status, 0, result.stderr);
|
||||
assert.equal(f.git(f.checkout, 'rev-parse', 'macos-v1.2.3'), f.commit);
|
||||
});
|
||||
|
||||
test('resume uses current tools, validated tagged metadata and release credentials without rebuilding', (t) => {
|
||||
const f = fixture(t);
|
||||
const result = f.run({
|
||||
GITHUB_EVENT_NAME: 'workflow_dispatch',
|
||||
GITHUB_REF: 'refs/heads/main',
|
||||
REQUESTED_TAG: 'macos-v1.2.3',
|
||||
RELEASE_MODE: 'resume',
|
||||
});
|
||||
assert.equal(result.status, 0, result.stderr);
|
||||
const resume = workflow.split('\n resume:\n')[1];
|
||||
assert.match(resume, /needs: prepare/);
|
||||
assert.match(
|
||||
resume,
|
||||
/github.event_name == 'workflow_dispatch' && inputs.mode == 'resume'/,
|
||||
);
|
||||
assert.match(resume, /ref: \$\{\{ github.sha \}\}/);
|
||||
assert.match(resume, /ref: \$\{\{ needs.prepare.outputs.commit \}\}/);
|
||||
assert.match(resume, /RELEASE_METADATA_DIRECTORY: release-source\/native/);
|
||||
assert.match(resume, /path: release-source/);
|
||||
assert.match(resume, /secrets.S3_ACCESS_KEY_ID/);
|
||||
assert.match(resume, /secrets.S3_SECRET_ACCESS_KEY/);
|
||||
assert.match(resume, /node native\/publish-macos.mjs resume/);
|
||||
assert.doesNotMatch(
|
||||
resume,
|
||||
/tauri-action|APPLE_PASSWORD|APPLE_CERTIFICATE|TAURI_SIGNING_PRIVATE_KEY/,
|
||||
);
|
||||
assert.match(
|
||||
workflow.split('\n release:\n')[1],
|
||||
/if: \$\{\{ inputs.mode != 'resume' \}\}/,
|
||||
);
|
||||
assert.doesNotMatch(workflow, /inputs\.mode|RELEASE_MODE|\n {2}resume:/);
|
||||
assert.match(workflow, /--ci --target .* --bundles app,dmg/);
|
||||
assert.match(workflow, /node native\/macos-ci.mjs package/);
|
||||
assert.match(workflow, /node native\/publish-macos.mjs upload/);
|
||||
});
|
||||
|
||||
test('release DMG packaging disables Finder automation in the Tauri action environment', () => {
|
||||
@@ -159,7 +131,7 @@ test('release DMG packaging disables Finder automation in the Tauri action envir
|
||||
});
|
||||
|
||||
for (const [name, overrides] of [
|
||||
['invalid release mode', { RELEASE_MODE: 'overwrite' }],
|
||||
['wrong tag case', { GITHUB_REF: 'refs/tags/macOS-V1.2.3' }],
|
||||
['web release tag', { GITHUB_REF: 'refs/tags/v1.2.3' }],
|
||||
['missing tag', { GITHUB_REF: 'refs/tags/macos-v9.9.9' }],
|
||||
[
|
||||
|
||||
@@ -1,18 +1,37 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import { Buffer } from 'node:buffer';
|
||||
import { spawnSync } from 'node:child_process';
|
||||
import { createHash } from 'node:crypto';
|
||||
import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { join } from 'node:path';
|
||||
import process from 'node:process';
|
||||
import test from 'node:test';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import {
|
||||
conditionalEtag,
|
||||
publishMacos,
|
||||
resumeMacos,
|
||||
storageConfiguration,
|
||||
} from '../publish-macos.mjs';
|
||||
import { signedFixture } from './updater-fixture.mjs';
|
||||
|
||||
test('publisher rejects the removed resume command before accessing storage', () => {
|
||||
const result = spawnSync(
|
||||
process.execPath,
|
||||
[
|
||||
fileURLToPath(new URL('../publish-macos.mjs', import.meta.url)),
|
||||
'resume',
|
||||
],
|
||||
{ encoding: 'utf8' },
|
||||
);
|
||||
assert.equal(result.status, 1);
|
||||
assert.equal(result.stdout, '');
|
||||
assert.match(
|
||||
result.stderr,
|
||||
/Use config or upload; upload requires RELEASE_DIRECTORY/,
|
||||
);
|
||||
});
|
||||
|
||||
test('conditional writes use bare S3 ETags without weakening the condition', () => {
|
||||
const etag = 'b88312b96169f4b2098a4cc43b0abb6a';
|
||||
for (const value of [etag, `"${etag}"`, `${etag}-2`, `"${etag}-2"`]) {
|
||||
@@ -36,37 +55,6 @@ test('conditional writes use bare S3 ETags without weakening the condition', ()
|
||||
}
|
||||
});
|
||||
|
||||
test('resume verifies already published artifacts and promotes the feed without rebuilding', async (t) => {
|
||||
const f = fixture(t);
|
||||
await publishMacos(f);
|
||||
const key = `releases/macos/${f.metadata.target}/latest.json`;
|
||||
f.objects.set(key, Buffer.from(JSON.stringify({ version: '1.0.0' })));
|
||||
const originals = new Map(f.objects);
|
||||
await resumeMacos(f);
|
||||
assert.equal(JSON.parse(f.objects.get(key)).version, f.metadata.version);
|
||||
for (const [name, contents] of originals) {
|
||||
if (name !== key) {
|
||||
assert.deepEqual(f.objects.get(name), contents);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
for (const failure of ['missing', 'tampered']) {
|
||||
test(`resume rejects ${failure} artifacts before any S3 writes`, async (t) => {
|
||||
const f = fixture(t);
|
||||
await publishMacos(f);
|
||||
const key = `releases/macos/${f.metadata.target}/${f.metadata.version}/${f.metadata.updaterFilename}`;
|
||||
if (failure === 'missing') {
|
||||
f.objects.delete(key);
|
||||
} else {
|
||||
f.objects.set(key, Buffer.from('tampered'));
|
||||
}
|
||||
f.events.length = 0;
|
||||
await assert.rejects(resumeMacos(f), /incomplete release|signature/);
|
||||
assert(!f.events.some((event) => event.operation === 'put-object'));
|
||||
});
|
||||
}
|
||||
|
||||
function fixture(
|
||||
t,
|
||||
conflictMessage = 'aws failed: (PreconditionFailed) object exists',
|
||||
|
||||
Reference in New Issue
Block a user