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
|
2025-02-04 04:48:46 +00:00
|
|
|
def workspace
|
2025-01-21 09:01:31 +00:00
|
|
|
|
2025-02-04 04:48:46 +00:00
|
|
|
DependenciesResolver(steps, language, workspace) {
|
2025-01-21 09:01:31 +00:00
|
|
|
this.steps = steps
|
|
|
|
|
this.language = language
|
2025-02-04 05:10:01 +00:00
|
|
|
this.workspace = workspace
|
2025-01-21 09:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-04 07:06:45 +00:00
|
|
|
def getNodeVersion() {
|
|
|
|
|
def version = steps.sh(script: "node -v", returnStdout: true).trim()
|
|
|
|
|
steps.log.info 'Dependencies Resolver', "Node version is ${version}"
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-22 07:42:56 +00:00
|
|
|
def resolve(configurations) {
|
2025-01-21 09:01:31 +00:00
|
|
|
if (mgr == null) {
|
|
|
|
|
steps.error("Dependencies manager is not set")
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-04 04:03:30 +00:00
|
|
|
steps.log.info("Dependencies Resolver","Ready to resolve dependencies for ${language}...")
|
2025-01-21 09:01:31 +00:00
|
|
|
|
2025-02-04 04:03:30 +00:00
|
|
|
steps.log.info("Dependencies Resolver","Using ${mgr.manager} to resolve dependencies...")
|
2025-01-21 09:01:31 +00:00
|
|
|
|
2025-02-04 05:02:40 +00:00
|
|
|
steps.log.info("Dependencies Resolver","Workspace sets to: ${this.workspace}")
|
|
|
|
|
|
2025-01-21 09:01:31 +00:00
|
|
|
if (cachingEnabled) {
|
2025-02-04 04:03:30 +00:00
|
|
|
steps.log.info("Dependencies Resolver","Dependencies caching is enabled")
|
2025-01-21 09:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (mgr) {
|
|
|
|
|
case DependenciesManager.PIP:
|
2025-02-22 15:11:15 +00:00
|
|
|
if (configurations.requirementsFile == null || configurations.requirementsFile.isEmpty()) {
|
|
|
|
|
steps.error("requirementsFile is required when using PIP as dependencies manager")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
def requirementsFile = configurations.requirementsFile
|
|
|
|
|
|
|
|
|
|
if (cachingEnabled) {
|
|
|
|
|
steps.dir(this.workspace) {
|
2025-02-22 15:15:27 +00:00
|
|
|
steps.cache(maxCacheSize: 512, caches: [[$class: 'ArbitraryFileCache', cacheName: "${configurations.name}-pip-cache", includes: '**/*', path: '.pip-cache', cacheValidityDecidingFile: 'requirements.txt']]) {
|
2025-02-22 15:11:15 +00:00
|
|
|
steps.sh "pip install --cache-dir .pip-cache -r ${requirementsFile}"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
steps.dir(this.workspace) {
|
|
|
|
|
steps.sh "pip install -r ${requirementsFile}"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-04 02:23:25 +00:00
|
|
|
break
|
2025-01-21 09:01:31 +00:00
|
|
|
case DependenciesManager.NPM:
|
2025-01-22 07:42:56 +00:00
|
|
|
if (configurations.npmPackageJsonFile == null || configurations.npmPackageJsonFile.isEmpty()) {
|
|
|
|
|
steps.error("npmPackageJsonFile is required when using NPM as dependencies manager")
|
2025-01-21 09:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
2025-01-22 07:42:56 +00:00
|
|
|
def packageJsonFile = configurations.npmPackageJsonFile
|
2025-01-21 09:01:31 +00:00
|
|
|
|
2025-02-04 07:06:45 +00:00
|
|
|
this.getNodeVersion()
|
|
|
|
|
|
2025-01-21 09:01:31 +00:00
|
|
|
if (cachingEnabled) {
|
2025-02-04 05:02:40 +00:00
|
|
|
steps.dir(this.workspace) {
|
2025-02-22 15:15:27 +00:00
|
|
|
steps.cache(maxCacheSize: 512, caches: [[$class: 'ArbitraryFileCache', cacheName: "${configurations.name}-npm-cache", includes: '**/*', path: '.npm-cache', cacheValidityDecidingFile: 'package-lock.json']]) {
|
2025-02-09 17:54:12 +00:00
|
|
|
steps.sh "npm install --cache .npm-cache --prefer-offline --no-audit"
|
2025-02-04 02:29:49 +00:00
|
|
|
}
|
2025-01-21 09:01:31 +00:00
|
|
|
}
|
|
|
|
|
} else {
|
2025-02-04 05:02:40 +00:00
|
|
|
steps.dir(this.workspace) {
|
2025-02-04 02:29:49 +00:00
|
|
|
steps.sh "npm install"
|
|
|
|
|
}
|
2025-01-21 09:01:31 +00:00
|
|
|
}
|
2025-02-04 02:23:25 +00:00
|
|
|
|
|
|
|
|
break
|
2025-01-21 09:01:31 +00:00
|
|
|
case DependenciesManager.YARN:
|
2025-01-22 07:42:56 +00:00
|
|
|
if (configurations.yarnPackageJsonFile == null || configurations.yarnPackageJsonFile.isEmpty()) {
|
|
|
|
|
steps.error("yarnPackageJsonFile is required when using YARN as dependencies manager")
|
2025-01-21 09:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
2025-01-22 07:42:56 +00:00
|
|
|
def packageJsonFile = configurations.yarnPackageJsonFile
|
2025-01-21 09:01:31 +00:00
|
|
|
|
2025-02-04 07:06:45 +00:00
|
|
|
this.getNodeVersion()
|
|
|
|
|
|
2025-01-21 09:01:31 +00:00
|
|
|
if (cachingEnabled) {
|
2025-02-04 05:02:40 +00:00
|
|
|
steps.dir(this.workspace) {
|
2025-02-22 15:15:27 +00:00
|
|
|
steps.cache(maxCacheSize: 512, caches: [[$class: 'ArbitraryFileCache', includes: '**/*', cacheName: "${configurations.name}-pnpm-cache", path: '.yarn-cache', cacheValidityDecidingFile: 'yarn.lock']]) {
|
2025-02-07 09:19:14 +00:00
|
|
|
steps.sh "yarn install --cache-folder .yarn-cache --prefer-offline"
|
2025-02-04 02:29:49 +00:00
|
|
|
}
|
2025-01-21 09:01:31 +00:00
|
|
|
}
|
|
|
|
|
} else {
|
2025-02-04 05:02:40 +00:00
|
|
|
steps.dir(this.workspace) {
|
2025-02-04 02:29:49 +00:00
|
|
|
steps.sh "yarn install"
|
|
|
|
|
}
|
2025-01-21 09:01:31 +00:00
|
|
|
}
|
2025-02-04 02:23:25 +00:00
|
|
|
|
|
|
|
|
break
|
2025-01-21 09:01:31 +00:00
|
|
|
default:
|
|
|
|
|
steps.error("Unsupported dependencies manager")
|
|
|
|
|
}
|
2025-01-21 09:36:32 +00:00
|
|
|
}
|
|
|
|
|
}
|