2025-01-21 09:01:31 +00:00
|
|
|
package com.freeleaps.devops
|
|
|
|
|
|
2025-01-21 09:38:01 +00:00
|
|
|
import com.freeleaps.devops.enums.DependenciesManager
|
|
|
|
|
|
2025-01-21 09:01:31 +00:00
|
|
|
class DependenciesResolver {
|
|
|
|
|
def steps
|
|
|
|
|
def language
|
|
|
|
|
def cachingEnabled
|
|
|
|
|
def mgr
|
|
|
|
|
|
|
|
|
|
DependenciesResolver(steps, language) {
|
|
|
|
|
this.steps = steps
|
|
|
|
|
this.language = language
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-21 09:02:41 +00:00
|
|
|
def enableCachingSupport() {
|
2025-01-21 09:01:31 +00:00
|
|
|
this.cachingEnabled = true
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-21 09:02:41 +00:00
|
|
|
def disableCachingSupport() {
|
2025-01-21 09:01:31 +00:00
|
|
|
this.cachingEnabled = false
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-21 09:02:41 +00:00
|
|
|
def useManager(DependenciesManager mgr) {
|
2025-01-21 09:01:31 +00:00
|
|
|
if (mgr == DependenciesManager.UNKNOWN) {
|
|
|
|
|
steps.error("Unknown dependencies manager")
|
|
|
|
|
}
|
|
|
|
|
this.mgr = mgr
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
def resolve(Map configurations) {
|
|
|
|
|
if (mgr == null) {
|
|
|
|
|
steps.error("Dependencies manager is not set")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
echo "Ready to resolve dependencies for ${language}..."
|
|
|
|
|
|
|
|
|
|
echo "Using ${mgr.manager} to resolve dependencies..."
|
|
|
|
|
|
|
|
|
|
if (cachingEnabled) {
|
|
|
|
|
echo "Dependencies caching is enabled"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (mgr) {
|
|
|
|
|
case DependenciesManager.PIP:
|
|
|
|
|
if (configurations.PIP_REQUIREMENTS_FILE == null || configurations.PIP_REQUIREMENTS_FILE.isEmpty()) {
|
|
|
|
|
steps.error("PIP_REQUIREMENTS_FILE is required when using PIP as dependencies manager")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
def requirementsFile = configurations.PIP_REQUIREMENTS_FILE
|
|
|
|
|
|
|
|
|
|
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.NPM_PACKAGE_JSON_FILE == null || configurations.NPM_PACKAGE_JSON_FILE.isEmpty()) {
|
|
|
|
|
steps.error("NPM_PACKAGE_JSON_FILE is required when using NPM as dependencies manager")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
def packageJsonFile = configurations.NPM_PACKAGE_JSON_FILE
|
|
|
|
|
|
|
|
|
|
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.YARN_PACKAGE_JSON_FILE == null || configurations.YARN_PACKAGE_JSON_FILE.isEmpty()) {
|
|
|
|
|
steps.error("YARN_PACKAGE_JSON_FILE is required when using YARN as dependencies manager")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
def packageJsonFile = configurations.YARN_PACKAGE_JSON_FILE
|
|
|
|
|
|
|
|
|
|
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")
|
|
|
|
|
}
|
2025-01-21 09:36:32 +00:00
|
|
|
}
|
|
|
|
|
}
|