Skip to content

feat: Add support for deploying K8s Agent as Helm Addon during cluster deployment #4504

feat: Add support for deploying K8s Agent as Helm Addon during cluster deployment

feat: Add support for deploying K8s Agent as Helm Addon during cluster deployment #4504

Workflow file for this run

# Copyright 2023 Nutanix. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
name: checks
on:
push:
branches:
- main
pull_request:
types:
- opened
- synchronize
- reopened
merge_group:
types:
- checks_requested
permissions:
contents: read
defaults:
run:
shell: bash
jobs:
unit-test:
runs-on: ubuntu-24.04
steps:
- name: Check out code
uses: actions/checkout@v5
- name: Install devbox
uses: jetify-com/devbox-install-action@v0.14.0
with:
enable-cache: true
- name: Export go version and mod cache path
id: export-go-version-and-mod-cache-path
run: |
echo go-version="$(devbox run -- go version | cut -d ' ' -f 3)" >>"${GITHUB_OUTPUT}"
echo mod-cache-path="$(devbox run -- go env GOMODCACHE)" >>"${GITHUB_OUTPUT}"
- name: Go cache
uses: actions/cache@v4
with:
path: |
${{ steps.export-go-version-and-mod-cache-path.outputs.mod-cache-path }}
key: ${{ runner.os }}-${{ steps.export-go-version-and-mod-cache-path.outputs.go-version }}-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-${{ steps.export-go-version-and-mod-cache-path.outputs.go-version }}-
- name: Run unit tests
run: devbox run -- make test
- name: Annotate tests
if: always()
uses: guyarb/golang-test-annotations@v0.8.0
with:
test-results: test.json
e2e-quick-start:
needs:
- "lint-gha"
- "lint-go"
- "lint-test-helm"
- "pre-commit"
- "unit-test"
strategy:
matrix:
config:
- {"provider": "Nutanix", "kubernetesMinor": "v1.31", "kubernetesVersion": "v1.31.9", "baseOS": "rocky-9.5"}
- {"provider": "Nutanix", "kubernetesMinor": "v1.32", "kubernetesVersion": "v1.32.3", "baseOS": "rocky-9.5"}
- {"provider": "Nutanix", "kubernetesMinor": "v1.33", "kubernetesVersion": "v1.33.2", "baseOS": "rocky-9.6"}
- {"provider": "Docker", "kubernetesMinor": "v1.32", "kubernetesVersion": "v1.32.9"}
- {"provider": "Docker", "kubernetesMinor": "v1.33", "kubernetesVersion": "v1.33.5"}
- {"provider": "Docker", "kubernetesMinor": "v1.34", "kubernetesVersion": "v1.34.1"}
# Uncomment below once we have the ability to run e2e tests on other providers from GHA.
# - {"provider": "AWS", "kubernetesMinor": "v1.29", "kubernetesVersion": "v1.29.6"}
fail-fast: false
name: e2e-quick-start (${{ matrix.config.provider }} provider, Kubernetes ${{ matrix.config.kubernetesMinor }})
uses: ./.github/workflows/e2e.yml
with:
focus: Quick start
provider: ${{ matrix.config.provider }}
kubernetes-version: ${{ matrix.config.kubernetesVersion }}
runs-on: ${{ matrix.config.provider == 'Nutanix' && 'self-hosted-ncn-dind' || 'ubuntu-24.04' }}
base-os: ${{ matrix.config.provider == 'Nutanix' && matrix.config.baseOS || '' }}
secrets: inherit
permissions:
contents: read
checks: write
e2e-self-hosted:
needs:
- "lint-gha"
- "lint-go"
- "lint-test-helm"
- "pre-commit"
- "unit-test"
strategy:
matrix:
config:
- {"provider": "Docker", "kubernetesMinor": "v1.32", "kubernetesVersion": "v1.32.9"}
- {"provider": "Docker", "kubernetesMinor": "v1.33", "kubernetesVersion": "v1.33.5"}
- {"provider": "Docker", "kubernetesMinor": "v1.34", "kubernetesVersion": "v1.34.1"}
# Uncomment below once we have the ability to run e2e tests on other providers from GHA.
# - {"provider": "Nutanix", "kubernetesMinor": "v1.29", "kubernetesVersion": "v1.29.6"}
# - {"provider": "AWS", "kubernetesMinor": "v1.29", "kubernetesVersion": "v1.29.6"}
fail-fast: false
name: e2e-self-hosted (${{ matrix.config.provider }} provider, Kubernetes ${{ matrix.config.kubernetesMinor }})
uses: ./.github/workflows/e2e.yml
with:
focus: Self-hosted
provider: ${{ matrix.config.provider }}
kubernetes-version: ${{ matrix.config.kubernetesVersion }}
runs-on: ${{ matrix.config.provider == 'Nutanix' && 'self-hosted-ncn-dind' || 'ubuntu-24.04' }}
secrets: inherit
permissions:
contents: read
checks: write
lint-go:
runs-on: ubuntu-24.04
strategy:
matrix:
module: [api, common, .]
fail-fast: false
permissions:
pull-requests: write
steps:
- name: Check out code
uses: actions/checkout@v5
- name: Install devbox
uses: jetify-com/devbox-install-action@v0.14.0
with:
enable-cache: true
- name: Install custom golangci-lint
run: devbox run -- make hack/tools/golangci-lint-kube-api-linter
- name: golangci-lint
env:
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
${{ github.workspace }}/hack/tools/golangci-lint-kube-api-linter run --config=${{ github.workspace }}/.golangci.yml --output.text.path=stdout ./... | \
devbox run -- reviewdog -f=golangci-lint --fail-level=any ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' && '-reporter=github-check --filter-mode=nofilter' || '-reporter=github-pr-review --filter-mode=added' }}
working-directory: ${{ matrix.module }}
lint-gha:
runs-on: ubuntu-24.04
permissions:
pull-requests: write
steps:
- name: Check out code
uses: actions/checkout@v5
- name: actionlint
uses: reviewdog/action-actionlint@v1
with:
fail_level: error
reporter: github-pr-review
pre-commit:
runs-on: ubuntu-24.04
steps:
- name: Check out code
uses: actions/checkout@v5
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Install devbox
uses: jetify-com/devbox-install-action@v0.14.0
with:
enable-cache: true
- name: Export go version and mod cache path
id: export-go-version-and-mod-cache-path
run: |
echo go-version="$(devbox run -- go version | cut -d ' ' -f 3)" >>"${GITHUB_OUTPUT}"
echo mod-cache-path="$(devbox run -- go env GOMODCACHE)" >>"${GITHUB_OUTPUT}"
- name: Go cache
uses: actions/cache@v4
with:
path: |
${{ steps.export-go-version-and-mod-cache-path.outputs.mod-cache-path }}
key: ${{ runner.os }}-${{ steps.export-go-version-and-mod-cache-path.outputs.go-version }}-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-${{ steps.export-go-version-and-mod-cache-path.outputs.go-version }}-
- name: Set up pre-commit cache
uses: actions/cache@v4
with:
path: ~/.cache/pre-commit
key: pre-commit-3|${{ hashFiles('.pre-commit-config.yaml') }}
- name: Run pre-commit
run: devbox run -- make pre-commit
env:
SKIP: no-commit-to-branch,golangci-lint,actionlint-system
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
lint-test-helm:
runs-on: ubuntu-24.04
env:
KIND_CLUSTER_NAME: chart-testing
KIND_KUBECONFIG: ct-kind-kubeconfig
steps:
- name: Checkout
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Install devbox
uses: jetify-com/devbox-install-action@v0.14.0
with:
enable-cache: true
- name: Run chart-testing (list-changed)
id: list-changed
run: |
changed="$(devbox run -- \
ct list-changed --config charts/ct-config.yaml \
)"
if [[ -n "$changed" ]]; then
echo "changed=true" >> "$GITHUB_OUTPUT"
fi
- if: steps.list-changed.outputs.changed == 'true'
name: Run chart-testing (lint)
run: |
devbox run -- \
ct lint --config charts/ct-config.yaml
- if: steps.list-changed.outputs.changed == 'true'
name: Create kind cluster
run: devbox run -- make kind.create
- if: steps.list-changed.outputs.changed == 'true'
name: Build Docker images
run: devbox run -- make release-snapshot
- if: steps.list-changed.outputs.changed == 'true'
name: Export image tag
id: export-image-tag
run: echo test-image-tag="$(devbox run -- gojq -r .version dist/metadata.json)-$(devbox run -- go env GOARCH)" >> "$GITHUB_OUTPUT"
- if: steps.list-changed.outputs.changed == 'true'
name: Sideload docker image
run: |
devbox run -- \
kind load docker-image \
--name "${KIND_CLUSTER_NAME}" \
"ko.local/cluster-api-runtime-extensions-nutanix:${{ steps.export-image-tag.outputs.test-image-tag }}" \
"ghcr.io/nutanix-cloud-native/cluster-api-runtime-extensions-helm-chart-bundle-initializer:${{ steps.export-image-tag.outputs.test-image-tag }}"
- if: steps.list-changed.outputs.changed == 'true'
name: Setup Cluster API and cert-manager
run: devbox run -- make clusterctl.init
- if: steps.list-changed.outputs.changed == 'true'
name: Run chart-testing (install)
run: |
devbox run -- \
ct install \
--config charts/ct-config.yaml \
--helm-extra-set-args "--set-string image.repository=ko.local/cluster-api-runtime-extensions-nutanix --set-string image.tag=${{ steps.export-image-tag.outputs.test-image-tag }} --set-string helmRepository.images.bundleInitializer.tag=${{ steps.export-image-tag.outputs.test-image-tag }}"
env:
KUBECONFIG: ${{ env.KIND_KUBECONFIG }}
- if: steps.list-changed.outputs.changed == 'true' && always()
name: Delete chart-testing KinD cluster
run: |
devbox run -- make kind.delete