@multiplayer-app/agent 0.1.21 → 0.1.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,14 @@
1
+ import { type AgentBuildLog } from '../transport/protocol';
2
+ /** The most one read returns, so a burst of output can't crowd the path back through the gateway. */
3
+ export declare const MAX_LOG_READ_BYTES: number;
4
+ export declare function logFiles(dir: string): Promise<{
5
+ logDir: string;
6
+ names: string[];
7
+ }>;
8
+ /** What's been logged since `cursor`, step by step in the order they ran. */
9
+ export declare function readBuildLogs(dir: string, cursor?: string): Promise<AgentBuildLog>;
10
+ /** A log's last `maxBytes`, starting on a whole character; undefined when it isn't really a log. */
11
+ export declare function readLogTail(dir: string, file: string, maxBytes: number): Promise<Buffer | undefined>;
12
+ /** The end of whichever log was written last: the step running, or the one that failed. */
13
+ export declare function latestLogTail(dir: string): Promise<string | undefined>;
14
+ //# sourceMappingURL=build-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-log.d.ts","sourceRoot":"","sources":["../../src/app/build-log.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,uBAAuB,CAAA;AAG9B,qGAAqG;AACrG,eAAO,MAAM,kBAAkB,QAAY,CAAA;AAiB3C,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAIxF;AA6FD,6EAA6E;AAC7E,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAwBxF;AAED,oGAAoG;AACpG,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQpG;AAED,2FAA2F;AAC3F,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU5E"}
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MAX_LOG_READ_BYTES = void 0;
7
+ exports.logFiles = logFiles;
8
+ exports.readBuildLogs = readBuildLogs;
9
+ exports.readLogTail = readLogTail;
10
+ exports.latestLogTail = latestLogTail;
11
+ // Reading a build's logs from its VM. While a build runs this only happens when someone has the log
12
+ // open, so a build nobody is watching costs nothing. The build owns these files and runs unchecked
13
+ // code, so every read goes through openInside: a link or FIFO put in a log's place reads as missing.
14
+ const node_fs_1 = require("node:fs");
15
+ const node_path_1 = __importDefault(require("node:path"));
16
+ const workload_1 = require("../runtime/workload");
17
+ const protocol_1 = require("../transport/protocol");
18
+ const runner_1 = require("./runner");
19
+ /** The most one read returns, so a burst of output can't crowd the path back through the gateway. */
20
+ exports.MAX_LOG_READ_BYTES = 64 * 1024;
21
+ /**
22
+ * How much a viewer gets of a step they've fallen far behind on. Nobody can read output that fast,
23
+ * so this is enough to see what it's doing, and small enough to keep a noisy build cheap to watch.
24
+ */
25
+ const JUMP_TAIL_BYTES = 16 * 1024;
26
+ /** A limit on how many files of a build's log folder are looked at, whatever it leaves there. */
27
+ const MAX_LOG_FILES = 1000;
28
+ /**
29
+ * A cursor holds a name and an offset for each log, and must stay under MAX_BUILD_LOG_CURSOR_CHARS.
30
+ * Logs past these limits aren't shown live, but still appear once saved. A test checks the worst case.
31
+ */
32
+ const MAX_LIVE_LOGS = 64;
33
+ const MAX_LIVE_NAME_BYTES = 66;
34
+ const fitsInCursor = (name) => Buffer.byteLength(JSON.stringify(name)) <= MAX_LIVE_NAME_BYTES;
35
+ async function logFiles(dir) {
36
+ const logDir = await (0, workload_1.realDirInside)(dir, node_path_1.default.join(dir, runner_1.APP_LOG_DIR)).catch(() => undefined);
37
+ const names = logDir ? await node_fs_1.promises.readdir(logDir).catch(() => []) : [];
38
+ return { logDir: logDir !== null && logDir !== void 0 ? logDir : '', names: names.sort(protocol_1.compareBuildLogs).slice(0, MAX_LOG_FILES) };
39
+ }
40
+ async function withLog(dir, file, read) {
41
+ const log = await (0, workload_1.openInside)(dir, file, node_fs_1.constants.O_NONBLOCK).catch(() => undefined);
42
+ if (!log)
43
+ return undefined;
44
+ try {
45
+ const stats = await log.stat();
46
+ return stats.isFile() ? await read(log, stats.size) : undefined;
47
+ }
48
+ finally {
49
+ await log.close();
50
+ }
51
+ }
52
+ /** Where the last whole UTF-8 character ends. A character cut in half waits for the next read. */
53
+ function endOfWholeCharacters(bytes, length) {
54
+ let lead = length - 1;
55
+ for (let back = 0; lead >= 0 && back < 3 && (bytes[lead] & 0xc0) === 0x80; back++)
56
+ lead--;
57
+ if (lead < 0)
58
+ return length;
59
+ const needed = bytes[lead] >= 0xf0 ? 4 : bytes[lead] >= 0xe0 ? 3 : bytes[lead] >= 0xc0 ? 2 : 1;
60
+ return lead + needed > length ? lead : length;
61
+ }
62
+ /** Where the first whole character starts, for a read that began partway through a log. */
63
+ function startOfWholeCharacters(bytes, length) {
64
+ let start = 0;
65
+ while (start < Math.min(length, 3) && (bytes[start] & 0xc0) === 0x80)
66
+ start++;
67
+ return start;
68
+ }
69
+ function offsetsFrom(cursor) {
70
+ const offsets = new Map();
71
+ if (!cursor)
72
+ return offsets;
73
+ try {
74
+ const parsed = JSON.parse(Buffer.from(cursor, 'base64url').toString('utf8'));
75
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
76
+ return offsets;
77
+ for (const [name, offset] of Object.entries(parsed)) {
78
+ if (Number.isSafeInteger(offset) && offset >= 0)
79
+ offsets.set(name, offset);
80
+ }
81
+ }
82
+ catch (_a) {
83
+ // Cursors come from outside. One that makes no sense just means starting over.
84
+ }
85
+ return offsets;
86
+ }
87
+ const cursorFrom = (offsets) => Buffer.from(JSON.stringify(Object.fromEntries(offsets))).toString('base64url');
88
+ /**
89
+ * Where to read a step from, given how far the viewer has got (`offset`, undefined on their first read).
90
+ * The first read starts at the step's last BUILD_LOG_BYTES, the same as its saved log shows. A viewer
91
+ * further behind than that jumps to the very end, because output printed faster than it can be fetched
92
+ * would otherwise leave them ever further behind. `skippedFrom` is set when they jump.
93
+ */
94
+ function chooseStart(size, offset) {
95
+ if (offset === undefined)
96
+ return { start: Math.max(0, size - protocol_1.BUILD_LOG_BYTES) };
97
+ if (size - offset > protocol_1.BUILD_LOG_BYTES)
98
+ return { start: size - JUMP_TAIL_BYTES, skippedFrom: offset };
99
+ return { start: Math.min(offset, size) };
100
+ }
101
+ /** Reads the next part of one step's log, using at most `room` bytes. */
102
+ async function readStep(log, size, offset, room) {
103
+ const { start, skippedFrom } = chooseStart(size, offset);
104
+ const length = Math.min(size - start, room);
105
+ if (length === 0)
106
+ return { nextOffset: start, bytesUsed: 0, hasMore: false, text: '' };
107
+ const bytes = Buffer.alloc(length);
108
+ const { bytesRead } = await log.read(bytes, 0, length, start);
109
+ const textEnd = endOfWholeCharacters(bytes, bytesRead);
110
+ // An offset from a cursor is always on a character boundary. A start chosen here may not be.
111
+ const startedMidLog = start > 0 && (offset === undefined || skippedFrom !== undefined);
112
+ const textStart = startedMidLog ? startOfWholeCharacters(bytes, textEnd) : 0;
113
+ const notice = skippedFrom === undefined ? '' : `[... ${start + textStart - skippedFrom} bytes of output skipped ...]\n`;
114
+ return {
115
+ nextOffset: start + textEnd,
116
+ bytesUsed: textEnd,
117
+ hasMore: start + length < size,
118
+ text: `${notice}${bytes.toString('utf8', textStart, textEnd)}`,
119
+ };
120
+ }
121
+ /** What's been logged since `cursor`, step by step in the order they ran. */
122
+ async function readBuildLogs(dir, cursor) {
123
+ const previous = offsetsFrom(cursor);
124
+ const { logDir, names } = await logFiles(dir);
125
+ const next = new Map();
126
+ const logs = [];
127
+ let room = exports.MAX_LOG_READ_BYTES;
128
+ let more = false;
129
+ for (const name of names.filter(fitsInCursor).slice(0, MAX_LIVE_LOGS)) {
130
+ const offset = previous.get(name);
131
+ // Kept up front: a step skipped below must not look new next time, or it would all be sent again.
132
+ if (offset !== undefined)
133
+ next.set(name, offset);
134
+ if (room === 0) {
135
+ more = true;
136
+ continue;
137
+ }
138
+ const read = await withLog(dir, node_path_1.default.join(logDir, name), (log, size) => readStep(log, size, offset, room));
139
+ if (!read)
140
+ continue;
141
+ next.set(name, read.nextOffset);
142
+ room -= read.bytesUsed;
143
+ more || (more = read.hasMore);
144
+ if (read.text)
145
+ logs.push({ name, text: read.text });
146
+ }
147
+ return { logs, cursor: cursorFrom(next), more };
148
+ }
149
+ /** A log's last `maxBytes`, starting on a whole character; undefined when it isn't really a log. */
150
+ function readLogTail(dir, file, maxBytes) {
151
+ return withLog(dir, file, async (log, size) => {
152
+ const length = Math.min(size, maxBytes);
153
+ const bytes = Buffer.alloc(length);
154
+ const { bytesRead } = await log.read(bytes, 0, length, size - length);
155
+ const end = endOfWholeCharacters(bytes, bytesRead);
156
+ return bytes.subarray(length < size ? startOfWholeCharacters(bytes, end) : 0, end);
157
+ });
158
+ }
159
+ /** The end of whichever log was written last: the step running, or the one that failed. */
160
+ async function latestLogTail(dir) {
161
+ var _a;
162
+ const { logDir, names } = await logFiles(dir);
163
+ const dated = await Promise.all(names.map(async (name) => {
164
+ const file = node_path_1.default.join(logDir, name);
165
+ const stats = await node_fs_1.promises.lstat(file).catch(() => undefined);
166
+ return (stats === null || stats === void 0 ? void 0 : stats.isFile()) ? { file, at: stats.mtimeMs } : undefined;
167
+ }));
168
+ const latest = dated.filter((log) => log !== undefined).sort((a, b) => b.at - a.at)[0];
169
+ if (!latest)
170
+ return undefined;
171
+ return ((_a = (await readLogTail(dir, latest.file, protocol_1.BUILD_LOG_TAIL_BYTES))) === null || _a === void 0 ? void 0 : _a.toString('utf8')) || undefined;
172
+ }
173
+ //# sourceMappingURL=build-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-log.js","sourceRoot":"","sources":["../../src/app/build-log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=build-log.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-log.test.d.ts","sourceRoot":"","sources":["../../src/app/build-log.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ var _a;
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const strict_1 = __importDefault(require("node:assert/strict"));
8
+ const node_child_process_1 = require("node:child_process");
9
+ const node_fs_1 = require("node:fs");
10
+ const node_os_1 = __importDefault(require("node:os"));
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const node_test_1 = require("node:test");
13
+ const protocol_1 = require("../transport/protocol");
14
+ const workload_1 = require("../runtime/workload");
15
+ const build_log_1 = require("./build-log");
16
+ const isRoot = ((_a = process.getuid) === null || _a === void 0 ? void 0 : _a.call(process)) === 0;
17
+ (0, node_test_1.describe)('a running build\'s logs', () => {
18
+ let dir;
19
+ let logs;
20
+ (0, node_test_1.beforeEach)(async () => {
21
+ dir = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'build-log-'));
22
+ logs = node_path_1.default.join(dir, '.builder/logs');
23
+ await node_fs_1.promises.mkdir(logs, { recursive: true });
24
+ });
25
+ (0, node_test_1.afterEach)(() => node_fs_1.promises.rm(dir, { recursive: true, force: true }));
26
+ const write = (name, text) => node_fs_1.promises.writeFile(node_path_1.default.join(logs, name), text);
27
+ const append = (name, text) => node_fs_1.promises.appendFile(node_path_1.default.join(logs, name), text);
28
+ const textOf = ({ logs: chunks }, name) => { var _a; return (_a = chunks.find((chunk) => chunk.name === name)) === null || _a === void 0 ? void 0 : _a.text; };
29
+ /** Reads to the end, as someone watching does. */
30
+ async function readAll(from) {
31
+ var _a;
32
+ const text = new Map();
33
+ let cursor = from;
34
+ for (let reads = 1;; reads++) {
35
+ const answer = await (0, build_log_1.readBuildLogs)(dir, cursor);
36
+ for (const chunk of answer.logs)
37
+ text.set(chunk.name, `${(_a = text.get(chunk.name)) !== null && _a !== void 0 ? _a : ''}${chunk.text}`);
38
+ cursor = answer.cursor;
39
+ if (!answer.more)
40
+ return { text, cursor, reads };
41
+ }
42
+ }
43
+ (0, node_test_1.it)('has nothing yet before a build logs anything, or has a log folder', async () => {
44
+ await node_fs_1.promises.rm(logs, { recursive: true });
45
+ const answer = await (0, build_log_1.readBuildLogs)(dir);
46
+ strict_1.default.deepEqual(answer.logs, []);
47
+ strict_1.default.equal(answer.more, false);
48
+ });
49
+ (0, node_test_1.it)('gives everything so far from the beginning, however late it\'s asked', async () => {
50
+ await write('install.log', 'added 3 packages\n');
51
+ await write('web.build.log', 'compiling\n');
52
+ const answer = await (0, build_log_1.readBuildLogs)(dir);
53
+ strict_1.default.equal(textOf(answer, 'install.log'), 'added 3 packages\n');
54
+ strict_1.default.equal(textOf(answer, 'web.build.log'), 'compiling\n');
55
+ });
56
+ (0, node_test_1.it)('gives only what\'s new when asked with a cursor', async () => {
57
+ await write('install.log', 'one\n');
58
+ const first = await (0, build_log_1.readBuildLogs)(dir);
59
+ strict_1.default.deepEqual((await (0, build_log_1.readBuildLogs)(dir, first.cursor)).logs, []);
60
+ await append('install.log', 'two\n');
61
+ const second = await (0, build_log_1.readBuildLogs)(dir, first.cursor);
62
+ strict_1.default.deepEqual(second.logs, [{ name: 'install.log', text: 'two\n' }]);
63
+ strict_1.default.deepEqual((await (0, build_log_1.readBuildLogs)(dir, second.cursor)).logs, []);
64
+ });
65
+ (0, node_test_1.it)('picks up a step that starts later, keeping its place in the others', async () => {
66
+ await write('install.log', 'one\n');
67
+ const first = await (0, build_log_1.readBuildLogs)(dir);
68
+ await write('web.build.log', 'compiling\n');
69
+ strict_1.default.deepEqual((await (0, build_log_1.readBuildLogs)(dir, first.cursor)).logs, [{ name: 'web.build.log', text: 'compiling\n' }]);
70
+ });
71
+ (0, node_test_1.it)('gives steps in the order they ran, whatever they\'re called', async () => {
72
+ await write('web.build.log', 'c');
73
+ await write('api.build.log', 'b');
74
+ await write('install.log', 'a');
75
+ strict_1.default.deepEqual((await (0, build_log_1.readBuildLogs)(dir)).logs.map(({ name }) => name), ['install.log', 'api.build.log', 'web.build.log']);
76
+ });
77
+ (0, node_test_1.it)('never gives more than one read\'s worth, and says there\'s more, losing nothing', async () => {
78
+ const big = `${'x'.repeat(build_log_1.MAX_LOG_READ_BYTES + 1000)}\n`;
79
+ await write('install.log', big);
80
+ await write('web.build.log', 'after\n');
81
+ const first = await (0, build_log_1.readBuildLogs)(dir);
82
+ strict_1.default.equal(first.more, true);
83
+ strict_1.default.equal(first.logs.reduce((sum, chunk) => sum + chunk.text.length, 0), build_log_1.MAX_LOG_READ_BYTES);
84
+ const { text } = await readAll();
85
+ strict_1.default.equal(text.get('install.log'), big);
86
+ strict_1.default.equal(text.get('web.build.log'), 'after\n');
87
+ });
88
+ (0, node_test_1.it)('doesn\'t ask to be asked again when it has given everything', async () => {
89
+ await write('install.log', 'x'.repeat(build_log_1.MAX_LOG_READ_BYTES));
90
+ strict_1.default.equal((await (0, build_log_1.readBuildLogs)(dir)).more, false);
91
+ });
92
+ (0, node_test_1.it)('never cuts a character in half, wherever a read ends', async () => {
93
+ // Each 4 bytes, so whichever read limit falls within one.
94
+ const text = '😀'.repeat(build_log_1.MAX_LOG_READ_BYTES);
95
+ await write('install.log', text);
96
+ const read = await readAll();
97
+ strict_1.default.equal(read.text.get('install.log'), text.slice(-Math.floor(protocol_1.BUILD_LOG_BYTES / 4) * 2));
98
+ strict_1.default.ok(!read.text.get('install.log').includes('�'));
99
+ });
100
+ (0, node_test_1.it)('holds back half a character that\'s still being written', async () => {
101
+ const smile = Buffer.from('😀');
102
+ await write('install.log', Buffer.concat([Buffer.from('a'), smile.subarray(0, 2)]));
103
+ const first = await (0, build_log_1.readBuildLogs)(dir);
104
+ strict_1.default.equal(textOf(first, 'install.log'), 'a');
105
+ await append('install.log', smile.subarray(2));
106
+ strict_1.default.equal(textOf(await (0, build_log_1.readBuildLogs)(dir, first.cursor), 'install.log'), '😀');
107
+ });
108
+ (0, node_test_1.it)('starts a very long step at its end, as its saved log will', async () => {
109
+ const start = 'the very start\n';
110
+ await write('install.log', `${start}${'y'.repeat(protocol_1.BUILD_LOG_BYTES)}`);
111
+ const { text } = await readAll();
112
+ strict_1.default.equal(text.get('install.log').length, protocol_1.BUILD_LOG_BYTES);
113
+ strict_1.default.ok(!text.get('install.log').includes('the very start'));
114
+ });
115
+ (0, node_test_1.it)('takes any cursor without trouble: one that makes no sense means starting over', async () => {
116
+ await write('install.log', 'one\n');
117
+ for (const cursor of ['not base64!', 'e30', Buffer.from('[1,2]').toString('base64url'), Buffer.from('{"install.log":"x"}').toString('base64url'), Buffer.from('{"install.log":-5}').toString('base64url')]) {
118
+ strict_1.default.equal(textOf(await (0, build_log_1.readBuildLogs)(dir, cursor), 'install.log'), 'one\n', cursor);
119
+ }
120
+ });
121
+ (0, node_test_1.it)('has nothing to give past a log\'s end', async () => {
122
+ await write('install.log', 'one\n');
123
+ const past = Buffer.from(JSON.stringify({ 'install.log': 1000000 })).toString('base64url');
124
+ strict_1.default.deepEqual((await (0, build_log_1.readBuildLogs)(dir, past)).logs, []);
125
+ });
126
+ (0, node_test_1.it)('reads only what the cursor names on disk: a name in it reaches nothing', async () => {
127
+ await write('install.log', 'one\n');
128
+ const cursor = Buffer.from(JSON.stringify({ '../../secret': 0 })).toString('base64url');
129
+ strict_1.default.deepEqual((await (0, build_log_1.readBuildLogs)(dir, cursor)).logs.map(({ name }) => name), ['install.log']);
130
+ });
131
+ (0, node_test_1.it)('keeps a cursor short enough for a URL, however many files a build leaves and however they\'re named', async () => {
132
+ const atTheEnd = (cursor) => Buffer.from(JSON.stringify(Object.fromEntries(Object.keys(JSON.parse(Buffer.from(cursor, 'base64url').toString('utf8'))).map((name) => [name, Number.MAX_SAFE_INTEGER])))).toString('base64url');
133
+ for (const unit of ['n', '漢', '\u0001', '😀']) {
134
+ await node_fs_1.promises.rm(logs, { recursive: true });
135
+ await node_fs_1.promises.mkdir(logs);
136
+ const length = 200 / Buffer.byteLength(unit);
137
+ for (let index = 0; index < 300; index++)
138
+ await write(`${index}${unit.repeat(index % 2 ? 8 : length)}`, 'x');
139
+ const { cursor } = await (0, build_log_1.readBuildLogs)(dir);
140
+ strict_1.default.ok(atTheEnd(cursor).length < protocol_1.MAX_BUILD_LOG_CURSOR_CHARS, `${JSON.stringify(unit)}: ${atTheEnd(cursor).length}`);
141
+ }
142
+ });
143
+ (0, node_test_1.it)('still follows a build with many steps of ordinary names', async () => {
144
+ for (let index = 0; index < 64; index++)
145
+ await write(`service-with-a-long-enough-name-${index}.build.log`, 'x');
146
+ const { logs: chunks, cursor } = await (0, build_log_1.readBuildLogs)(dir);
147
+ strict_1.default.equal(chunks.length, 64);
148
+ strict_1.default.ok(cursor.length < protocol_1.MAX_BUILD_LOG_CURSOR_CHARS);
149
+ });
150
+ (0, node_test_1.it)('keeps its place in a log it can\'t open this time, rather than giving it all again', async () => {
151
+ await write('install.log', 'one\n');
152
+ const first = await (0, build_log_1.readBuildLogs)(dir);
153
+ await node_fs_1.promises.rm(node_path_1.default.join(logs, 'install.log'));
154
+ await node_fs_1.promises.symlink('/nowhere', node_path_1.default.join(logs, 'install.log'));
155
+ const during = await (0, build_log_1.readBuildLogs)(dir, first.cursor);
156
+ strict_1.default.deepEqual(during.logs, []);
157
+ await node_fs_1.promises.rm(node_path_1.default.join(logs, 'install.log'));
158
+ await write('install.log', 'one\ntwo\n');
159
+ strict_1.default.deepEqual((await (0, build_log_1.readBuildLogs)(dir, during.cursor)).logs, [{ name: 'install.log', text: 'two\n' }]);
160
+ });
161
+ (0, node_test_1.it)('keeps its place in a step a full read didn\'t reach', async () => {
162
+ await write('install.log', 'a');
163
+ await write('web.build.log', 'b');
164
+ const first = await (0, build_log_1.readBuildLogs)(dir);
165
+ await append('install.log', 'x'.repeat(build_log_1.MAX_LOG_READ_BYTES));
166
+ await append('web.build.log', 'c');
167
+ const second = await (0, build_log_1.readBuildLogs)(dir, first.cursor);
168
+ strict_1.default.equal(second.more, true);
169
+ strict_1.default.deepEqual(second.logs.map(({ name }) => name), ['install.log']);
170
+ strict_1.default.deepEqual((await (0, build_log_1.readBuildLogs)(dir, second.cursor)).logs, [{ name: 'web.build.log', text: 'c' }]);
171
+ });
172
+ (0, node_test_1.it)('jumps someone far behind to a step\'s very end, saying so, with nothing more to fetch right away', async () => {
173
+ await write('install.log', 'start\n');
174
+ const first = await (0, build_log_1.readBuildLogs)(dir);
175
+ await append('install.log', `${'y'.repeat(protocol_1.BUILD_LOG_BYTES * 2)}\nthe end\n`);
176
+ const answer = await (0, build_log_1.readBuildLogs)(dir, first.cursor);
177
+ const log = textOf(answer, 'install.log');
178
+ strict_1.default.match(log, /^\[\.\.\. \d+ bytes of output skipped \.\.\.\]\n/);
179
+ strict_1.default.ok(log.endsWith('the end\n'));
180
+ strict_1.default.ok(log.length < 17 * 1024, 'only what it takes to see what it\'s doing');
181
+ strict_1.default.equal(answer.more, false, 'a noisy build goes back to the usual pace');
182
+ strict_1.default.deepEqual((await (0, build_log_1.readBuildLogs)(dir, answer.cursor)).logs, []);
183
+ });
184
+ (0, node_test_1.it)('says how much it skipped, counting from where someone was', async () => {
185
+ var _a;
186
+ await write('install.log', 'a'.repeat(10));
187
+ const first = await (0, build_log_1.readBuildLogs)(dir);
188
+ await append('install.log', 'b'.repeat(protocol_1.BUILD_LOG_BYTES + 1));
189
+ const log = textOf(await (0, build_log_1.readBuildLogs)(dir, first.cursor), 'install.log');
190
+ strict_1.default.equal((_a = /\[\.\.\. (\d+) bytes/.exec(log)) === null || _a === void 0 ? void 0 : _a[1], String(protocol_1.BUILD_LOG_BYTES + 1 - 16 * 1024));
191
+ });
192
+ (0, node_test_1.it)('doesn\'t count someone reading along within a step\'s end as far behind', async () => {
193
+ await write('install.log', 'start\n');
194
+ const first = await (0, build_log_1.readBuildLogs)(dir);
195
+ const next = 'z'.repeat(protocol_1.BUILD_LOG_BYTES);
196
+ await append('install.log', next);
197
+ strict_1.default.equal((await readAll(first.cursor)).text.get('install.log'), next);
198
+ });
199
+ (0, node_test_1.it)('finds the latest log for the record, however long its name or wherever it sorts', async () => {
200
+ for (let index = 0; index < 100; index++)
201
+ await write(`a-${index}.build.log`, 'older');
202
+ await new Promise((resolve) => setTimeout(resolve, 20));
203
+ await write(`z-${'long-service-name'.repeat(6)}.build.log`, 'the one that failed');
204
+ strict_1.default.equal(await (0, build_log_1.latestLogTail)(dir), 'the one that failed');
205
+ });
206
+ (0, node_test_1.it)('gives the end of the latest log for the release\'s record', async () => {
207
+ await write('install.log', 'old');
208
+ await new Promise((resolve) => setTimeout(resolve, 20));
209
+ await write('web.build.log', `${'z'.repeat(20000)}the end`);
210
+ const tail = await (0, build_log_1.latestLogTail)(dir);
211
+ strict_1.default.equal(tail === null || tail === void 0 ? void 0 : tail.length, protocol_1.BUILD_LOG_TAIL_BYTES);
212
+ strict_1.default.ok(tail === null || tail === void 0 ? void 0 : tail.endsWith('the end'));
213
+ await node_fs_1.promises.rm(logs, { recursive: true });
214
+ strict_1.default.equal(await (0, build_log_1.latestLogTail)(dir), undefined);
215
+ });
216
+ (0, node_test_1.describe)('from a hostile build, whose code owns these files', { skip: !isRoot && 'only root reads as the runtime does' }, () => {
217
+ const SECRET = 'SECRET-only-root-can-read';
218
+ let secret;
219
+ (0, node_test_1.beforeEach)(async () => {
220
+ secret = node_path_1.default.join(node_path_1.default.dirname(dir), `secret-${node_path_1.default.basename(dir)}`);
221
+ await node_fs_1.promises.writeFile(secret, SECRET, { mode: 0o600 });
222
+ (0, node_child_process_1.execFileSync)('chown', ['-R', `${workload_1.WORKLOAD_UID}:${workload_1.WORKLOAD_GID}`, dir]);
223
+ });
224
+ (0, node_test_1.afterEach)(() => node_fs_1.promises.rm(secret, { force: true }));
225
+ (0, node_test_1.it)('reads a link to a secret as nothing', async () => {
226
+ await node_fs_1.promises.symlink(secret, node_path_1.default.join(logs, 'install.log'));
227
+ strict_1.default.deepEqual((await (0, build_log_1.readBuildLogs)(dir)).logs, []);
228
+ strict_1.default.equal(await (0, build_log_1.latestLogTail)(dir), undefined);
229
+ });
230
+ (0, node_test_1.it)('reads nothing when the log folder itself is a link', async () => {
231
+ await node_fs_1.promises.rm(logs, { recursive: true });
232
+ await node_fs_1.promises.symlink(node_path_1.default.dirname(secret), logs);
233
+ const answer = await (0, build_log_1.readBuildLogs)(dir);
234
+ strict_1.default.deepEqual(answer.logs, []);
235
+ strict_1.default.equal(await (0, build_log_1.latestLogTail)(dir), undefined);
236
+ });
237
+ (0, node_test_1.it)('doesn\'t hang on a FIFO left in a log\'s place', { timeout: 5000 }, async () => {
238
+ (0, node_child_process_1.execFileSync)('mkfifo', [node_path_1.default.join(logs, 'install.log')]);
239
+ (0, node_fs_1.chownSync)(node_path_1.default.join(logs, 'install.log'), workload_1.WORKLOAD_UID, workload_1.WORKLOAD_GID);
240
+ strict_1.default.deepEqual((await (0, build_log_1.readBuildLogs)(dir)).logs, []);
241
+ });
242
+ (0, node_test_1.it)('ignores a folder or a device left in a log\'s place', async () => {
243
+ await node_fs_1.promises.mkdir(node_path_1.default.join(logs, 'install.log'));
244
+ await node_fs_1.promises.symlink('/dev/zero', node_path_1.default.join(logs, 'web.build.log'));
245
+ strict_1.default.deepEqual((await (0, build_log_1.readBuildLogs)(dir)).logs, []);
246
+ });
247
+ (0, node_test_1.it)('still reads a real log beside all of that', async () => {
248
+ await node_fs_1.promises.symlink(secret, node_path_1.default.join(logs, 'evil.log'));
249
+ await write('install.log', 'honest\n');
250
+ const answer = await (0, build_log_1.readBuildLogs)(dir);
251
+ strict_1.default.deepEqual(answer.logs, [{ name: 'install.log', text: 'honest\n' }]);
252
+ });
253
+ });
254
+ });
255
+ //# sourceMappingURL=build-log.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-log.test.js","sourceRoot":"","sources":["../../src/app/build-log.test.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAuC;AACvC,2DAAiD;AACjD,qCAAmD;AACnD,sDAAwB;AACxB,0DAA4B;AAC5B,yCAA+D;AAC/D,oDAA6H;AAC7H,kDAAgE;AAChE,2CAA8E;AAE9E,MAAM,MAAM,GAAG,CAAA,MAAA,OAAO,CAAC,MAAM,uDAAI,MAAK,CAAC,CAAA;AAEvC,IAAA,oBAAQ,EAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,GAAW,CAAA;IACf,IAAI,IAAY,CAAA;IAEhB,IAAA,sBAAU,EAAC,KAAK,IAAI,EAAE;QACpB,GAAG,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAA;QAC5D,IAAI,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;QACtC,MAAM,kBAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IACF,IAAA,qBAAS,EAAC,GAAG,EAAE,CAAC,kBAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAE7D,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,IAAqB,EAAE,EAAE,CAAC,kBAAE,CAAC,SAAS,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;IAChG,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,IAAqB,EAAE,EAAE,CAAC,kBAAE,CAAC,UAAU,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;IAClG,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAiB,EAAE,IAAY,EAAE,EAAE,WAAC,OAAA,MAAA,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,0CAAE,IAAI,CAAA,EAAA,CAAA;IAEnH,kDAAkD;IAClD,KAAK,UAAU,OAAO,CAAC,IAAa;;QAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAA;QACtC,IAAI,MAAM,GAAG,IAAI,CAAA;QACjB,KAAK,IAAI,KAAK,GAAG,CAAC,GAAI,KAAK,EAAE,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,MAAM,CAAC,CAAA;YAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI;gBAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,MAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAI,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;YACnG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;QAClD,CAAC;IACH,CAAC;IAED,IAAA,cAAE,EAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,kBAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACtC,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;QACvC,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACjC,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,KAAK,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAA;QAChD,MAAM,KAAK,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;QACvC,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,oBAAoB,CAAC,CAAA;QACjE,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,aAAa,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACnC,MAAM,KAAK,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;QACtC,gBAAM,CAAC,SAAS,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACnE,MAAM,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACpC,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QACrD,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;QACvE,gBAAM,CAAC,SAAS,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACtE,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACnC,MAAM,KAAK,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;QACtC,MAAM,KAAK,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;QAC3C,gBAAM,CAAC,SAAS,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAA;IACnH,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;QACjC,MAAM,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;QACjC,MAAM,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;QAC/B,gBAAM,CAAC,SAAS,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC,CAAA;IAC9H,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,8BAAkB,GAAG,IAAI,CAAC,IAAI,CAAA;QACxD,MAAM,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;QAC/B,MAAM,KAAK,CAAC,eAAe,EAAE,SAAS,CAAC,CAAA;QACvC,MAAM,KAAK,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;QACtC,gBAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC9B,gBAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,8BAAkB,CAAC,CAAA;QAC/F,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;QAChC,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAA;QAC1C,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,8BAAkB,CAAC,CAAC,CAAA;QAC1D,gBAAM,CAAC,KAAK,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,0DAA0D;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,8BAAkB,CAAC,CAAA;QAC5C,MAAM,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QAChC,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;QAC5B,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,0BAAe,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC5F,gBAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/B,MAAM,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACnF,MAAM,KAAK,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;QACtC,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,CAAA;QAC/C,MAAM,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9C,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,CAAA;IACnF,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,KAAK,GAAG,kBAAkB,CAAA;QAChC,MAAM,KAAK,CAAC,aAAa,EAAE,GAAG,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,0BAAe,CAAC,EAAE,CAAC,CAAA;QACpE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;QAChC,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC,MAAM,EAAE,0BAAe,CAAC,CAAA;QAC9D,gBAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACnC,KAAK,MAAM,MAAM,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YAC3M,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,MAAM,CAAC,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QACxF,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,OAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAC5F,gBAAM,CAAC,SAAS,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QACvF,gBAAM,CAAC,SAAS,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IACpG,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,qGAAqG,EAAE,KAAK,IAAI,EAAE;QACnH,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAW,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAC/O,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,kBAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACtC,MAAM,kBAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACpB,MAAM,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YAC5C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE;gBAAE,MAAM,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;YAC5G,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;YAC3C,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,qCAA0B,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QACxH,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE;YAAE,MAAM,KAAK,CAAC,mCAAmC,KAAK,YAAY,EAAE,GAAG,CAAC,CAAA;QAC/G,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;QACzD,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAC/B,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,qCAA0B,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;QAClG,MAAM,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACnC,MAAM,KAAK,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;QACtC,MAAM,kBAAE,CAAC,EAAE,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAA;QAC3C,MAAM,kBAAE,CAAC,OAAO,CAAC,UAAU,EAAE,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QACrD,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACjC,MAAM,kBAAE,CAAC,EAAE,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAA;QAC3C,MAAM,KAAK,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;QACxC,gBAAM,CAAC,SAAS,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IAC5G,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;QAC/B,MAAM,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;QACjC,MAAM,KAAK,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;QACtC,MAAM,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,8BAAkB,CAAC,CAAC,CAAA;QAC3D,MAAM,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;QAClC,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QACrD,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC/B,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;QACtE,gBAAM,CAAC,SAAS,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IAC1G,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,kGAAkG,EAAE,KAAK,IAAI,EAAE;QAChH,MAAM,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;QACrC,MAAM,KAAK,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;QACtC,MAAM,MAAM,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,0BAAe,GAAG,CAAC,CAAC,aAAa,CAAC,CAAA;QAC5E,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QACrD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAE,CAAA;QAC1C,gBAAM,CAAC,KAAK,CAAC,GAAG,EAAE,kDAAkD,CAAC,CAAA;QACrE,gBAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAA;QACpC,gBAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,4CAA4C,CAAC,CAAA;QAC/E,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,2CAA2C,CAAC,CAAA;QAC7E,gBAAM,CAAC,SAAS,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACtE,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;;QACzE,MAAM,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1C,MAAM,KAAK,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;QACtC,MAAM,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,0BAAe,GAAG,CAAC,CAAC,CAAC,CAAA;QAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,aAAa,CAAE,CAAA;QAC1E,gBAAM,CAAC,KAAK,CAAC,MAAA,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,0CAAG,CAAC,CAAC,EAAE,MAAM,CAAC,0BAAe,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAC9F,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;QACrC,MAAM,KAAK,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;QACtC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,0BAAe,CAAC,CAAA;QACxC,MAAM,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QACjC,gBAAM,CAAC,KAAK,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,CAAA;IAC3E,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE;YAAE,MAAM,KAAK,CAAC,KAAK,KAAK,YAAY,EAAE,OAAO,CAAC,CAAA;QACtF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;QACvD,MAAM,KAAK,CAAC,KAAK,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAA;QAClF,gBAAM,CAAC,KAAK,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,EAAE,qBAAqB,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;QACjC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;QACvD,MAAM,KAAK,CAAC,eAAe,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,KAAM,CAAC,SAAS,CAAC,CAAA;QAC5D,MAAM,IAAI,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;QACrC,gBAAM,CAAC,KAAK,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE,+BAAoB,CAAC,CAAA;QAChD,gBAAM,CAAC,EAAE,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;QACpC,MAAM,kBAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACtC,gBAAM,CAAC,KAAK,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,IAAA,oBAAQ,EAAC,mDAAmD,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,qCAAqC,EAAE,EAAE,GAAG,EAAE;QAC7H,MAAM,MAAM,GAAG,2BAA2B,CAAA;QAC1C,IAAI,MAAc,CAAA;QAElB,IAAA,sBAAU,EAAC,KAAK,IAAI,EAAE;YACpB,MAAM,GAAG,mBAAI,CAAC,IAAI,CAAC,mBAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU,mBAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACrE,MAAM,kBAAE,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YACnD,IAAA,iCAAY,EAAC,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,uBAAY,IAAI,uBAAY,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;QACvE,CAAC,CAAC,CAAA;QACF,IAAA,qBAAS,EAAC,GAAG,EAAE,CAAC,kBAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAE/C,IAAA,cAAE,EAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,kBAAE,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAA;YACxD,gBAAM,CAAC,SAAS,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;YACrD,gBAAM,CAAC,KAAK,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,IAAA,cAAE,EAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,kBAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACtC,MAAM,kBAAE,CAAC,OAAO,CAAC,mBAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAA;YAC5C,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;YACvC,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;YACjC,gBAAM,CAAC,KAAK,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,IAAA,cAAE,EAAC,gDAAgD,EAAE,EAAE,OAAO,EAAE,IAAK,EAAE,EAAE,KAAK,IAAI,EAAE;YAClF,IAAA,iCAAY,EAAC,QAAQ,EAAE,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;YACxD,IAAA,mBAAS,EAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,uBAAY,EAAE,uBAAY,CAAC,CAAA;YACrE,gBAAM,CAAC,SAAS,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;QAEF,IAAA,cAAE,EAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAA;YAC9C,MAAM,kBAAE,CAAC,OAAO,CAAC,WAAW,EAAE,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAA;YAC/D,gBAAM,CAAC,SAAS,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;QAEF,IAAA,cAAE,EAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,kBAAE,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;YACrD,MAAM,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;YACtC,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;YACvC,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;QAC5E,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -34,6 +34,10 @@ export interface ReleaseUpload {
34
34
  * anything after it, since a release that has one is finished.
