@pagopa/dx-cli
Version:
A CLI useful to manage DX tools.
73 lines (72 loc) • 2.81 kB
JavaScript
import { ok } from "neverthrow";
import fs from "node:path";
import coerce from "semver/functions/coerce.js";
import semverGte from "semver/functions/gte.js";
const isVersionValid = (version, minVersion) => {
const minAcceptedSemVer = coerce(minVersion);
const dependencySemVer = coerce(version);
if (!minAcceptedSemVer || !dependencySemVer) {
return false;
}
return semverGte(dependencySemVer, minAcceptedSemVer);
};
export const checkPreCommitConfig = async (dependencies, repositoryRoot) => {
const { repositoryReader } = dependencies;
const checkName = "Pre-commit Configuration";
const preCommitResult = await repositoryReader.fileExists(fs.join(repositoryRoot, ".pre-commit-config.yaml"));
if (preCommitResult.isOk() && preCommitResult.value) {
return ok({
checkName,
isValid: true,
successMessage: "Pre-commit configuration is present in the repository root",
});
}
const errorMessage = preCommitResult.isErr()
? preCommitResult.error.message
: `Pre-commit configuration is not present in the repository root. Please add a .pre-commit-config.yaml file to the repository root.`;
return ok({
checkName,
errorMessage,
isValid: false,
});
};
export const checkTurboConfig = async (dependencies, repositoryRoot, config) => {
const { packageJsonReader, repositoryReader } = dependencies;
const checkName = "Turbo Configuration";
const turboResult = await repositoryReader.fileExists(fs.join(repositoryRoot, "turbo.json"));
if (turboResult.isErr()) {
return ok({
checkName,
errorMessage: turboResult.error.message,
isValid: false,
});
}
const dependenciesResult = await packageJsonReader.getDependencies(repositoryRoot, "dev");
if (dependenciesResult.isErr()) {
return ok({
checkName,
errorMessage: dependenciesResult.error.message,
isValid: false,
});
}
const turboVersion = dependenciesResult.value.get("turbo");
if (!turboVersion) {
return ok({
checkName,
errorMessage: "Turbo dependency not found in devDependencies. Please add 'turbo' to your devDependencies.",
isValid: false,
});
}
if (!isVersionValid(turboVersion, config.minVersions.turbo)) {
return ok({
checkName,
errorMessage: `Turbo version (${turboVersion}) is too low. Minimum required version is ${config.minVersions.turbo}.`,
isValid: false,
});
}
return ok({
checkName,
isValid: true,
successMessage: "Turbo configuration is present in the monorepo root and turbo dependency is installed",
});
};