diff --git a/.github/workflows/functional-test-noncloud.yaml b/.github/workflows/functional-test-noncloud.yaml index 63d6fb8fdb8..8916bf84661 100644 --- a/.github/workflows/functional-test-noncloud.yaml +++ b/.github/workflows/functional-test-noncloud.yaml @@ -47,9 +47,9 @@ on: env: # Go version - GOVER: "1.22.2" + GOVER: "1.22.5" # Helm version - HELM_VER: "v3.12.0" + HELM_VER: "v3.15.3" # KinD cluster version KIND_VER: "v0.23.0" # Dapr version @@ -57,16 +57,7 @@ env: # Dapr dashboard version DAPR_DASHBOARD_VER: "0.14.0" # Kubectl version - KUBECTL_VER: "v1.25.0" - - # Container registry for storing container images - CONTAINER_REGISTRY: "radius-registry:5000" - # Container registry for storing Bicep recipe artifacts - BICEP_RECIPE_REGISTRY: "radius-registry:5000" - # Local Docker registry name - LOCAL_REGISTRY_NAME: "radius-registry" - # Local Docker registry port - LOCAL_REGISTRY_PORT: "5000" + KUBECTL_VER: "v1.30.0" # The radius functional test timeout FUNCTIONALTEST_TIMEOUT: 15m @@ -84,6 +75,13 @@ env: # The number of failed tests to report. ISSUE_CREATE_THRESHOLD: 2 + # Local Docker registry name + LOCAL_REGISTRY_NAME: "radius-registry" + # Local Docker registry server + LOCAL_REGISTRY_SERVER: "localhost" + # Local Docker registry port + LOCAL_REGISTRY_PORT: "5000" + jobs: build: name: Build Radius for test @@ -208,37 +206,97 @@ jobs: restore-keys: | ${{ runner.os }}-go- + - name: Create certificates for local registry + run: | + create_openssl_cfg() { + CFG=$( + cat <<'EOF' + [req] + distinguished_name = subject + x509_extensions = x509_ext + prompt = no + + [subject] + CN = localhost + + [x509_ext] + basicConstraints = critical, CA:TRUE + subjectKeyIdentifier = hash + authorityKeyIdentifier = keyid:always, issuer:always + keyUsage = critical, cRLSign, digitalSignature, keyCertSign + nsComment = "OpenSSL Generated Certificate" + subjectAltName = @alt_names + + [alt_names] + DNS.1 = radius-registry + EOF + ) + echo "$CFG" + } + + temp_cert_dir=$(mktemp -d 2>/dev/null || mktemp -d -t 'temp_cert_dir') + # Set the temp_cert_dir as an environment variable + echo "TEMP_CERT_DIR=$temp_cert_dir" >> $GITHUB_ENV + + # Go to the temp_cert_dir + pushd $temp_cert_dir + # Create + mkdir -p certs/${{ env.LOCAL_REGISTRY_SERVER }} + + echo "==== Generate the openssl config" + create_openssl_cfg >req.cnf + + echo "==== Create the self signed certificate certificate and client key files" + openssl req -x509 \ + -nodes \ + -days 365 \ + -newkey rsa:4096 \ + -keyout certs/${{ env.LOCAL_REGISTRY_SERVER }}/client.key \ + -out certs/${{ env.LOCAL_REGISTRY_SERVER }}/client.crt \ + -config req.cnf \ + -sha256 + - name: Create local Docker registry run: | - # This is going to start an insecure registry on localhost:5000 on the host machine. if [ "$(docker inspect -f '{{.State.Running}}' "${{ env.LOCAL_REGISTRY_NAME }}" 2>/dev/null || true)" != 'true' ]; then - docker run \ - -d --restart=always -p "127.0.0.1:${{ env.LOCAL_REGISTRY_PORT }}:5000" --network bridge --name "${{ env.LOCAL_REGISTRY_NAME }}" \ + echo "==== Creating a docker registry" + echo "==== TEMP_CERT_DIR: $TEMP_CERT_DIR" + + ls -l ${{ env.TEMP_CERT_DIR }}/certs/${{ env.LOCAL_REGISTRY_SERVER }} + + docker run -d \ + -p ${{ env.LOCAL_REGISTRY_PORT }}:5000 \ + --restart=always \ + --name ${{ env.LOCAL_REGISTRY_NAME }} \ + -v ${{ env.TEMP_CERT_DIR }}/certs/${{ env.LOCAL_REGISTRY_SERVER }}:/certs \ + -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/client.crt \ + -e REGISTRY_HTTP_TLS_KEY=/certs/client.key \ registry:2 - fi - - name: Add insecure registry to Docker daemon - run: | - # Check if /etc/docker/daemon.json exists - if [ ! -f /etc/docker/daemon.json ]; then - echo "daemon.json doesn't exist. Creating one..." - echo '{}' | sudo tee /etc/docker/daemon.json + # Wait a few seconds for the registry to start + sleep 5 + + # Check if the registry is running and not restarting + if [ "$(docker inspect -f '{{.State.Running}}' "${{ env.LOCAL_REGISTRY_NAME }}" 2>/dev/null || true)" != 'true' ]; then + echo "==== Docker registry failed to start" + echo "==== Inspecting Docker container logs" + docker logs ${{ env.LOCAL_REGISTRY_NAME }} + echo "==== Inspecting Docker container state" + docker inspect ${{ env.LOCAL_REGISTRY_NAME }} + exit 1 + else + echo "==== Docker registry started successfully" + fi + else + # This shouldn't be the case. + echo "==== Docker registry already running" fi - # Add insecure registries to /etc/docker/daemon.json - echo '{"insecure-registries": ["radius-registry:5000"]}' | sudo tee /etc/docker/daemon.json - sudo systemctl daemon-reload - sudo systemctl restart docker - - - name: Add radius-registry to /etc/hosts - run: | - sudo sh -c 'echo "127.0.0.1 radius-registry" >> /etc/hosts' - - name: Build and Push container images run: | make build && make docker-build && make docker-push env: - DOCKER_REGISTRY: ${{ env.CONTAINER_REGISTRY }} + DOCKER_REGISTRY: "${{ env.LOCAL_REGISTRY_SERVER }}:${{ env.LOCAL_REGISTRY_PORT }}" DOCKER_TAG_VERSION: ${{ env.REL_VERSION }} - name: Install rad CLI @@ -261,17 +319,17 @@ jobs: chmod +x ./kind # Create kind cluster with containerd registry config dir enabled - cat <