diff --git a/integration-tests/baas-test-server/cli.ts b/integration-tests/baas-test-server/cli.ts index fffe3829bf..17b5b62fc4 100755 --- a/integration-tests/baas-test-server/cli.ts +++ b/integration-tests/baas-test-server/cli.ts @@ -84,7 +84,11 @@ yargs(hideBin(process.argv)) .command( ["docker [githash]"], "Runs the BaaS test image using Docker", - (yargs) => yargs.positional("githash", { type: "string" }).option("branch", { default: "master" }), + (yargs) => + yargs + .positional("githash", { type: "string" }) + .option("branch", { default: "master" }) + .option("latest-local", { default: false, boolean: true }), wrapCommand(async (argv) => { const { AWS_PROFILE, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY } = process.env; assert(AWS_ACCESS_KEY_ID && AWS_SECRET_ACCESS_KEY, "Missing AWS_ACCESS_KEY_ID or AWS_SECRET_ACCESS_KEY env"); @@ -95,12 +99,19 @@ yargs(hideBin(process.argv)) docker.ensureNoBaas(); if (argv.githash) { - docker.spawnBaaS({ tag: argv.githash, accessKeyId: AWS_ACCESS_KEY_ID, secretAccessKey: AWS_SECRET_ACCESS_KEY }); + docker.spawnBaaS({ + image: argv.githash, + accessKeyId: AWS_ACCESS_KEY_ID, + secretAccessKey: AWS_SECRET_ACCESS_KEY, + }); + } else if (argv["latest-local"]) { + const id = docker.getLatestLocalId(); + docker.spawnBaaS({ image: id, accessKeyId: AWS_ACCESS_KEY_ID, secretAccessKey: AWS_SECRET_ACCESS_KEY }); } else { const tag = await docker.fetchBaasTag(argv.branch); assert(AWS_PROFILE, "Missing AWS_PROFILE env"); docker.pullBaas({ profile: AWS_PROFILE, tag }); - docker.spawnBaaS({ tag, accessKeyId: AWS_ACCESS_KEY_ID, secretAccessKey: AWS_SECRET_ACCESS_KEY }); + docker.spawnBaaS({ image: tag, accessKeyId: AWS_ACCESS_KEY_ID, secretAccessKey: AWS_SECRET_ACCESS_KEY }); } }), ) diff --git a/integration-tests/baas-test-server/docker.ts b/integration-tests/baas-test-server/docker.ts index 64b953f069..805da8ab52 100644 --- a/integration-tests/baas-test-server/docker.ts +++ b/integration-tests/baas-test-server/docker.ts @@ -26,6 +26,7 @@ const BAAS_CONTAINER_NAME = "baas-test-server"; const BAAS_PORT = 9090; const BAAS_VARIANT = process.arch === "arm64" ? "ubuntu2004-arm64" : "ubuntu2004-docker"; const ECR_HOSTNAME = "969505754201.dkr.ecr.us-east-1.amazonaws.com"; +const ECR_PATHNAME = "/baas-test-images/test_server-race"; function registerExitListeners(logPrefix: string, child: cp.ChildProcess) { function killChild() { @@ -88,6 +89,19 @@ export async function fetchBaasTag(branch: string) { } } +export function getLatestLocalId() { + const imagesOutput = execSync("docker images --format json", { encoding: "utf8" }); + for (const line of imagesOutput.split("\n")) { + if (line) { + const image = JSON.parse(line.trim()); + if (image.Repository === ECR_HOSTNAME + ECR_PATHNAME && image.Tag.startsWith(BAAS_VARIANT)) { + return image.ID; + } + } + } + throw new Error("Unable to infer the latest local tag"); +} + export function pullBaas({ profile, tag }: { profile: string; tag: string }) { try { execSync(`docker pull ${tag}`, { stdio: "inherit" }); @@ -103,15 +117,15 @@ export function pullBaas({ profile, tag }: { profile: string; tag: string }) { } export function spawnBaaS({ - tag, + image, accessKeyId, secretAccessKey, }: { - tag: string; + image: string; accessKeyId: string; secretAccessKey: string; }) { - console.log("Starting server from tag", chalk.dim(tag)); + console.log("Starting server from tag", chalk.dim(image)); spawn(chalk.blueBright("baas"), "docker", [ "run", "--name", @@ -124,6 +138,6 @@ export function spawnBaaS({ `AWS_SECRET_ACCESS_KEY=${secretAccessKey}`, "--publish", `${BAAS_PORT}:${BAAS_PORT}`, - tag, + image, ]); }