Skip to content

Commit

Permalink
change build task hooks
Browse files Browse the repository at this point in the history
  • Loading branch information
drewbo committed Sep 18, 2023
1 parent 821077d commit 9c16540
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 24 deletions.
11 changes: 0 additions & 11 deletions api/controllers/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,17 +135,6 @@ module.exports = wrapHandlers({
EventCreator.error(Event.labels.BUILD_STATUS, err, { buildId: build.id });
}

// we start certain build tasks on build completion
if (body.status === 'success') {
try {
const tasks = await SiteBuildTask
.findTasksToStart({ build, startsWhen: 'complete' });
tasks.forEach(sbt => sbt.startBuildTask(build.id));
} catch (err) {
console.error(err);
}
}

await build.updateJobStatus(buildStatus);

emitBuildStatus(build);
Expand Down
34 changes: 24 additions & 10 deletions api/models/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,28 @@ const jobStateUpdate = (buildStatus, build, site, timestamp) => {
return build.update(atts);
};

const afterCreate = async (build) => {
// create relevant build tasks on build create
const { SiteBuildTask } = build.sequelize.models;
try {
await SiteBuildTask.startBuildTasks({ build, startsWhen: 'build' });
} catch (err) {
console.error(err);
}
};

const afterUpdate = async (build) => {
// we start certain build tasks on build completion
const { SiteBuildTask } = build.sequelize.models;
if (build.status === 'success') {
try {
await SiteBuildTask.startBuildTasks({ build, startsWhen: 'complete' });
} catch (err) {
console.error(err);
}
}
};

async function enqueue() {
const build = this;

Expand All @@ -160,7 +182,6 @@ async function enqueue() {
Build,
UserEnvironmentVariable,
SiteBranchConfig,
SiteBuildTask,
} = build.sequelize.models;

const foundBuild = await Build.findOne({
Expand Down Expand Up @@ -190,15 +211,6 @@ async function enqueue() {
});
}

// after the build is queued, check for and initiate relevant build tasks
try {
const tasks = await SiteBuildTask
.findTasksToStart({ build, startsWhen: 'build' });
tasks.forEach(sbt => sbt.startBuildTask(build.id));
} catch (err) {
console.error(err);
}

return build;
}

Expand Down Expand Up @@ -308,6 +320,8 @@ module.exports = (sequelize, DataTypes) => {
tableName: 'build',
hooks: {
beforeValidate,
afterCreate,
afterUpdate,
},
}
);
Expand Down
9 changes: 6 additions & 3 deletions api/models/site-build-task.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ async function startBuildTask(buildId) {
name: `build: ${buildId}, type: ${siteBuildTask.buildTaskTypeId}`,
});

// TODO: why
const createdBuildTask = await BuildTask.findByPk(buildTask.id, {
include: [
{ model: BuildTaskType, required: true },
Expand All @@ -37,7 +36,6 @@ async function startBuildTask(buildId) {
BuildTaskQueue.sendTaskMessage(createdBuildTask);
}

// TODO: should this be converted to sequelize scope?
async function findTasksToStart({ build, startsWhen }) {
const {
BuildTaskType,
Expand All @@ -64,6 +62,11 @@ async function findTasksToStart({ build, startsWhen }) {
});
}

async function startBuildTasks({ build, startsWhen }) {
const tasks = await findTasksToStart({ build, startsWhen });
await Promise.allSettled(tasks.map(sbt => sbt.startBuildTask(build.id)));
}

module.exports = (sequelize, DataTypes) => {
const SiteBuildTask = sequelize.define(
'SiteBuildTask',
Expand All @@ -84,7 +87,7 @@ module.exports = (sequelize, DataTypes) => {
);

SiteBuildTask.associate = associate;
SiteBuildTask.startBuildTasks = startBuildTasks;
SiteBuildTask.prototype.startBuildTask = startBuildTask;
SiteBuildTask.findTasksToStart = findTasksToStart;
return SiteBuildTask;
};

0 comments on commit 9c16540

Please sign in to comment.