From e0ca5f6cbfacfe333916c89ef31b6123f7cdc1e6 Mon Sep 17 00:00:00 2001 From: yrimal Date: Fri, 9 Feb 2024 14:15:45 -0500 Subject: [PATCH 01/15] #8841 build docker couchdb multi-platform --- scripts/build/build-service-images.sh | 1 + scripts/build/index.js | 23 +++++++++++++++++------ scripts/build/versions.js | 3 ++- scripts/ci/tag-docker-images.js | 3 ++- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/scripts/build/build-service-images.sh b/scripts/build/build-service-images.sh index f9047285aad..095c410f338 100755 --- a/scripts/build/build-service-images.sh +++ b/scripts/build/build-service-images.sh @@ -9,6 +9,7 @@ uglifyjs api/build/static/login/script.js -o api/build/static/login/script.js uglifyjs api/build/static/login/lib-bowser.js -o api/build/static/login/lib-bowser.js ./scripts/build/cleancss-api.sh node scripts/build/cli buildServiceImages +node scripts/build/cli buildMultiPlatformImages node scripts/build/cli buildImages echo "build-service-images: done" diff --git a/scripts/build/index.js b/scripts/build/index.js index 673ec7b2bdd..3c00efe2b05 100644 --- a/scripts/build/index.js +++ b/scripts/build/index.js @@ -147,10 +147,11 @@ const localDockerComposeFiles = () => { }; const saveServiceTags = () => { - const tags = [...versions.SERVICES, ...versions.INFRASTRUCTURE].map(service => ({ - container_name: `cht-${service}`, - image: versions.getImageTag(service, true), - })); + const tags = [...versions.SERVICES, ...versions.MULTIPLATFORM_INFRASTRUCTURE, ...versions.INFRASTRUCTURE] + .map(service => ({ + container_name: `cht-${service}`, + image: versions.getImageTag(service, true), + })); const tagsFilePath = path.resolve(stagingPath, 'tags.json'); fs.writeFileSync(tagsFilePath, JSON.stringify(tags)); }; @@ -228,8 +229,17 @@ const buildImages = async () => { } }; +const buildMultiPlatformImages = async () => { + for (const service of versions.MULTIPLATFORM_INFRASTRUCTURE) { + console.log(`\n\nBuilding multiplatform docker image for ${service}\n\n`); + const tag = versions.getImageTag(service); + await exec('docker', ['buildx', 'build', '--platform=linux/amd64,linux/arm64', + '-f', `./Dockerfile`, '--tag', tag, '.'], { cwd: service }); + } +}; + const saveServiceImages = async () => { - for (const service of [...versions.SERVICES, ...versions.INFRASTRUCTURE]) { + for (const service of [...versions.SERVICES, ...versions.MULTIPLATFORM_INFRASTRUCTURE, ...versions.INFRASTRUCTURE]) { console.log(`\n\nSaving docker image for ${service}\n\n`); const tag = versions.getImageTag(service); await exec('docker', ['save', tag, '-o', `images/${service}.tar`]); @@ -237,7 +247,7 @@ const saveServiceImages = async () => { }; const pushServiceImages = async () => { - for (const service of [...versions.SERVICES, ...versions.INFRASTRUCTURE]) { + for (const service of [...versions.SERVICES, ...versions.MULTIPLATFORM_INFRASTRUCTURE, ...versions.INFRASTRUCTURE]) { console.log(`\n\nPushing docker image for ${service}\n\n`); const tag = versions.getImageTag(service); await exec('docker', ['push', tag]); @@ -265,6 +275,7 @@ module.exports = { updateServiceWorker, buildServiceImages, buildImages, + buildMultiPlatformImages, saveServiceImages, pushServiceImages, publishServiceImages diff --git a/scripts/build/versions.js b/scripts/build/versions.js index e5c7d093a9e..3a0ee705ea9 100644 --- a/scripts/build/versions.js +++ b/scripts/build/versions.js @@ -58,5 +58,6 @@ module.exports = { getVersion, getRepo, SERVICES: ['api', 'sentinel'], - INFRASTRUCTURE: ['couchdb', 'haproxy', 'haproxy-healthcheck', 'nginx'], + MULTIPLATFORM_INFRASTRUCTURE: ['couchdb'], + INFRASTRUCTURE: ['haproxy', 'haproxy-healthcheck', 'nginx'], }; diff --git a/scripts/ci/tag-docker-images.js b/scripts/ci/tag-docker-images.js index 51c1d19549b..7a538ab9839 100644 --- a/scripts/ci/tag-docker-images.js +++ b/scripts/ci/tag-docker-images.js @@ -17,7 +17,8 @@ const dockerCmd = (...params) => new Promise((resolve, reject) => { }); (async () => { - for (const service of [...buildVersions.SERVICES, ...buildVersions.INFRASTRUCTURE]) { + for (const service of + [...buildVersions.SERVICES, ...buildVersions.MULTIPLATFORM_INFRASTRUCTURE, ...buildVersions.INFRASTRUCTURE]) { const existentTag = buildVersions.getImageTag(service); const releaseTag = buildVersions.getImageTag(service, true); From 0aa2ca0a35f834f8bfe77449229260adf695ad4c Mon Sep 17 00:00:00 2001 From: yrimal Date: Fri, 9 Feb 2024 15:31:29 -0500 Subject: [PATCH 02/15] #8841 add qemu and buildx --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bb7367b0025..00e578e6f1a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -64,6 +64,10 @@ jobs: - run: npm ci - name: Compile run: npm run ci-compile + - name: Setup QEMU + uses: docker/setup-qemu-action@v3 + - name: Setup Buildx + uses: docker/setup-buildx-action@v3 - name: Publish for testing run: npm run publish-for-testing - name: Upload docker images as artifacts From 881ab3577f90bfcd15be4f1aa3bebd030a864bc6 Mon Sep 17 00:00:00 2001 From: yrimal Date: Mon, 12 Feb 2024 17:12:07 -0500 Subject: [PATCH 03/15] #8841 push image while building --- scripts/build/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/build/index.js b/scripts/build/index.js index 3c00efe2b05..c956939a6bb 100644 --- a/scripts/build/index.js +++ b/scripts/build/index.js @@ -234,12 +234,12 @@ const buildMultiPlatformImages = async () => { console.log(`\n\nBuilding multiplatform docker image for ${service}\n\n`); const tag = versions.getImageTag(service); await exec('docker', ['buildx', 'build', '--platform=linux/amd64,linux/arm64', - '-f', `./Dockerfile`, '--tag', tag, '.'], { cwd: service }); + '-f', `./Dockerfile`, '--tag', tag, '--push', '.'], { cwd: service }); } }; const saveServiceImages = async () => { - for (const service of [...versions.SERVICES, ...versions.MULTIPLATFORM_INFRASTRUCTURE, ...versions.INFRASTRUCTURE]) { + for (const service of [...versions.SERVICES, ...versions.INFRASTRUCTURE]) { console.log(`\n\nSaving docker image for ${service}\n\n`); const tag = versions.getImageTag(service); await exec('docker', ['save', tag, '-o', `images/${service}.tar`]); @@ -247,7 +247,7 @@ const saveServiceImages = async () => { }; const pushServiceImages = async () => { - for (const service of [...versions.SERVICES, ...versions.MULTIPLATFORM_INFRASTRUCTURE, ...versions.INFRASTRUCTURE]) { + for (const service of [...versions.SERVICES, ...versions.INFRASTRUCTURE]) { console.log(`\n\nPushing docker image for ${service}\n\n`); const tag = versions.getImageTag(service); await exec('docker', ['push', tag]); From a5d933de5073720cc3e244b928ba947ec5531c9f Mon Sep 17 00:00:00 2001 From: yrimal Date: Fri, 16 Feb 2024 10:26:24 -0500 Subject: [PATCH 04/15] #8841 set provenance false --- scripts/build/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build/index.js b/scripts/build/index.js index c956939a6bb..e4847104840 100644 --- a/scripts/build/index.js +++ b/scripts/build/index.js @@ -233,7 +233,7 @@ const buildMultiPlatformImages = async () => { for (const service of versions.MULTIPLATFORM_INFRASTRUCTURE) { console.log(`\n\nBuilding multiplatform docker image for ${service}\n\n`); const tag = versions.getImageTag(service); - await exec('docker', ['buildx', 'build', '--platform=linux/amd64,linux/arm64', + await exec('docker', ['buildx', 'build', '--provenance=false', '--platform=linux/amd64,linux/arm64', '-f', `./Dockerfile`, '--tag', tag, '--push', '.'], { cwd: service }); } }; From 85e0de7f63e4214727339e6492efb926bbf78e57 Mon Sep 17 00:00:00 2001 From: yrimal Date: Fri, 16 Feb 2024 14:32:10 -0500 Subject: [PATCH 05/15] #8841 use regctl to copy image --- .github/workflows/build.yml | 3 +++ couchdb/docker-entrypoint.sh | 1 + 2 files changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 00e578e6f1a..5cfc6572195 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -279,6 +279,9 @@ jobs: if: ${{ github.event_name != 'pull_request' }} steps: + - name: Install regctl + uses: regclient/actions/regctl-installer@main + - name: Delete image artifacts if: ${{ !env.INTERNAL_CONTRIBUTOR }} uses: geekyeggo/delete-artifact@v1 diff --git a/couchdb/docker-entrypoint.sh b/couchdb/docker-entrypoint.sh index 116c4cacb7a..073875e6cbe 100755 --- a/couchdb/docker-entrypoint.sh +++ b/couchdb/docker-entrypoint.sh @@ -35,6 +35,7 @@ setSecret() { COUCHDB_SECRET=$(cat /proc/sys/kernel/random/uuid) fi # Set secret only if not already present + printf "set secret" if [ -z $(grep -Pzor "\[couch_httpd_auth\]\nsecret =" $CLUSTER_CREDENTIALS) ]; then printf "\n[couch_httpd_auth]\nsecret = %s\n" "$COUCHDB_SECRET" >> $CLUSTER_CREDENTIALS fi From fd7ec65bd06fa4ec91dcc75b7e1fd7122d439c2f Mon Sep 17 00:00:00 2001 From: yrimal Date: Fri, 16 Feb 2024 14:53:48 -0500 Subject: [PATCH 06/15] skip test for publis --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5cfc6572195..9fd63168904 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -273,7 +273,7 @@ jobs: if: ${{ failure() }} publish: - needs: [tests, config-tests, test-cht-form] + needs: [build] name: Publish branch build runs-on: ubuntu-22.04 if: ${{ github.event_name != 'pull_request' }} From 79fcac81def6949a8b4cd14586de75edf248e8d7 Mon Sep 17 00:00:00 2001 From: yrimal Date: Fri, 16 Feb 2024 19:38:15 -0500 Subject: [PATCH 07/15] #8841 publish image using reg --- scripts/ci/tag-docker-images.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/scripts/ci/tag-docker-images.js b/scripts/ci/tag-docker-images.js index 7a538ab9839..63e412f63d2 100644 --- a/scripts/ci/tag-docker-images.js +++ b/scripts/ci/tag-docker-images.js @@ -16,9 +16,23 @@ const dockerCmd = (...params) => new Promise((resolve, reject) => { proc.on('close', () => resolve()); }); +const regctlCmd = (...params) => new Promise((resolve, reject) => { + console.log('retctl', ...params); + const proc = spawn('regct', params); + proc.on('error', (err) => { + console.error('Error while running regctl command', err); + reject(err); + }); + const log = data => console.log(data.toString()); + proc.stdout.on('data', log); + proc.stderr.on('data', log); + + proc.on('close', () => resolve()); +}); + (async () => { for (const service of - [...buildVersions.SERVICES, ...buildVersions.MULTIPLATFORM_INFRASTRUCTURE, ...buildVersions.INFRASTRUCTURE]) { + [...buildVersions.SERVICES, ...buildVersions.INFRASTRUCTURE]) { const existentTag = buildVersions.getImageTag(service); const releaseTag = buildVersions.getImageTag(service, true); @@ -26,4 +40,11 @@ const dockerCmd = (...params) => new Promise((resolve, reject) => { await dockerCmd('image', 'tag', existentTag, releaseTag); await dockerCmd('push', releaseTag); } + + for (const service of + [...buildVersions.MULTIPLATFORM_INFRASTRUCTURE]) { + const existentTag = buildVersions.getImageTag(service); + const releaseTag = buildVersions.getImageTag(service, true); + await regctlCmd('image', 'copy', existentTag, releaseTag); + } })(); From a9a1a96bb4339ba6de13acd432094dea6322ce6f Mon Sep 17 00:00:00 2001 From: yrimal Date: Fri, 16 Feb 2024 19:53:39 -0500 Subject: [PATCH 08/15] #8841 use regctl --- scripts/ci/tag-docker-images.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/ci/tag-docker-images.js b/scripts/ci/tag-docker-images.js index 63e412f63d2..83469ff292a 100644 --- a/scripts/ci/tag-docker-images.js +++ b/scripts/ci/tag-docker-images.js @@ -17,8 +17,8 @@ const dockerCmd = (...params) => new Promise((resolve, reject) => { }); const regctlCmd = (...params) => new Promise((resolve, reject) => { - console.log('retctl', ...params); - const proc = spawn('regct', params); + console.log('regctl', ...params); + const proc = spawn('regctl', params); proc.on('error', (err) => { console.error('Error while running regctl command', err); reject(err); From e2e16774e83d53e5165da853605da5f5af0700af Mon Sep 17 00:00:00 2001 From: yrimal Date: Thu, 7 Mar 2024 09:31:54 -0500 Subject: [PATCH 09/15] #8841 separate infra builds for internal/external contributors --- couchdb/docker-entrypoint.sh | 1 - scripts/build/build-service-images.sh | 3 +-- scripts/build/index.js | 21 +++++++++++++++------ scripts/build/versions.js | 3 +-- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/couchdb/docker-entrypoint.sh b/couchdb/docker-entrypoint.sh index 073875e6cbe..116c4cacb7a 100755 --- a/couchdb/docker-entrypoint.sh +++ b/couchdb/docker-entrypoint.sh @@ -35,7 +35,6 @@ setSecret() { COUCHDB_SECRET=$(cat /proc/sys/kernel/random/uuid) fi # Set secret only if not already present - printf "set secret" if [ -z $(grep -Pzor "\[couch_httpd_auth\]\nsecret =" $CLUSTER_CREDENTIALS) ]; then printf "\n[couch_httpd_auth]\nsecret = %s\n" "$COUCHDB_SECRET" >> $CLUSTER_CREDENTIALS fi diff --git a/scripts/build/build-service-images.sh b/scripts/build/build-service-images.sh index 095c410f338..cc269e0bc9e 100755 --- a/scripts/build/build-service-images.sh +++ b/scripts/build/build-service-images.sh @@ -9,7 +9,6 @@ uglifyjs api/build/static/login/script.js -o api/build/static/login/script.js uglifyjs api/build/static/login/lib-bowser.js -o api/build/static/login/lib-bowser.js ./scripts/build/cleancss-api.sh node scripts/build/cli buildServiceImages -node scripts/build/cli buildMultiPlatformImages -node scripts/build/cli buildImages +node scripts/build/cli buildInfrastructureImages echo "build-service-images: done" diff --git a/scripts/build/index.js b/scripts/build/index.js index e4847104840..696f5638f2e 100644 --- a/scripts/build/index.js +++ b/scripts/build/index.js @@ -6,6 +6,7 @@ const mustache = require('mustache'); const packageJson = require('../../package.json'); const versions = require('./versions'); +const BUILD_PLATFORMS = ['linux/amd64', 'linux/arm64']; const { TAG, @@ -147,7 +148,7 @@ const localDockerComposeFiles = () => { }; const saveServiceTags = () => { - const tags = [...versions.SERVICES, ...versions.MULTIPLATFORM_INFRASTRUCTURE, ...versions.INFRASTRUCTURE] + const tags = [...versions.SERVICES, ...versions.INFRASTRUCTURE] .map(service => ({ container_name: `cht-${service}`, image: versions.getImageTag(service, true), @@ -229,11 +230,19 @@ const buildImages = async () => { } }; +const buildInfrastructureImages = async () => { + if (INTERNAL_CONTRIBUTOR){ + await buildMultiPlatformImages(); + } else { + await buildImages(); + } +}; + const buildMultiPlatformImages = async () => { - for (const service of versions.MULTIPLATFORM_INFRASTRUCTURE) { - console.log(`\n\nBuilding multiplatform docker image for ${service}\n\n`); + for (const service of versions.INFRASTRUCTURE) { + console.log(`\n\nBuilding and pushing multiplatform docker image for ${service}\n\n`); const tag = versions.getImageTag(service); - await exec('docker', ['buildx', 'build', '--provenance=false', '--platform=linux/amd64,linux/arm64', + await exec('docker', ['buildx', 'build', '--provenance=false', '--platform='+BUILD_PLATFORMS.join(','), '-f', `./Dockerfile`, '--tag', tag, '--push', '.'], { cwd: service }); } }; @@ -247,7 +256,7 @@ const saveServiceImages = async () => { }; const pushServiceImages = async () => { - for (const service of [...versions.SERVICES, ...versions.INFRASTRUCTURE]) { + for (const service of [...versions.SERVICES]) { console.log(`\n\nPushing docker image for ${service}\n\n`); const tag = versions.getImageTag(service); await exec('docker', ['push', tag]); @@ -275,7 +284,7 @@ module.exports = { updateServiceWorker, buildServiceImages, buildImages, - buildMultiPlatformImages, + buildInfrastructureImages, saveServiceImages, pushServiceImages, publishServiceImages diff --git a/scripts/build/versions.js b/scripts/build/versions.js index 3a0ee705ea9..e5c7d093a9e 100644 --- a/scripts/build/versions.js +++ b/scripts/build/versions.js @@ -58,6 +58,5 @@ module.exports = { getVersion, getRepo, SERVICES: ['api', 'sentinel'], - MULTIPLATFORM_INFRASTRUCTURE: ['couchdb'], - INFRASTRUCTURE: ['haproxy', 'haproxy-healthcheck', 'nginx'], + INFRASTRUCTURE: ['couchdb', 'haproxy', 'haproxy-healthcheck', 'nginx'], }; From e36a2f926cfeddeeb85826040c70a2aa7b206b87 Mon Sep 17 00:00:00 2001 From: yuv <80085082+1yrr@users.noreply.github.com> Date: Thu, 7 Mar 2024 09:54:23 -0500 Subject: [PATCH 10/15] #8841 commit as external contributor --- scripts/ci/tag-docker-images.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/ci/tag-docker-images.js b/scripts/ci/tag-docker-images.js index 83469ff292a..f8c91466693 100644 --- a/scripts/ci/tag-docker-images.js +++ b/scripts/ci/tag-docker-images.js @@ -32,7 +32,7 @@ const regctlCmd = (...params) => new Promise((resolve, reject) => { (async () => { for (const service of - [...buildVersions.SERVICES, ...buildVersions.INFRASTRUCTURE]) { + [...buildVersions.SERVICES]) { const existentTag = buildVersions.getImageTag(service); const releaseTag = buildVersions.getImageTag(service, true); @@ -42,7 +42,7 @@ const regctlCmd = (...params) => new Promise((resolve, reject) => { } for (const service of - [...buildVersions.MULTIPLATFORM_INFRASTRUCTURE]) { + [...buildVersions.INFRASTRUCTURE]) { const existentTag = buildVersions.getImageTag(service); const releaseTag = buildVersions.getImageTag(service, true); await regctlCmd('image', 'copy', existentTag, releaseTag); From 5352e5fb5b28be02f1b7846dbb127a3dd83bf104 Mon Sep 17 00:00:00 2001 From: yrimal Date: Thu, 7 Mar 2024 15:45:20 -0500 Subject: [PATCH 11/15] #8841 build service images multiplatform --- scripts/build/index.js | 49 ++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/scripts/build/index.js b/scripts/build/index.js index dbb212e94e2..79ee0e30e33 100644 --- a/scripts/build/index.js +++ b/scripts/build/index.js @@ -67,7 +67,7 @@ const setBuildInfo = () => { }; const mkdirSync = (dirPath) => { - if (!fs.existsSync(dirPath)){ + if (!fs.existsSync(dirPath)) { fs.mkdirSync(dirPath); } }; @@ -192,7 +192,7 @@ const setDdocsVersion = () => { }); }; -const exec = async (command, args, options=({})) => { +const exec = async (command, args, options = ({})) => { options.stdio = 'inherit'; const ci = spawn(command, args, options); await new Promise((resolve, reject) => { @@ -212,7 +212,9 @@ const npmCiModules = async () => { } }; -const buildServiceImages = async () => { + + +const buildSinglePlatformServiceImages = async () => { for (const service of versions.SERVICES) { console.log(`\n\nBuilding docker image for ${service}\n\n`); const tag = versions.getImageTag(service); @@ -222,7 +224,26 @@ const buildServiceImages = async () => { } }; -const buildImages = async () => { +const buildMultiPlatformServiceImages = async () => { + for (const service of versions.SERVICES) { + console.log(`\n\nBuilding multiplatform docker image for ${service}\n\n`); + const tag = versions.getImageTag(service); + await exec('npm', ['ci', '--omit=dev'], { cwd: service }); + await exec('npm', ['dedupe'], { cwd: service }); + await exec('docker', ['buildx', 'build', '--provenance=false', '--platform=' + BUILD_PLATFORMS.join(','), + '-f', `./${service}/Dockerfile`, '--tag', tag, '--push', '.']); + } +}; + +const buildServiceImages = async () => { + if (INTERNAL_CONTRIBUTOR) { + await buildMultiPlatformServiceImages(); + } else { + await buildSinglePlatformServiceImages(); + } +}; + +const buildSinglePlatformImages = async () => { for (const service of versions.INFRASTRUCTURE) { console.log(`\n\nBuilding docker image for ${service}\n\n`); const tag = versions.getImageTag(service); @@ -231,10 +252,10 @@ const buildImages = async () => { }; const buildInfrastructureImages = async () => { - if (INTERNAL_CONTRIBUTOR){ + if (INTERNAL_CONTRIBUTOR) { await buildMultiPlatformImages(); } else { - await buildImages(); + await buildSinglePlatformImages(); } }; @@ -242,7 +263,7 @@ const buildMultiPlatformImages = async () => { for (const service of versions.INFRASTRUCTURE) { console.log(`\n\nBuilding and pushing multiplatform docker image for ${service}\n\n`); const tag = versions.getImageTag(service); - await exec('docker', ['buildx', 'build', '--provenance=false', '--platform='+BUILD_PLATFORMS.join(','), + await exec('docker', ['buildx', 'build', '--provenance=false', '--platform=' + BUILD_PLATFORMS.join(','), '-f', `./Dockerfile`, '--tag', tag, '--push', '.'], { cwd: service }); } }; @@ -255,22 +276,10 @@ const saveServiceImages = async () => { } }; -const pushServiceImages = async () => { - for (const service of [...versions.SERVICES]) { - console.log(`\n\nPushing docker image for ${service}\n\n`); - const tag = versions.getImageTag(service); - await exec('docker', ['push', tag]); - } -}; - const publishServiceImages = async () => { if (!BUILD_NUMBER) { return; } - - if (INTERNAL_CONTRIBUTOR) { - return await pushServiceImages(); - } return await saveServiceImages(); }; @@ -283,9 +292,7 @@ module.exports = { setDdocsVersion, updateServiceWorker, buildServiceImages, - buildImages, buildInfrastructureImages, saveServiceImages, - pushServiceImages, publishServiceImages }; From 2ab9930a12412ec3b5d62676d307c779391ac074 Mon Sep 17 00:00:00 2001 From: yrimal Date: Thu, 7 Mar 2024 16:08:44 -0500 Subject: [PATCH 12/15] setup actions for internal contributor only --- .github/workflows/build.yml | 3 +++ scripts/build/index.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e0b042c5464..e432c1e30db 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -65,8 +65,10 @@ jobs: - name: Compile run: npm run ci-compile - name: Setup QEMU + if: ${{ env.INTERNAL_CONTRIBUTOR }} uses: docker/setup-qemu-action@v3 - name: Setup Buildx + if: ${{ env.INTERNAL_CONTRIBUTOR }} uses: docker/setup-buildx-action@v3 - name: Publish for testing run: npm run publish-for-testing @@ -280,6 +282,7 @@ jobs: steps: - name: Install regctl + if: ${{ env.INTERNAL_CONTRIBUTOR }} uses: regclient/actions/regctl-installer@main - name: Configure AWS credentials diff --git a/scripts/build/index.js b/scripts/build/index.js index 79ee0e30e33..dadeb7d3813 100644 --- a/scripts/build/index.js +++ b/scripts/build/index.js @@ -226,7 +226,7 @@ const buildSinglePlatformServiceImages = async () => { const buildMultiPlatformServiceImages = async () => { for (const service of versions.SERVICES) { - console.log(`\n\nBuilding multiplatform docker image for ${service}\n\n`); + console.log(`\n\nBuilding and pushing multiplatform docker image for ${service}\n\n`); const tag = versions.getImageTag(service); await exec('npm', ['ci', '--omit=dev'], { cwd: service }); await exec('npm', ['dedupe'], { cwd: service }); From 09a761393e3fbcfab67d51e507e65583eb1b5921 Mon Sep 17 00:00:00 2001 From: yrimal Date: Thu, 7 Mar 2024 16:27:13 -0500 Subject: [PATCH 13/15] save service image #8841 --- scripts/build/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/build/index.js b/scripts/build/index.js index dadeb7d3813..3c42bacee01 100644 --- a/scripts/build/index.js +++ b/scripts/build/index.js @@ -280,7 +280,9 @@ const publishServiceImages = async () => { if (!BUILD_NUMBER) { return; } - return await saveServiceImages(); + if (!INTERNAL_CONTRIBUTOR){ + return await saveServiceImages(); + } }; module.exports = { From 40c3d602f4bc7db8aba9055d7673e6331cc9479e Mon Sep 17 00:00:00 2001 From: yuv <80085082+1yrr@users.noreply.github.com> Date: Thu, 7 Mar 2024 17:03:13 -0500 Subject: [PATCH 14/15] save image using regctl --- .github/workflows/build.yml | 2 +- scripts/ci/tag-docker-images.js | 26 +------------------------- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e432c1e30db..62685aaa0aa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -275,7 +275,7 @@ jobs: if: ${{ failure() }} publish: - needs: [build] + needs: [tests, config-tests, test-cht-form] name: Publish branch build runs-on: ubuntu-22.04 if: ${{ github.event_name != 'pull_request' }} diff --git a/scripts/ci/tag-docker-images.js b/scripts/ci/tag-docker-images.js index f8c91466693..3ea6f7a64f8 100644 --- a/scripts/ci/tag-docker-images.js +++ b/scripts/ci/tag-docker-images.js @@ -2,20 +2,6 @@ const { spawn } = require('child_process'); const buildVersions = require('../build/versions'); -const dockerCmd = (...params) => new Promise((resolve, reject) => { - console.log('docker', ...params); - const proc = spawn('docker', params); - proc.on('error', (err) => { - console.error('Error while running docker command', err); - reject(err); - }); - const log = data => console.log(data.toString()); - proc.stdout.on('data', log); - proc.stderr.on('data', log); - - proc.on('close', () => resolve()); -}); - const regctlCmd = (...params) => new Promise((resolve, reject) => { console.log('regctl', ...params); const proc = spawn('regctl', params); @@ -32,17 +18,7 @@ const regctlCmd = (...params) => new Promise((resolve, reject) => { (async () => { for (const service of - [...buildVersions.SERVICES]) { - const existentTag = buildVersions.getImageTag(service); - const releaseTag = buildVersions.getImageTag(service, true); - - await dockerCmd('pull', existentTag); - await dockerCmd('image', 'tag', existentTag, releaseTag); - await dockerCmd('push', releaseTag); - } - - for (const service of - [...buildVersions.INFRASTRUCTURE]) { + [...buildVersions.SERVICES, ...buildVersions.INFRASTRUCTURE]) { const existentTag = buildVersions.getImageTag(service); const releaseTag = buildVersions.getImageTag(service, true); await regctlCmd('image', 'copy', existentTag, releaseTag); From 23d1d3959f36c03b10c2a2c19c7a1279b33e578f Mon Sep 17 00:00:00 2001 From: yrimal Date: Fri, 8 Mar 2024 08:51:51 -0500 Subject: [PATCH 15/15] #8841 Update platform to 64/v8 --- scripts/build/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build/index.js b/scripts/build/index.js index 3c42bacee01..012aa81514a 100644 --- a/scripts/build/index.js +++ b/scripts/build/index.js @@ -6,7 +6,7 @@ const mustache = require('mustache'); const packageJson = require('../../package.json'); const versions = require('./versions'); -const BUILD_PLATFORMS = ['linux/amd64', 'linux/arm64']; +const BUILD_PLATFORMS = ['linux/amd64', 'linux/arm64/v8']; const { TAG,