From a2b0468cb37012d5c3aca8bba13900990f7bb2c9 Mon Sep 17 00:00:00 2001 From: Joe Yeager Date: Fri, 11 Apr 2025 13:32:44 -0700 Subject: [PATCH 1/6] fix: Fix project creation happening when there is a validation error --- commands/project/upload.ts | 11 ++++------- commands/project/watch.ts | 7 +++---- lib/projects/upload.ts | 12 ++++++++++++ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/commands/project/upload.ts b/commands/project/upload.ts index b11ab329b..eb1aa7a46 100644 --- a/commands/project/upload.ts +++ b/commands/project/upload.ts @@ -44,11 +44,6 @@ exports.handler = async options => { validateProjectConfig(projectConfig, projectDir); - await ensureProjectExists(derivedAccountId, projectConfig.name, { - forceCreate, - uploadCommand: true, - }); - try { const { result, uploadError } = await handleProjectUpload( derivedAccountId, @@ -56,8 +51,10 @@ exports.handler = async options => { projectDir, pollProjectBuildAndDeploy, message, - useV3Api(projectConfig?.platformVersion), - skipValidation + forceCreate, + true, + skipValidation, + useV3Api(projectConfig?.platformVersion) ); if (uploadError) { diff --git a/commands/project/watch.ts b/commands/project/watch.ts index db969c6fd..3de8754fd 100644 --- a/commands/project/watch.ts +++ b/commands/project/watch.ts @@ -12,7 +12,6 @@ const { const { trackCommandUsage } = require('../../lib/usageTracking'); const { uiBetaTag } = require('../../lib/ui'); const { - ensureProjectExists, getProjectConfig, validateProjectConfig, logFeedbackMessage, @@ -93,8 +92,6 @@ exports.handler = async options => { validateProjectConfig(projectConfig, projectDir); - await ensureProjectExists(derivedAccountId, projectConfig.name); - try { const { data: { results: builds }, @@ -117,7 +114,9 @@ exports.handler = async options => { derivedAccountId, projectConfig, projectDir, - startWatching + startWatching, + false, + false ); if (uploadError) { diff --git a/lib/projects/upload.ts b/lib/projects/upload.ts index 6f03c0abc..f82139be3 100644 --- a/lib/projects/upload.ts +++ b/lib/projects/upload.ts @@ -14,6 +14,7 @@ import { ProjectConfig } from '../../types/Projects'; import { isTranslationError, translate } from '@hubspot/project-parsing-lib'; import { logError } from '../errorHandlers'; import util from 'node:util'; +import { ensureProjectExists } from './index'; const i18nKey = 'lib.projectUpload'; @@ -98,6 +99,8 @@ export async function handleProjectUpload( projectDir: string, callbackFunc: ProjectUploadCallbackFunction, uploadMessage: string, + forceCreate: boolean, + isUploadCommand: boolean, sendIR: boolean = false, skipValidation: boolean = false ): Promise> { @@ -158,6 +161,15 @@ export async function handleProjectUpload( } } + // Watch + await ensureProjectExists(accountId, projectConfig.name); + + // Project upload + await ensureProjectExists(accountId, projectConfig.name, { + forceCreate, + uploadCommand: isUploadCommand, + }); + const { buildId, error } = await uploadProjectFiles( accountId, projectConfig.name, From d3b13e197e9507642f4c7278b46052931e8a3251 Mon Sep 17 00:00:00 2001 From: Joe Yeager Date: Fri, 11 Apr 2025 13:34:37 -0700 Subject: [PATCH 2/6] clean up --- commands/project/upload.ts | 1 - lib/projects/upload.ts | 3 --- 2 files changed, 4 deletions(-) diff --git a/commands/project/upload.ts b/commands/project/upload.ts index eb1aa7a46..ac5ecfe44 100644 --- a/commands/project/upload.ts +++ b/commands/project/upload.ts @@ -11,7 +11,6 @@ const { logger } = require('@hubspot/local-dev-lib/logger'); const { uiBetaTag, uiCommandReference } = require('../../lib/ui'); const { trackCommandUsage } = require('../../lib/usageTracking'); const { - ensureProjectExists, getProjectConfig, logFeedbackMessage, validateProjectConfig, diff --git a/lib/projects/upload.ts b/lib/projects/upload.ts index f82139be3..a4c79a118 100644 --- a/lib/projects/upload.ts +++ b/lib/projects/upload.ts @@ -161,9 +161,6 @@ export async function handleProjectUpload( } } - // Watch - await ensureProjectExists(accountId, projectConfig.name); - // Project upload await ensureProjectExists(accountId, projectConfig.name, { forceCreate, From 5127eb18873b05b72fb8be2528d1e89301b37f51 Mon Sep 17 00:00:00 2001 From: Joe Yeager Date: Fri, 11 Apr 2025 13:36:03 -0700 Subject: [PATCH 3/6] more cleanup --- lib/projects/upload.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/projects/upload.ts b/lib/projects/upload.ts index a4c79a118..1e1ea369d 100644 --- a/lib/projects/upload.ts +++ b/lib/projects/upload.ts @@ -161,7 +161,6 @@ export async function handleProjectUpload( } } - // Project upload await ensureProjectExists(accountId, projectConfig.name, { forceCreate, uploadCommand: isUploadCommand, From 42ded4ef5cc147f8f4e8cf9a674a5a6411150084 Mon Sep 17 00:00:00 2001 From: Joe Yeager Date: Mon, 14 Apr 2025 12:04:27 -0700 Subject: [PATCH 4/6] Refactor upload --- commands/project/upload.ts | 14 +++++++------- commands/project/watch.ts | 19 +++++++++++++------ lib/localDev.ts | 19 +++++++++++++------ lib/projects/upload.ts | 36 ++++++++++++++++++++++++------------ 4 files changed, 57 insertions(+), 31 deletions(-) diff --git a/commands/project/upload.ts b/commands/project/upload.ts index ac5ecfe44..57ff4bac4 100644 --- a/commands/project/upload.ts +++ b/commands/project/upload.ts @@ -44,17 +44,17 @@ exports.handler = async options => { validateProjectConfig(projectConfig, projectDir); try { - const { result, uploadError } = await handleProjectUpload( - derivedAccountId, + const { result, uploadError } = await handleProjectUpload({ + accountId: derivedAccountId, projectConfig, projectDir, - pollProjectBuildAndDeploy, - message, + callbackFunc: pollProjectBuildAndDeploy, + uploadMessage: message, forceCreate, - true, + isUploadCommand: true, + sendIR: useV3Api(projectConfig?.platformVersion), skipValidation, - useV3Api(projectConfig?.platformVersion) - ); + }); if (uploadError) { if ( diff --git a/commands/project/watch.ts b/commands/project/watch.ts index 3de8754fd..804bdc6a7 100644 --- a/commands/project/watch.ts +++ b/commands/project/watch.ts @@ -1,4 +1,6 @@ // @ts-nocheck +import { useV3Api } from '../../lib/projects/buildAndDeploy'; + const { i18n } = require('../../lib/lang'); const { createWatcher } = require('../../lib/projects/watch'); const { logError, ApiErrorContext } = require('../../lib/errorHandlers/index'); @@ -90,6 +92,12 @@ exports.handler = async options => { const { projectConfig, projectDir } = await getProjectConfig(); + if (useV3Api(projectConfig?.platformVersion)) { + // TODO: i18n + logger.error('This command is not supported in V3 API'); + process.exit(EXIT_CODES.ERROR); + } + validateProjectConfig(projectConfig, projectDir); try { @@ -110,14 +118,13 @@ exports.handler = async options => { // Upload all files if no build exists for this project yet if (initialUpload || hasNoBuilds) { - const { uploadError } = await handleProjectUpload( - derivedAccountId, + const { uploadError } = await handleProjectUpload({ + accountId: derivedAccountId, projectConfig, projectDir, - startWatching, - false, - false - ); + callbackFunc: startWatching, + isUploadCommand: false, + }); if (uploadError) { if ( diff --git a/lib/localDev.ts b/lib/localDev.ts index dec2edad0..702735086 100644 --- a/lib/localDev.ts +++ b/lib/localDev.ts @@ -475,14 +475,21 @@ export async function createInitialBuildForNewProject( sendIr?: boolean ): Promise { const { result: initialUploadResult, uploadError } = - await handleProjectUpload( - targetAccountId, + await handleProjectUpload({ + accountId: targetAccountId, projectConfig, projectDir, - projectUploadCallback, - i18n(`${i18nKey}.createInitialBuildForNewProject.initialUploadMessage`), - sendIr - ); + callbackFunc: projectUploadCallback, + uploadMessage: i18n( + `${i18nKey}.createInitialBuildForNewProject.initialUploadMessage`, + { + uploadCommand: uiCommandReference('hs project upload'), + } + ), + forceCreate: true, + skipValidation: true, + sendIR: sendIr, + }); if (uploadError) { if ( diff --git a/lib/projects/upload.ts b/lib/projects/upload.ts index 1e1ea369d..8eed663f3 100644 --- a/lib/projects/upload.ts +++ b/lib/projects/upload.ts @@ -93,17 +93,29 @@ type ProjectUploadResult = { uploadError?: unknown; }; -export async function handleProjectUpload( - accountId: number, - projectConfig: ProjectConfig, - projectDir: string, - callbackFunc: ProjectUploadCallbackFunction, - uploadMessage: string, - forceCreate: boolean, - isUploadCommand: boolean, - sendIR: boolean = false, - skipValidation: boolean = false -): Promise> { +type HandleProjectUploadArg = { + accountId: number; + projectConfig: ProjectConfig; + projectDir: string; + callbackFunc: ProjectUploadCallbackFunction; + uploadMessage?: string; + forceCreate?: boolean; + isUploadCommand?: boolean; + sendIR?: boolean; + skipValidation?: boolean; +}; + +export async function handleProjectUpload({ + accountId, + projectConfig, + projectDir, + callbackFunc, + uploadMessage, + forceCreate = false, + isUploadCommand = false, + sendIR = false, + skipValidation = false, +}: HandleProjectUploadArg): Promise> { const srcDir = path.resolve(projectDir, projectConfig.srcDir); const filenames = fs.readdirSync(srcDir); @@ -170,7 +182,7 @@ export async function handleProjectUpload( accountId, projectConfig.name, tempFile.name, - uploadMessage, + uploadMessage || '', projectConfig.platformVersion, intermediateRepresentation ); From 465faf4f0ac7676a657e850574400f0e9f6c3f7d Mon Sep 17 00:00:00 2001 From: Joe Yeager Date: Thu, 24 Apr 2025 15:47:13 -0700 Subject: [PATCH 5/6] change variable name --- lib/projects/localDev/helpers.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/projects/localDev/helpers.ts b/lib/projects/localDev/helpers.ts index 59ed23c25..ecbd43419 100644 --- a/lib/projects/localDev/helpers.ts +++ b/lib/projects/localDev/helpers.ts @@ -447,7 +447,7 @@ export async function createInitialBuildForNewProject( projectConfig: ProjectConfig, projectDir: string, targetAccountId: number, - sendIr?: boolean + sendIR?: boolean ): Promise { const { result: initialUploadResult, uploadError } = await handleProjectUpload({ @@ -460,7 +460,7 @@ export async function createInitialBuildForNewProject( .initialUploadMessage, forceCreate: true, skipValidation: true, - sendIR: sendIr, + sendIR, }); if (uploadError) { From 34786245293cd43aace27c9551c64dd99d6ac8cb Mon Sep 17 00:00:00 2001 From: Joe Yeager Date: Mon, 28 Apr 2025 12:24:41 -0700 Subject: [PATCH 6/6] remove || in favor of default --- lib/projects/upload.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/projects/upload.ts b/lib/projects/upload.ts index 58212fa42..f3c55ed1f 100644 --- a/lib/projects/upload.ts +++ b/lib/projects/upload.ts @@ -171,7 +171,7 @@ export async function handleProjectUpload({ accountId, projectConfig.name, tempFile.name, - uploadMessage || '', + uploadMessage, projectConfig.platformVersion, intermediateRepresentation );