package org.jfrog.bamboo.bintray; import com.atlassian.bamboo.build.ViewBuildResults; import com.atlassian.bamboo.plugin.RemoteAgentSupported; import com.google.common.collect.ImmutableMap; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.jfrog.bamboo.admin.BintrayConfig; import org.jfrog.bamboo.admin.ServerConfig; import org.jfrog.bamboo.bintray.client.BintrayClient; import org.jfrog.bamboo.promotion.PromotionContext; import org.jfrog.bamboo.util.TaskUtils; import java.util.List; import java.util.Map; /** * Displaying the Push to Bintray action inside a Job tab * * @author Aviad Shikloshi */ @RemoteAgentSupported public class PushToBintrayAction extends ViewBuildResults { public static Logger log = Logger.getLogger(PushToBintrayAction.class); public static PromotionContext context = new PromotionContext(); private static final String BINTRAY_CONFIG_PREFIX = "bintray."; private static Map<String, String> signMethodList = ImmutableMap.of( "false", "Don't Sign", "true", "Sign", "descriptor", "According to descriptor file"); private static BintrayClient bintrayClient; private boolean pushing = true; private boolean overrideDescriptorFile; private String subject; private String repository; private String packageName; private String version; private String licenses; private String vcsUrl; private String gpgPassphrase; private String signMethod; private boolean mavenSync; @Override public String execute() throws Exception { context.clearLog(); String result = super.execute(); if (ERROR.equals(result)) { return ERROR; } try { context.setBuildNumber(this.getBuildNumber()); context.setBuildKey(this.getImmutableBuild().getName()); BintrayConfig bintrayConfig = TaskUtils.getBintrayConfig(); bintrayClient = new BintrayClient(bintrayConfig); Map<String, String> buildTaskConfiguration = TaskUtils.findConfigurationForBuildTask(this); addDefaultValuesForInput(buildTaskConfiguration); return INPUT; } catch (Exception e) { log.error("Error occurred while loading Push to Bintray configuration page.", e); return ERROR; } } public String push() { String result; ServerConfig serverConfig = TaskUtils.getArtifactoryServerConfig(getImmutablePlan()); try { new Thread(new PushToBintrayRunnable(this, serverConfig, bintrayClient)).start(); pushing = false; result = SUCCESS; } catch (Exception e) { result = ERROR; } return result; } public String getPushToBintrayLog() { return SUCCESS; } // If package name already in the Bintray configuration page we shouldn't generate it again private boolean validPushToBintrayFields() { return StringUtils.isNotBlank(this.packageName); } public Map<String, String> getSignMethodList() { return signMethodList; } public String getSubject() { return this.subject; } public void setSubject(String subject) { this.subject = subject; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getGpgPassphrase() { return gpgPassphrase; } public void setGpgPassphrase(String gpgPassphrase) { this.gpgPassphrase = gpgPassphrase; } public String getLicenses() { return licenses; } public void setLicenses(String licenses) { this.licenses = licenses; } public String getVcsUrl() { return vcsUrl; } public void setVcsUrl(String vcsUrl) { this.vcsUrl = vcsUrl; } public String getRepository() { return repository; } public void setRepository(String repository) { this.repository = repository; } public String getSignMethod() { return signMethod; } public void setSignMethod(String signMethod) { this.signMethod = signMethod; } public String isOverrideDescriptorFile() { return String.valueOf(overrideDescriptorFile); } public void setOverrideDescriptorFile(boolean overrideDescriptorFile) { this.overrideDescriptorFile = overrideDescriptorFile; } public boolean getOverrideDescriptorFile() { return this.overrideDescriptorFile; } public boolean isMavenSync() { return mavenSync; } public void setMavenSync(boolean mavenSync) { this.mavenSync = mavenSync; } public boolean isPushing() { return pushing; } public void setPushing(boolean pushing) { this.pushing = pushing; } public List<String> getResult() { return context.getLog(); } public boolean isDone() { return context.isDone(); } /** * Populate the Bintray configuration from the build task configuration to the "Push to Bintray" task * * @param buildTaskConfiguration Artifactory build task configuration */ private void addDefaultValuesForInput(Map<String, String> buildTaskConfiguration) throws IllegalAccessException, NoSuchFieldException { setSubject(buildTaskConfiguration.get("bintray.subject")); setRepository(buildTaskConfiguration.get("bintray.repository")); setPackageName(buildTaskConfiguration.get("bintray.packageName")); setLicenses(buildTaskConfiguration.get("bintray.licenses")); setSignMethod(buildTaskConfiguration.get("bintray.signMethod")); setVcsUrl(buildTaskConfiguration.get("bintray.vcsUrl")); setGpgPassphrase(buildTaskConfiguration.get("bintray.gpgSign")); setMavenSync(Boolean.valueOf(buildTaskConfiguration.get("bintray.mavenSync"))); setOverrideDescriptorFile(Boolean.valueOf(buildTaskConfiguration.get("bintrayConfiguration"))); } }