From 1e16723da43b82a776b64fed0f0e54b1554f94de Mon Sep 17 00:00:00 2001 From: Nolan Brubaker Date: Thu, 25 Feb 2021 19:51:39 -0500 Subject: [PATCH] Combine CRD install verification into 1 job, and update k8s versions (#3448) * Validate CRDs against latest Kubernetes versions Add Kubernetes v1.19 and v1.20 series images, and consolidate the job into a single file to reduce repetition. Signed-off-by: Nolan Brubaker * Ignore job if the changes are only site/design Signed-off-by: Nolan Brubaker * Fix codespell error Signed-off-by: Nolan Brubaker * Cache Velero binary for reuse on workers This will cache the Velero binary based on the PR number and a SHA256 of the generated binary. This way, the runners testing each version of Kubernetes do not need to build it independently. Signed-off-by: Nolan Brubaker * Fix GitHub event access Signed-off-by: Nolan Brubaker * Wrap output path in quotes Signed-off-by: Nolan Brubaker * Move code checkout to build step Signed-off-by: Nolan Brubaker * Also cache go modules Signed-off-by: Nolan Brubaker * Fix syntax issues Signed-off-by: Nolan Brubaker * Download cached binary on each node Signed-off-by: Nolan Brubaker * Use cached go modules on main CI Signed-off-by: Nolan Brubaker --- .github/workflows/crds-verify-k8s-1-16-9.yaml | 20 ----- .github/workflows/crds-verify-k8s-1-17-0.yaml | 20 ----- .github/workflows/crds-verify-k8s-1-18-4.yaml | 20 ----- .github/workflows/crds-verify-kind.yaml | 86 +++++++++++++++++++ .github/workflows/pr-ci-check.yml | 16 ++-- 5 files changed, 97 insertions(+), 65 deletions(-) delete mode 100644 .github/workflows/crds-verify-k8s-1-16-9.yaml delete mode 100644 .github/workflows/crds-verify-k8s-1-17-0.yaml delete mode 100644 .github/workflows/crds-verify-k8s-1-18-4.yaml create mode 100644 .github/workflows/crds-verify-kind.yaml diff --git a/.github/workflows/crds-verify-k8s-1-16-9.yaml b/.github/workflows/crds-verify-k8s-1-16-9.yaml deleted file mode 100644 index 23433c0b5..000000000 --- a/.github/workflows/crds-verify-k8s-1-16-9.yaml +++ /dev/null @@ -1,20 +0,0 @@ -name: "Verify Velero CRDs on k8s 1.16.9" -on: [pull_request] - -jobs: - kind: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@master - - uses: engineerd/setup-kind@v0.5.0 - with: - image: "kindest/node:v1.16.9" - - name: Testing - run: | - kubectl cluster-info - kubectl get pods -n kube-system - kubectl version - echo "current-context:" $(kubectl config current-context) - echo "environment-kubeconfig:" ${KUBECONFIG} - make local - ./_output/bin/linux/amd64/velero install --crds-only --dry-run -oyaml | kubectl apply -f - diff --git a/.github/workflows/crds-verify-k8s-1-17-0.yaml b/.github/workflows/crds-verify-k8s-1-17-0.yaml deleted file mode 100644 index 6e0fb4e52..000000000 --- a/.github/workflows/crds-verify-k8s-1-17-0.yaml +++ /dev/null @@ -1,20 +0,0 @@ -name: "Verify Velero CRDs on k8s 1.17" -on: [pull_request] - -jobs: - kind: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@master - - uses: engineerd/setup-kind@v0.5.0 - with: - image: "kindest/node:v1.17.0" - - name: Testing - run: | - kubectl cluster-info - kubectl get pods -n kube-system - kubectl version - echo "current-context:" $(kubectl config current-context) - echo "environment-kubeconfig:" ${KUBECONFIG} - make local - ./_output/bin/linux/amd64/velero install --crds-only --dry-run -oyaml | kubectl apply -f - diff --git a/.github/workflows/crds-verify-k8s-1-18-4.yaml b/.github/workflows/crds-verify-k8s-1-18-4.yaml deleted file mode 100644 index 8f7eba432..000000000 --- a/.github/workflows/crds-verify-k8s-1-18-4.yaml +++ /dev/null @@ -1,20 +0,0 @@ -name: "Verify Velero CRDs on k8s 1.18.4" -on: [pull_request] - -jobs: - kind: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@master - - uses: engineerd/setup-kind@v0.5.0 - with: - image: "kindest/node:v1.18.4" - - name: Testing - run: | - kubectl cluster-info - kubectl get pods -n kube-system - kubectl version - echo "current-context:" $(kubectl config current-context) - echo "environment-kubeconfig:" ${KUBECONFIG} - make local - ./_output/bin/linux/amd64/velero install --crds-only --dry-run -oyaml | kubectl apply -f - diff --git a/.github/workflows/crds-verify-kind.yaml b/.github/workflows/crds-verify-kind.yaml new file mode 100644 index 000000000..40e3baa9b --- /dev/null +++ b/.github/workflows/crds-verify-kind.yaml @@ -0,0 +1,86 @@ +name: "Verify Velero CRDs across k8s versions" +on: + pull_request: + # Do not run when the change only includes these directories. + paths-ignore: + - "site/**" + - "design/**" + +jobs: + # Build the Velero CLI once for all Kubernetes versions, and cache it so the fan-out workers can get it. + build-cli: + runs-on: ubuntu-latest + steps: + # Look for a CLI that's made for this PR + - name: Fetch built CLI + id: cache + uses: actions/cache@v2 + env: + cache-name: cache-velero-cli + with: + path: ./_output/bin/linux/amd64/velero + # The cache key a combination of the current PR number, and a SHA256 hash of the Velero binary + key: velero-${{ github.event.pull_request.number }}-${{ hashFiles('./_output/bin/linux/amd64/velero') }} + # This key controls the prefixes that we'll look at in the cache to restore from + restore-keys: | + velero-${{ github.event.pull_request.number }}- + + - name: Fetch cached go modules + uses: actions/cache@v2 + if: steps.cache.outputs.cache-hit != 'true' + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + + - name: Check out the code + uses: actions/checkout@v2 + if: steps.cache.outputs.cache-hit != 'true' + + # If no binaries were built for this PR, build it now. + - name: Build Velero CLI + if: steps.cache.outputs.cache-hit != 'true' + run: | + make local + + # Check the common CLI against all kubernetes versions + crd-check: + needs: build-cli + runs-on: ubuntu-latest + strategy: + matrix: + # Latest k8s versions. There's no series-based tag, nor is there a latest tag. + k8s: + - 1.15.12 + - 1.16.15 + - 1.17.17 + - 1.18.15 + - 1.19.7 + - 1.20.2 + # All steps run in parallel unless otherwise specified. + # See https://docs.github.com/en/actions/learn-github-actions/managing-complex-workflows#creating-dependent-jobs + steps: + - name: Fetch built CLI + id: cache + uses: actions/cache@v2 + env: + cache-name: cache-velero-cli + with: + path: ./_output/bin/linux/amd64/velero + # The cache key a combination of the current PR number, and a SHA256 hash of the Velero binary + key: velero-${{ github.event.pull_request.number }}-${{ hashFiles('./_output/bin/linux/amd64/velero') }} + # This key controls the prefixes that we'll look at in the cache to restore from + restore-keys: | + velero-${{ github.event.pull_request.number }}- + - uses: engineerd/setup-kind@v0.5.0 + with: + image: "kindest/node:v${{ matrix.k8s }}" + - name: Install CRDs + run: | + kubectl cluster-info + kubectl get pods -n kube-system + kubectl version + echo "current-context:" $(kubectl config current-context) + echo "environment-kubeconfig:" ${KUBECONFIG} + ./_output/bin/linux/amd64/velero install --crds-only --dry-run -oyaml | kubectl apply -f - diff --git a/.github/workflows/pr-ci-check.yml b/.github/workflows/pr-ci-check.yml index e94d41499..11c46bd65 100644 --- a/.github/workflows/pr-ci-check.yml +++ b/.github/workflows/pr-ci-check.yml @@ -1,14 +1,20 @@ name: Pull Request CI Check on: [pull_request] jobs: - build: name: Run CI runs-on: ubuntu-latest steps: + - name: Check out the code + uses: actions/checkout@v2 - - name: Check out the code - uses: actions/checkout@v2 + - name: Fetch cached go modules + uses: actions/cache@v2 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- - - name: Make ci - run: make ci + - name: Make ci + run: make ci