freeleaps-ops/first-class-pipeline/src/com/freeleaps/devops/DependenciesResolver.groovy

91 lines
2.8 KiB
Groovy
Raw Normal View History

package com.freeleaps.devops
import com.freeleaps.devops.enums.DependenciesManager
class DependenciesResolver {
def steps
def language
def cachingEnabled
def mgr
DependenciesResolver(steps, language) {
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")
}
log.info "Ready to resolve dependencies for ${language}..."
log.info "Using ${mgr.manager} to resolve dependencies..."
if (cachingEnabled) {
log.info "Dependencies caching is enabled"
}
switch (mgr) {
case DependenciesManager.PIP:
if (configurations.pipRequirementsFile == null || configurations.pipRequirementsFile.isEmpty()) {
steps.error("pipRequirementsFile is required when using PIP as dependencies manager")
}
def requirementsFile = configurations.pipRequirementsFile
if (cachingEnabled) {
steps.cache(maxCacheSize: 512, caches: [[$class: 'ArbitraryFileCache', excludes: '', includes: '**/*', path: '.pip-cache']]) {
steps.sh "pip install -r ${requirementsFile} --cache-dir .pip-cache"
}
} else {
steps.sh "pip install -r ${requirementsFile}"
}
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.cache(maxCacheSize: 512, caches: [[$class: 'ArbitraryFileCache', excludes: '', includes: '**/*', path: '.npm-cache']]) {
steps.sh "npm install --cache .npm-cache"
}
} else {
steps.sh "npm install"
}
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.cache(maxCacheSize: 512, caches: [[$class: 'ArbitraryFileCache', excludes: '', includes: '**/*', path: '.yarn-cache']]) {
steps.sh "yarn install --cache-folder .yarn-cache"
}
} else {
steps.sh "yarn install"
}
default:
steps.error("Unsupported dependencies manager")
}
}
}