mirror of
https://github.com/expo/turtle.git
synced 2026-11-14 19:12:55 -10:00
Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2555e45062 | ||
|
|
1cae1cbc79 | ||
|
|
a28f407f03 | ||
|
|
eee18d2f18 | ||
|
|
6457adba57 | ||
|
|
6ad71bd512 | ||
|
|
0ee897531f |
No files matched your search
@@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
## Unreleased
|
||||
|
||||
### Changed
|
||||
- Enforce Java 8 when using turtle-cli.
|
||||
|
||||
## [0.12.7] - 2019-10-25
|
||||
|
||||
### Changed
|
||||
|
||||
- Updated Android shell app for SDK 35 to fix occasional crash in background due to GCM registration service (https://github.com/expo/expo/issues/4207)
|
||||
|
||||
## [0.12.5] - 2019-10-18
|
||||
|
||||
### Changed
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "turtle-cli",
|
||||
"version": "0.12.5",
|
||||
"version": "0.12.7",
|
||||
"description": "The command-line tool for building standalone Expo apps",
|
||||
"preferGlobal": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1 +1 @@
|
||||
s3://exp-artifacts/android-shell-builder-426a9f7f926d97174ba2ac4c3cb9c0fc8767ba42.tar.gz
|
||||
s3://exp-artifacts/android-shell-builder-a9b26e258382dce4c3f73c4f2d16cbb1a93e8a1a.tar.gz
|
||||
@@ -15,6 +15,7 @@ import { PLATFORMS } from 'turtle/constants';
|
||||
import logger from 'turtle/logger';
|
||||
|
||||
const which = util.promisify(_which);
|
||||
const JAVA_REQUIRED_VERSION = 8;
|
||||
const REQUIRED_TOOLS: IToolDefinition[] = [
|
||||
{
|
||||
command: 'bash',
|
||||
@@ -22,16 +23,27 @@ const REQUIRED_TOOLS: IToolDefinition[] = [
|
||||
},
|
||||
{
|
||||
command: 'javac',
|
||||
missingDescription: 'Please install JDK (version 8 or newer) - check https://jdk.java.net/',
|
||||
missingDescription: `Please install JDK (version ${JAVA_REQUIRED_VERSION}) - check https://jdk.java.net/`,
|
||||
testFn: async () => {
|
||||
const { status, stdout } = await ExponentTools.spawnAsyncThrowError(
|
||||
'javac',
|
||||
const { status, stdout, stderr } = await ExponentTools.spawnAsyncThrowError(
|
||||
'java',
|
||||
['-version'],
|
||||
{ stdio: 'pipe' },
|
||||
);
|
||||
if (stdout.match(/no java runtime present/i)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const matchResult = stderr.match(/.*version ".*\.(.*)\..*"/);
|
||||
if (matchResult) {
|
||||
const [, currentJavaVersion] = matchResult;
|
||||
if (Number(currentJavaVersion) !== JAVA_REQUIRED_VERSION) {
|
||||
throw new Error(`You're using a wrong Java version, please install version ${JAVA_REQUIRED_VERSION}`);
|
||||
}
|
||||
} else {
|
||||
logger.warn(`Couldn't find Java version number, assuming you're on Java ${JAVA_REQUIRED_VERSION}...`);
|
||||
}
|
||||
|
||||
return status === 0;
|
||||
},
|
||||
},
|
||||
|
||||
@@ -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