refactor(KAN-65): remove release resume mode
This commit is contained in:
@@ -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