diff --git a/.github/workflows/ci-docker-hotrod.yml b/.github/workflows/ci-docker-hotrod.yml index 1bba419d9a9..a083953d59a 100644 --- a/.github/workflows/ci-docker-hotrod.yml +++ b/.github/workflows/ci-docker-hotrod.yml @@ -39,13 +39,21 @@ jobs: - name: Export BRANCH variable uses: ./.github/actions/setup-branch - - name: Install tools - run: make install-ci - - uses: docker/setup-qemu-action@5927c834f5b4fdf503fca6f4c7eccda82949e1ee # v3.1.0 + - name: Define BUILD_FLAGS var if running on a Pull Request + run: | + case ${GITHUB_EVENT_NAME} in + pull_request) + echo "BUILD_FLAGS=-l -p linux/amd64" >> ${GITHUB_ENV} + ;; + *) + echo "BUILD_FLAGS=" >> ${GITHUB_ENV} + ;; + esac + - name: Build, test, and publish hotrod image - run: bash scripts/hotrod-integration-test.sh + run: bash scripts/hotrod-integration-test.sh ${{ env.BUILD_FLAGS }} env: DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} QUAY_TOKEN: ${{ secrets.QUAY_TOKEN }} diff --git a/scripts/hotrod-integration-test.sh b/scripts/hotrod-integration-test.sh index 2cb8d71266a..7f56eb7a85c 100755 --- a/scripts/hotrod-integration-test.sh +++ b/scripts/hotrod-integration-test.sh @@ -2,8 +2,33 @@ set -euxf -o pipefail +print_help() { + echo "Usage: $0 [-l] [-D] [-p platforms] [-h]" + echo "-h: Print help" + echo "-l: Enable local-only mode that only pushes images to local registry" + echo "-p: Comma-separated list of platforms to build for (default: all supported)" + exit 1 +} + docker_compose_file="./examples/hotrod/docker-compose.yml" platforms="linux/amd64,linux/s390x,linux/ppc64le,linux/arm64" +current_platform="$(go env GOOS)/$(go env GOARCH)" +LOCAL_FLAG='' + +while getopts "lp:h" opt; do + case "${opt}" in + l) + # in the local-only mode the images will only be pushed to local registry + LOCAL_FLAG='-l' + ;; + p) + platforms=${OPTARG} + ;; + *) + print_help + ;; + esac +done teardown() { echo "Tearing down..." @@ -11,24 +36,26 @@ teardown() { } trap teardown EXIT -make build-examples GOOS=linux GOARCH=amd64 -make build-examples GOOS=linux GOARCH=s390x -make build-examples GOOS=linux GOARCH=ppc64le -make build-examples GOOS=linux GOARCH=arm64 - make prepare-docker-buildx make create-baseimg -# Loop through each platform (separated by commas) +# Build hotrod binary for each target platform (separated by commas) for platform in $(echo "$platforms" | tr ',' ' '); do + # Extract the operating system from the platform string + os=${platform%%/*} #remove everything after the last slash # Extract the architecture from the platform string arch=${platform##*/} # Remove everything before the last slash - make "build-all-in-one" GOOS=linux GOARCH="${arch}" + make build-examples GOOS="${os}" GOARCH="${arch}" done -# Build image locally (-l) for integration test -bash scripts/build-upload-a-docker-image.sh -l -c example-hotrod -d examples/hotrod -p "${platforms}" -bash scripts/build-upload-a-docker-image.sh -l -b -c all-in-one -d cmd/all-in-one -p "${platforms}" -t release +# Build hotrod image locally (-l) for integration test. +# Note: hotrod's Dockerfile is different from main binaries, +# so we do not pass flags like -b and -t. +bash scripts/build-upload-a-docker-image.sh -l -c example-hotrod -d examples/hotrod -p "${current_platform}" + +# Build all-in-one image locally (-l) for integration test +make build-all-in-one +bash scripts/build-upload-a-docker-image.sh -l -b -c all-in-one -d cmd/all-in-one -p "${current_platform}" -t release JAEGER_VERSION=$GITHUB_SHA REGISTRY="localhost:5000/" docker compose -f "$docker_compose_file" up -d @@ -57,9 +84,8 @@ fi JAEGER_QUERY_URL="http://localhost:16686" EXPECTED_SPANS=35 MAX_RETRIES=30 -SLEEP_INTERVAL=10 +SLEEP_INTERVAL=3 -# Function to poll Jaeger for the trace poll_jaeger() { local trace_id=$1 local url="${JAEGER_QUERY_URL}/api/traces/${trace_id}" @@ -67,7 +93,7 @@ poll_jaeger() { curl -s "${url}" | jq '.data[0].spans | length' || echo "0" } -# Polling loop +# Poll Jaeger until trace with desired number of spans is loaded or we timeout. span_count=0 for ((i=1; i<=MAX_RETRIES; i++)); do span_count=$(poll_jaeger "${TRACE_ID}") @@ -86,5 +112,6 @@ if [[ "$span_count" -lt "$EXPECTED_SPANS" ]]; then exit 1 fi -# Ensure the image is published after successful test (no -l flag) -bash scripts/build-upload-a-docker-image.sh -c example-hotrod -d examples/hotrod -p "${platforms}" +# Ensure the image is published after successful test (maybe with -l flag if on a pull request). +# This is where all those multi-platform binaries we built earlier are utilized. +bash scripts/build-upload-a-docker-image.sh ${LOCAL_FLAG} -c example-hotrod -d examples/hotrod -p "${platforms}"