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