mirror of
https://github.com/expo/turtle.git
synced 2026-11-15 09:38:07 -10:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4b20d5978 |
No files matched your search
@@ -61,4 +61,4 @@ async function cleanup(ctx: IContext) {
|
||||
}
|
||||
|
||||
const getTemporaryDirs = (ctx: IContext) =>
|
||||
Object.values(pick(ctx, ['appDir', 'provisioningProfileDir']));
|
||||
Object.values(pick(ctx, ['appDir', 'provisioningProfileDir'])) as string[];
|
||||
+23
-9
@@ -55,20 +55,34 @@ export async function getJob() {
|
||||
async function processJob(jobData: any) {
|
||||
const receiptHandle = jobData.ReceiptHandle;
|
||||
const { priority } = jobData;
|
||||
|
||||
let timeoutId;
|
||||
try {
|
||||
const rawJob = JSON.parse(jobData.Body);
|
||||
timeoutId = failAfterMaxJobTime(priority, receiptHandle, rawJob);
|
||||
const job = await sanitizeJob(rawJob);
|
||||
|
||||
let rawJob;
|
||||
let job;
|
||||
try {
|
||||
rawJob = JSON.parse(jobData.Body);
|
||||
timeoutId = failAfterMaxJobTime(priority, receiptHandle, rawJob);
|
||||
logger.info(
|
||||
{ buildJobId: rawJob.id, messageId: jobData.MessageId },
|
||||
`Processing job with priority=${priority.slice(0, priority.length - 8)} timestamp=${Date.now()}`,
|
||||
);
|
||||
job = await sanitizeJob(rawJob);
|
||||
} catch (err) {
|
||||
logger.error({ err, ...rawJob && { buildJobId: rawJob.id } }, 'The build job is invalid');
|
||||
// send message only if we've managed to parse the job json
|
||||
if (rawJob) {
|
||||
await sqs.sendMessage(rawJob.id, BUILD.JOB_STATES.ERRORED, {
|
||||
turtleVersion,
|
||||
buildDuration: 0,
|
||||
reason: 'The build job is invalid',
|
||||
});
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
setCurrentJobId(job.id);
|
||||
const pingerHandle = sqs.changeMessageVisibilityRecurring(priority, jobData.ReceiptHandle, job.id);
|
||||
|
||||
logger.info(
|
||||
`Doing job MessageId=${jobData.MessageId} BuildId=${job.id} `
|
||||
+ `Priority=${priority.slice(0, priority.length - 8)} ${Date.now()}`,
|
||||
);
|
||||
|
||||
const cancelled = await redis.checkIfCancelled(job.id);
|
||||
if (cancelled) {
|
||||
logger.info('The job has been cancelled');
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@ async function main() {
|
||||
try {
|
||||
await doJob();
|
||||
} catch (err) {
|
||||
logger.error({ err }, 'Failed to do a job');
|
||||
logger.error({ err }, 'Failed to process a job');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,9 @@ import * as schemas from 'turtle/jobsSchemas';
|
||||
|
||||
export async function sanitizeJob(job: any) {
|
||||
const schema = (schemas as any)[job.platform];
|
||||
if (!schema) {
|
||||
throw new Error(`Unsupported platform: ${job.platform}`);
|
||||
}
|
||||
const { error, value } = schema.validate(job, { stripUnknown: true });
|
||||
if (error) {
|
||||
throw error;
|
||||
|
||||
Reference in new issue
Block a user