diff --git a/.github/workflows/e2e-test-kind.yaml b/.github/workflows/e2e-test-kind.yaml index c41c7ff47..c8dbef185 100644 --- a/.github/workflows/e2e-test-kind.yaml +++ b/.github/workflows/e2e-test-kind.yaml @@ -51,7 +51,7 @@ jobs: - name: Build Velero Image if: steps.image-cache.outputs.cache-hit != 'true' run: | - IMAGE=velero VERSION=pr-test make container + SAVE_IMAGE=false IMAGE=velero VERSION=pr-test make container docker save velero:pr-test -o ./velero.tar # Run E2E test against all kubernetes versions on kind run-e2e-test: diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 060dda2bd..da8a979de 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -21,8 +21,14 @@ jobs: go-version: 1.18 id: go - - name: Check out code into the Go module directory - uses: actions/checkout@v2 + - uses: actions/checkout@v3 + + - uses: google-github-actions/setup-gcloud@v0 + with: + version: '285.0.0' + service_account_key: ${{ secrets.GCP_SA_KEY }} + export_default_credentials: true + - run: gcloud info - name: Set up QEMU id: qemu @@ -53,8 +59,29 @@ jobs: - name: Publish container image if: github.repository == 'vmware-tanzu/velero' run: | + # Build and push Velero image to docker registry docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }} - ./hack/docker-push.sh + VERSION=$(./hack/docker-push.sh | grep 'VERSION:' | awk -F: '{print $2}' | xargs) + + # Upload Velero image package to GCS + source hack/ci/build_util.sh + BIN=velero + RESTORE_HELPER_BIN=velero-restore-helper + GCS_BUCKET=velero-builds + VELERO_IMAGE=${BIN}-${VERSION} + VELERO_RESTORE_HELPER_IMAGE=${RESTORE_HELPER_BIN}-${VERSION} + VELERO_IMAGE_FILE=${VELERO_IMAGE}.tar.gz + VELERO_RESTORE_HELPER_IMAGE_FILE=${VELERO_RESTORE_HELPER_IMAGE}.tar.gz + VELERO_IMAGE_BACKUP_FILE=${VELERO_IMAGE}-'build.'${GITHUB_RUN_NUMBER}.tar.gz + VELERO_RESTORE_HELPER_IMAGE_BACKUP_FILE=${VELERO_RESTORE_HELPER_IMAGE}-'build.'${GITHUB_RUN_NUMBER}.tar.gz + + cp ${VELERO_IMAGE_FILE} ${VELERO_IMAGE_BACKUP_FILE} + cp ${VELERO_RESTORE_HELPER_IMAGE_FILE} ${VELERO_RESTORE_HELPER_IMAGE_BACKUP_FILE} + + uploader ${VELERO_IMAGE_FILE} ${GCS_BUCKET} + uploader ${VELERO_RESTORE_HELPER_IMAGE_FILE} ${GCS_BUCKET} + uploader ${VELERO_IMAGE_BACKUP_FILE} ${GCS_BUCKET} + uploader ${VELERO_RESTORE_HELPER_IMAGE_BACKUP_FILE} ${GCS_BUCKET} # Use the JSON key in secret to login gcr.io - uses: 'docker/login-action@v1' diff --git a/Makefile b/Makefile index 4e8e72865..f44fd6adb 100644 --- a/Makefile +++ b/Makefile @@ -64,6 +64,7 @@ VERSION ?= main TAG_LATEST ?= false +SAVE_IMAGE ?= true ifeq ($(TAG_LATEST), true) IMAGE_TAGS ?= $(IMAGE):$(VERSION) $(IMAGE):latest else @@ -209,6 +210,11 @@ endif --build-arg=RESTIC_VERSION=$(RESTIC_VERSION) \ -f $(VELERO_DOCKERFILE) . @echo "container: $(IMAGE):$(VERSION)" +ifeq ($(SAVE_IMAGE), true) + @docker pull $(IMAGE):$(VERSION) + @docker save $(IMAGE):$(VERSION) -o $(BIN)-$(VERSION).tar + @gzip $(BIN)-$(VERSION).tar +endif SKIP_TESTS ?= test: build-dirs diff --git a/hack/ci/build_util.sh b/hack/ci/build_util.sh new file mode 100644 index 000000000..599c84b63 --- /dev/null +++ b/hack/ci/build_util.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -x + +set -e + +function uploader { + gsutil cp $1 gs://$2/$1 + gsutil -D setacl public-read gs://$2/$1 &> /dev/null +}