UNPKG

@pagopa/dx-cli

Version:

A CLI useful to manage DX tools.

73 lines (72 loc) 2.81 kB
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", }); };