35
35
  */
36
36
  export declare function uploadRelease(upload: ReleaseUpload, config: AppConfig, dir: string): Promise<ReleaseManifest>;
37
- /** Uploads the build's logs, for whoever looks into it later, a build that failed too. */
38
- export declare function uploadReleaseLogs(upload: ReleaseUpload, logDir: string): Promise<void>;
37
+ /**
38
+ * Uploads the build's logs, for whoever looks into it later, a build that failed too. The build owns
39
+ * its log folder, and could have made it a link to anywhere: only the workspace can be what's
40
+ * checked against, or the runtime would read whatever it points at, and publish that.
41
+ */
42
+ export declare function uploadReleaseLogs(upload: ReleaseUpload, dir: string): Promise<void>;
39
43
  //# sourceMappingURL=release-artifacts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"release-artifacts.d.ts","sourceRoot":"","sources":["../../src/app/release-artifacts.ts"],"names":[],"mappings":"AAaA,OAAO,EAAkG,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzJ,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAoBzC,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAA;IACZ,qFAAqF;IACrF,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAA;CAClD;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,CAAA;IACV,6EAA6E;IAC7E,IAAI,EAAE,eAAe,EAAE,CAAA;CACxB;AAED,mDAAmD;AACnD,qBAAa,kBAAmB,SAAQ,KAAK;CAAG;AAuDhD,4HAA4H;AAC5H,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAsBzH;AAED,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAgFD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAenH;AAED,0FAA0F;AAC1F,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5F"}
