diff --git a/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/AddVersionAction.java b/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/AddVersionAction.java
index 3e01320f..0404ea18 100644
--- a/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/AddVersionAction.java
+++ b/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/AddVersionAction.java
@@ -23,6 +23,9 @@ public class AddVersionAction extends BaseAction implements RunAction2 {
@Nullable
private String versionName;
+ @Nullable
+ private String fromVersion;
+
private boolean failureIgnored = false;
private long timeout = Constants.DEFAULT_HTTP_TIMEOUT;
@Nullable
@@ -106,6 +109,15 @@ public void setVersionName(@Nullable String versionName) {
this.versionName = versionName;
}
+ @Nullable
+ public String getFromVersion() {
+ return fromVersion;
+ }
+
+ public void setFromVersion(@Nullable String fromVersion) {
+ this.fromVersion = fromVersion;
+ }
+
public boolean isFailureIgnored() {
return failureIgnored;
}
diff --git a/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/AddVersionBuilder.java b/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/AddVersionBuilder.java
index 9170a151..770a2108 100644
--- a/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/AddVersionBuilder.java
+++ b/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/AddVersionBuilder.java
@@ -100,6 +100,8 @@ public class AddVersionBuilder extends BaseActionBuilder implements SimpleBuildS
@Nullable
private String versionName = "";
+ @Nullable
+ private String fromVersion = "";
private long timeout = Constants.DEFAULT_HTTP_TIMEOUT;
private boolean failureIgnored = false;
@Nullable
@@ -188,6 +190,16 @@ public void setVersionName(@Nullable String versionName) {
this.versionName = versionName;
}
+ @Nullable
+ public String getFromVersion() {
+ return fromVersion;
+ }
+
+ @DataBoundSetter
+ public void setFromVersion(@Nullable String fromVersion) {
+ this.fromVersion = fromVersion;
+ }
+
public boolean isFailureIgnored() {
return failureIgnored;
}
@@ -510,6 +522,9 @@ public void perform(@Nonnull Run, ?> run, @Nonnull FilePath workspace, @Nonnul
if (isBlueprint()) {
requestBuilder.objectives(VersionObjective.BLUEPRINT);
}
+ if (cloneVersion && StringUtils.isNotEmpty(fromVersion)) {
+ requestBuilder.fromVersionGuid(applicationService.getApplicationVersionGuidFromName(applicationGuid, vars.expand(fromVersion)));
+ }
if (StringUtils.isNotBlank(resolvedSnapshotName)) {
requestBuilder.snapshotName(resolvedSnapshotName);
}
@@ -525,7 +540,7 @@ public void perform(@Nonnull Run, ?> run, @Nonnull FilePath workspace, @Nonnul
log.println(AddVersionBuilder_AddVersion_success_analysisComplete());
run.setResult(Result.SUCCESS);
}
- } catch (JobServiceException e) {
+ } catch (JobServiceException | ApplicationServiceException e) {
// Should we check if the original cause is an InterruptedException and attempt to cancel the job ?
if (e.getCause() != null && e.getCause() instanceof InterruptedException) {
if (jobGuid != null) {
diff --git a/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/DeliverAction.java b/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/DeliverAction.java
index 9f2aee14..2f907f6d 100644
--- a/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/DeliverAction.java
+++ b/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/DeliverAction.java
@@ -22,6 +22,9 @@ public class DeliverAction extends BaseAction implements RunAction2 {
private boolean cloneVersion = false;
@Nullable
private String versionName;
+ @Nullable
+ private String fromVersion;
+
private boolean failureIgnored = false;
private long timeout = Constants.DEFAULT_HTTP_TIMEOUT;
@Nullable
@@ -113,6 +116,15 @@ public void setVersionName(@Nullable String versionName) {
this.versionName = versionName;
}
+ @Nullable
+ public String getFromVersion() {
+ return fromVersion;
+ }
+
+ public void setFromVersion(@Nullable String fromVersion) {
+ this.fromVersion = fromVersion;
+ }
+
public boolean isFailureIgnored() {
return failureIgnored;
}
diff --git a/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/DeliverBuilder.java b/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/DeliverBuilder.java
index 9ea13891..39760c3d 100644
--- a/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/DeliverBuilder.java
+++ b/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/DeliverBuilder.java
@@ -104,6 +104,8 @@ public class DeliverBuilder extends BaseActionBuilder implements SimpleBuildStep
private boolean cloneVersion = false;
@Nullable
private String versionName = "";
+ @Nullable
+ private String fromVersion = "";
private long timeout = Constants.DEFAULT_HTTP_TIMEOUT;
private boolean failureIgnored = false;
@Nullable
@@ -230,6 +232,16 @@ public void setVersionName(@Nullable String versionName) {
this.versionName = versionName;
}
+ @Nullable
+ public String getFromVersion() {
+ return fromVersion;
+ }
+
+ @DataBoundSetter
+ public void setFromVersion(@Nullable String fromVersion) {
+ this.fromVersion = fromVersion;
+ }
+
public boolean isFailureIgnored() {
return failureIgnored;
}
@@ -532,11 +544,13 @@ public void perform(@Nonnull Run, ?> run, @Nonnull FilePath workspace, @Nonnul
if (inplaceMode || isSetAsCurrent()) {
requestBuilder.endStep(Constants.SET_CURRENT_STEP_NAME);
}
-
if (isBlueprint()) {
requestBuilder.objectives(VersionObjective.BLUEPRINT);
}
+ if (cloneVersion && StringUtils.isNotEmpty(fromVersion)) {
+ requestBuilder.fromVersionGuid(applicationService.getApplicationVersionGuidFromName(applicationGuid, vars.expand(fromVersion)));
+ }
log.println("Exclusion patterns : " + exclusionPatterns);
requestBuilder.deliveryConfigGuid(applicationService.createDeliveryConfiguration(applicationGuid, fileName, exclusionPatterns, applicationHasVersion));
diff --git a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/AddVersionBuilder/config.jelly b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/AddVersionBuilder/config.jelly
index b46ab027..efaca8b6 100644
--- a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/AddVersionBuilder/config.jelly
+++ b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/AddVersionBuilder/config.jelly
@@ -28,6 +28,9 @@
+
+
+
diff --git a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/AddVersionBuilder/config.properties b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/AddVersionBuilder/config.properties
index 7544258f..7de76298 100644
--- a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/AddVersionBuilder/config.properties
+++ b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/AddVersionBuilder/config.properties
@@ -30,10 +30,10 @@ domainName=Domain Name
domainName.descr=Name of the domain to assign to this application. Will be created if it doesn't exists in AIP Console. If no specified, no domain will be assigned or created.
processImaging=Publish to Imaging
processImaging.descr=Publish analysis data to Imaging if an Imaging instance is defined in AIP Console
-
blueprint=Blueprint objective
blueprint.descr=Add blueprint objective to the objectives list
-
+fromVersion=Version to copy from
+fromVersion.descr=The cloned version will be copied from this version.
aipConsoleUrl=AIP Console URL if different than the global configuration
aipConsoleUrl.descr=The root URL to access AIP Console
apiKey=API Key
diff --git a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/AddVersionBuilder/config_fr.properties b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/AddVersionBuilder/config_fr.properties
index 2acb866d..04e28f07 100644
--- a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/AddVersionBuilder/config_fr.properties
+++ b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/AddVersionBuilder/config_fr.properties
@@ -30,3 +30,5 @@ aipConsoleUrl=URL de AIP Console si différente de la configuration globale
aipConsoleUrl.descr=L''URL d''accès à AIP Console
apiKey=Clé d'API
apiKey.descr=La clé d'API permettant l''accès à AIP Console
+fromVersion=Version à partir de laquelle copier
+fromVersion.descr=La version clonée sera copiée à partir de cette version .
diff --git a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/DeliverBuilder/config.jelly b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/DeliverBuilder/config.jelly
index e07c5aca..047e395c 100644
--- a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/DeliverBuilder/config.jelly
+++ b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/DeliverBuilder/config.jelly
@@ -34,6 +34,9 @@
+
+
+
diff --git a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/DeliverBuilder/config.properties b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/DeliverBuilder/config.properties
index e4486e45..495a9088 100644
--- a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/DeliverBuilder/config.properties
+++ b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/DeliverBuilder/config.properties
@@ -40,3 +40,5 @@ aipConsoleUrl=AIP Console URL if different than the global configuration
aipConsoleUrl.descr=The root URL to access AIP Console
apiKey=API Key
apiKey.descr=The API Key to access AIP Console
+fromVersion=Version to copy from
+fromVersion.descr=The cloned version will be copied from this version.
diff --git a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/DeliverBuilder/config_fr.properties b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/DeliverBuilder/config_fr.properties
index ff6aaea2..d9ab9a0c 100644
--- a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/DeliverBuilder/config_fr.properties
+++ b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/DeliverBuilder/config_fr.properties
@@ -1,7 +1,9 @@
setAsCurrent=Utiliser cette version pour l'analyse
-setAsCurrent.descr=La version ajoutée sera définie comme la version d'analyse
+setAsCurrent.descr=La version ajout�e sera d�finie comme la version d'analyse
aipConsoleUrl=URL d''AIP Console
aipConsoleUrl.descr=L''URL d''accès à AIP Console
apiKey=Clé d'API
apiKey.descr=La clé d'API permettant l''accès à AIP Console
+fromVersion=Version à partir de laquelle copier
+fromVersion.descr=La version clonée sera copiée à partir de cette version .
diff --git a/aip-console-jenkins/src/test/java/io/jenkins/plugins/aipconsole/AddVersionBuilderTest.java b/aip-console-jenkins/src/test/java/io/jenkins/plugins/aipconsole/AddVersionBuilderTest.java
index b59b1716..e0e3a65d 100644
--- a/aip-console-jenkins/src/test/java/io/jenkins/plugins/aipconsole/AddVersionBuilderTest.java
+++ b/aip-console-jenkins/src/test/java/io/jenkins/plugins/aipconsole/AddVersionBuilderTest.java
@@ -115,6 +115,7 @@ public void testAddVersionStepToJob() throws Exception {
project = jenkins.configRoundtrip(project);
AddVersionBuilder job = new AddVersionBuilder(TEST_APP_NAME, TEST_ARCHIVE_NAME);
job.setDomainName("");
+ job.setFromVersion("");
jenkins.assertEqualDataBoundBeans(job, project.getBuildersList().get(0));
}
diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/AddVersionCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/AddVersionCommand.java
index 01129f36..7c3f4ebc 100644
--- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/AddVersionCommand.java
+++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/AddVersionCommand.java
@@ -15,7 +15,6 @@
import com.castsoftware.aip.console.tools.core.exceptions.UploadException;
import com.castsoftware.aip.console.tools.core.services.ApplicationService;
import com.castsoftware.aip.console.tools.core.services.DebugOptionsService;
-import com.castsoftware.aip.console.tools.core.services.DebugOptionsServiceImpl;
import com.castsoftware.aip.console.tools.core.services.JobsService;
import com.castsoftware.aip.console.tools.core.services.RestApiService;
import com.castsoftware.aip.console.tools.core.services.UploadService;
@@ -85,6 +84,10 @@ public AddVersionCommand(RestApiService restApiService, JobsService jobsService,
@CommandLine.Option(names = {"-v", "--version-name"}, paramLabel = "VERSION_NAME", description = "The name of the version to create")
private String versionName;
+ @CommandLine.Option(names = {"-from-v", "--from-version-name"}, paramLabel = "FROM_VERSION_NAME", description = "The name of the version to copy from when clone or rescan is operating.",
+ required = false)
+ private String fromVersionName;
+
@CommandLine.Option(names = "--snapshot-name", paramLabel = "SNAPSHOT_NAME", description = "The name of the snapshot to generate")
private String snapshotName;
/**
@@ -212,7 +215,6 @@ public Integer call() {
// check that the application actually has versions, otherwise it's just an add version job
boolean cloneVersion = (app.isInPlaceMode() || !disableClone) && applicationService.applicationHasVersion(applicationGuid);
-
JobRequestBuilder builder = JobRequestBuilder.newInstance(applicationGuid, sourcePath, cloneVersion ? JobType.CLONE_VERSION : JobType.ADD_VERSION)
.versionName(versionName)
.releaseAndSnapshotDate(new Date())
@@ -227,7 +229,11 @@ public Integer call() {
if (blueprint) {
builder.objectives(VersionObjective.BLUEPRINT);
}
-
+ if (cloneVersion && StringUtils.isNotEmpty(fromVersionName)) {
+ String fromVersionGuid = applicationService.getApplicationVersionGuidFromName(applicationGuid, fromVersionName);
+ log.info("Clone version {} copied from {} with GUID {}", versionName, fromVersionName, fromVersionGuid);
+ builder.fromVersionGuid(fromVersionGuid);
+ }
if (StringUtils.isNotBlank(snapshotName)) {
builder.snapshotName(snapshotName);
}
diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/DeliverVersionCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/DeliverVersionCommand.java
index b8286ba7..4c070a9f 100644
--- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/DeliverVersionCommand.java
+++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/DeliverVersionCommand.java
@@ -70,6 +70,12 @@ public class DeliverVersionCommand implements Callable {
description = "The name of the version to create")
private String versionName;
+ @CommandLine.Option(names = {"-from-v", "--from-version-name"},
+ paramLabel = "FROM_VERSION_NAME",
+ description = "The name of the version to copy from when clone or rescan is operating.",
+ required = false)
+ private String fromVersionName;
+
// Hiding this, to avoid breaking commands already using it
// Analyze command will automatically set as current when starting so it's unnecessary
@CommandLine.Option(names = {"-d", "--auto-deploy"},
@@ -216,6 +222,11 @@ public Integer call() throws Exception {
if (blueprint) {
builder.objectives(VersionObjective.BLUEPRINT);
}
+ if (cloneVersion && StringUtils.isNotEmpty(fromVersionName)) {
+ String fromVersionGuid = applicationService.getApplicationVersionGuidFromName(applicationGuid, fromVersionName);
+ log.info("Clone version {} copied from {} with GUID {}", versionName, fromVersionName, fromVersionGuid);
+ builder.fromVersionGuid(fromVersionGuid);
+ }
String deliveryConfigGuid = applicationService.createDeliveryConfiguration(applicationGuid, sourcePath, exclusionPatterns, cloneVersion);
log.info("delivery configuration guid " + deliveryConfigGuid);
diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java
index 834bab8f..0ec731cc 100644
--- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java
+++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java
@@ -24,6 +24,7 @@ public class JobRequestBuilder {
private JobType jobType;
private String nodeGuid;
private String versionName;
+ private String fromVersionGuid;
private String versionGuid;
private String startStep;
private String endStep;
@@ -68,6 +69,13 @@ public JobRequestBuilder versionName(String versionName) {
return this;
}
+ public JobRequestBuilder fromVersionGuid(String fromVersionGuid) {
+ if (StringUtils.isNotBlank(fromVersionGuid)) {
+ this.fromVersionGuid = fromVersionGuid;
+ }
+ return this;
+ }
+
public JobRequestBuilder startStep(String startStep) {
this.startStep = startStep;
return this;
@@ -177,6 +185,9 @@ private Map getJobParameters() {
if (StringUtils.isNotBlank(versionGuid)) {
parameters.put(Constants.PARAM_VERSION_GUID, versionGuid);
}
+ if (StringUtils.isNotBlank(fromVersionGuid)) {
+ parameters.put(Constants.PARAM_FROM_VERSION_GUID, fromVersionGuid);
+ }
parameters.put(Constants.PARAM_START_STEP, startStep);
parameters.put(Constants.PARAM_END_STEP, endStep);
parameters.put(Constants.PARAM_IGNORE_CHECK, Boolean.toString(ignoreCheck));
diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java
index b0e5f3c8..84b0827d 100644
--- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java
+++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java
@@ -28,6 +28,14 @@ public interface ApplicationService {
*/
boolean applicationHasVersion(String applicationGuid) throws ApplicationServiceException;
+ /**
+ * @param applicationGuid host application GUID
+ * @param fromVersionName the version nae that Guid should be retrieved.
+ * @return the version GUID is exists otherwise null
+ * @throws ApplicationServiceException
+ */
+ String getApplicationVersionGuidFromName(String applicationGuid, String fromVersionName) throws ApplicationServiceException;
+
/**
* Retrieve an application's GUID from the given application name.
*
diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java
index f4c7508a..7614469c 100644
--- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java
+++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java
@@ -42,7 +42,7 @@ public class ApplicationServiceImpl implements ApplicationService {
public ApplicationServiceImpl(RestApiService restApiService, JobsService jobsService) {
this.restApiService = restApiService;
- this.jobService = jobsService;
+ jobService = jobsService;
}
@Override
@@ -86,6 +86,13 @@ public boolean applicationHasVersion(String applicationGuid) throws ApplicationS
!appVersions.isEmpty();
}
+ @Override
+ public String getApplicationVersionGuidFromName(String applicationGuid, String fromVersionName) throws ApplicationServiceException {
+ Set appVersions = getApplicationVersion(applicationGuid);
+ Optional versionDto = appVersions.stream().filter(v -> v.getName().equalsIgnoreCase(fromVersionName)).findFirst();
+ return versionDto.isPresent() ? versionDto.get().getGuid() : null;
+ }
+
@Override
public String getOrCreateApplicationFromName(String applicationName, boolean autoCreate) throws ApplicationServiceException {
return getOrCreateApplicationFromName(applicationName, autoCreate, null);
diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/utils/Constants.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/utils/Constants.java
index f40cf928..092a7a94 100644
--- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/utils/Constants.java
+++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/utils/Constants.java
@@ -76,6 +76,7 @@ private Constants() {
public static final String PARAM_BACKUP_ENABLED = "backupApplication";
public static final String PARAM_BACKUP_NAME = "backupName";
public static final String PARAM_VERSION_GUID = "versionGuid";
+ public static final String PARAM_FROM_VERSION_GUID = "fromVersionGuid";
public static final String PARAM_SNAPSHOT_NAME = "snapshotName";
public static final String PARAM_DELIVERY_CONFIG_GUID = "deliveryConfigGuid";
public static final String PARAM_ENABLE_AUTO_DISCOVER = "extensionAutoConfigEnabled";