Skip to content

Commit ea3254e

Browse files
authored
Fix projectConfig.projectId containing project name instead of ID (vercel#999)
* Fix projectConfig.projectId containing project name instead of ID * add changeset * Address review: fix changeset description, normalize slug-based project IDs, add clarifying comments
1 parent 6e72b29 commit ea3254e

6 files changed

Lines changed: 38 additions & 5 deletions

File tree

.changeset/fix-project-config.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"@workflow/cli": patch
3+
"@workflow/core": patch
4+
"@workflow/web": patch
5+
"@workflow/world-vercel": patch
6+
---
7+
8+
Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

packages/cli/src/lib/inspect/env.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export const getEnvVars = (): Record<string, string> => {
4040
WORKFLOW_VERCEL_ENV: env.WORKFLOW_VERCEL_ENV || '',
4141
WORKFLOW_VERCEL_AUTH_TOKEN: env.WORKFLOW_VERCEL_AUTH_TOKEN || '',
4242
WORKFLOW_VERCEL_PROJECT: env.WORKFLOW_VERCEL_PROJECT || '',
43+
WORKFLOW_VERCEL_PROJECT_NAME: env.WORKFLOW_VERCEL_PROJECT_NAME || '',
4344
WORKFLOW_VERCEL_TEAM: env.WORKFLOW_VERCEL_TEAM || '',
4445
WORKFLOW_LOCAL_UI: env.WORKFLOW_LOCAL_UI || '',
4546
PORT: env.PORT || '',
@@ -184,13 +185,27 @@ export const inferVercelProjectAndTeam = async () => {
184185
export const inferVercelEnvVars = async () => {
185186
const envVars = getEnvVars();
186187

187-
if (!envVars.WORKFLOW_VERCEL_PROJECT || !envVars.WORKFLOW_VERCEL_TEAM) {
188+
// Infer project/team from .vercel folder when:
189+
// - WORKFLOW_VERCEL_PROJECT or WORKFLOW_VERCEL_TEAM is missing, OR
190+
// - WORKFLOW_VERCEL_PROJECT is set but doesn't look like a real project ID
191+
// (e.g., user passed a slug via --project flag), OR
192+
// - WORKFLOW_VERCEL_PROJECT_NAME is missing (need to populate the slug)
193+
const needsInference =
194+
!envVars.WORKFLOW_VERCEL_PROJECT ||
195+
!envVars.WORKFLOW_VERCEL_TEAM ||
196+
!envVars.WORKFLOW_VERCEL_PROJECT_NAME ||
197+
!envVars.WORKFLOW_VERCEL_PROJECT.startsWith('prj_');
198+
199+
if (needsInference) {
188200
logger.debug('Inferring vercel project and team from .vercel folder');
189201
const inferredProject = await inferVercelProjectAndTeam();
190202
if (inferredProject) {
191203
const { projectId, projectName, teamId } = inferredProject;
192-
envVars.WORKFLOW_VERCEL_PROJECT = projectName || projectId;
193-
envVars.WORKFLOW_VERCEL_TEAM = teamId;
204+
// WORKFLOW_VERCEL_PROJECT is the real project ID (e.g., prj_xxx)
205+
envVars.WORKFLOW_VERCEL_PROJECT = projectId;
206+
// WORKFLOW_VERCEL_PROJECT_NAME is the project slug (e.g., my-app)
207+
envVars.WORKFLOW_VERCEL_PROJECT_NAME = projectName || projectId;
208+
envVars.WORKFLOW_VERCEL_TEAM = envVars.WORKFLOW_VERCEL_TEAM || teamId;
194209
writeEnvVars(envVars);
195210
} else {
196211
logger.warn(

packages/cli/src/lib/inspect/web.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ export async function launchWebUI(
9898
envVars.WORKFLOW_TARGET_WORLD
9999
);
100100
const teamSlug = envVars.WORKFLOW_VERCEL_TEAM;
101-
const projectName = envVars.WORKFLOW_VERCEL_PROJECT;
101+
const projectName =
102+
envVars.WORKFLOW_VERCEL_PROJECT_NAME || envVars.WORKFLOW_VERCEL_PROJECT;
102103

103104
// Check if user wants local UI via flag or environment variable
104105
const useLocalUi = flags.localUi;

packages/core/src/runtime/world.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ export const createWorld = (): World => {
3535
token: process.env.WORKFLOW_VERCEL_AUTH_TOKEN,
3636
projectConfig: {
3737
environment: process.env.WORKFLOW_VERCEL_ENV,
38-
projectId: process.env.WORKFLOW_VERCEL_PROJECT,
38+
projectId: process.env.WORKFLOW_VERCEL_PROJECT, // real ID (prj_xxx)
39+
projectName: process.env.WORKFLOW_VERCEL_PROJECT_NAME, // slug (my-app)
3940
teamId: process.env.WORKFLOW_VERCEL_TEAM,
4041
},
4142
});

packages/web/app/server/workflow-server-actions.server.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,13 +205,15 @@ const WORLD_ENV_ALLOWLIST_BY_TARGET_WORLD: Record<string, string[]> = {
205205
'WORKFLOW_VERCEL_ENV',
206206
'WORKFLOW_VERCEL_TEAM',
207207
'WORKFLOW_VERCEL_PROJECT',
208+
'WORKFLOW_VERCEL_PROJECT_NAME',
208209
'WORKFLOW_VERCEL_AUTH_TOKEN',
209210
],
210211
'@workflow/world-vercel': [
211212
'WORKFLOW_TARGET_WORLD',
212213
'WORKFLOW_VERCEL_ENV',
213214
'WORKFLOW_VERCEL_TEAM',
214215
'WORKFLOW_VERCEL_PROJECT',
216+
'WORKFLOW_VERCEL_PROJECT_NAME',
215217
'WORKFLOW_VERCEL_AUTH_TOKEN',
216218
],
217219

@@ -432,6 +434,9 @@ async function getWorldFromEnv(userEnvMap: EnvMap): Promise<World> {
432434
projectId:
433435
userEnvMap.WORKFLOW_VERCEL_PROJECT ||
434436
process.env.WORKFLOW_VERCEL_PROJECT,
437+
projectName:
438+
userEnvMap.WORKFLOW_VERCEL_PROJECT_NAME ||
439+
process.env.WORKFLOW_VERCEL_PROJECT_NAME,
435440
teamId:
436441
userEnvMap.WORKFLOW_VERCEL_TEAM || process.env.WORKFLOW_VERCEL_TEAM,
437442
},

packages/world-vercel/src/utils.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@ export interface APIConfig {
3434
token?: string;
3535
headers?: RequestInit['headers'];
3636
projectConfig?: {
37+
/** The real Vercel project ID (e.g., prj_xxx) */
3738
projectId?: string;
39+
/** The project name/slug (e.g., my-app), used for dashboard URLs */
40+
projectName?: string;
3841
teamId?: string;
3942
environment?: string;
4043
};

0 commit comments

Comments
 (0)