Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Release
version=2.3.1
previousVersion=2.3.0
version=2.3.2
previousVersion=2.3.1
signing.keyId=B2C7DA7B
signing.secretKeyRingFile=secring.gpg
nexusUsername=
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -424,19 +424,26 @@ class SaagieClient {

String upgradeProjectJobWithGraphQL() {
logger.info('Starting upgradeProjectJob task')
logger.debug('Using config [job={}, jobVersion={}]', configuration.job, configuration.jobVersion)
Request projectsUpdateJobRequest = saagieUtils.getProjectUpdateJobFromDataRequest()
updateProjectJobWithGraphQLFromRequest(projectsUpdateJobRequest)
def updatedJobVersion = addJobVersion(configuration.job, configuration.jobVersion)
Job job = configuration.job
JobVersion jobVersion = configuration.jobVersion
logger.debug('Using config [job={}, jobVersion={}]', job, jobVersion)
Request projectsUpdateJobRequest = saagieUtils.getProjectUpdateJobFromDataRequest(job)
updateProjectJobWithGraphQLFromRequest(projectsUpdateJobRequest, job, jobVersion)
def updatedJobVersion = addJobVersion(job, jobVersion)
Map upgradeStatus = [status: 'success', version: updatedJobVersion]
return JsonOutput.toJson(upgradeStatus)
}

String updateProjectJobWithGraphQLFromRequest(Request request) {
String updateProjectJob(Job job, JobVersion jobVersion) {
Request projectsUpdateJobRequest = saagieUtils.getProjectUpdateJobFromDataRequest(job)
updateProjectJobWithGraphQLFromRequest(projectsUpdateJobRequest, job, jobVersion)
}

String updateProjectJobWithGraphQLFromRequest(Request request, Job job, JobVersion jobVersion) {
checkRequiredConfig(
!configuration?.job?.id ||
(configuration?.job?.isScheduled && !configuration?.job?.cronScheduling) ||
(configuration?.jobVersion?.exists() && !configuration?.jobVersion?.runtimeVersion)
!job?.id ||
(job?.isScheduled && !job?.cronScheduling) ||
(jobVersion?.exists() && !jobVersion?.runtimeVersion)
)
String updateProjectJobWithGraphQLFromRequestResult = null
tryCatchClosure({
Expand All @@ -455,7 +462,6 @@ class SaagieClient {
}
return updateProjectJobWithGraphQLFromRequestResult
}, 'Unknown error in updateProjectJobWithGraphQLFromRequest')

}

String addJobVersion(job, jobVersion) {
Expand Down Expand Up @@ -2000,19 +2006,27 @@ class SaagieClient {
listJobs = getJobListByNameAndId()
boolean nameExist = false
def foundNameId = null
def currentAlias = jobToImport.alias
if (listJobs) {
listJobs.each {
if (it.name == newMappedJobData.job.name) {
nameExist = true
foundNameId = it.id
}
}
def i = 2
while (listJobs.any { it.alias == currentAlias && it.name != newMappedJobData.job.name}) {
currentAlias = "${newMappedJobData.job.alias}_$i"
++i
}
}
jobToImport.alias = currentAlias
def parsedNewlyCreatedJob = null
// change the job to Queue so we can remove the first
if (listJobs && nameExist) {
jobToImport.id = foundNameId
addJobVersion(jobToImport, jobVersionToImport)
updateProjectJob(jobToImport, jobVersionToImport)

} else {
if (versions) {
Expand All @@ -2032,7 +2046,8 @@ class SaagieClient {

response.job << [
id : job.key,
name: newMappedJobData.job.name
name: newMappedJobData.job.name,
alias: currentAlias
]

if (versions && versions.size() >= 1) {
Expand Down
3 changes: 3 additions & 0 deletions src/main/groovy/io/saagie/plugin/dataops/models/Job.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ class Job implements IMapable {
def ids = []
String projectId
String description
String alias
String category
String technology
Boolean include_all_versions
Expand All @@ -26,6 +27,7 @@ class Job implements IMapable {
id : id,
projectId : projectId,
description : description,
alias : alias,
category : category,
technology : [id: technology],
cronScheduling: cronScheduling,
Expand All @@ -39,6 +41,7 @@ class Job implements IMapable {
id : id,
projectId : projectId,
description : description,
alias : alias,
category : category,
cronScheduling: cronScheduling,
isScheduled : isScheduled,
Expand Down
3 changes: 3 additions & 0 deletions src/main/groovy/io/saagie/plugin/dataops/models/JobDTO.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ class JobDTO implements IExists {
String name
String id
String description
String alias
String category
String technology
String technologyName
Expand All @@ -23,6 +24,7 @@ class JobDTO implements IExists {
return name ||
id ||
description ||
alias ||
category ||
technology ||
isScheduled ||
Expand All @@ -33,6 +35,7 @@ class JobDTO implements IExists {
name = jobDetailResult.name //
id = jobDetailResult.id
description = jobDetailResult.description //
alias = jobDetailResult.alias
category = jobDetailResult.category //
technology = jobDetailResult.technology.id
technologyName = jobDetailResult.technology.label
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ class JobMapper {

newJobConfig.put('job', [
name : mappedJob?.name,
alias : mappedJob?.alias,
cronScheduling: mappedJob?.cronScheduling,
isScheduled : mappedJob?.isScheduled,
category : mappedJob?.category,
Expand Down
12 changes: 8 additions & 4 deletions src/main/groovy/io/saagie/plugin/dataops/models/Pipeline.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ class Pipeline implements IMapable {
String id
String name
String description
String executionVariables = null
Boolean hasExecutionVariablesEnabled = false
def ids = []
Boolean include_job = false
Boolean include_all_versions
Expand All @@ -18,10 +20,12 @@ class Pipeline implements IMapable {
@Override
Map toMap() {
def pipelineMap = [
id : id,
description : description,
isScheduled : isScheduled,
cronScheduling: cronScheduling
id : id,
description : description,
executionVariables : executionVariables,
hasExecutionVariablesEnabled : hasExecutionVariablesEnabled,
isScheduled : isScheduled,
cronScheduling : cronScheduling
]
if (name) {
pipelineMap.put('name', name)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ class PipelineDTO implements IExists {
String name
String id
String description
String executionVariables
Boolean hasExecutionVariablesEnabled
Boolean isScheduled
String cronScheduling
AlertingDTO alerting = new AlertingDTO()
Expand All @@ -26,6 +28,8 @@ class PipelineDTO implements IExists {
name = pipelineDetailResult.name
id = pipelineDetailResult.id
description = pipelineDetailResult.description
executionVariables = pipelineDetailResult.executionVariables
hasExecutionVariablesEnabled = pipelineDetailResult.hasExecutionVariablesEnabled
isScheduled = pipelineDetailResult.isScheduled
cronScheduling = pipelineDetailResult.cronScheduling
alerting = pipelineDetailResult.alerting
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ class ImportJobService {

newMappedJobData.job {
name = newJobConfigWithOverride.name
alias = newJobConfigWithOverride.alias
technology = newJobConfigWithOverride.technology
cronScheduling = newJobConfigWithOverride.cronScheduling
isScheduled = newJobConfigWithOverride.isScheduled
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ class SaagieUtils {
jobs(projectId: $projectId) {
id
name
alias
description
countJobInstance
versions {
Expand Down Expand Up @@ -172,6 +173,7 @@ class SaagieUtils {
jobs(projectId: $projectId) {
id
name
alias
}
}
''')
Expand Down Expand Up @@ -741,6 +743,7 @@ class SaagieUtils {
createJob(job: $job, jobVersion: $jobVersion) {
id
name
alias
}
}
''', gqVariables)
Expand Down Expand Up @@ -792,8 +795,7 @@ class SaagieUtils {
getProjectUpdateJobRequestFormat(gqVariables)
}

Request getProjectUpdateJobFromDataRequest() {
Job job = configuration.job
Request getProjectUpdateJobFromDataRequest(Job job) {
Map mappedJob = JobMapper.mapJobWithoutMail(job, configuration.project.id)
getProjectUpdateJobFromDataRequestFromParams(mappedJob.job)
}
Expand Down Expand Up @@ -1498,6 +1500,7 @@ class SaagieUtils {
job(id: $jobId) {
id
name
alias
description
countJobInstance
versions {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ class FolderGenerator {
if (createFolderForJob) {
Map jobDetailObject = [
name : exportJob.jobDTO.name,
alias : exportJob.jobDTO.alias,
category : exportJob.jobDTO.category,
technology : exportJob.jobDTO.technology,
technologyName: exportJob.jobDTO.technologyName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class ArtifactsImportTaskTest extends DataOpsGradleTaskSpecification {
@Shared
String exportPipelineWithoutJobZipFilename = './exportedPipelineWithoutJob.zip'
@Shared
String exporGraphtPipelineWithoutJobZipFilename = './exportedGraphPipelineWithoutJob.zip'
String exporGraphPipelineWithoutJobZipFilename = './exportedGraphPipelineWithoutJob.zip'
@Shared
String exportJobWithoutPipelineZipFilename = './exportedJobWithoutPipeline.zip'
@Shared
Expand Down Expand Up @@ -92,10 +92,10 @@ class ArtifactsImportTaskTest extends DataOpsGradleTaskSpecification {
given:
URL resource = classLoader.getResource(exportJobZipFilename)
File exportedConfig = new File(resource.getFile())
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas"},{"id":"id-2","name":"name job 2"},{"id":"id-3","name":"name job 3"}]}}')
enqueueRequest('{"data":{"createJob":{"id":"id-1","name":"Job from import"}}}')
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas","alias":"Test_Job3_imported_from_file"},{"id":"id-2","name":"name job 2","alias":"truc_2"},{"id":"id-3","name":"name job 3","alias":"plop"}]}}')
enqueueRequest('{"data":{"createJob":{"id":"id-1","name":"Job from import","alias":"truc_2"}}}')
enqueueRequest('{"data":{"pipelines":[{"id":"id-1","name":"Test 2"},{"id":"id-2","name":"Test Long"},{"id":"id-3","name":"test pipeline"},{"id":"id-4","name":"test pipeline 23"},{"id":"id-5","name":"test pipeline id 5"}]}}')
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas"},{"id":"id-2","name":"name job 2"},{"id":"id-3","name":"name job 3"}]}}')
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas","alias":"truc"},{"id":"id-2","name":"name job 2","alias":"truc_2"},{"id":"id-3","name":"name job 3","alias":"plop"}]}}')
enqueueRequest('{"data":{"addPipelineVersion":{"number":2}}}')

buildFile << """
Expand Down Expand Up @@ -131,7 +131,7 @@ class ArtifactsImportTaskTest extends DataOpsGradleTaskSpecification {

then:
notThrown(Exception)
result.output.contains('{status=success, job=[{id=id-1, name=Test Job3 imported from file}], pipeline=[{id=id-1, name=test pipeline 23}], variable=[], app=[]}')
result.output.contains('{status=success, job=[{id=id-1, name=Test Job3 imported from file, alias=Test_Job3_imported_from_file_2}], pipeline=[{id=id-1, name=test pipeline 23}], variable=[], app=[]}')
}

def "the task should create a new pipeline and add new version to another pipeline without job based on the exported config"() {
Expand Down Expand Up @@ -178,7 +178,7 @@ class ArtifactsImportTaskTest extends DataOpsGradleTaskSpecification {

def "the task should create a new graph pipeline and add new version to another pipeline without job based on the exported config"() {
given:
URL resource = classLoader.getResource(exporGraphtPipelineWithoutJobZipFilename)
URL resource = classLoader.getResource(exporGraphPipelineWithoutJobZipFilename)
File exportedConfig = new File(resource.getFile())
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas"},{"id":"id-2","name":"test added job"},{"id":"id-3","name":"name job 3"}]}}')
enqueueRequest('{"data":{"project":{"pipelines":[{"id":"id-1","name":"Job from import asdas"},{"id":"id-2","name":"name exist"},{"id":"id-3","name":"name job 3"}, {"id": "id-4", "name": "test added job"}, {"id": "id-5", "name": "test pipeline exist"}]}}}')
Expand Down Expand Up @@ -259,9 +259,9 @@ class ArtifactsImportTaskTest extends DataOpsGradleTaskSpecification {
given:
URL resource = classLoader.getResource(exportJobZipFilename)
File exportedConfig = new File(resource.getFile())
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas"},{"id":"id-2","name":"name job 2"},{"id":"id-3","name":"name job 3"}]}}')
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas","alias":"job_1"},{"id":"id-2","name":"name job 2","alias":"job_2"},{"id":"id-3","name":"name job 3","alias":"job_3"}]}}')
enqueueRequest('{"data":{"createJob":{"id":"id-1","name":"Job from import"}}}')
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas"},{"id":"id-2","name":"name job 2"},{"id":"id-3","name":"name job 3"}]}}')
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas","alias":"job_1"},{"id":"id-2","name":"name job 2","alias":"job_2"},{"id":"id-3","name":"name job 3","alias":"job_3"}]}}')
enqueueRequest('{"data":{"pipelines":[{"id":"id-1","name":"Test 2"},{"id":"id-2","name":"Test Long"},{"id":"id-3","name":"test pipeline"},{"id":"id-4","name":"test pipeline id 3"},{"id":"id-5","name":"test pipeline id 5"}]}}')
enqueueRequest('{"data":{"createPipeline":{"id":"id-1","name":"test pipeline 23"}}}')

Expand Down Expand Up @@ -289,7 +289,7 @@ class ArtifactsImportTaskTest extends DataOpsGradleTaskSpecification {

then:
notThrown(Exception)
result.output.contains('{status=success, job=[{id=id-1, name=Test Job3 imported from file}], pipeline=[{id=id-1, name=test pipeline 23}], variable=[], app=[]}')
result.output.contains('{status=success, job=[{id=id-1, name=Test Job3 imported from file, alias=Test_Job3_imported_from_file}], pipeline=[{id=id-1, name=test pipeline 23}], variable=[], app=[]}')
}


Expand All @@ -298,8 +298,9 @@ class ArtifactsImportTaskTest extends DataOpsGradleTaskSpecification {
given:
URL resource = classLoader.getResource(exportJobJustJobVersionWithoutPipelineZipFilename)
File exportedConfig = new File(resource.getFile())
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas"},{"id":"id-2","name":"test added job"},{"id":"id-3","name":"name job 3"}]}}')
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas","alias":"siala"},{"id":"id-2","name":"test added job","alias":"hello"},{"id":"id-3","name":"name job 3","alias":"job_3"}]}}')
enqueueRequest('{"data":{"addJobVersion":{"number":"jobNumber"}}}')
enqueueRequest('{"data":{"editJobMutation":{"id":"id-1"}}}')

buildFile << """
saagie {
Expand All @@ -325,18 +326,20 @@ class ArtifactsImportTaskTest extends DataOpsGradleTaskSpecification {

then:
notThrown(Exception)
result.output.contains('{status=success, job=[{id=id-1, name=test added job}], pipeline=[], variable=[], app=[]}')
result.output.contains('{status=success, job=[{id=id-1, name=test added job, alias=test_added_job}], pipeline=[], variable=[], app=[]}')
}


def "the task should create new job and add new version to another job without pipeline based on the exported config"() {
given:
URL resource = classLoader.getResource(exportJobWithoutPipelineZipFilename)
File exportedConfig = new File(resource.getFile())
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas"},{"id":"id-2","name":"test added job"},{"id":"id-3","name":"name job 3"}]}}')
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas","alias":"job_1"},{"id":"id-2","name":"test added job","alias":"job_2"},{"id":"id-3","name":"name job 3","alias":"job_3"}]}}')
enqueueRequest('{"data":{"addJobVersion":{"number":2}}}')
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas"},{"id":"id-2","name":"name exist"},{"id":"id-3","name":"name job 3"}, {"id": "id-4", "name": "test added job"}]}}')
enqueueRequest('{"data":{"editJobMutation":{"id":"id-1"}}}')
enqueueRequest('{"data":{"jobs":[{"id":"id-1","name":"Job from import asdas","alias":"job_1"},{"id":"id-2","name":"name exist","alias":"job_2"},{"id":"id-3","name":"name job 3","alias":"job_3"}, {"id": "id-4", "name": "test added job","alias":"job_4"}]}}')
enqueueRequest('{"data":{"addJobVersion":{"number":2}}}')
enqueueRequest('{"data":{"editJobMutation":{"id":"id-2"}}}')

buildFile << """
saagie {
Expand Down Expand Up @@ -364,8 +367,8 @@ class ArtifactsImportTaskTest extends DataOpsGradleTaskSpecification {
notThrown(Exception)
result.output.contains('{status=success')
def jobs = result.output.findAll('job=\\[.*\\], pipeline').first()
jobs.contains('{id=id-1, name=test added job}')
jobs.contains('{id=id-2, name=name exist}')
jobs.contains('{id=id-1, name=test added job, alias=test_added_job}')
jobs.contains('{id=id-2, name=name exist, alias=name_exist}')
result.output.contains('pipeline=[], variable=[], app=[]}')
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ class GraphPipelineCreateTaskTests extends DataOpsGradleTaskSpecification {

pipeline {
name = 'Pipeline name'
executionVariables = 'toto=6'
hasExecutionVariablesEnabled = false
}

pipelineVersion {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ class GraphPipelineUpgradeTaskTests extends DataOpsGradleTaskSpecification {
pipeline {
id = 'pipelineId'
name = 'Pipeline updated'
executionVariables = 'toto=6'
hasExecutionVariablesEnabled = false
description = 'updated description'
alerting {
emails = ['email@email.com']
Expand Down
Binary file not shown.
Binary file modified src/test/resources/exportedGraphPipelineWithoutJob.zip
Binary file not shown.
Binary file modified src/test/resources/exportedJob.zip
Binary file not shown.
Binary file modified src/test/resources/exportedJobWithoutPipeline.zip
Binary file not shown.