@softwareventures/maintain-project
Version:
Automatically create and maintain TypeScript projects with standard settings for Software Ventures Limited
36 lines • 1.71 kB
JavaScript
import { map, partition } from "@softwareventures/array";
import { intersects } from "semver";
import { mapNullableFn } from "@softwareventures/nullable";
import { toAsyncNullable } from "../result/result.js";
import { insert } from "../fs-stage/fs-stage.js";
import { modifyCiWorkflow } from "./modify-ci-workflow.js";
export async function removeUnsupportedNodeVersions(project) {
if (project.node.targetVersions.length === 0 || project.node.testedVersions.length === 0) {
return null;
}
const targetVersionRange = map(project.node.targetVersions, version => `^${version}`).join(" || ");
const [resultVersions, removeVersions] = partition(project.node.testedVersions, version => intersects(version, targetVersionRange));
if (removeVersions.length === 0) {
return null;
}
const file = modifyCiWorkflow(project, workflow => {
// FIXME
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
workflow.getIn(["jobs", "build-and-test", "strategy", "matrix", "node-version"]).items =
map(resultVersions, version => `${version}.x`);
return workflow;
});
return toAsyncNullable(file).then(mapNullableFn(file => ({
type: "fs-stage-update",
log: `ci(github): remove node version${removeVersions.length > 1 ? "s" : ""} ${removeVersions.join(", ")} from CI workflow`,
apply: async (stage) => insert(stage, ".github/workflows/ci.yml", file),
updatedProject: {
...project,
node: {
...project.node,
testedVersions: resultVersions
}
}
})));
}
//# sourceMappingURL=remove-unsupported-node-versions.js.map