diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml new file mode 100644 index 000000000..439826661 --- /dev/null +++ b/.github/workflows/ci-cd.yaml @@ -0,0 +1,53 @@ +name: Build and Push Multi-Arch Rollouts Demo Images + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + +env: + IMAGE_NAME: rollouts-demo-ambrosia + REGISTRY_USER: ambrosiaaaaa + REGISTRY: docker.io + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + username: ${{ env.REGISTRY_USER }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Make build script executable + run: chmod +x build-multiarch.sh + + - name: Build and push images + run: | + SHOULD_PUSH=${{ github.event_name != 'pull_request' && 'true' || 'false' }} + IMAGE_PATH="${{ env.REGISTRY_USER }}/${{ env.IMAGE_NAME }}" + ./build-multiarch.sh ${{ env.REGISTRY }} $IMAGE_PATH $SHOULD_PUSH + + - name: Check images (PR only) + if: github.event_name == 'pull_request' + run: | + for TAG in blue green purple yellow; do + docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ env.REGISTRY_USER }}/${{ env.IMAGE_NAME }}:$TAG + done diff --git a/build-multiarch.sh b/build-multiarch.sh new file mode 100755 index 000000000..c9b283de4 --- /dev/null +++ b/build-multiarch.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +REGISTRY=$1 +IMAGE_NAME=$2 +PUSH=$3 # true/false +REGISTRY_USER=$4 + +# Debug +echo "Debug info:" +echo "REGISTRY: ${REGISTRY}" +echo "IMAGE_NAME: ${IMAGE_NAME}" +echo "PUSH: ${PUSH}" + +TAGS=("slow-purple" "bad-purple" "purple" "slow-blue" "bad-blue" "blue" "slow-green" "bad-green" "green" "slow-yellow") + +for TAG in "${TAGS[@]}"; do + # Extract color and params + if [[ $TAG == slow-* ]]; then + COLOR=${TAG#slow-} + LATENCY="5000" + ERROR_RATE="0" + elif [[ $TAG == bad-* ]]; then + COLOR=${TAG#bad-} + LATENCY="0" + ERROR_RATE="50" + else + COLOR=$TAG + LATENCY="0" + ERROR_RATE="0" + fi + + # Debug + FULL_TAG="${REGISTRY}/${IMAGE_NAME}:${TAG}" + echo "Building tag: ${FULL_TAG}" + + # Build and push + docker buildx build \ + --platform linux/amd64,linux/arm64 \ + --build-arg COLOR=$COLOR \ + --build-arg LATENCY=$LATENCY \ + --build-arg ERROR_RATE=$ERROR_RATE \ + -t ${FULL_TAG} \ + ${PUSH:+"--push"} \ + . +done