Skip to content

Commit 706c36e

Browse files
authored
Prepare release 4.8.2 (#1218)
1 parent d903a6d commit 706c36e

File tree

6 files changed

+177
-4
lines changed

6 files changed

+177
-4
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
### Fixed
1111
* Fix Tailor deployment drifts for D, Q envs ([#1055](https://github.com/opendevstack/ods-jenkins-shared-library/pull/1055))
1212

13+
## [4.8.2] - 2025-6-04
14+
* Avoid check PROD environment if repos are not included in release ([#1217](https://github.com/opendevstack/ods-jenkins-shared-library/pull/1217))
15+
* Error generating TIR for infra components ([#1216](https://github.com/opendevstack/ods-jenkins-shared-library/pull/1216))
16+
1317
## [4.8.1] - 2025-5-13
1418

1519
### Added

src/org/ods/orchestration/DeployStage.groovy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,9 @@ class DeployStage extends Stage {
8888
def targetEnvironment = project.buildParams.targetEnvironment
8989
def targetProject = project.targetProject
9090
def installableRepos = this.project.repositories.findAll { repo ->
91-
if (repo.type?.toLowerCase() != MROPipelineUtil.PipelineConfig.REPO_TYPE_ODS_INFRA) {
91+
// We only manage the installable repositories in OpenShift if they are included in the release
92+
if (repo.include
93+
&& repo.type?.toLowerCase() != MROPipelineUtil.PipelineConfig.REPO_TYPE_ODS_INFRA) {
9294
MROPipelineUtil.PipelineConfig.INSTALLABLE_REPO_TYPES.contains(repo.type)
9395
}
9496
}

src/org/ods/orchestration/usecase/LeVADocumentUseCase.groovy

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,7 +1143,11 @@ class LeVADocumentUseCase extends DocGenUseCase {
11431143
*/
11441144
protected static Map<String, Object> prepareDeploymentMeanInfo(Map<String, Map<String, Object>> deployments, String targetEnvironment) {
11451145
Map<String, Object> deploymentMean =
1146-
deployments.find { it.key.endsWith('-deploymentMean') }.value
1146+
deployments?.find { it.key.endsWith('-deploymentMean') }?.value
1147+
1148+
if (!deploymentMean) {
1149+
return [:]
1150+
}
11471151

11481152
if (deploymentMean.type == 'tailor') {
11491153
return formatTIRTailorDeploymentMean(deploymentMean)
@@ -1162,8 +1166,8 @@ class LeVADocumentUseCase extends DocGenUseCase {
11621166
*/
11631167
protected static Map<String, Map<String, Object>> prepareDeploymentInfo(Map<String, Map<String, Object>> deployments) {
11641168
return deployments
1165-
.findAll { ! it.key.endsWith('-deploymentMean') }
1166-
.collectEntries { String deploymentName, Map<String, Object> deployment ->
1169+
?.findAll { ! it.key.endsWith('-deploymentMean') }
1170+
?.collectEntries { String deploymentName, Map<String, Object> deployment ->
11671171
def filteredFields = deployment.findAll { k, v -> k != 'podName' }
11681172
return [(deploymentName): filteredFields]
11691173
} as Map<String, Map<String, Object>>
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package org.ods.orchestration
2+
3+
import org.ods.orchestration.scheduler.LeVADocumentScheduler
4+
import org.ods.orchestration.util.MROPipelineUtil
5+
import org.ods.orchestration.util.Project
6+
import org.ods.services.BitbucketService
7+
import org.ods.services.GitService
8+
import org.ods.services.OpenShiftService
9+
import org.ods.services.ServiceRegistry
10+
import org.ods.util.ILogger
11+
import org.ods.util.IPipelineSteps
12+
import org.ods.util.Logger
13+
import util.PipelineSteps
14+
import util.SpecHelper
15+
16+
import static util.FixtureHelper.createProject
17+
18+
class DeployStageSpec extends SpecHelper {
19+
Project project
20+
DeployStage deployStage
21+
IPipelineSteps script
22+
LeVADocumentScheduler levaDocScheduler
23+
OpenShiftService openshiftService
24+
MROPipelineUtil util
25+
ILogger logger
26+
GitService gitService
27+
BitbucketService bitbucketService
28+
29+
def setup() {
30+
script = new PipelineSteps()
31+
levaDocScheduler = Mock(LeVADocumentScheduler)
32+
openshiftService = Mock(OpenShiftService)
33+
util = Mock(MROPipelineUtil)
34+
logger = new Logger(script, true)
35+
project = Spy(createProject())
36+
gitService = Mock(GitService)
37+
bitbucketService = Mock(BitbucketService)
38+
39+
createService()
40+
41+
deployStage = Spy(new DeployStage(script, project, project.data.metadata.repositories, "fake"))
42+
}
43+
44+
ServiceRegistry createService() {
45+
def registry = ServiceRegistry.instance
46+
47+
registry.add(IPipelineSteps, script)
48+
registry.add(LeVADocumentScheduler, levaDocScheduler)
49+
registry.add(OpenShiftService, openshiftService)
50+
registry.add(MROPipelineUtil, util)
51+
registry.add(Logger, logger)
52+
registry.add(GitService, gitService)
53+
registry.add(BitbucketService, bitbucketService)
54+
55+
return registry
56+
}
57+
58+
def "deploy in Q with 3 installable repos (all included)"() {
59+
given:
60+
project.buildParams.targetEnvironment = 'qa'
61+
project.buildParams.targetEnvironmentToken = 'Q'
62+
project.targetProject = "net-test"
63+
64+
when:
65+
deployStage.run()
66+
67+
then:
68+
1 * bitbucketService.getUrl() >> "https://bitbucket"
69+
1 * project.targetClusterIsExternal >> false
70+
1 * openshiftService.envExists(project.targetProject) >> true
71+
}
72+
73+
def "deploy in Q with 3 installable repos (none included)"() {
74+
given:
75+
project.buildParams.targetEnvironment = 'qa'
76+
project.buildParams.targetEnvironmentToken = 'Q'
77+
project.targetProject = "net-test"
78+
for (repo in project.data.metadata.repositories) {
79+
repo.include = false
80+
}
81+
82+
when:
83+
deployStage.run()
84+
85+
then:
86+
1 * bitbucketService.getUrl() >> "https://bitbucket"
87+
0 * project.targetClusterIsExternal >> false
88+
0 * openshiftService.envExists(project.targetProject) >> true
89+
}
90+
91+
def "deploy in Q with 2 installable repos (none included) and one infra"() {
92+
given:
93+
project.buildParams.targetEnvironment = 'qa'
94+
project.buildParams.targetEnvironmentToken = 'Q'
95+
project.targetProject = "net-test"
96+
for (repo in project.data.metadata.repositories) {
97+
if (repo.id == "demo-app-catalogue") {
98+
repo.type = "ods-infra"
99+
} else {
100+
repo.include = false
101+
}
102+
}
103+
104+
when:
105+
deployStage.run()
106+
107+
then:
108+
1 * bitbucketService.getUrl() >> "https://bitbucket"
109+
0 * project.targetClusterIsExternal >> false
110+
0 * openshiftService.envExists(project.targetProject) >> true
111+
}
112+
}

test/groovy/org/ods/orchestration/usecase/LeVADocumentUseCaseSpec.groovy

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1284,6 +1284,22 @@ class LeVADocumentUseCaseSpec extends SpecHelper {
12841284
true | FixtureHelper.createTIRDataTailor() | FixtureHelper.createTIRRepoTailor()
12851285
}
12861286

1287+
def "createTIR for infra component"() {
1288+
when: 'Preparing deploymentMean info for infra component'
1289+
def deploymentMeanInfo = usecase.prepareDeploymentMeanInfo(null, 'dev')
1290+
1291+
then: 'The obtained info is null or empty, but no exception is thrown'
1292+
noExceptionThrown()
1293+
!deploymentMeanInfo
1294+
1295+
when: 'Preparing deployment info for infra component'
1296+
def deploymentInfo = usecase.prepareDeploymentInfo(null)
1297+
1298+
then: 'The obtained info is null or empty, but no exception is thrown'
1299+
noExceptionThrown()
1300+
!deploymentInfo
1301+
}
1302+
12871303
def "assemble deploymentMean and deploymentInfo for TIR with helm"() {
12881304
given:
12891305
def deployments = FixtureHelper.createTIRRepoHelm().data.openshift.deployments

test/groovy/util/FixtureHelper.groovy

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -918,6 +918,41 @@ class FixtureHelper {
918918
]
919919
}
920920

921+
static Map createTIRRepoInfra() {
922+
[
923+
'include' : true,
924+
'metadata' : [
925+
'supplier' : 'IT INF IAS',
926+
'name' : 'MyLambda',
927+
'description': 'A lambda intended to run in AWS',
928+
'type' : 'ods-infra',
929+
'version' : '4.x',
930+
],
931+
'data' : [
932+
'git' : [
933+
'previousSucessfulCommit': 'b00012345bcdef',
934+
'baseTag' : '',
935+
'commit' : 'a00012345bcdef',
936+
'previousCommit' : 'b00012345bcdef',
937+
'targetTag' : '',
938+
'branch' : 'master',
939+
'url' : 'https://bitbucket-myodsproject-cd.ocp.mycompany.com/scm/myodsproject/myodsproject-mylambda.git',
940+
],
941+
'previousSucessfulCommit': 'c00012345bcdef',
942+
'documents' : [
943+
],
944+
],
945+
'doInstall' : true,
946+
'pipelineConfig': [
947+
'dependencies': [],
948+
],
949+
'defaultBranch' : 'master',
950+
'id' : 'mylambda-infra',
951+
'type' : 'ods-infra',
952+
'url' : 'https://bitbucket-myodsproject-cd.ocp.mycompany.com/scm/myodsproject/myodsproject-mylambda.git',
953+
]
954+
}
955+
921956
static Map createHelmCmdStatusMap() {
922957
[
923958
'info' : [

0 commit comments

Comments
 (0)