67 lines
2.8 KiB
Groovy
67 lines
2.8 KiB
Groovy
package com.freeleaps.devops
|
|
|
|
class SemanticReleasingExecutor {
|
|
def steps
|
|
def workspace
|
|
def config
|
|
def plugins = [
|
|
'semantic-release',
|
|
'@semantic-release/git',
|
|
'@semantic-release/changelog',
|
|
'@semantic-release/exec',
|
|
'conventional-changelog-conventionalcommits'
|
|
]
|
|
|
|
SemanticReleasingExecutor(steps, workspace) {
|
|
this.steps = steps
|
|
this.workspace = workspace
|
|
// TODO: This should be a parameter, not hardcoded
|
|
this.config = 'com/freeleaps/devops/builtins/semantic-release/releaserc.json'
|
|
}
|
|
|
|
def release(credentialsId, branch) {
|
|
steps.log.warn("SemanticReleasingExecutor", "Configuration file customization is not supported yet, using builtin release rules as fallback")
|
|
steps.log.info("SemanticReleasingExecutor", "Releasing with config: ${config}")
|
|
|
|
steps.dir(steps.env.workroot) {
|
|
steps.withCredentials([steps.usernamePassword(credentialsId: credentialsId, passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
|
|
steps.env.GIT_CREDENTIALS = "${steps.env.GIT_USERNAME}:${steps.env.GIT_PASSWORD}"
|
|
steps.writeFile file: '.releaserc.json', text: steps.libraryResource(config)
|
|
steps.sh "git config --global --add safe.directory ${steps.env.workroot}"
|
|
steps.env.GIT_LOCAL_BRANCH = "${branch}"
|
|
|
|
// Store the version before semantic release
|
|
def previousVersion = ""
|
|
def versionFileExistsBefore = steps.sh(script: 'test -f "VERSION"', returnStatus: true) == 0
|
|
if (versionFileExistsBefore) {
|
|
previousVersion = steps.readFile('VERSION').trim()
|
|
steps.log.info("SemanticReleasingExecutor", "Previous version: ${previousVersion}")
|
|
}
|
|
|
|
steps.sh """
|
|
#!/bin/bash
|
|
semantic-release
|
|
"""
|
|
steps.log.info("SemanticReleasingExecutor", "Semantic release completed, read latest version from VERSION file")
|
|
|
|
// check if VERSION file exists
|
|
def versionFileExists = steps.sh(script: 'test -f "VERSION"', returnStatus: true) == 0
|
|
def released = false
|
|
|
|
if (versionFileExists) {
|
|
def currentVersion = steps.readFile('VERSION').trim()
|
|
released = !versionFileExistsBefore || (currentVersion != previousVersion)
|
|
if (released) {
|
|
steps.env.LATEST_VERSION = steps.readFile('VERSION').trim()
|
|
steps.env.SEMANTIC_RELEASED = true
|
|
steps.log.info("SemanticReleasingExecutor", "Semantic release completed, version: ${steps.env.LATEST_VERSION}")
|
|
} else {
|
|
steps.log.warn("SemanticReleasingExecutor", "No new version released, current version remains: ${currentVersion}")
|
|
}
|
|
} else {
|
|
steps.log.warn("SemanticReleasingExecutor", "VERSION file not found, semantic release may have failed ?")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |