Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 1 | @Library("cmsis") |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 2 | import com.arm.dsg.cmsis.jenkins.ArtifactoryHelper |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 3 | |
| 4 | DOCKERINFO = [ |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 5 | 'staging': [ |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 6 | 'registryUrl': 'mcu--docker-staging.eu-west-1.artifactory.aws.arm.com', |
| 7 | 'registryCredentialsId': 'artifactory', |
| 8 | 'k8sPullSecret': 'artifactory-mcu-docker-staging', |
| 9 | 'namespace': 'mcu--docker-staging', |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 10 | 'image': 'cmsis/linux', |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 11 | 'label': "${JENKINS_ENV}-${JOB_BASE_NAME}-${BUILD_NUMBER}" |
| 12 | ], |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 13 | 'production': [ |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 14 | 'registryUrl': 'mcu--docker.eu-west-1.artifactory.aws.arm.com', |
| 15 | 'registryCredentialsId': 'artifactory', |
| 16 | 'namespace': 'mcu--docker', |
| 17 | 'k8sPullSecret': 'artifactory-mcu-docker', |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 18 | 'image': 'cmsis/linux', |
| 19 | 'label': 'latest' |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 20 | ] |
| 21 | ] |
Jonatan Antoni | b5d07f0 | 2021-07-14 12:50:57 +0200 | [diff] [blame] | 22 | HADOLINT_VERSION = '2.6.0-alpine' |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 23 | |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 24 | dockerinfo = DOCKERINFO['production'] |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 25 | |
| 26 | isPrecommit = (JOB_BASE_NAME == 'pre_commit') |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 27 | isPostcommit = (JOB_BASE_NAME == 'post_commit') |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 28 | isNightly = (JOB_BASE_NAME == 'nightly') |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 29 | isRelease = (JOB_BASE_NAME == 'release') |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 30 | |
Jonatan Antoni | 5f8564b | 2021-04-29 16:59:54 +0200 | [diff] [blame] | 31 | patternGlobal = [ |
| 32 | '^Jenkinsfile' |
| 33 | ] |
| 34 | |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 35 | patternDocker = [ |
| 36 | '^docker/.*' |
| 37 | ] |
| 38 | |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 39 | patternCoreM = [ |
| 40 | '^CMSIS/Core/Include/.*', |
| 41 | '^Device/ARM/ARMCM.*' |
| 42 | ] |
| 43 | |
| 44 | patternCoreA = [ |
| 45 | '^CMSIS/Core_A/Include/.*', |
| 46 | '^Device/ARM/ARMCA.*' |
| 47 | ] |
| 48 | |
| 49 | patternCoreValidation = [ |
| 50 | '^CMSIS/CoreValidation/.*' |
| 51 | ] |
| 52 | |
| 53 | CONFIGURATIONS = [ |
| 54 | 'pre_commit': [ |
Jonatan Antoni | 027e869 | 2022-10-31 13:37:25 +0100 | [diff] [blame] | 55 | 'mdevices': ['CM0', 'CM3', 'CM4FP', 'CM7DP', 'CM23', 'CM33NS', 'CM35PS', |
| 56 | 'CM55NS', 'CM85S'], |
| 57 | 'adevices': ['CA7', 'CA9'], |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 58 | 'devices' : [], |
| 59 | 'configs' : [ |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 60 | 'AC5': ['low', 'tiny'], |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 61 | 'AC6': ['low', 'tiny'], |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 62 | 'AC6LTM': ['low', 'tiny'], |
| 63 | 'GCC': ['low', 'tiny'] |
| 64 | ] |
| 65 | ], |
| 66 | 'post_commit': [ |
| 67 | 'devices' : ['CM0', 'CM0plus', 'CM3', 'CM4', 'CM4FP', 'CM7', 'CM7SP', 'CM7DP', |
Jonatan Antoni | 027e869 | 2022-10-31 13:37:25 +0100 | [diff] [blame] | 68 | 'CM23', 'CM23S', 'CM23NS', 'CM33', 'CM33S', 'CM33NS', |
| 69 | 'CM35P', 'CM35PS', 'CM35PNS', 'CM55', 'CM55S', 'CM55NS', |
| 70 | 'CM85S', 'CM85NS', |
| 71 | 'CA5', 'CA7', 'CA9'], |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 72 | 'configs' : [ |
| 73 | 'AC5': ['low', 'tiny'], |
| 74 | 'AC6': ['low', 'tiny'], |
| 75 | 'AC6LTM': ['low', 'tiny'], |
| 76 | 'GCC': ['low', 'tiny'] |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 77 | ] |
| 78 | ], |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 79 | 'nightly': [ |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 80 | 'devices' : ['CM0', 'CM0plus', 'CM3', 'CM4', 'CM4FP', 'CM7', 'CM7SP', 'CM7DP', |
Jonatan Antoni | 027e869 | 2022-10-31 13:37:25 +0100 | [diff] [blame] | 81 | 'CM23', 'CM23S', 'CM23NS', 'CM33', 'CM33S', 'CM33NS', |
| 82 | 'CM35P', 'CM35PS', 'CM35PNS', 'CM55', 'CM55S', 'CM55NS', |
| 83 | 'CM85S', 'CM85NS', |
| 84 | 'CA5', 'CA7', 'CA9'], |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 85 | 'configs' : [ |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 86 | 'AC5': ['low', 'mid', 'high', 'size', 'tiny'], |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 87 | 'AC6': ['low', 'mid', 'high', 'size', 'tiny'], |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 88 | 'AC6LTM': ['low', 'mid', 'high', 'size', 'tiny'], |
| 89 | 'GCC': ['low', 'mid', 'high', 'size', 'tiny'] |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 90 | ] |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 91 | ], |
| 92 | 'release': [] |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 93 | ] |
| 94 | CONFIGURATION = CONFIGURATIONS[JOB_BASE_NAME] |
| 95 | |
| 96 | // ---- PIPELINE CODE ---- |
| 97 | |
| 98 | def getChangeset() { |
| 99 | def fileset = sh encoding: 'UTF-8', label: '', returnStdout: true, script: 'git diff --name-only HEAD~1..HEAD' |
| 100 | return fileset.split('\n') |
| 101 | } |
| 102 | |
| 103 | def fileSetMatches(fileset, patternset) { |
| 104 | return patternset.any { p -> |
| 105 | fileset.any{ f -> f ==~ p } |
| 106 | } |
| 107 | } |
| 108 | |
| 109 | FORCE_BUILD = false |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 110 | DOCKER_BUILD = isPrecommit || isPostcommit || isNightly |
| 111 | CORE_VALIDATION = isPrecommit || isPostcommit || isNightly |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 112 | COMMIT = null |
| 113 | VERSION = null |
| 114 | |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 115 | artifactory = new ArtifactoryHelper(this) |
| 116 | |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 117 | pipeline { |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 118 | agent { label 'master' } |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 119 | options { |
| 120 | timestamps() |
| 121 | timeout(time: 1, unit: 'HOURS') |
| 122 | ansiColor('xterm') |
| 123 | skipDefaultCheckout() |
| 124 | } |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 125 | environment { |
| 126 | CI_ACCOUNT = credentials('grasci') |
| 127 | ARTIFACTORY = credentials('artifactory') |
| 128 | USER = "${CI_ACCOUNT_USR}" |
| 129 | PASS = "${CI_ACCOUNT_PSW}" |
| 130 | ARTIFACTORY_API_KEY = "${ARTIFACTORY_PSW}" |
| 131 | } |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 132 | stages { |
| 133 | stage('Checkout') { |
| 134 | steps { |
| 135 | script { |
| 136 | COMMIT = checkoutScmWithRetry(3) |
| 137 | echo "COMMIT: ${COMMIT}" |
Jonatan Antoni | 744e239 | 2022-01-27 16:58:49 +0100 | [diff] [blame] | 138 | VERSION = (sh(returnStdout: true, script: 'git describe --tags --always')).trim() |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 139 | echo "VERSION: '${VERSION}'" |
| 140 | } |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 141 | |
Jonatan Antoni | b5d07f0 | 2021-07-14 12:50:57 +0200 | [diff] [blame] | 142 | stash name: 'dockerfile', includes: 'docker/**' |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 143 | } |
| 144 | } |
| 145 | |
| 146 | stage('Analyse') { |
| 147 | when { |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 148 | expression { return isPrecommit || isPostcommit } |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 149 | beforeOptions true |
| 150 | } |
| 151 | steps { |
| 152 | script { |
| 153 | def fileset = changeset |
Jonatan Antoni | 5f8564b | 2021-04-29 16:59:54 +0200 | [diff] [blame] | 154 | def hasGlobal = fileSetMatches(fileset, patternGlobal) |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 155 | def hasDocker = fileSetMatches(fileset, patternDocker) |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 156 | def hasCoreM = fileSetMatches(fileset, patternCoreM) |
| 157 | def hasCoreA = fileSetMatches(fileset, patternCoreA) |
| 158 | def hasCoreValidation = fileSetMatches(fileset, patternCoreValidation) |
| 159 | |
| 160 | echo """Change analysis: |
Jonatan Antoni | 5f8564b | 2021-04-29 16:59:54 +0200 | [diff] [blame] | 161 | - hasGlobal = ${hasGlobal} |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 162 | - hasDocker = ${hasDocker} |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 163 | - hasCoreM = ${hasCoreM} |
| 164 | - hasCoreA = ${hasCoreA} |
| 165 | - hasCoreValidation = ${hasCoreValidation} |
| 166 | """ |
| 167 | |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 168 | if (isPrecommit) { |
| 169 | if (hasGlobal || hasDocker || hasCoreM || hasCoreValidation) { |
| 170 | CONFIGURATION['devices'] += CONFIGURATION['mdevices'] |
| 171 | } |
| 172 | if (hasGlobal || hasDocker || hasCoreA || hasCoreValidation) { |
| 173 | CONFIGURATION['devices'] += CONFIGURATION['adevices'] |
| 174 | } |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 175 | } |
| 176 | |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 177 | DOCKER_BUILD &= hasDocker |
| 178 | CORE_VALIDATION &= hasGlobal || hasDocker || hasCoreM || hasCoreA || hasCoreValidation |
| 179 | |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 180 | echo """Stage schedule: |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 181 | - DOCKER_BUILD = ${DOCKER_BUILD} |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 182 | - CORE_VALIDATION = ${CORE_VALIDATION} |
| 183 | """ |
| 184 | } |
| 185 | } |
| 186 | } |
| 187 | |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 188 | stage('Docker Lint') { |
| 189 | when { |
| 190 | expression { return DOCKER_BUILD } |
| 191 | beforeOptions true |
| 192 | } |
| 193 | agent { |
| 194 | kubernetes { |
| 195 | defaultContainer 'hadolint' |
| 196 | slaveConnectTimeout 600 |
| 197 | yaml """\ |
| 198 | apiVersion: v1 |
| 199 | kind: Pod |
| 200 | securityContext: |
| 201 | runAsUser: 1000 |
| 202 | runAsGroup: 1000 |
| 203 | spec: |
| 204 | imagePullSecrets: |
| 205 | - name: artifactory-mcu-docker |
| 206 | securityContext: |
| 207 | runAsUser: 1000 |
| 208 | runAsGroup: 1000 |
| 209 | containers: |
| 210 | - name: hadolint |
Jonatan Antoni | b5d07f0 | 2021-07-14 12:50:57 +0200 | [diff] [blame] | 211 | image: mcu--docker.eu-west-1.artifactory.aws.arm.com/hadolint/hadolint:${HADOLINT_VERSION} |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 212 | alwaysPullImage: true |
| 213 | imagePullPolicy: Always |
| 214 | command: |
| 215 | - sleep |
| 216 | args: |
| 217 | - infinity |
| 218 | resources: |
| 219 | requests: |
Samuel Pelegrinello Caipers | 77e149c | 2022-06-22 12:48:59 +0200 | [diff] [blame] | 220 | cpu: 900m |
| 221 | memory: 3Gi |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 222 | """.stripIndent() |
| 223 | } |
| 224 | } |
| 225 | steps { |
Jonatan Antoni | b5d07f0 | 2021-07-14 12:50:57 +0200 | [diff] [blame] | 226 | unstash 'dockerfile' |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 227 | |
Jonatan Antoni | b5d07f0 | 2021-07-14 12:50:57 +0200 | [diff] [blame] | 228 | sh 'hadolint --format json docker/dockerfile* | tee hadolint.log' |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 229 | |
Jonatan Antoni | b5d07f0 | 2021-07-14 12:50:57 +0200 | [diff] [blame] | 230 | recordIssues tools: [hadoLint(id: 'hadolint', pattern: 'hadolint.log')], |
| 231 | qualityGates: [[threshold: 1, type: 'DELTA', unstable: true]], |
| 232 | referenceJobName: 'nightly', ignoreQualityGate: true |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 233 | } |
| 234 | } |
| 235 | |
| 236 | stage('Docker Build') { |
| 237 | when { |
| 238 | expression { return (isPrecommit || isPostcommit) && DOCKER_BUILD } |
| 239 | beforeOptions true |
| 240 | } |
| 241 | agent { |
| 242 | kubernetes { |
| 243 | defaultContainer 'docker-dind' |
| 244 | slaveConnectTimeout 600 |
| 245 | yaml """\ |
| 246 | apiVersion: v1 |
| 247 | kind: Pod |
| 248 | spec: |
| 249 | imagePullSecrets: |
| 250 | - name: artifactory-mcu-docker |
| 251 | containers: |
| 252 | - name: docker-dind |
| 253 | image: docker:dind |
| 254 | securityContext: |
| 255 | privileged: true |
| 256 | volumeMounts: |
| 257 | - name: dind-storage |
| 258 | mountPath: /var/lib/docker |
| 259 | volumes: |
| 260 | - name: dind-storage |
| 261 | emptyDir: {} |
| 262 | """.stripIndent() |
| 263 | } |
| 264 | } |
| 265 | steps { |
| 266 | sh('apk add bash curl git') |
| 267 | script { |
Jonatan Antoni | b5d07f0 | 2021-07-14 12:50:57 +0200 | [diff] [blame] | 268 | unstash 'dockerfile' |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 269 | |
Jonatan Antoni | b5d07f0 | 2021-07-14 12:50:57 +0200 | [diff] [blame] | 270 | dir('docker') { |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 271 | dockerinfo = DOCKERINFO['staging'] |
| 272 | withCredentials([sshUserPrivateKey(credentialsId: 'grasci_with_pk', |
| 273 | keyFileVariable: 'grasciPk', |
| 274 | passphraseVariable: '', |
| 275 | usernameVariable: 'grasciUsername')]) { |
| 276 | sh("GIT_SSH_COMMAND='ssh -i $grasciPk -o StrictHostKeyChecking=no' ./getDependencies.sh") |
| 277 | } |
| 278 | docker.withRegistry("https://${dockerinfo['registryUrl']}", dockerinfo['registryCredentialsId']) { |
| 279 | def image = docker.build("${dockerinfo['registryUrl']}/${dockerinfo['image']}:${dockerinfo['label']}", "--build-arg DOCKER_REGISTRY=${dockerinfo['registryUrl']} .") |
| 280 | image.push() |
| 281 | } |
| 282 | } |
| 283 | } |
| 284 | } |
| 285 | } |
| 286 | |
Jonatan Antoni | def6f80 | 2021-05-06 17:31:38 +0200 | [diff] [blame] | 287 | stage('Pack') { |
| 288 | agent { |
| 289 | kubernetes { |
| 290 | defaultContainer 'cmsis' |
| 291 | slaveConnectTimeout 600 |
| 292 | yaml """\ |
| 293 | apiVersion: v1 |
| 294 | kind: Pod |
| 295 | spec: |
| 296 | imagePullSecrets: |
| 297 | - name: ${dockerinfo['k8sPullSecret']} |
| 298 | securityContext: |
| 299 | runAsUser: 1000 |
| 300 | runAsGroup: 1000 |
| 301 | containers: |
| 302 | - name: cmsis |
| 303 | image: ${dockerinfo['registryUrl']}/${dockerinfo['image']}:${dockerinfo['label']} |
| 304 | alwaysPullImage: true |
| 305 | imagePullPolicy: Always |
| 306 | command: |
| 307 | - sleep |
| 308 | args: |
| 309 | - infinity |
| 310 | resources: |
| 311 | requests: |
Samuel Pelegrinello Caipers | 77e149c | 2022-06-22 12:48:59 +0200 | [diff] [blame] | 312 | cpu: 900m |
| 313 | memory: 3Gi |
Jonatan Antoni | def6f80 | 2021-05-06 17:31:38 +0200 | [diff] [blame] | 314 | """.stripIndent() |
| 315 | } |
| 316 | } |
| 317 | steps { |
| 318 | checkoutScmWithRetry(3) |
Jonatan Antoni | 2d17771 | 2022-04-06 17:59:41 +0200 | [diff] [blame] | 319 | sh('./CMSIS/Utilities/fetch_devtools.sh') |
Jonatan Antoni | def6f80 | 2021-05-06 17:31:38 +0200 | [diff] [blame] | 320 | sh('./CMSIS/RTOS/RTX/LIB/fetch_libs.sh') |
| 321 | sh('./CMSIS/RTOS2/RTX/Library/fetch_libs.sh') |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 322 | |
Jonatan Antoni | def6f80 | 2021-05-06 17:31:38 +0200 | [diff] [blame] | 323 | tee('doxygen.log') { |
| 324 | sh('./CMSIS/DoxyGen/gen_doc.sh') |
| 325 | } |
| 326 | sh('./CMSIS/Utilities/gen_pack.sh') |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 327 | |
Jonatan Antoni | def6f80 | 2021-05-06 17:31:38 +0200 | [diff] [blame] | 328 | archiveArtifacts artifacts: 'output/ARM.CMSIS.*.pack', allowEmptyArchive: true |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 329 | stash name: 'pack', includes: 'output/ARM.CMSIS.*.pack' |
Jonatan Antoni | def6f80 | 2021-05-06 17:31:38 +0200 | [diff] [blame] | 330 | |
| 331 | recordIssues tools: [doxygen(id: 'DOXYGEN', name: 'Doxygen', pattern: 'doxygen.log')], |
| 332 | qualityGates: [[threshold: 1, type: 'DELTA', unstable: true]], |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 333 | referenceJobName: 'nightly', ignoreQualityGate: true |
Jonatan Antoni | def6f80 | 2021-05-06 17:31:38 +0200 | [diff] [blame] | 334 | } |
| 335 | } |
| 336 | |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 337 | stage('CoreValidation') { |
| 338 | when { |
| 339 | expression { return CORE_VALIDATION } |
| 340 | beforeOptions true |
| 341 | } |
| 342 | matrix { |
| 343 | axes { |
| 344 | axis { |
| 345 | name 'DEVICE' |
| 346 | values 'CM0', 'CM0plus', 'CM3', 'CM4', 'CM4FP', 'CM7', 'CM7SP', 'CM7DP', |
| 347 | 'CM23', 'CM23S', 'CM23NS', 'CM33', 'CM33S', 'CM33NS', |
Jonatan Antoni | 983aa0b | 2021-05-05 13:19:48 +0200 | [diff] [blame] | 348 | 'CM35P', 'CM35PS', 'CM35PNS', 'CM55', 'CM55S', 'CM55NS', |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 349 | 'CA5', 'CA5neon', 'CA7', 'CA7neon', 'CA9', 'CA9neon' |
| 350 | } |
| 351 | } |
| 352 | stages { |
| 353 | stage('Test') { |
| 354 | when { |
| 355 | expression { return DEVICE in CONFIGURATION['devices'] } |
| 356 | beforeOptions true |
| 357 | } |
| 358 | agent { |
| 359 | kubernetes { |
| 360 | defaultContainer 'cmsis' |
| 361 | slaveConnectTimeout 600 |
| 362 | yaml """\ |
| 363 | apiVersion: v1 |
| 364 | kind: Pod |
| 365 | spec: |
| 366 | imagePullSecrets: |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 367 | - name: ${dockerinfo['k8sPullSecret']} |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 368 | securityContext: |
| 369 | runAsUser: 1000 |
| 370 | runAsGroup: 1000 |
| 371 | containers: |
| 372 | - name: cmsis |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 373 | image: ${dockerinfo['registryUrl']}/${dockerinfo['image']}:${dockerinfo['label']} |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 374 | alwaysPullImage: true |
| 375 | imagePullPolicy: Always |
| 376 | command: |
| 377 | - sleep |
| 378 | args: |
| 379 | - infinity |
| 380 | resources: |
| 381 | requests: |
Samuel Pelegrinello Caipers | 77e149c | 2022-06-22 12:48:59 +0200 | [diff] [blame] | 382 | cpu: 900m |
| 383 | memory: 3Gi |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 384 | """.stripIndent() |
| 385 | } |
| 386 | } |
| 387 | steps { |
| 388 | checkoutScmWithRetry(3) |
Jonatan Antoni | 027e869 | 2022-10-31 13:37:25 +0100 | [diff] [blame] | 389 | dir('CMSIS/CoreValidation/Project') { |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 390 | script { |
| 391 | CONFIGURATION['configs'].each { COMPILER, OPTS -> |
| 392 | tee("CV_${COMPILER}_${DEVICE}.log") { |
| 393 | sh "python3 build.py -d ${DEVICE} -c ${COMPILER} -o ${OPTS.join(' -o ')} build run" |
| 394 | } |
| 395 | } |
| 396 | } |
| 397 | |
Jonatan Antoni | def6f80 | 2021-05-06 17:31:38 +0200 | [diff] [blame] | 398 | archiveArtifacts artifacts: 'CoreValidation_*.zip', allowEmptyArchive: true |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 399 | stash name: "CV_${DEVICE}", includes: '*.log, *.junit' |
| 400 | } |
| 401 | } |
| 402 | } |
| 403 | } |
| 404 | } |
| 405 | } |
| 406 | |
| 407 | stage('Results') { |
Jonatan Antoni | 6d6cf13 | 2021-05-17 16:34:25 +0200 | [diff] [blame] | 408 | when { |
| 409 | expression { return CORE_VALIDATION } |
| 410 | beforeOptions true |
| 411 | } |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 412 | steps { |
| 413 | dir('results') { |
| 414 | deleteDir() |
| 415 | script { |
| 416 | CONFIGURATION['devices'].each { unstash "CV_${it}" } |
| 417 | } |
| 418 | |
Jonatan Antoni | aedfddf | 2021-05-03 18:32:14 +0200 | [diff] [blame] | 419 | recordIssues tools: [armCc(id: 'AC5', name: 'Arm Compiler 5', pattern: 'CV_AC5_*.log'), |
| 420 | clang(id: 'AC6', name: 'Arm Compiler 6', pattern: 'CV_AC6_*.log'), |
| 421 | clang(id: 'AC6LTM', name: 'Arm Compiler 6 LTM', pattern: 'CV_AC6LTM_*.log'), |
| 422 | gcc(id: 'GCC', name: 'GNU Compiler', pattern: 'CV_GCC_*.log')], |
Jonatan Antoni | 5f8564b | 2021-04-29 16:59:54 +0200 | [diff] [blame] | 423 | qualityGates: [[threshold: 1, type: 'DELTA', unstable: true]], |
| 424 | referenceJobName: 'nightly', ignoreQualityGate: true |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 425 | xunit([ |
| 426 | JUnit(pattern: 'corevalidation_*.junit', failIfNotNew: false, skipNoTestFiles: true) |
| 427 | ]) |
| 428 | } |
| 429 | |
| 430 | } |
| 431 | } |
Jonatan Antoni | 4b0ede3 | 2021-04-29 18:26:29 +0200 | [diff] [blame] | 432 | |
| 433 | stage('Docker Promote') { |
| 434 | when { |
| 435 | expression { return isPostcommit && DOCKER_BUILD } |
| 436 | beforeOptions true |
| 437 | } |
| 438 | agent { |
| 439 | kubernetes { |
| 440 | defaultContainer 'docker-dind' |
| 441 | slaveConnectTimeout 600 |
| 442 | yaml """\ |
| 443 | apiVersion: v1 |
| 444 | kind: Pod |
| 445 | spec: |
| 446 | imagePullSecrets: |
| 447 | - name: artifactory-mcu-docker |
| 448 | containers: |
| 449 | - name: docker-dind |
| 450 | image: docker:dind |
| 451 | securityContext: |
| 452 | privileged: true |
| 453 | volumeMounts: |
| 454 | - name: dind-storage |
| 455 | mountPath: /var/lib/docker |
| 456 | volumes: |
| 457 | - name: dind-storage |
| 458 | emptyDir: {} |
| 459 | """.stripIndent() |
| 460 | } |
| 461 | } |
| 462 | steps { |
| 463 | script { |
| 464 | String postCommitTag = "${dockerinfo['registryUrl']}/${dockerinfo['image']}:${dockerinfo['label']}" |
| 465 | String prodCommitTag = "${DOCKERINFO['production']['registryUrl']}/${DOCKERINFO['production']['image']}:${DOCKERINFO['production']['label']}" |
| 466 | |
| 467 | // Pull & retag Docker Staging Container to Production |
| 468 | docker.withRegistry("https://${dockerinfo['registryUrl']}", dockerinfo['registryCredentialsId']) { |
| 469 | def image = docker.image("$postCommitTag") |
| 470 | image.pull() |
| 471 | sh "docker tag $postCommitTag $prodCommitTag" |
| 472 | } |
| 473 | // Push to Docker Production |
| 474 | docker.withRegistry("https://${DOCKERINFO['production']['registryUrl']}", DOCKERINFO['production']['registryCredentialsId']) { |
| 475 | def image = docker.image("$prodCommitTag") |
| 476 | image.push() |
| 477 | } |
| 478 | } |
| 479 | } |
| 480 | } |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 481 | |
| 482 | stage('Release Promote') { |
| 483 | when { |
| 484 | expression { return isRelease } |
| 485 | beforeOptions true |
| 486 | } |
| 487 | steps { |
| 488 | unstash name: 'pack' |
| 489 | dir('output') { |
| 490 | script { |
| 491 | artifactory.upload pattern: 'ARM.CMSIS.*.pack', |
| 492 | target: "mcu.promoted/CMSIS_5/${VERSION}/", |
| 493 | props: "GIT_COMMIT=${COMMIT['GIT_COMMIT']}" |
| 494 | } |
| 495 | withCredentials([string(credentialsId: 'grasci_github', variable: 'ghtoken')]) { |
Jonatan Antoni | 546c5c4 | 2021-06-17 16:02:24 +0200 | [diff] [blame] | 496 | sh """ |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 497 | curl -XPOST \ |
| 498 | -H "Authorization:token ${ghtoken}" \ |
| 499 | -H "Content-Type:application/octet-stream" \ |
| 500 | --data-binary @ARM.CMSIS.${VERSION}.pack \ |
Jonatan Antoni | 546c5c4 | 2021-06-17 16:02:24 +0200 | [diff] [blame] | 501 | https://uploads.github.com/repos/ARM-software/CMSIS_5/releases/${VERSION}/assets?name=ARM.CMSIS.${VERSION}.pack |
| 502 | """ |
Jonatan Antoni | 6485da4 | 2021-06-17 15:23:34 +0200 | [diff] [blame] | 503 | } |
| 504 | } |
| 505 | } |
| 506 | } |
Jonatan Antoni | 107fde4 | 2021-04-29 15:18:15 +0200 | [diff] [blame] | 507 | } |
| 508 | } |