Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add build status to project upload #542

Merged
merged 7 commits into from
Aug 23, 2021
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/cli/bin/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const functionsCommand = require('../commands/functions');
const listCommand = require('../commands/list');
const openCommand = require('../commands/open');
const mvCommand = require('../commands/mv');
const projectsCommand = require('../commands/projects');
const projectCommands = require('../commands/project');
const themeCommand = require('../commands/theme');
const configCommand = require('../commands/config');
const accountsCommand = require('../commands/accounts');
Expand Down Expand Up @@ -94,7 +94,7 @@ const argv = yargs
})
.command(openCommand)
.command(mvCommand)
.command(projectsCommand)
.command(projectCommands)
.command(themeCommand)
.command(configCommand)
.command(accountsCommand)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ const {
addAccountOptions,
addOverwriteOptions,
} = require('../lib/commonOpts');
const deploy = require('./projects/deploy');
const init = require('./projects/init');
const upload = require('./projects/upload');
const deploy = require('./project/deploy');
const init = require('./project/init');
const upload = require('./project/upload');

exports.command = 'project';
exports.describe = false; //'Commands for working with projects';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ exports.handler = async options => {
const { path: projectPath } = options;
const accountId = getAccountId(options);

trackCommandUsage('projects-deploy', { projectPath }, accountId);
trackCommandUsage('project-deploy', { projectPath }, accountId);

logger.debug(`Deploying project at path: ${projectPath}`);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ exports.handler = async options => {
const { path: projectPath } = options;
const accountId = getAccountId(options);

trackCommandUsage('projects-init', { projectPath }, accountId);
trackCommandUsage('project-init', { projectPath }, accountId);

const cwd = projectPath ? path.resolve(getCwd(), projectPath) : getCwd();
const projectConfig = await getOrCreateProjectConfig(cwd);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ exports.handler = async options => {
const { path: projectPath } = options;
const accountId = getAccountId(options);

trackCommandUsage('projects-upload', { projectPath }, accountId);
trackCommandUsage('project-upload', { projectPath }, accountId);

const cwd = projectPath ? path.resolve(getCwd(), projectPath) : getCwd();
const projectConfig = await getProjectConfig(cwd);
Expand Down
100 changes: 68 additions & 32 deletions packages/cli/lib/projects.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,27 @@ const {
} = require('@hubspot/cli-lib/lib/constants');
const { getBuildStatus } = require('@hubspot/cli-lib/api/dfs');

const BUILD_STATUS = {
BUILDING: 'BUILDING',
ENQUEUED: 'ENQUEUED',
FAILURE: 'FAILURE',
SUCCESS: 'SUCCESS',
};

const BUILD_STATUS_TEXT = {
[BUILD_STATUS.BUILDING]: 'is building',
[BUILD_STATUS.ENQUEUED]: 'is queued',
[BUILD_STATUS.FAILURE]: 'failed to build',
[BUILD_STATUS.SUCCESS]: 'built successfully',
};

const isBuildComplete = build => {
return (
build.status === BUILD_STATUS.SUCCESS ||
build.status === BUILD_STATUS.FAILURE
);
};
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😀


const writeProjectConfig = (configPath, config) => {
try {
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
Expand Down Expand Up @@ -122,49 +143,64 @@ const pollBuildStatus = async (accountId, name, buildId) => {
const buildStatus = await getBuildStatus(accountId, name, buildId);
const spinnies = new Spinnies();

logger.log('Project building...');
logger.log(`Building project ${name}...`);
for (let subBuild of buildStatus.subbuildStatuses) {
spinnies.add(subBuild.buildName, {
text: `The build for "${subBuild.buildName}" has not started`,
text: `"${subBuild.buildName}" ${
BUILD_STATUS_TEXT[BUILD_STATUS.ENQUEUED]
}`,
});
}

return new Promise((resolve, reject) => {
const pollInterval = setInterval(async () => {
const { status, subbuildStatuses } = await getBuildStatus(
accountId,
name,
buildId
const buildStatus = await getBuildStatus(accountId, name, buildId).catch(
reject
);
const { status, subbuildStatuses } = buildStatus;

if (Object.keys(spinnies.spinners).length) {
subbuildStatuses.forEach(subBuild => {
const updatedText = `"${subBuild.buildName}" ${
BUILD_STATUS_TEXT[subBuild.status]
}`;

switch (subBuild.status) {
case BUILD_STATUS.SUCCESS:
spinnies.succeed(subBuild.buildName, {
text: updatedText,
});
break;
case BUILD_STATUS.FAILURE:
spinnies.fail(subBuild.buildName, {
text: updatedText,
});
break;
default:
spinnies.update(subBuild.buildName, {
text: updatedText,
});
break;
}
});
}

subbuildStatuses.forEach(subBuild => {
switch (subBuild.status) {
case 'SUCCESS':
spinnies.succeed(subBuild.buildName, {
text: `The build for "${subBuild.buildName}" has succeeded`,
});
break;
case 'FAILURE':
spinnies.fail(subBuild.buildName, {
text: `The build for "${subBuild.buildName}" has failed`,
});
break;
default:
spinnies.update(subBuild.buildName, {
text: `The build for "${subBuild.buildName}" is ${subBuild.status}`,
});
break;
}
});

if (status === 'SUCCESS') {
logger.success('Build finished successfully');
if (isBuildComplete(buildStatus)) {
clearInterval(pollInterval);

if (status === BUILD_STATUS.SUCCESS) {
logger.success(`Your project ${name} ${BUILD_STATUS_TEXT[status]}.`);
} else if (status === BUILD_STATUS.FAILURE) {
logger.error(`Your project ${name} ${BUILD_STATUS_TEXT[status]}.`);
subbuildStatuses.forEach(subBuild => {
if (subBuild.status === BUILD_STATUS.FAILURE) {
logger.error(
`${subBuild.buildName} failed to build. ${subBuild.errorMessage}.`
);
}
});
}
resolve(buildStatus);
} else if (status === 'ERROR') {
logger.error('Build failed');
clearInterval(pollInterval);
reject(buildStatus);
}
}, POLLING_DELAY);
});
Expand Down
Loading