Skip to content

Commit

Permalink
[packagers] let release continue if a packager fails. Resolves #288
Browse files Browse the repository at this point in the history
  • Loading branch information
aalmiray committed Jul 16, 2021
1 parent 594f859 commit 81a08ed
Show file tree
Hide file tree
Showing 18 changed files with 238 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,18 @@ public boolean prepareDistribution() throws ToolProcessingException {

context.getLogger().info("preparing {} distribution", distributionName);

return toolProcessor.prepareDistribution(distribution, initProps());
try {
return toolProcessor.prepareDistribution(distribution, initProps());
} catch (ToolProcessingException tpe) {
if (tool.isContinueOnError()) {
tool.fail();
context.getLogger().warn("failure: " + tpe.getMessage());
context.getLogger().trace(tpe);
return false;
} else {
throw tpe;
}
}
}

public boolean packageDistribution() throws ToolProcessingException {
Expand All @@ -81,6 +92,10 @@ public boolean packageDistribution() throws ToolProcessingException {
context.getLogger().debug("skipping for {} distribution", distributionName);
return false;
}
if (tool.isFailed()) {
context.getLogger().warn("skipping due to previous failure");
return false;
}

ToolProcessor<Tool> toolProcessor = ToolProcessors.findProcessor(context, tool);
if (!toolProcessor.supportsDistribution(distribution)) {
Expand All @@ -90,7 +105,18 @@ public boolean packageDistribution() throws ToolProcessingException {

context.getLogger().info("packaging {} distribution", distributionName);

return toolProcessor.packageDistribution(distribution, initProps());
try {
return toolProcessor.packageDistribution(distribution, initProps());
} catch (ToolProcessingException tpe) {
if (tool.isContinueOnError()) {
tool.fail();
context.getLogger().warn("failure: " + tpe.getMessage());
context.getLogger().trace(tpe);
return false;
} else {
throw tpe;
}
}
}

public boolean publishDistribution() throws ToolProcessingException {
Expand All @@ -100,6 +126,10 @@ public boolean publishDistribution() throws ToolProcessingException {
context.getLogger().debug("skipping for {} distribution", distributionName);
return false;
}
if (tool.isFailed()) {
context.getLogger().warn("skipping due to previous failure");
return false;
}

ToolProcessor<Tool> toolProcessor = ToolProcessors.findProcessor(context, tool);
if (!toolProcessor.supportsDistribution(distribution)) {
Expand All @@ -109,7 +139,18 @@ public boolean publishDistribution() throws ToolProcessingException {

context.getLogger().info("publishing {} distribution", distributionName);

return toolProcessor.publishDistribution(distribution, Releasers.releaserFor(context), initProps());
try {
return toolProcessor.publishDistribution(distribution, Releasers.releaserFor(context), initProps());
} catch (ToolProcessingException tpe) {
if (tool.isContinueOnError()) {
tool.fail();
context.getLogger().warn("failure: " + tpe.getMessage());
context.getLogger().trace(tpe);
return false;
} else {
throw tpe;
}
}
}

private Map<String, Object> initProps() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ public abstract class AbstractTool implements Tool {
protected boolean enabled;
protected Active active;
protected String templateDirectory;
protected Boolean continueOnError;
protected boolean failed;

protected AbstractTool(String name) {
this.name = name;
Expand All @@ -41,10 +43,22 @@ protected AbstractTool(String name) {
void setAll(AbstractTool tool) {
this.active = tool.active;
this.enabled = tool.enabled;
this.failed = tool.failed;
this.templateDirectory = tool.templateDirectory;
this.continueOnError = tool.continueOnError;
setExtraProperties(tool.extraProperties);
}

@Override
public void fail() {
this.failed = true;
}

@Override
public boolean isFailed() {
return failed;
}

@Override
public Set<String> getSupportedExtensions() {
Set<String> set = new LinkedHashSet<>();
Expand All @@ -68,6 +82,21 @@ public void disable() {
enabled = false;
}

@Override
public boolean isContinueOnError() {
return continueOnError != null && continueOnError;
}

@Override
public void setContinueOnError(Boolean continueOnError) {
this.continueOnError = continueOnError;
}

@Override
public boolean isContinueOnErrorSet() {
return continueOnError != null;
}

public boolean resolveEnabled(Project project) {
if (null == active) {
active = Active.NEVER;
Expand Down Expand Up @@ -146,6 +175,7 @@ public Map<String, Object> asMap(boolean full) {
props.put("enabled", isEnabled());
props.put("active", active);
props.put("templateDirectory", templateDirectory);
props.put("continueOnError", isContinueOnError());
asMap(full, props);
props.put("extraProperties", getResolvedExtraProperties());

Expand Down
30 changes: 30 additions & 0 deletions core/jreleaser-model/src/main/java/org/jreleaser/model/Docker.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,41 @@
*/
public class Docker extends AbstractDockerConfiguration implements Tool {
private final Map<String, DockerSpec> specs = new LinkedHashMap<>();
protected Boolean continueOnError;
protected boolean failed;

void setAll(Docker docker) {
super.setAll(docker);
this.continueOnError = docker.continueOnError;
this.failed = docker.failed;
setSpecs(docker.specs);
}

@Override
public void fail() {
this.failed = true;
}

@Override
public boolean isFailed() {
return failed;
}

@Override
public boolean isContinueOnError() {
return continueOnError != null && continueOnError;
}

@Override
public void setContinueOnError(Boolean continueOnError) {
this.continueOnError = continueOnError;
}

@Override
public boolean isContinueOnErrorSet() {
return continueOnError != null;
}

@Override
public boolean supportsPlatform(String platform) {
return isBlank(platform) || PlatformUtils.isUnix(platform);
Expand Down Expand Up @@ -98,6 +127,7 @@ public Map<String, Object> asMap(boolean full) {

@Override
protected void asMap(boolean full, Map<String, Object> props) {
props.put("continueOnError", isContinueOnError());
List<Map<String, Object>> specs = this.specs.values()
.stream()
.filter(d -> full || d.isEnabled())
Expand Down
10 changes: 10 additions & 0 deletions core/jreleaser-model/src/main/java/org/jreleaser/model/Tool.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,14 @@ public interface Tool extends Domain, ExtraProperties, Activatable {
boolean supportsPlatform(String platform);

boolean supportsDistribution(Distribution distribution);

boolean isContinueOnError();

void setContinueOnError(Boolean continueOnError);

boolean isContinueOnErrorSet();

boolean isFailed();

void fail();
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ public static void validateBrew(JReleaserContext context, Distribution distribut
validateOwner(tap, parentTool.getTap());
validateTemplate(context, distribution, tool, parentTool, errors);
mergeExtraProperties(tool, parentTool);
validateContinueOnError(tool, parentTool);

List<Brew.Dependency> dependencies = new ArrayList<>(parentTool.getDependenciesAsList());
dependencies.addAll(tool.getDependenciesAsList());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public static void validateChocolatey(JReleaserContext context, Distribution dis
validateOwner(bucket, parentTool.getBucket());
validateTemplate(context, distribution, tool, parentTool, errors);
mergeExtraProperties(tool, parentTool);
validateContinueOnError(tool, parentTool);

if (isBlank(tool.getUsername())) {
tool.setUsername(service.getOwner());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ public static void validateDocker(JReleaserContext context, Distribution distrib
validateTemplate(context, distribution, tool, parentTool, errors);
}
mergeExtraProperties(tool, parentTool);
validateContinueOnError(tool, parentTool);

if (isBlank(tool.getBaseImage())) {
tool.setBaseImage(parentTool.getBaseImage());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ public static void validateJbang(JReleaserContext context, Distribution distribu
validateOwner(catalog, parentTool.getCatalog());
validateTemplate(context, distribution, tool, parentTool, errors);
mergeExtraProperties(tool, parentTool);
validateContinueOnError(tool, parentTool);

if (isBlank(tool.getAlias())) {
tool.setAlias(distribution.getExecutable());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public static void validateScoop(JReleaserContext context, Distribution distribu
validateOwner(bucket, parentTool.getBucket());
validateTemplate(context, distribution, tool, parentTool, errors);
mergeExtraProperties(tool, parentTool);
validateContinueOnError(tool, parentTool);

if (isBlank(tool.getCheckverUrl())) {
tool.setCheckverUrl(parentTool.getCheckverUrl());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public static void validateSnap(JReleaserContext context, Distribution distribut
validateOwner(snap, parentTool.getSnap());
validateTemplate(context, distribution, tool, parentTool, errors);
mergeExtraProperties(tool, parentTool);
validateContinueOnError(tool, parentTool);
mergeSnapPlugs(tool, parentTool);
mergeSnapSlots(tool, parentTool);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.jreleaser.model.CommitAuthorAware;
import org.jreleaser.model.Environment;
import org.jreleaser.model.OwnerAware;
import org.jreleaser.model.Tool;
import org.jreleaser.util.Env;
import org.jreleaser.util.Errors;

Expand Down Expand Up @@ -67,6 +68,12 @@ static void validateOwner(OwnerAware self, OwnerAware other) {
if (isBlank(self.getOwner())) self.setOwner(other.getOwner());
}

static void validateContinueOnError(Tool self, Tool other) {
if (!self.isContinueOnErrorSet()) {
self.setContinueOnError(other.isContinueOnError());
}
}

static void validateCommitAuthor(CommitAuthorAware self, CommitAuthorAware other) {
CommitAuthor author = new CommitAuthor();
author.setName(self.getCommitAuthor().getName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,6 @@ interface Tool extends ExtraProperties {
void setActive(String str)

DirectoryProperty getTemplateDirectory()

Property<Boolean> getContinueOnError()
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,22 @@ import static org.jreleaser.util.StringUtils.isNotBlank
abstract class AbstractTool implements Tool {
final Property<Active> active
final DirectoryProperty templateDirectory
final Property<Boolean> continueOnError
final MapProperty<String, Object> extraProperties

@Inject
AbstractTool(ObjectFactory objects) {
active = objects.property(Active).convention(Providers.notDefined())
templateDirectory = objects.directoryProperty().convention(Providers.notDefined())
continueOnError = objects.property(Boolean).convention(Providers.notDefined())
extraProperties = objects.mapProperty(String, Object).convention(Providers.notDefined())
}

@Internal
boolean isSet() {
active.present ||
templateDirectory.present ||
continueOnError.present||
extraProperties.present
}

Expand All @@ -68,6 +71,7 @@ abstract class AbstractTool implements Tool {
if (templateDirectory.present) {
tool.templateDirectory = templateDirectory.get().asFile.toPath().toAbsolutePath().toString()
}
if (continueOnError.present) tool.continueOnError = continueOnError.get()
if (extraProperties.present) tool.extraProperties.putAll(extraProperties.get())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ import groovy.transform.CompileDynamic
import groovy.transform.CompileStatic
import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.NamedDomainObjectFactory
import org.gradle.api.internal.provider.Providers
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Internal
import org.jreleaser.gradle.plugin.dsl.Docker

Expand All @@ -35,10 +37,12 @@ import javax.inject.Inject
@CompileStatic
class DockerImpl extends AbstractDockerConfiguration implements Docker {
final NamedDomainObjectContainer<DockerSpecImpl> specs
final Property<Boolean> continueOnError

@Inject
DockerImpl(ObjectFactory objects) {
super(objects)
continueOnError = objects.property(Boolean).convention(Providers.notDefined())

specs = objects.domainObjectContainer(DockerSpecImpl, new NamedDomainObjectFactory<DockerSpecImpl>() {
@Override
Expand All @@ -54,13 +58,15 @@ class DockerImpl extends AbstractDockerConfiguration implements Docker {
@Internal
boolean isSet() {
super.isSet() ||
continueOnError.present||
!specs.isEmpty()
}

@CompileDynamic
org.jreleaser.model.Docker toModel() {
org.jreleaser.model.Docker tool = new org.jreleaser.model.Docker()
toModel(tool)
if (continueOnError.present) tool.continueOnError = continueOnError.get()

specs.each { tool.addSpec(it.toModel()) }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,12 @@ abstract class AbstractTool implements Tool {
protected final Map<String, Object> extraProperties = new LinkedHashMap<>();
protected Active active;
protected String templateDirectory;
protected Boolean continueOnError;

void setAll(AbstractTool tool) {
this.active = tool.active;
this.templateDirectory = tool.templateDirectory;
this.continueOnError = tool.continueOnError;
setExtraProperties(tool.extraProperties);
}

Expand Down Expand Up @@ -60,6 +62,21 @@ public void setTemplateDirectory(String templateDirectory) {
this.templateDirectory = templateDirectory;
}

@Override
public boolean isContinueOnError() {
return continueOnError != null && continueOnError;
}

@Override
public void setContinueOnError(Boolean continueOnError) {
this.continueOnError = continueOnError;
}

@Override
public boolean isContinueOnErrorSet() {
return continueOnError != null;
}

@Override
public Map<String, Object> getExtraProperties() {
return extraProperties;
Expand Down

0 comments on commit 81a08ed

Please sign in to comment.