46 lines
1.5 KiB
JavaScript
46 lines
1.5 KiB
JavaScript
"use strict";
|
|
|
|
const IMMUTABLE_RELEASE_ASSETS = [
|
|
"cmux-macos.dmg",
|
|
"appcast.xml",
|
|
"cmuxd-remote-darwin-arm64",
|
|
"cmuxd-remote-darwin-amd64",
|
|
"cmuxd-remote-linux-arm64",
|
|
"cmuxd-remote-linux-amd64",
|
|
"cmuxd-remote-checksums.txt",
|
|
"cmuxd-remote-manifest.json",
|
|
];
|
|
const RELEASE_ASSET_GUARD_STATE = Object.freeze({
|
|
CLEAR: "clear",
|
|
PARTIAL: "partial",
|
|
COMPLETE: "complete",
|
|
});
|
|
|
|
function evaluateReleaseAssetGuard({ existingAssetNames, immutableAssetNames = IMMUTABLE_RELEASE_ASSETS }) {
|
|
const immutableAssets = immutableAssetNames || IMMUTABLE_RELEASE_ASSETS;
|
|
const existing = new Set(existingAssetNames || []);
|
|
const conflicts = immutableAssets.filter((assetName) => existing.has(assetName));
|
|
const missingImmutableAssets = immutableAssets.filter((assetName) => !existing.has(assetName));
|
|
|
|
let guardState = RELEASE_ASSET_GUARD_STATE.CLEAR;
|
|
if (conflicts.length === immutableAssets.length && immutableAssets.length > 0) {
|
|
guardState = RELEASE_ASSET_GUARD_STATE.COMPLETE;
|
|
} else if (conflicts.length > 0) {
|
|
guardState = RELEASE_ASSET_GUARD_STATE.PARTIAL;
|
|
}
|
|
|
|
return {
|
|
conflicts,
|
|
missingImmutableAssets,
|
|
guardState,
|
|
hasPartialConflict: guardState === RELEASE_ASSET_GUARD_STATE.PARTIAL,
|
|
shouldSkipBuildAndUpload: guardState === RELEASE_ASSET_GUARD_STATE.COMPLETE,
|
|
shouldSkipUpload: guardState === RELEASE_ASSET_GUARD_STATE.COMPLETE,
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
IMMUTABLE_RELEASE_ASSETS,
|
|
RELEASE_ASSET_GUARD_STATE,
|
|
evaluateReleaseAssetGuard,
|
|
};
|