71 lines
1.9 KiB
Groovy
71 lines
1.9 KiB
Groovy
package com.github.lookout.serviceartifact
|
|
|
|
import groovy.transform.TypeChecked
|
|
import org.gradle.api.Project
|
|
import org.slf4j.Logger
|
|
import org.slf4j.LoggerFactory
|
|
|
|
import com.github.lookout.serviceartifact.scm.AbstractScmHandler
|
|
|
|
/**
|
|
* ServiceArtifactExtension provides the service{} DSL into Gradle files which
|
|
* use the plugin
|
|
*/
|
|
@TypeChecked
|
|
class ServiceArtifactExtension {
|
|
protected final Project project
|
|
protected final Map<String, String> env
|
|
protected Logger logger = LoggerFactory.getLogger(ServiceArtifactExtension.class)
|
|
/** List of scm handler classes, in priority order */
|
|
private final List<Class<AbstractScmHandler>> scmHandlerImpls = [
|
|
scm.GerritHandler.class,
|
|
scm.GitHandler.class,
|
|
]
|
|
/** SCM Handler appropriate for this execution */
|
|
protected AbstractScmHandler _scmHandler
|
|
|
|
|
|
ServiceArtifactExtension(final Project project) {
|
|
this(project, [:])
|
|
}
|
|
|
|
ServiceArtifactExtension(final Project project,
|
|
final Map<String, String> env) {
|
|
this.project = project
|
|
this.env = env
|
|
}
|
|
|
|
/**
|
|
* Lazily look up our SCM Handler
|
|
*/
|
|
AbstractScmHandler getScmHandler() {
|
|
if (this._scmHandler != null) {
|
|
return this._scmHandler
|
|
}
|
|
|
|
this.scmHandlerImpls.find {
|
|
AbstractScmHandler handler = it.build(this.env)
|
|
|
|
if (handler.isAvailable()) {
|
|
this._scmHandler = handler
|
|
return true
|
|
}
|
|
}
|
|
|
|
return this._scmHandler
|
|
}
|
|
|
|
/**
|
|
* Return the appropriately computed version string based on our executing
|
|
* environment
|
|
*/
|
|
String version(final String baseVersion) {
|
|
if (this.scmHandler instanceof AbstractScmHandler) {
|
|
return this.scmHandler.annotatedVersion(baseVersion)
|
|
}
|
|
|
|
return baseVersion
|
|
}
|
|
}
|
|
|