1
+ {"version":3,"file":"release-artifacts.d.ts","sourceRoot":"","sources":["../../src/app/release-artifacts.ts"],"names":[],"mappings":"AAcA,OAAO,EAAmH,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAC1K,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAmBzC,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAA;IACZ,qFAAqF;IACrF,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAA;CAClD;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,CAAA;IACV,6EAA6E;IAC7E,IAAI,EAAE,eAAe,EAAE,CAAA;CACxB;AAED,mDAAmD;AACnD,qBAAa,kBAAmB,SAAQ,KAAK;CAAG;AAuDhD,4HAA4H;AAC5H,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAsBzH;AAED,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAgFD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAenH;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQzF"}
@@ -20,8 +20,8 @@ const node_util_1 = require("node:util");
20
20
  const node_zlib_1 = require("node:zlib");
21
21
  const snapshot_sync_1 = require("../persistence/snapshot-sync");
22
22
  const workload_1 = require("../runtime/workload");
23
+ const build_log_1 = require("./build-log");
23
24
  const protocol_1 = require("../transport/protocol");
24
- const runner_1 = require("./runner");
25
25
  const static_server_1 = require("./static-server");
26
26
  /** What a site never serves, in the folder a build left it in. */
27
27
  const NEVER_SERVED = new Set(['node_modules', '.venv', '.git', '.builder', '__pycache__', '.turbo', '.cache']);
