Files
Armsx2-Repo/scripts/smoke-live.js
T

84 lines
2.2 KiB
JavaScript

#!/usr/bin/env node
import { canonicalBaseUrl, canonicalSourceUrl } from "./constants.js";
const expectedVersion = "1.3";
const liveUrls = [
canonicalSourceUrl,
`${canonicalBaseUrl}/checksums.json`,
`${canonicalBaseUrl}/ipas/ARMSX2-iOS-${expectedVersion}.ipa`,
`${canonicalBaseUrl}/assets/icon.png`,
];
const headCheck = async (url) => {
const response = await fetch(url, { method: "HEAD", redirect: "follow" });
return {
url,
status: response.status,
ok: response.ok,
finalUrl: response.url,
contentType: response.headers.get("content-type"),
contentLength: response.headers.get("content-length"),
};
};
const jsonDocument = async (url) => {
const response = await fetch(url, {
headers: { Accept: "application/json" },
redirect: "follow",
});
if (!response.ok) {
throw new Error(`${url} returned ${response.status}.`);
}
return response.json();
};
const runSmokeCheck = async () => {
const results = [];
for (const liveUrl of liveUrls) {
results.push(await headCheck(liveUrl));
}
const sourceJson = await jsonDocument(canonicalSourceUrl);
const sourceVersion = sourceJson.apps?.[0]?.versions?.[0]?.version;
const downloadURL = sourceJson.apps?.[0]?.versions?.[0]?.downloadURL;
console.log(JSON.stringify({
expectedVersion,
sourceVersion,
downloadURL,
checks: results,
}, null, 2));
const failures = results
.filter((result) => !result.ok)
.map((result) => `${result.url} returned ${result.status}`);
if (sourceJson.sourceURL !== canonicalSourceUrl) {
failures.push(`Live sourceURL is ${sourceJson.sourceURL}; expected ${canonicalSourceUrl}.`);
}
if (sourceVersion !== expectedVersion) {
failures.push(`Live version is ${sourceVersion}; expected ${expectedVersion}.`);
}
if (downloadURL !== `${canonicalBaseUrl}/ipas/ARMSX2-iOS-${expectedVersion}.ipa`) {
failures.push(`Live downloadURL is ${downloadURL}; expected ${canonicalBaseUrl}/ipas/ARMSX2-iOS-${expectedVersion}.ipa.`);
}
if (failures.length > 0) {
throw new Error(failures.join("\n"));
}
};
try {
await runSmokeCheck();
} catch (smokeError) {
console.error(smokeError instanceof Error ? smokeError.message : smokeError);
process.exitCode = 1;
}