From f84035ecaa06eaf9b293074c6408307a66b42295 Mon Sep 17 00:00:00 2001 From: Filippo Costa Date: Mon, 24 Oct 2022 14:09:12 +0200 Subject: [PATCH 1/8] build(cloudbuild): use BuildKit for faster builds --- docker/cloudbuild.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docker/cloudbuild.yaml b/docker/cloudbuild.yaml index 39cf2856e62..4908b492d31 100644 --- a/docker/cloudbuild.yaml +++ b/docker/cloudbuild.yaml @@ -10,6 +10,8 @@ steps: '--build-arg', 'TAG_NAME=$TAG_NAME', '-t', 'gcr.io/$PROJECT_ID/graph-node-build:$SHORT_SHA', '-f', 'docker/Dockerfile', '.'] + env: + - 'DOCKER_BUILDKIT=1' - name: 'gcr.io/cloud-builders/docker' args: ['build', '--target', 'graph-node', '--build-arg', 'COMMIT_SHA=$COMMIT_SHA', @@ -18,6 +20,8 @@ steps: '--build-arg', 'TAG_NAME=$TAG_NAME', '-t', 'gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA', '-f', 'docker/Dockerfile', '.'] + env: + - 'DOCKER_BUILDKIT=1' - name: 'gcr.io/cloud-builders/docker' args: ['build', '--target', 'graph-node-debug', '--build-arg', 'COMMIT_SHA=$COMMIT_SHA', @@ -26,6 +30,8 @@ steps: '--build-arg', 'TAG_NAME=$TAG_NAME', '-t', 'gcr.io/$PROJECT_ID/graph-node-debug:$SHORT_SHA', '-f', 'docker/Dockerfile', '.'] + env: + - 'DOCKER_BUILDKIT=1' - name: 'gcr.io/cloud-builders/docker' args: ['tag', 'gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA', From 5119acf3216fb8005861ff1f126c7f69575c0960 Mon Sep 17 00:00:00 2001 From: Filippo Costa Date: Tue, 25 Oct 2022 11:12:13 +0200 Subject: [PATCH 2/8] ci: try using kaniko for caching --- docker/cloudbuild.yaml | 69 ++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/docker/cloudbuild.yaml b/docker/cloudbuild.yaml index 4908b492d31..3e71c9ceda6 100644 --- a/docker/cloudbuild.yaml +++ b/docker/cloudbuild.yaml @@ -2,36 +2,45 @@ options: machineType: "N1_HIGHCPU_32" timeout: 1800s steps: -- name: 'gcr.io/cloud-builders/docker' - args: ['build', '--target', 'graph-node-build', - '--build-arg', 'COMMIT_SHA=$COMMIT_SHA', - '--build-arg', 'REPO_NAME=$REPO_NAME', - '--build-arg', 'BRANCH_NAME=$BRANCH_NAME', - '--build-arg', 'TAG_NAME=$TAG_NAME', - '-t', 'gcr.io/$PROJECT_ID/graph-node-build:$SHORT_SHA', - '-f', 'docker/Dockerfile', '.'] - env: - - 'DOCKER_BUILDKIT=1' -- name: 'gcr.io/cloud-builders/docker' - args: ['build', '--target', 'graph-node', - '--build-arg', 'COMMIT_SHA=$COMMIT_SHA', - '--build-arg', 'REPO_NAME=$REPO_NAME', - '--build-arg', 'BRANCH_NAME=$BRANCH_NAME', - '--build-arg', 'TAG_NAME=$TAG_NAME', - '-t', 'gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA', - '-f', 'docker/Dockerfile', '.'] - env: - - 'DOCKER_BUILDKIT=1' -- name: 'gcr.io/cloud-builders/docker' - args: ['build', '--target', 'graph-node-debug', - '--build-arg', 'COMMIT_SHA=$COMMIT_SHA', - '--build-arg', 'REPO_NAME=$REPO_NAME', - '--build-arg', 'BRANCH_NAME=$BRANCH_NAME', - '--build-arg', 'TAG_NAME=$TAG_NAME', - '-t', 'gcr.io/$PROJECT_ID/graph-node-debug:$SHORT_SHA', - '-f', 'docker/Dockerfile', '.'] - env: - - 'DOCKER_BUILDKIT=1' +- name: 'gcr.io/kaniko-project/executor:latest' + args: [ + '--build-arg', 'COMMIT_SHA=$COMMIT_SHA', + '--build-arg', 'REPO_NAME=$REPO_NAME', + '--build-arg', 'BRANCH_NAME=$BRANCH_NAME', + '--build-arg', 'TAG_NAME=$TAG_NAME', + '--cache', 'true', + '--cache-run-layers', 'true', + '--cache-ttl', '48h', + '--target', 'graph-node-build', + '--destination', 'gcr.io/$PROJECT_ID/graph-node-build:$SHORT_SHA', + '--dockerfile', 'docker/Dockerfile', + ] +- name: 'gcr.io/kaniko-project/executor:latest' + args: [ + '--build-arg', 'COMMIT_SHA=$COMMIT_SHA', + '--build-arg', 'REPO_NAME=$REPO_NAME', + '--build-arg', 'BRANCH_NAME=$BRANCH_NAME', + '--build-arg', 'TAG_NAME=$TAG_NAME', + '--cache', 'true', + '--cache-run-layers', 'true', + '--cache-ttl', '48h', + '--target', 'graph-node', + '--destination', 'gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA', + '--dockerfile', 'docker/Dockerfile', + ] +- name: 'gcr.io/kaniko-project/executor:latest' + args: [ + '--build-arg', 'COMMIT_SHA=$COMMIT_SHA', + '--build-arg', 'REPO_NAME=$REPO_NAME', + '--build-arg', 'BRANCH_NAME=$BRANCH_NAME', + '--build-arg', 'TAG_NAME=$TAG_NAME', + '--cache', 'true', + '--cache-run-layers', 'true', + '--cache-ttl', '48h', + '--target', 'graph-node-debug', + '--destination', 'gcr.io/$PROJECT_ID/graph-node-debug:$SHORT_SHA', + '--dockerfile', 'docker/Dockerfile', + ] - name: 'gcr.io/cloud-builders/docker' args: ['tag', 'gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA', From 179210103d034434cf7ffe58a16c99316ee02367 Mon Sep 17 00:00:00 2001 From: Filippo Costa Date: Tue, 25 Oct 2022 11:17:37 +0200 Subject: [PATCH 3/8] ci: fix kaniko args --- docker/cloudbuild.yaml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docker/cloudbuild.yaml b/docker/cloudbuild.yaml index 3e71c9ceda6..55e3e0af2be 100644 --- a/docker/cloudbuild.yaml +++ b/docker/cloudbuild.yaml @@ -8,12 +8,12 @@ steps: '--build-arg', 'REPO_NAME=$REPO_NAME', '--build-arg', 'BRANCH_NAME=$BRANCH_NAME', '--build-arg', 'TAG_NAME=$TAG_NAME', - '--cache', 'true', - '--cache-run-layers', 'true', - '--cache-ttl', '48h', - '--target', 'graph-node-build', - '--destination', 'gcr.io/$PROJECT_ID/graph-node-build:$SHORT_SHA', - '--dockerfile', 'docker/Dockerfile', + '--cache=true', + '--cache-run-layers=true', + '--cache-ttl=48h', + '--target=graph-node-build', + '--destination=gcr.io/$PROJECT_ID/graph-node-build:$SHORT_SHA', + '--dockerfile=docker/Dockerfile', ] - name: 'gcr.io/kaniko-project/executor:latest' args: [ @@ -21,12 +21,12 @@ steps: '--build-arg', 'REPO_NAME=$REPO_NAME', '--build-arg', 'BRANCH_NAME=$BRANCH_NAME', '--build-arg', 'TAG_NAME=$TAG_NAME', - '--cache', 'true', - '--cache-run-layers', 'true', - '--cache-ttl', '48h', - '--target', 'graph-node', - '--destination', 'gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA', - '--dockerfile', 'docker/Dockerfile', + '--cache=true', + '--cache-run-layers=true', + '--cache-ttl=48h', + '--target=graph-node', + '--destination=gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA', + '--dockerfile=docker/Dockerfile', ] - name: 'gcr.io/kaniko-project/executor:latest' args: [ @@ -34,12 +34,12 @@ steps: '--build-arg', 'REPO_NAME=$REPO_NAME', '--build-arg', 'BRANCH_NAME=$BRANCH_NAME', '--build-arg', 'TAG_NAME=$TAG_NAME', - '--cache', 'true', - '--cache-run-layers', 'true', - '--cache-ttl', '48h', - '--target', 'graph-node-debug', - '--destination', 'gcr.io/$PROJECT_ID/graph-node-debug:$SHORT_SHA', - '--dockerfile', 'docker/Dockerfile', + '--cache=true', + '--cache-run-layers=true', + '--cache-ttl=48h', + '--target=graph-node-debug', + '--destination=gcr.io/$PROJECT_ID/graph-node-debug:$SHORT_SHA', + '--dockerfile=docker/Dockerfile', ] - name: 'gcr.io/cloud-builders/docker' args: ['tag', From e2dcff193c22d04c797d6c40af42b569d72b3a7a Mon Sep 17 00:00:00 2001 From: Filippo Costa Date: Tue, 25 Oct 2022 11:39:11 +0200 Subject: [PATCH 4/8] ci: share kaniko cache across steps --- docker/cloudbuild.yaml | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/docker/cloudbuild.yaml b/docker/cloudbuild.yaml index 55e3e0af2be..338e4bf6e4f 100644 --- a/docker/cloudbuild.yaml +++ b/docker/cloudbuild.yaml @@ -9,21 +9,9 @@ steps: '--build-arg', 'BRANCH_NAME=$BRANCH_NAME', '--build-arg', 'TAG_NAME=$TAG_NAME', '--cache=true', + '--cache-ttl=96h', '--cache-run-layers=true', - '--cache-ttl=48h', - '--target=graph-node-build', - '--destination=gcr.io/$PROJECT_ID/graph-node-build:$SHORT_SHA', - '--dockerfile=docker/Dockerfile', - ] -- name: 'gcr.io/kaniko-project/executor:latest' - args: [ - '--build-arg', 'COMMIT_SHA=$COMMIT_SHA', - '--build-arg', 'REPO_NAME=$REPO_NAME', - '--build-arg', 'BRANCH_NAME=$BRANCH_NAME', - '--build-arg', 'TAG_NAME=$TAG_NAME', - '--cache=true', - '--cache-run-layers=true', - '--cache-ttl=48h', + '--cache-repo=gcr.io/$PROJECT_ID/graph-node/cache', '--target=graph-node', '--destination=gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA', '--dockerfile=docker/Dockerfile', @@ -35,8 +23,11 @@ steps: '--build-arg', 'BRANCH_NAME=$BRANCH_NAME', '--build-arg', 'TAG_NAME=$TAG_NAME', '--cache=true', + '--cache-ttl=96h', '--cache-run-layers=true', - '--cache-ttl=48h', + # Cache is shared between `graph-node` and `graph-node-debug`, because the + # build stages are identical. + '--cache-repo=gcr.io/$PROJECT_ID/graph-node/cache', '--target=graph-node-debug', '--destination=gcr.io/$PROJECT_ID/graph-node-debug:$SHORT_SHA', '--dockerfile=docker/Dockerfile', @@ -56,7 +47,6 @@ steps: - 'DOCKER_HUB_USER=$_DOCKER_HUB_USER' - 'BRANCH_NAME=$BRANCH_NAME' images: - - 'gcr.io/$PROJECT_ID/graph-node-build:$SHORT_SHA' - 'gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA' - 'gcr.io/$PROJECT_ID/graph-node-debug:$SHORT_SHA' substitutions: From 4f741526bb3ee8168bfcaa0ef4f6cacdd7dc337b Mon Sep 17 00:00:00 2001 From: Filippo Costa Date: Tue, 25 Oct 2022 12:07:28 +0200 Subject: [PATCH 5/8] ci: try removing lutter tagging --- docker/cloudbuild.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docker/cloudbuild.yaml b/docker/cloudbuild.yaml index 338e4bf6e4f..582be4c164f 100644 --- a/docker/cloudbuild.yaml +++ b/docker/cloudbuild.yaml @@ -32,10 +32,10 @@ steps: '--destination=gcr.io/$PROJECT_ID/graph-node-debug:$SHORT_SHA', '--dockerfile=docker/Dockerfile', ] -- name: 'gcr.io/cloud-builders/docker' - args: ['tag', - 'gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA', - 'lutter/graph-node:$SHORT_SHA'] +#- name: 'gcr.io/cloud-builders/docker' +# args: ['tag', +# 'gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA', +# 'lutter/graph-node:$SHORT_SHA'] - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['docker/tag.sh'] From 2ae409a6a90b3baaedaa6b4a9fa76e0c182ac2bd Mon Sep 17 00:00:00 2001 From: Filippo Costa Date: Tue, 25 Oct 2022 12:44:20 +0200 Subject: [PATCH 6/8] ci: rm -rf changed files in envsubst --- docker/Dockerfile | 6 +++++- docker/cloudbuild.yaml | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 9a86b42f26f..41f638bbd90 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -25,8 +25,12 @@ RUN cargo install cargo-chef --version 0.1.45 FROM cargo-chef AS cargo-chef-plan +WORKDIR /app + COPY . . -RUN cargo chef prepare --recipe-path recipe.json +RUN cargo chef prepare --recipe-path /recipe.json \ + && cd .. \ + && rm -rf /app FROM cargo-chef AS graph-node-build diff --git a/docker/cloudbuild.yaml b/docker/cloudbuild.yaml index 582be4c164f..3af64589ae1 100644 --- a/docker/cloudbuild.yaml +++ b/docker/cloudbuild.yaml @@ -12,6 +12,8 @@ steps: '--cache-ttl=96h', '--cache-run-layers=true', '--cache-repo=gcr.io/$PROJECT_ID/graph-node/cache', + '--skip-unused-stages', + '--snapshotMode=redo', '--target=graph-node', '--destination=gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA', '--dockerfile=docker/Dockerfile', @@ -28,6 +30,7 @@ steps: # Cache is shared between `graph-node` and `graph-node-debug`, because the # build stages are identical. '--cache-repo=gcr.io/$PROJECT_ID/graph-node/cache', + '--snapshotMode=redo', '--target=graph-node-debug', '--destination=gcr.io/$PROJECT_ID/graph-node-debug:$SHORT_SHA', '--dockerfile=docker/Dockerfile', From 54f4555dfec8ff5dadaba75269a2832761d5fc92 Mon Sep 17 00:00:00 2001 From: Filippo Costa Date: Tue, 25 Oct 2022 12:46:11 +0200 Subject: [PATCH 7/8] dockerfile: fix recipe filepath --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 41f638bbd90..658bcea1b86 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -41,7 +41,7 @@ ARG REPO_NAME=unknown ARG BRANCH_NAME=unknown ARG TAG_NAME=unknown -COPY --from=cargo-chef-plan /app/recipe.json cargo-chef-recipe.json +COPY --from=cargo-chef-plan /recipe.json cargo-chef-recipe.json RUN apt-get update \ && apt-get install -y cmake From 1a57e2a295cf1efe0d81e988d4b76296859abd1d Mon Sep 17 00:00:00 2001 From: Filippo Costa Date: Tue, 25 Oct 2022 13:36:59 +0200 Subject: [PATCH 8/8] ci: pull from gcr --- docker/cloudbuild.yaml | 4 ++-- docker/tag.sh | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docker/cloudbuild.yaml b/docker/cloudbuild.yaml index 3af64589ae1..377e8847971 100644 --- a/docker/cloudbuild.yaml +++ b/docker/cloudbuild.yaml @@ -13,7 +13,7 @@ steps: '--cache-run-layers=true', '--cache-repo=gcr.io/$PROJECT_ID/graph-node/cache', '--skip-unused-stages', - '--snapshotMode=redo', + '--snapshot-mode=redo', '--target=graph-node', '--destination=gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA', '--dockerfile=docker/Dockerfile', @@ -30,7 +30,7 @@ steps: # Cache is shared between `graph-node` and `graph-node-debug`, because the # build stages are identical. '--cache-repo=gcr.io/$PROJECT_ID/graph-node/cache', - '--snapshotMode=redo', + '--snapshot-mode=redo', '--target=graph-node-debug', '--destination=gcr.io/$PROJECT_ID/graph-node-debug:$SHORT_SHA', '--dockerfile=docker/Dockerfile', diff --git a/docker/tag.sh b/docker/tag.sh index 032ab54417b..de9360feeea 100644 --- a/docker/tag.sh +++ b/docker/tag.sh @@ -4,10 +4,12 @@ tag_and_push() { tag=$1 + docker pull gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA docker tag gcr.io/$PROJECT_ID/graph-node:$SHORT_SHA \ graphprotocol/graph-node:$tag docker push graphprotocol/graph-node:$tag + docker pull gcr.io/$PROJECT_ID/graph-node-debug:$SHORT_SHA docker tag gcr.io/$PROJECT_ID/graph-node-debug:$SHORT_SHA \ graphprotocol/graph-node-debug:$tag docker push graphprotocol/graph-node-debug:$tag