@@ -216,14 +216,24 @@ async function uploadRelease(upload, config, dir) {
216
216
  // What was built, with every preset filled in, so nothing is left to detect from the output: what
217
217
  // the VM runs and the gateway routes by.
218
218
  await put(upload, (0, snapshot_sync_1.fileRoute)(protocol_1.APP_CONFIG_FILE), json(config));
219
- await uploadReleaseLogs(upload, node_path_1.default.join(dir, runner_1.APP_LOG_DIR));
219
+ await uploadReleaseLogs(upload, dir);
220
220
  const manifest = { version: 1, site: site.map((file) => siteFiles.get(file.path)) };
221
221
  await put(upload, `/${protocol_1.RELEASE_MANIFEST_FILE}`, json(manifest));
222
222
  return manifest;
223
223
  }
224
- /** Uploads the build's logs, for whoever looks into it later, a build that failed too. */
225
- async function uploadReleaseLogs(upload, logDir) {
226
- const names = await node_fs_1.promises.readdir(logDir).catch(() => []);
227
- await (0, snapshot_sync_1.inPool)(names, (name) => put(upload, `/logs/${encodeURIComponent(name)}`, () => (0, workload_1.readInside)(logDir, node_path_1.default.join(logDir, name))));
224
+ /**
225
+ * Uploads the build's logs, for whoever looks into it later, a build that failed too. The build owns
226
+ * its log folder, and could have made it a link to anywhere: only the workspace can be what's
227
+ * checked against, or the runtime would read whatever it points at, and publish that.
228
+ */
229
+ async function uploadReleaseLogs(upload, dir) {
230
+ const { logDir, names } = await (0, build_log_1.logFiles)(dir);
231
+ await (0, snapshot_sync_1.inPool)(names, async (name) => {
232
+ // Only the end, which is all the app ever shows: a huge log can't fail the release or fill memory.
233
+ // Anything that isn't a regular file reads as undefined and is skipped, without failing the build.
234
+ const tail = await (0, build_log_1.readLogTail)(dir, node_path_1.default.join(logDir, name), protocol_1.BUILD_LOG_BYTES);
235
+ if (tail)
236
+ await put(upload, `/logs/${encodeURIComponent(name)}`, () => tail);
237
+ });
228
238
  }
229
239
  //# sourceMappingURL=release-artifacts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"release-artifacts.js","sourceRoot":"","sources":["../../src/app/release-artifacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"release-artifacts.js","sourceRoot":"","sources":["../../src/app/release-artifacts.ts"],"names":[],"mappings":"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"}