diff --git a/.github/actions/run-tests/Dockerfile b/.github/actions/run-tests/Dockerfile index 5003f833..78454f82 100644 --- a/.github/actions/run-tests/Dockerfile +++ b/.github/actions/run-tests/Dockerfile @@ -3,7 +3,7 @@ ARG GO_VERSION=1.17.5 ARG XX_VERSION=1.1.0 ARG LIBGIT2_IMG=ghcr.io/fluxcd/golang-with-libgit2 -ARG LIBGIT2_TAG=libgit2-1.1.1-1 +ARG LIBGIT2_TAG=sha-a926b575d640a7f99876f0d1768179f6b586d816 FROM tonistiigi/xx:${XX_VERSION} AS xx FROM ${LIBGIT2_IMG}:${LIBGIT2_TAG} as libgit2 diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index c6245a06..638952d1 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -7,7 +7,8 @@ on: - main jobs: - kind: + + kind-linux-amd64: runs-on: ubuntu-latest steps: - name: Checkout @@ -48,3 +49,35 @@ jobs: MINIO_VER: ${{ 'v6.3.1' }} CREATE_CLUSTER: false run: make e2e + + kind-linux-arm64: + # Hosted on Equinix + # Docs: https://github.com/fluxcd/flux2/tree/main/.github/runners + runs-on: [self-hosted, Linux, ARM64, equinix] + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: 1.16.x + - name: Prepare + id: prep + run: | + echo ::set-output name=CLUSTER::arm64-${GITHUB_SHA:0:7}-$(date +%s) + echo ::set-output name=CONTEXT::kind-arm64-${GITHUB_SHA:0:7}-$(date +%s) + - name: Setup Kubernetes Kind + run: | + kind create cluster --name ${{ steps.prep.outputs.CLUSTER }} --kubeconfig=/tmp/${{ steps.prep.outputs.CLUSTER }} + - name: Run e2e tests + env: + KIND_CLUSTER_NAME: ${{ steps.prep.outputs.CLUSTER }} + KUBECONFIG: /tmp/${{ steps.prep.outputs.CLUSTER }} + CREATE_CLUSTER: false + BUILD_PLATFORM: linux/arm64 + run: make e2e + - name: Cleanup + if: always() + run: | + kind delete cluster --name ${{ steps.prep.outputs.CLUSTER }} + rm /tmp/${{ steps.prep.outputs.CLUSTER }} diff --git a/hack/ci/e2e.sh b/hack/ci/e2e.sh index 296b53b7..775d6f80 100755 --- a/hack/ci/e2e.sh +++ b/hack/ci/e2e.sh @@ -5,11 +5,14 @@ set -eoux pipefail MINIO_VER="${MINIO_VER:-v6.3.1}" CREATE_CLUSTER="${CREATE_CLUSTER:-true}" KIND_CLUSTER_NAME="${KIND_CLUSTER_NAME:-kind}" +LOAD_IMG_INTO_KIND="${LOAD_IMG_INTO_KIND:-true}" +BUILD_PLATFORM="${BUILD_PLATFORM:-linux/amd64}" IMG=test/source-controller TAG=latest -MC_RELEASE=mc.RELEASE.2021-12-10T00-14-28Z -MC_SHA256=01ec33b51ad208634deb8d701d52ac8f6be088e72563a92475ba6e6470653b73 +MC_RELEASE=mc.RELEASE.2021-12-16T23-38-39Z +MC_AMD64_SHA256=d14302bbdaa180a073c1627ff9fbf55243221e33d47e32df61a950f635810978 +MC_ARM64_SHA256=00791995bf8d102e3159e23b3af2f5e6f4c784fafd88c60161dcf3f0169aa217 ROOT_DIR="$(git rev-parse --show-toplevel)" BUILD_DIR="${ROOT_DIR}/build" @@ -35,6 +38,7 @@ function cleanup(){ kubectl -n source-system get all kubectl -n source-system logs deploy/source-controller kubectl -n minio get all + kubectl -n minio logs -l app=minio else echo "All E2E tests passed!" fi @@ -50,8 +54,12 @@ trap cleanup EXIT kubectl wait node "${KIND_CLUSTER_NAME}-control-plane" --for=condition=ready --timeout=2m echo "Build, load image into kind and deploy controller" -make docker-build IMG="${IMG}" TAG="${TAG}" BUILD_PLATFORMS=linux/amd64 BUILD_ARGS=--load -kind load docker-image --name "${KIND_CLUSTER_NAME}" "${IMG}":"${TAG}" +make docker-build IMG="${IMG}" TAG="${TAG}" BUILD_PLATFORMS="${BUILD_PLATFORM}" BUILD_ARGS=--load + +if "${LOAD_IMG_INTO_KIND}"; then + kind load docker-image --name "${KIND_CLUSTER_NAME}" "${IMG}":"${TAG}" +fi + make dev-deploy IMG="${IMG}" TAG="${TAG}" echo "Run smoke tests" @@ -71,20 +79,30 @@ kubectl -n source-system delete -f "${ROOT_DIR}/config/testdata/helmchart-values echo "Setup Minio" kubectl create ns minio helm repo add minio https://helm.min.io/ + +# minio seems to hang on arm64 with 128Mi +# hence the increase to 192Mi helm upgrade --wait -i minio minio/minio \ --version "${MINIO_VER}" \ --namespace minio \ --set accessKey=myaccesskey \ --set secretKey=mysecretkey \ - --set resources.requests.memory=128Mi \ + --set resources.requests.memory=192Mi \ --set persistence.enable=false kubectl -n minio port-forward svc/minio 9000:9000 &>/dev/null & sleep 2 if [ ! -f "${BUILD_DIR}/mc" ]; then + MC_SHA256="${MC_AMD64_SHA256}" + ARCH="amd64" + if [ "${BUILD_PLATFORM}" = "linux/arm64" ]; then + MC_SHA256="${MC_ARM64_SHA256}" + ARCH="arm64" + fi + mkdir -p "${BUILD_DIR}" - curl -o "${BUILD_DIR}/mc" -LO "https://dl.min.io/client/mc/release/linux-amd64/archive/${MC_RELEASE}" + curl -o "${BUILD_DIR}/mc" -LO "https://dl.min.io/client/mc/release/linux-${ARCH}/archive/${MC_RELEASE}" if ! echo "${MC_SHA256} ${BUILD_DIR}/mc" | sha256sum --check; then echo "Checksum failed for mc." rm "${BUILD_DIR}/mc"