Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 1 | pipeline { |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 2 | agent none |
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 3 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 4 | options { |
5 | disableConcurrentBuilds(abortPrevious: true); | ||||
6 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 7 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 8 | // TODO: periodic multi-node jobs |
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 9 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 10 | environment { |
11 | EARTHLY_CI = 'true' | ||||
12 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 13 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 14 | stages { |
15 | stage('lint') { | ||||
16 | parallel { | ||||
17 | stage('ansible-lint') { | ||||
18 | agent { | ||||
19 | label 'earthly-2c-4g' | ||||
20 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 21 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 22 | steps { |
23 | sh 'earthly --output +lint.ansible-lint' | ||||
24 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 25 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 26 | post { |
27 | always { | ||||
28 | junit testResults: 'ansible-lint.xml', allowEmptyResults: true | ||||
29 | } | ||||
30 | } | ||||
31 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 32 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 33 | stage('markdownlint') { |
34 | agent { | ||||
35 | label 'earthly-2c-4g' | ||||
36 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 37 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 38 | steps { |
39 | sh 'earthly --output +lint.markdownlint' | ||||
40 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 41 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 42 | post { |
43 | always { | ||||
44 | junit testResults: 'junit.xml', allowEmptyResults: true | ||||
45 | } | ||||
46 | } | ||||
47 | } | ||||
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 48 | } |
49 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 50 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 51 | stage('unit') { |
Mohammed Naser | 4c8e0cb | 2024-02-21 11:51:34 -0500 | [diff] [blame] | 52 | agent { |
53 | label 'earthly-2c-4g' | ||||
54 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 55 | |
Mohammed Naser | 4c8e0cb | 2024-02-21 11:51:34 -0500 | [diff] [blame] | 56 | steps { |
57 | sh 'earthly --output +unit.go' | ||||
58 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 59 | |
Mohammed Naser | 4c8e0cb | 2024-02-21 11:51:34 -0500 | [diff] [blame] | 60 | post { |
61 | always { | ||||
62 | junit 'junit-go.xml' | ||||
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 63 | } |
64 | } | ||||
65 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 66 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 67 | stage('build') { |
68 | parallel { | ||||
69 | stage('collection') { | ||||
70 | agent { | ||||
71 | label 'earthly-2c-4g' | ||||
72 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 73 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 74 | steps { |
75 | sh 'earthly --output +build.collection' | ||||
76 | } | ||||
Mohammed Naser | fdd5cee | 2024-02-07 23:45:52 -0500 | [diff] [blame] | 77 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 78 | post { |
79 | success { | ||||
80 | archiveArtifacts artifacts: 'dist/**' | ||||
81 | } | ||||
82 | } | ||||
83 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 84 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 85 | stage('images') { |
86 | agent { | ||||
87 | label 'earthly' | ||||
88 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 89 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 90 | environment { |
Mohammed Naser | 7738a9a | 2024-03-12 22:43:57 -0400 | [diff] [blame^] | 91 | TEST_REGISTRY = "registry.atmosphere.dev/ci/${env.BRANCH_NAME.toLowerCase()}" |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 92 | PROD_REGISTRY = "ghcr.io/vexxhost/atmosphere" |
93 | REGISTRY = "${env.BRANCH_NAME == 'main' ? PROD_REGISTRY : TEST_REGISTRY}" | ||||
Mohammed Naser | 1dfea6b | 2024-02-09 01:04:26 -0500 | [diff] [blame] | 94 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 95 | EARTHLY_BUILD_ARGS = "REGISTRY=${REGISTRY}" |
96 | EARTHLY_PUSH = "true" | ||||
97 | } | ||||
Mohammed Naser | 1dfea6b | 2024-02-09 01:04:26 -0500 | [diff] [blame] | 98 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 99 | steps { |
100 | script { | ||||
101 | if (env.BRANCH_NAME == 'main') { | ||||
102 | docker.withRegistry('https://ghcr.io', 'github-packages-token') { | ||||
103 | sh 'earthly --push +images' | ||||
104 | } | ||||
105 | } else { | ||||
106 | docker.withRegistry('https://registry.atmosphere.dev', 'harbor-registry') { | ||||
107 | sh 'earthly --push +images' | ||||
108 | } | ||||
109 | } | ||||
110 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 111 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 112 | sh 'earthly --output +pin-images' |
113 | sh 'earthly +scan-images' | ||||
114 | stash name: 'src-with-pinned-images', includes: '**' | ||||
115 | } | ||||
116 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 117 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 118 | stage('docs') { |
119 | agent { | ||||
120 | label 'earthly-2c-4g' | ||||
121 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 122 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 123 | steps { |
124 | sh 'earthly +mkdocs-build' | ||||
125 | } | ||||
126 | } | ||||
127 | } | ||||
128 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 129 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 130 | stage('integration') { |
131 | matrix { | ||||
132 | axes { | ||||
133 | axis { | ||||
134 | name 'NETWORK_BACKEND' | ||||
135 | values 'openvswitch', 'ovn' | ||||
136 | } | ||||
137 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 138 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 139 | agent { |
140 | label 'jammy-16c-64g' | ||||
141 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 142 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 143 | environment { |
144 | ATMOSPHERE_DEBUG = "true" | ||||
145 | ATMOSPHERE_NETWORK_BACKEND = "${NETWORK_BACKEND}" | ||||
Mohammed Naser | 9fb6591 | 2024-02-20 20:52:51 -0500 | [diff] [blame] | 146 | |
147 | // NOTE(mnaser): OVN is currently unstable and we don't want it to mark builds as failed. | ||||
148 | BUILD_RESULT_ON_FAILURE = "${NETWORK_BACKEND == 'ovn' ? 'SUCCESS' : 'FAILURE'}" | ||||
149 | STAGE_RESULT_ON_FAILURE = "${NETWORK_BACKEND == 'ovn' ? 'UNSTABLE' : 'FAILURE'}" | ||||
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 150 | } |
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 151 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 152 | stages { |
153 | stage('molecule') { | ||||
154 | steps { | ||||
155 | // Checkout code with built/pinned images | ||||
156 | unstash 'src-with-pinned-images' | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 157 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 158 | // Install dependencies |
159 | sh 'sudo apt-get install -y git python3-pip' | ||||
160 | sh 'sudo pip install poetry' | ||||
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 161 | sh 'sudo poetry install --with dev' |
Mohammed Naser | 9fb6591 | 2024-02-20 20:52:51 -0500 | [diff] [blame] | 162 | |
163 | catchError(buildResult: "${BUILD_RESULT_ON_FAILURE}", stageResult: "${STAGE_RESULT_ON_FAILURE}") { | ||||
164 | sh 'sudo --preserve-env=ATMOSPHERE_DEBUG,ATMOSPHERE_NETWORK_BACKEND poetry run molecule test -s aio' | ||||
165 | } | ||||
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 166 | } |
167 | } | ||||
168 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 169 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 170 | post { |
171 | always { | ||||
172 | // Kubernetes logs | ||||
173 | sh "sudo ./build/fetch-kubernetes-logs.sh logs/${NETWORK_BACKEND}/kubernetes || true" | ||||
174 | archiveArtifacts artifacts: 'logs/**', allowEmptyArchive: true | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 175 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 176 | // JUnit results for Tempest |
177 | sh "sudo ./build/fetch-junit-xml.sh tempest-${NETWORK_BACKEND}.xml || true" | ||||
178 | junit "tempest-${NETWORK_BACKEND}.xml" | ||||
179 | } | ||||
180 | } | ||||
181 | } | ||||
182 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 183 | |
Mohammed Naser | e7569e0 | 2024-02-20 14:33:37 -0500 | [diff] [blame] | 184 | // promote images |
185 | // release? | ||||
186 | // todo: manual pin commit to main (avoiding loop) | ||||
187 | } | ||||
Mohammed Naser | 1220717 | 2024-02-05 18:49:35 -0500 | [diff] [blame] | 188 | } |