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