Skip to content

Commit 709bb88

Browse files
author
John Doe
committed
chore: add env var helper
1 parent 0aee085 commit 709bb88

File tree

2 files changed

+42
-10
lines changed

2 files changed

+42
-10
lines changed

code-pushup.config.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
jsDocsCoreConfig,
77
jsPackagesCoreConfig,
88
lighthouseCoreConfig,
9+
loadEnv,
910
typescriptPluginConfig,
1011
} from './code-pushup.preset.js';
1112
import type { CoreConfig } from './packages/models/src/index.js';
@@ -18,18 +19,10 @@ const envSchema = z.object({
1819
CP_ORGANIZATION: z.string().min(1),
1920
CP_PROJECT: z.string().min(1),
2021
});
21-
const { data: env } = await envSchema.safeParseAsync(process.env);
22+
const projectName = 'cli';
2223

2324
const config: CoreConfig = {
24-
...(env && {
25-
upload: {
26-
server: env.CP_SERVER,
27-
apiKey: env.CP_API_KEY,
28-
organization: env.CP_ORGANIZATION,
29-
project: env.CP_PROJECT,
30-
},
31-
}),
32-
25+
...(await loadEnv(projectName)),
3326
plugins: [],
3427
};
3528

code-pushup.preset.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/* eslint-disable @nx/enforce-module-boundaries */
2+
import { z } from 'zod';
23
import type {
34
CategoryConfig,
45
CoreConfig,
@@ -29,6 +30,44 @@ import typescriptPlugin, {
2930
getCategories,
3031
} from './packages/plugin-typescript/src/index.js';
3132

33+
/**
34+
* Helper function to load and validate Code PushUp environment variables for upload configuration
35+
*/
36+
export async function loadEnv(
37+
projectName: string | undefined = process.env.NX_TASK_TARGET_PROJECT,
38+
): Promise<Partial<CoreConfig>> {
39+
if (projectName == null || projectName === '') {
40+
throw new Error(
41+
'loadEnv failed! Project name is not defined. Please run code pushup fit Nx or provide a projectName.',
42+
);
43+
}
44+
const envSchema = z.object({
45+
CP_SERVER: z.string().url(),
46+
CP_API_KEY: z.string().min(1),
47+
CP_ORGANIZATION: z.string().min(1),
48+
CP_PROJECT: z.string().optional(),
49+
});
50+
51+
const { data: env, success } = await envSchema.safeParseAsync(process.env);
52+
53+
if (!success || !env) {
54+
return {};
55+
}
56+
const uploadConfig = {
57+
apiKey: env.CP_API_KEY,
58+
server: env.CP_SERVER,
59+
organization: env.CP_ORGANIZATION,
60+
...(env.CP_PROJECT
61+
? { project: env.CP_PROJECT }
62+
: { project: projectName }),
63+
};
64+
return (
65+
uploadConfig.apiKey && {
66+
upload: uploadConfig,
67+
}
68+
);
69+
}
70+
3271
export const jsPackagesCategories: CategoryConfig[] = [
3372
{
3473
slug: 'security',

0 commit comments

Comments
 (0)