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") } steps.log.info "Ready to resolve dependencies for ${language}..." steps.log.info "Using ${mgr.manager} to resolve dependencies..." if (cachingEnabled) { steps.log.info "Dependencies caching is enabled" } switch (mgr) { case DependenciesManager.PIP: steps.log.warn "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.cache(maxCacheSize: 512, caches: [[$class: 'ArbitraryFileCache', excludes: '', includes: '**/*', path: '.npm-cache']]) { steps.sh "npm install --cache .npm-cache" } } else { 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.cache(maxCacheSize: 512, caches: [[$class: 'ArbitraryFileCache', excludes: '', includes: '**/*', path: '.yarn-cache']]) { steps.sh "yarn install --cache-folder .yarn-cache" } } else { steps.sh "yarn install" } break default: steps.error("Unsupported dependencies manager") } } }