Skip to content

Commit a28d065

Browse files
wip v26
1 parent b1b4222 commit a28d065

4 files changed

Lines changed: 61 additions & 1 deletion

File tree

uapi/jest.config.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ module.exports = {
7070
// -------------------------------------------------------------------
7171
'^@/lib/protocol-demonstration-app-context$': '<rootDir>/lib/protocol-demonstration-app-context.ts',
7272
'^@/lib/bitcode-app-context$': '<rootDir>/lib/bitcode-app-context.ts',
73+
'^@/lib/bitcode-app-context-options$': '<rootDir>/lib/bitcode-app-context-options.ts',
7374
'^@/lib/mock-review-mode$': '<rootDir>/lib/mock-review-mode.ts',
7475
'^@/lib/logger$': '<rootDir>/../packages/pipelines-generics/src/logger.ts',
7576
'^@/lib/engine/pipeline$': '<rootDir>/../packages/pipelines-generics/src/pipeline/index.ts',
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import os from 'node:os';
2+
import path from 'node:path';
3+
4+
type BitcodeAppContextOptions = {
5+
dataPath?: string;
6+
};
7+
8+
function isServerlessRuntime(env: NodeJS.ProcessEnv) {
9+
return (
10+
env.VERCEL === '1'
11+
|| Boolean(env.LAMBDA_TASK_ROOT)
12+
|| Boolean(env.AWS_LAMBDA_FUNCTION_NAME)
13+
|| String(env.AWS_EXECUTION_ENV || '').startsWith('AWS_Lambda')
14+
);
15+
}
16+
17+
export function resolveBitcodeAppContextOptions(
18+
env: NodeJS.ProcessEnv = process.env,
19+
): BitcodeAppContextOptions {
20+
const configuredDataPath = String(env.BITCODE_DATA_PATH || '').trim();
21+
if (configuredDataPath) {
22+
return { dataPath: configuredDataPath };
23+
}
24+
25+
if (isServerlessRuntime(env)) {
26+
return {
27+
dataPath: path.join(os.tmpdir(), 'bitcode-uapi-state.json'),
28+
};
29+
}
30+
31+
return {};
32+
}

uapi/lib/bitcode-app-context.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import { createAppContext } from '@bitcode/protocol-demonstration';
22
import { NextResponse } from 'next/server';
33

4+
import { resolveBitcodeAppContextOptions } from '@/lib/bitcode-app-context-options';
5+
46
type StatusError = Error & { statusCode?: number | undefined };
57

6-
const bitcodeAppContext = createAppContext();
8+
const bitcodeAppContext = createAppContext(resolveBitcodeAppContextOptions());
79

810
export function getBitcodeAppContext() {
911
return bitcodeAppContext;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import os from 'node:os';
2+
import path from 'node:path';
3+
4+
import { resolveBitcodeAppContextOptions } from '@/lib/bitcode-app-context-options';
5+
6+
describe('resolveBitcodeAppContextOptions', () => {
7+
it('uses an explicit Bitcode state path when configured', () => {
8+
expect(
9+
resolveBitcodeAppContextOptions({
10+
BITCODE_DATA_PATH: '/tmp/custom-bitcode-state.json',
11+
VERCEL: '1',
12+
}),
13+
).toEqual({ dataPath: '/tmp/custom-bitcode-state.json' });
14+
});
15+
16+
it('keeps the protocol-demonstration default outside serverless runtimes', () => {
17+
expect(resolveBitcodeAppContextOptions({})).toEqual({});
18+
});
19+
20+
it('moves mutable Bitcode state to tmp in Vercel/serverless runtimes', () => {
21+
expect(resolveBitcodeAppContextOptions({ VERCEL: '1' })).toEqual({
22+
dataPath: path.join(os.tmpdir(), 'bitcode-uapi-state.json'),
23+
});
24+
});
25+
});

0 commit comments

Comments
 (0)