package com.freeleaps.devops import com.freeleaps.devops.enums.DependenciesManager class DependenciesResolver { def steps def language def cachingEnabled def mgr def workspace DependenciesResolver(steps, language, workspace) { this.steps = steps this.language = language } def enableCachingSupport() { this.cachingEnabled = true } def disableCachingSupport() { this.cachingEnabled = false } def useManager(DependenciesManager mgr) { if (mgr == DependenciesManager.UNKNOWN) { steps.error("Unknown dependencies manager") } this.mgr = mgr } def resolve(configurations) { if (mgr == null) { steps.error("Dependencies manager is not set") } steps.log.info("Dependencies Resolver","Ready to resolve dependencies for ${language}...") steps.log.info("Dependencies Resolver","Using ${mgr.manager} to resolve dependencies...") steps.log.info("Dependencies Resolver","Workspace sets to: ${this.workspace}") if (cachingEnabled) { steps.log.info("Dependencies Resolver","Dependencies caching is enabled") } switch (mgr) { case DependenciesManager.PIP: steps.log.warn("Dependencies Resolver","Python project no need to resolving dependencies, skipping...") break case DependenciesManager.NPM: if (configurations.npmPackageJsonFile == null || configurations.npmPackageJsonFile.isEmpty()) { steps.error("npmPackageJsonFile is required when using NPM as dependencies manager") } def packageJsonFile = configurations.npmPackageJsonFile if (cachingEnabled) { steps.dir(this.workspace) { steps.cache(maxCacheSize: 512, caches: [[$class: 'ArbitraryFileCache', includes: '**/*', path: '.npm-cache']]) { steps.sh "npm install --cache .npm-cache" } } } else { steps.dir(this.workspace) { steps.sh "npm install" } } break case DependenciesManager.YARN: if (configurations.yarnPackageJsonFile == null || configurations.yarnPackageJsonFile.isEmpty()) { steps.error("yarnPackageJsonFile is required when using YARN as dependencies manager") } def packageJsonFile = configurations.yarnPackageJsonFile if (cachingEnabled) { steps.dir(this.workspace) { steps.cache(maxCacheSize: 512, caches: [[$class: 'ArbitraryFileCache', includes: '**/*', path: '.yarn-cache']]) { steps.sh "yarn install --cache-folder .yarn-cache" } } } else { steps.dir(this.workspace) { steps.sh "yarn install" } } break default: steps.error("Unsupported dependencies manager") } } }