UNPKG

14.1 kBSource Map (JSON)View Raw
1{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, lstatSync, readFileSync } from 'fs';\nimport { dirname, join } from 'path';\n\nimport * as Ajv from 'ajv';\nimport { safeLoad } from 'js-yaml';\n\nimport { logger } from './logger';\nimport {\n CraftProjectConfig,\n GithubGlobalConfig,\n ArtifactProviderName,\n StatusProviderName,\n} from './schemas/project_config';\nimport { ConfigurationError } from './utils/errors';\nimport {\n getPackageVersion,\n parseVersion,\n versionGreaterOrEqualThan,\n} from './utils/version';\nimport { BaseArtifactProvider } from './artifact_providers/base';\nimport { GithubArtifactProvider } from './artifact_providers/github';\nimport { ZeusArtifactProvider } from './artifact_providers/zeus';\nimport { NoneArtifactProvider } from './artifact_providers/none';\nimport { GCSArtifactProvider } from './artifact_providers/gcs';\n\nimport { ZeusStatusProvider } from './status_providers/zeus';\nimport { GithubStatusProvider } from './status_providers/github';\nimport { BaseStatusProvider } from './status_providers/base';\n\n// TODO support multiple configuration files (one per configuration)\nexport const CONFIG_FILE_NAME = '.craft.yml';\n\n/**\n * The default prefix for the release branch.\n */\nexport const DEFAULT_RELEASE_BRANCH_NAME = 'release';\n\n/**\n * Cached path to the configuration file\n */\nlet _configPathCache: string;\n\n/**\n * Cached configuration\n */\nlet _configCache: CraftProjectConfig;\n\n/**\n * Searches the current and parent directories for the configuration file\n *\n * Returns \"undefined\" if no file was found.\n */\nexport function findConfigFile(): string | undefined {\n if (_configPathCache) {\n return _configPathCache;\n }\n\n const cwd = process.cwd();\n const MAX_DEPTH = 1024;\n let depth = 0;\n let currentDir = cwd;\n while (depth <= MAX_DEPTH) {\n const probePath = join(currentDir, CONFIG_FILE_NAME);\n if (existsSync(probePath) && lstatSync(probePath).isFile()) {\n _configPathCache = probePath;\n return _configPathCache;\n }\n const parentDir = dirname(currentDir);\n if (currentDir === parentDir) {\n // Reached root directory\n return undefined;\n }\n currentDir = parentDir;\n depth += 1;\n }\n logger.warn('findConfigFile: Reached maximum allowed directory depth');\n return undefined;\n}\n\n/**\n * Returns project configuration (.craft.yml) file path\n *\n * Throws an error if the file cannot be found.\n */\nexport function getConfigFilePath(): string {\n const configFilePath = findConfigFile();\n if (!configFilePath) {\n throw new ConfigurationError(\n `Cannot find Craft configuration file. Have you added \"${CONFIG_FILE_NAME}\" to your project?`\n );\n }\n return configFilePath;\n}\n\n/**\n * Returns the path to the directory that contains the configuration file\n *\n * Returns \"undefined\" if no configuration file can be found.\n */\nexport function getConfigFileDir(): string | undefined {\n const configFilePath = findConfigFile();\n if (!configFilePath) {\n return undefined;\n }\n return dirname(configFilePath);\n}\n\n/**\n * Reads JSON schema for project configuration\n */\nexport function getProjectConfigSchema(): any {\n return require('./schemas/projectConfig.schema');\n}\n\n/**\n * Parses and validate passed configuration object\n *\n * Throw an error is the object cannot be properly parsed as configuration.\n *\n * @param rawConfig Raw project configuration object\n */\nexport function validateConfiguration(\n rawConfig: Record<string, any>\n): CraftProjectConfig {\n logger.debug('Parsing and validating the configuration file...');\n const schemaName = 'projectConfig';\n const projectConfigSchema = getProjectConfigSchema();\n const ajvValidator = new Ajv().addSchema(projectConfigSchema, schemaName);\n const valid = ajvValidator.validate(schemaName, rawConfig);\n if (valid) {\n return rawConfig as CraftProjectConfig;\n } else {\n throw new ConfigurationError(\n `Cannot parse configuration file:\\n${ajvValidator.errorsText()}`\n );\n }\n}\n\n/**\n * Returns the parsed configuration file contents\n */\nexport function getConfiguration(): CraftProjectConfig {\n if (_configCache) {\n return _configCache;\n }\n\n const configPath = getConfigFilePath();\n logger.debug('Configuration file found: ', configPath);\n const rawConfig = safeLoad(readFileSync(configPath, 'utf-8'));\n _configCache = validateConfiguration(rawConfig);\n return _configCache;\n}\n\n/**\n * Checks that the current \"craft\" version is compatible with the configuration\n *\n * \"minVersion\" configuration parameter specifies the minimal version of \"craft\"\n * that can work with the given configuration.\n */\nexport function checkMinimalConfigVersion(): void {\n const config = getConfiguration();\n const minVersionRaw = config.minVersion;\n if (!minVersionRaw) {\n logger.debug(\n 'No minimal version specified in the configuration, skpipping the check'\n );\n return;\n }\n\n const currentVersionRaw = getPackageVersion();\n if (!currentVersionRaw) {\n throw new Error('Cannot get the current craft version');\n }\n\n const minVersion = parseVersion(minVersionRaw);\n if (!minVersion) {\n throw new Error(`Cannot parse the minimal version: \"${minVersionRaw}\"`);\n }\n const currentVersion = parseVersion(currentVersionRaw);\n if (!currentVersion) {\n throw new Error(`Cannot parse the current version: \"${currentVersionRaw}\"`);\n }\n\n if (versionGreaterOrEqualThan(currentVersion, minVersion)) {\n logger.info(\n `\"craft\" version is compatible with the minimal version from the configuration file.`\n );\n } else {\n throw new ConfigurationError(\n `Incompatible \"craft\" versions. Current version: ${currentVersionRaw}, minimal version: ${minVersionRaw} (taken from .craft.yml).`\n );\n }\n}\n\n/**\n * Return the parsed global Github configuration\n */\nexport function getGlobalGithubConfig(): GithubGlobalConfig {\n // We extract global Github configuration (owner/repo) from top-level\n // configuration\n const repoGithubConfig = getConfiguration().github || {};\n\n if (!repoGithubConfig) {\n throw new ConfigurationError(\n 'GitHub configuration not found in the config file'\n );\n }\n\n if (!repoGithubConfig.owner) {\n throw new ConfigurationError('GitHub target: owner not found');\n }\n\n if (!repoGithubConfig.repo) {\n throw new ConfigurationError('GitHub target: repo not found');\n }\n\n return repoGithubConfig;\n}\n\n/**\n * Gets git tag prefix from configuration\n */\nexport function getGitTagPrefix(): string {\n const targets = getConfiguration().targets || [];\n const githubTarget = targets.find(target => target.name === 'github') || {};\n return githubTarget.tagPrefix || '';\n}\n\n/**\n * Create an artifact provider instance from the spec in the configuration file\n *\n * @returns An instance of artifact provider (which may be the dummy\n * NoneArtifactProvider if artifact storage is disabled).\n */\nexport function getArtifactProviderFromConfig(): BaseArtifactProvider {\n const projectConfig = getConfiguration();\n\n const artifactProviderName = projectConfig.artifactProvider?.name;\n\n const artifactProviderConfig = {\n ...projectConfig.artifactProvider?.config,\n repoName: projectConfig.github.repo,\n repoOwner: projectConfig.github.owner,\n };\n\n switch (artifactProviderName) {\n case undefined: // Zeus is the default at the moment\n case ArtifactProviderName.Zeus:\n return new ZeusArtifactProvider(artifactProviderConfig);\n case ArtifactProviderName.None:\n return new NoneArtifactProvider();\n case ArtifactProviderName.GCS:\n return new GCSArtifactProvider(artifactProviderConfig);\n case ArtifactProviderName.Github:\n return new GithubArtifactProvider(artifactProviderConfig);\n default: {\n throw new ConfigurationError('Invalid artifact provider');\n }\n }\n}\n\n/**\n * Create a status provider instance from the spec in the configuration file\n *\n * @returns An instance of status provider\n */\nexport function getStatusProviderFromConfig(): BaseStatusProvider {\n const config = getConfiguration() || {};\n const githubConfig = config.github;\n\n const rawStatusProvider = config.statusProvider || {\n config: undefined,\n name: undefined,\n };\n const {\n config: statusProviderConfig,\n name: statusProviderName,\n } = rawStatusProvider;\n\n switch (statusProviderName) {\n case undefined:\n case StatusProviderName.Zeus:\n return new ZeusStatusProvider(\n githubConfig.owner,\n githubConfig.repo,\n statusProviderConfig\n );\n case StatusProviderName.Github:\n return new GithubStatusProvider(\n githubConfig.owner,\n githubConfig.repo,\n statusProviderConfig\n );\n default: {\n throw new ConfigurationError('Invalid status provider');\n }\n }\n}\n"]}
\No newline at end of file