service-artifact-gradle-plugin/src/main/groovy/com/github/lookout/serviceartifact/ServiceArtifactExtension.gr...

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
}
}