From d91318629bbdee6c24b11a515491db47ffe1dd34 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Mon, 29 Jun 2026 16:22:47 +0100 Subject: [PATCH 01/29] ci: speed up build --- .github/actions/stage2-setup/action.yml | 4 +- .github/workflows/ci-docker-ubuntu.yml | 206 +++++++++--------- .../ci-earthly-next-docker-ubuntu.yml | 75 ++++--- .github/workflows/ci-podman-ubuntu.yml | 140 ++++++------ .github/workflows/ci.yml | 120 ++++++++++ 5 files changed, 334 insertions(+), 211 deletions(-) diff --git a/.github/actions/stage2-setup/action.yml b/.github/actions/stage2-setup/action.yml index a74bac6951..be3f6c21f0 100644 --- a/.github/actions/stage2-setup/action.yml +++ b/.github/actions/stage2-setup/action.yml @@ -62,7 +62,7 @@ runs: if: steps.fork-check.outputs.is_fork == 'true' uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: - name: earthly-build-ubuntu-latest-${{ inputs.BINARY }}${{ inputs.USE_NEXT == 'true' && '-ticktock' || '' }} + name: earthly-build-ubuntu-latest-docker${{ inputs.USE_NEXT == 'true' && '-ticktock' || '' }} path: ./fork-artifacts - name: Load buildkitd image from artifact (fork) if: steps.fork-check.outputs.is_fork == 'true' @@ -168,7 +168,7 @@ runs: if: steps.fork-check.outputs.is_fork != 'true' run: |- echo "Extracting earthly binary from stage1 of build" - export TAG=${GITHUB_SHA}-ubuntu-latest-${{inputs.BINARY}} + export TAG=${GITHUB_SHA}-ubuntu-latest-docker if [ "${{inputs.USE_NEXT}}" = "true" ]; then export TAG="$TAG-ticktock"; fi ${{inputs.SUDO}} ./earthly upgrade ${{inputs.SUDO}} chown -R $USER ~/.earthly # restore non-sudo user ownership diff --git a/.github/workflows/ci-docker-ubuntu.yml b/.github/workflows/ci-docker-ubuntu.yml index bcdca83329..cc19d2f173 100644 --- a/.github/workflows/ci-docker-ubuntu.yml +++ b/.github/workflows/ci-docker-ubuntu.yml @@ -21,23 +21,23 @@ jobs: # permissions: # pull-requests: read # secrets: inherit - build-earthly: - # allow the job to execute even if check-essential-files is skipped - if: ${{ !failure() }} - permissions: - contents: read - packages: write - uses: ./.github/workflows/build-earthly.yml - with: - BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" -# SKIP_JOB: ${{ needs.check-essential-files.outputs.essential-files == 'false' }} - secrets: inherit + docker-bootstrap-test: + name: Bootstrap Check (docker) + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: ./.github/actions/stage2-setup + with: + BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly" + BINARY: "docker" + SUDO: "" + - name: Verify bootstrap works + run: ./build/linux/amd64/earthly bootstrap docker-test-misc: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -46,12 +46,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group1: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -60,12 +60,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group2: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -74,12 +74,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group3: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -88,12 +88,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group4: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -102,12 +102,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group5: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -116,12 +116,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group6: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -130,12 +130,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group7: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -144,12 +144,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group8: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -158,12 +158,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group9: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -172,12 +172,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group10: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -186,12 +186,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group11: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -200,12 +200,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group12: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -214,12 +214,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-slow: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -228,12 +228,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-kind: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -264,7 +264,7 @@ jobs: # secrets: inherit docker-tests-qemu: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -274,12 +274,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-examples-1: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: @@ -288,11 +288,11 @@ jobs: BINARY: "docker" SUDO: "" EXAMPLE_NAME: "+examples-1" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-examples-2: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: @@ -301,11 +301,11 @@ jobs: BINARY: "docker" SUDO: "" EXAMPLE_NAME: "+examples-2" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-examples-3: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: @@ -314,11 +314,11 @@ jobs: BINARY: "docker" SUDO: "" EXAMPLE_NAME: "+examples-3" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-examples-4: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: @@ -327,12 +327,12 @@ jobs: BINARY: "docker" SUDO: "" EXAMPLE_NAME: "+examples-4" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} MORE_SPACE: false secrets: inherit docker-examples-5: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: @@ -341,11 +341,11 @@ jobs: BINARY: "docker" SUDO: "" EXAMPLE_NAME: "+examples-5" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-test-local: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test-local.yml with: @@ -354,11 +354,11 @@ jobs: BINARY: "docker" BINARY_COMPOSE: "\"docker compose\"" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-push-integrations: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-push-integrations.yml with: @@ -366,11 +366,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-bootstrap-integrations: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-bootstrap-integrations.yml with: @@ -378,11 +378,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-repo-auth-tests: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-repo-auth-tests.yml with: @@ -390,11 +390,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-export-test: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-export-test.yml with: @@ -402,11 +402,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-docker-build-integrations: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-docker-build-integrations.yml with: @@ -414,11 +414,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-earthbuild-image-test: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-earthbuild-image-tests.yml with: @@ -426,11 +426,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-misc-test-1: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-misc-tests-1.yml with: @@ -438,11 +438,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-misc-test-2: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-misc-tests-2.yml with: @@ -450,11 +450,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-wait-block-main: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-main.yml with: @@ -462,11 +462,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-wait-block-quick: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: @@ -474,13 +474,13 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-misc" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-wait-block-no-qemu-group1: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: @@ -488,13 +488,13 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-no-qemu-group1" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-wait-block-no-qemu-group2: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: @@ -502,13 +502,13 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-no-qemu-group2" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-wait-block-no-qemu-group3: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: @@ -516,13 +516,13 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-no-qemu-group3" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-wait-block-no-qemu-group4: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: @@ -530,13 +530,13 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-no-qemu-group4" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-wait-block-no-qemu-slow: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: @@ -544,13 +544,13 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-no-qemu-slow" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-wait-block-qemu: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: @@ -558,13 +558,13 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-qemu" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-git-metadata-test: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-git-metadata-test.yml with: @@ -572,11 +572,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit race-test-misc: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-race-test.yml with: @@ -586,12 +586,12 @@ jobs: USE_QEMU: false BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit race-tests-no-qemu-group1: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-race-test.yml with: @@ -601,12 +601,12 @@ jobs: USE_QEMU: false BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit race-tests-no-qemu-group2: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-race-test.yml with: @@ -616,12 +616,12 @@ jobs: USE_QEMU: false BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit race-tests-no-qemu-group3: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-race-test.yml with: @@ -631,12 +631,12 @@ jobs: USE_QEMU: false BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit race-tests-no-qemu-group4: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-race-test.yml with: @@ -646,12 +646,12 @@ jobs: USE_QEMU: false BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit race-tests-no-qemu-slow: - needs: build-earthly + needs: docker-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-race-test.yml with: @@ -661,6 +661,6 @@ jobs: USE_QEMU: false BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit diff --git a/.github/workflows/ci-earthly-next-docker-ubuntu.yml b/.github/workflows/ci-earthly-next-docker-ubuntu.yml index c43ec86416..fa42d560c3 100644 --- a/.github/workflows/ci-earthly-next-docker-ubuntu.yml +++ b/.github/workflows/ci-earthly-next-docker-ubuntu.yml @@ -11,21 +11,24 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - build-earthly-with-next: - permissions: - contents: read - packages: write - uses: ./.github/workflows/build-earthly.yml - with: - BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - secrets: inherit + next-bootstrap-test: + name: Bootstrap Check (next) + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: ./.github/actions/stage2-setup + with: + BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly" + BINARY: "docker" + USE_NEXT: true + SUDO: "" + - name: Verify bootstrap works + run: ./build/linux/amd64/earthly bootstrap earthly-next-docker-tests-no-qemu-group1: - needs: build-earthly-with-next + needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group1" @@ -34,12 +37,12 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.build-earthly-with-next.result != 'success' }} + SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group2: - needs: build-earthly-with-next + needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group2" @@ -48,12 +51,12 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.build-earthly-with-next.result != 'success' }} + SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group3: - needs: build-earthly-with-next + needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group3" @@ -62,12 +65,12 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.build-earthly-with-next.result != 'success' }} + SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group4: - needs: build-earthly-with-next + needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group4" @@ -76,12 +79,12 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.build-earthly-with-next.result != 'success' }} + SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group5: - needs: build-earthly-with-next + needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group5" @@ -90,12 +93,12 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.build-earthly-with-next.result != 'success' }} + SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group6: - needs: build-earthly-with-next + needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group6" @@ -104,12 +107,12 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.build-earthly-with-next.result != 'success' }} + SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group7: - needs: build-earthly-with-next + needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group7" @@ -118,12 +121,12 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.build-earthly-with-next.result != 'success' }} + SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group8: - needs: build-earthly-with-next + needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group8" @@ -132,12 +135,12 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.build-earthly-with-next.result != 'success' }} + SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group9: - needs: build-earthly-with-next + needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group9" @@ -146,12 +149,12 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.build-earthly-with-next.result != 'success' }} + SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group10: - needs: build-earthly-with-next + needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group10" @@ -160,12 +163,12 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.build-earthly-with-next.result != 'success' }} + SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group11: - needs: build-earthly-with-next + needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group11" @@ -174,12 +177,12 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.build-earthly-with-next.result != 'success' }} + SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group12: - needs: build-earthly-with-next + needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group12" @@ -188,6 +191,6 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.build-earthly-with-next.result != 'success' }} + SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit diff --git a/.github/workflows/ci-podman-ubuntu.yml b/.github/workflows/ci-podman-ubuntu.yml index f98619c57e..e8daa96ca0 100644 --- a/.github/workflows/ci-podman-ubuntu.yml +++ b/.github/workflows/ci-podman-ubuntu.yml @@ -22,23 +22,23 @@ jobs: # permissions: # pull-requests: read # secrets: inherit - build-earthly: - # allow the job to execute even if check-essential-files is skipped - if: ${{ !failure() }} - permissions: - contents: read - packages: write - uses: ./.github/workflows/build-earthly.yml - with: - BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.check-essential-files.outputs.essential-files == 'false' }} - secrets: inherit + podman-bootstrap-test: + name: Bootstrap Check (podman) + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: ./.github/actions/stage2-setup + with: + BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly" + BINARY: "podman" + SUDO: "sudo -E" + - name: Verify bootstrap works + run: sudo -E ./build/linux/amd64/earthly bootstrap podman-tests-quick: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -47,11 +47,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group1: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -60,11 +60,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group2: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -73,11 +73,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group3: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -86,11 +86,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group4: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -99,11 +99,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group5: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -112,11 +112,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group6: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -125,11 +125,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group7: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -138,11 +138,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group8: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -151,11 +151,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group9: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -164,11 +164,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group10: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -177,11 +177,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group11: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -190,11 +190,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group12: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -203,11 +203,11 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-slow: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -216,7 +216,7 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit # TODO: Commented out until we have an AWS account to run tests in @@ -234,7 +234,7 @@ jobs: # secrets: inherit podman-tests-qemu: - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: @@ -244,12 +244,12 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-examples-1: # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: @@ -259,12 +259,12 @@ jobs: USE_QEMU: true SUDO: "sudo -E" EXAMPLE_NAME: "+examples-1" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-examples-2: # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: @@ -274,12 +274,12 @@ jobs: USE_QEMU: true SUDO: "sudo -E" EXAMPLE_NAME: "+examples-2" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-examples-3: # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: @@ -289,12 +289,12 @@ jobs: USE_QEMU: true SUDO: "sudo -E" EXAMPLE_NAME: "+examples-3" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-examples-4: # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: @@ -304,13 +304,13 @@ jobs: USE_QEMU: true SUDO: "sudo -E" EXAMPLE_NAME: "+examples-4" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} MORE_SPACE: false secrets: inherit podman-examples-5: # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - needs: build-earthly + needs: podman-bootstrap-test if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: @@ -320,12 +320,12 @@ jobs: USE_QEMU: true SUDO: "sudo -E" EXAMPLE_NAME: "+examples-5" - SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} + SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit # podman-test-local: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: build-earthly +# needs: podman-bootstrap-test # if: ${{ !failure() }} # uses: ./.github/workflows/reusable-test-local.yml # with: @@ -334,13 +334,13 @@ jobs: # BINARY: "podman" # BINARY_COMPOSE: "\"sudo -E podman-compose\"" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} +# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} # secrets: inherit # # TODO: Fix and bring back the below tests # podman-push-integrations: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: build-earthly +# needs: podman-bootstrap-test # if: ${{ !failure() }} # uses: ./.github/workflows/reusable-push-integrations.yml # with: @@ -348,12 +348,12 @@ jobs: # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} +# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} # secrets: inherit # # podman-bootstrap-integrations: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: build-earthly +# needs: podman-bootstrap-test # if: ${{ !failure() }} # uses: ./.github/workflows/reusable-bootstrap-integrations.yml # with: @@ -361,12 +361,12 @@ jobs: # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} +# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} # secrets: inherit # # podman-repo-auth-tests: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: build-earthly +# needs: podman-bootstrap-test # if: ${{ !failure() }} # uses: ./.github/workflows/reusable-repo-auth-tests.yml # with: @@ -374,12 +374,12 @@ jobs: # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} +# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} # secrets: inherit # # podman-export-tests: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: build-earthly +# needs: podman-bootstrap-test # if: ${{ !failure() }} # uses: ./.github/workflows/reusable-export-test.yml # with: @@ -387,12 +387,12 @@ jobs: # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} +# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} # secrets: inherit # # podman-earthbuild-image-tests: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: build-earthly +# needs: podman-bootstrap-test # if: ${{ !failure() }} # uses: ./.github/workflows/reusable-earthbuild-image-tests.yml # with: @@ -400,12 +400,12 @@ jobs: # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} +# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} # secrets: inherit # # podman-misc-tests-1: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: build-earthly +# needs: podman-bootstrap-test # if: ${{ !failure() }} # uses: ./.github/workflows/reusable-misc-tests-1.yml # with: @@ -413,12 +413,12 @@ jobs: # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} +# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} # secrets: inherit # # podman-misc-tests-2: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: build-earthly +# needs: podman-bootstrap-test # if: ${{ !failure() }} # uses: ./.github/workflows/reusable-misc-tests-2.yml # with: @@ -426,5 +426,5 @@ jobs: # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} +# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} # secrets: inherit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 068f1ae5e9..e323f6ab66 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,6 +33,7 @@ jobs: runs-on: ubuntu-24.04 permissions: contents: read + packages: write steps: - uses: earthbuild/actions-setup@5d323543fa1d7b963384b46b2cbaef0bf6d88216 # v2.1.0 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd @@ -43,6 +44,125 @@ jobs: - name: Fuzz tests run: earth --ci +fuzz-test + # --- Build Standard Earthly --- + - name: Login to GitHub Container Registry + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository + run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin + - name: "Put back the git branch into git (EarthBuild uses it for tagging)" + run: | + branch="" + if [ -n "$GITHUB_HEAD_REF" ]; then + branch="$GITHUB_HEAD_REF" + else + branch="${GITHUB_REF##*/}" + fi + git checkout -b "$branch" || true + - name: Configure EarthBuild to use GCR mirror + run: |- + earth config global.buildkit_additional_config "'[registry.\"docker.io\"] + mirrors = [\"mirror.gcr.io\", \"public.ecr.aws\"]'" + - name: Build latest earth using released earth + run: earth --use-inline-cache +for-linux + - name: Set EARTHLY_VERSION_FLAG_OVERRIDES env + run: |- + set -euo pipefail + EARTHLY_VERSION_FLAG_OVERRIDES="$(tr -d '\n' < .earthly_version_flag_overrides)" + echo "EARTHLY_VERSION_FLAG_OVERRIDES=$EARTHLY_VERSION_FLAG_OVERRIDES" >> "$GITHUB_ENV" + - name: Build and push +ci-release using latest earthly build + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository + run: |- + export TAG_SUFFIX="ubuntu-latest-docker" + ./build/linux/amd64/earthly --ci --push --build-arg TAG_SUFFIX +ci-release + - name: Build +ci-release using latest earthly build (fork - no push) + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository + run: |- + export TAG_SUFFIX="ubuntu-latest-docker" + # Build ci-release (builds binary and buildkitd but doesn't push) + ./build/linux/amd64/earthly --ci --output --build-arg TAG_SUFFIX +ci-release + # Explicitly output the buildkitd image to local docker daemon + ./build/linux/amd64/earthly --ci --image --build-arg TAG="${GITHUB_SHA}-${TAG_SUFFIX}" --build-arg DOCKERHUB_BUILDKIT_IMG=buildkitd-staging ./buildkitd+buildkitd + - name: Save artifacts for fork CI + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository + run: |- + set -euo pipefail + export TAG_SUFFIX="ubuntu-latest-docker" + + mkdir -p ./artifacts-standard + + # Build earthly CLI binary with correct installation name (earthly, not earthly-dev) + # This ensures the buildkitd container is named "earthly-buildkitd" as tests expect + ./build/linux/amd64/earthly --ci --artifact \ + +earthly/earthly \ + --DEFAULT_BUILDKITD_IMAGE="ghcr.io/earthbuild/earthbuild:buildkitd-staging-${GITHUB_SHA}-${TAG_SUFFIX}" \ + --VERSION="0.8.18" \ + --DEFAULT_INSTALLATION_NAME=earthly \ + ./artifacts-standard/earthly + + # Save the buildkitd image as tarball + docker save \ + "ghcr.io/earthbuild/earthbuild:buildkitd-staging-${GITHUB_SHA}-${TAG_SUFFIX}" \ + -o ./artifacts-standard/buildkitd-image.tar + + # Save the tag suffix for downstream jobs + echo "${TAG_SUFFIX}" > ./artifacts-standard/tag-suffix.txt + - name: Upload artifacts for fork CI + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: earthly-build-ubuntu-latest-docker + path: ./artifacts-standard/ + retention-days: 1 + + # --- Build Next Earthly --- + - name: Update Buildkit to earthly-next + run: earth +update-buildkit --BUILDKIT_GIT_SHA="$(cat earthly-next)" + - name: Build latest earthly (next) using released earthly + run: earth --use-inline-cache +for-linux + - name: Build and push +ci-release (next) using latest earthly build + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository + run: |- + export TAG_SUFFIX="ubuntu-latest-docker-ticktock" + ./build/linux/amd64/earthly --ci --push --build-arg TAG_SUFFIX +ci-release + - name: Build +ci-release (next) using latest earthly build (fork - no push) + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository + run: |- + export TAG_SUFFIX="ubuntu-latest-docker-ticktock" + # Build ci-release (builds binary and buildkitd but doesn't push) + ./build/linux/amd64/earthly --ci --output --build-arg TAG_SUFFIX +ci-release + # Explicitly output the buildkitd image to local docker daemon + ./build/linux/amd64/earthly --ci --image --build-arg TAG="${GITHUB_SHA}-${TAG_SUFFIX}" --build-arg DOCKERHUB_BUILDKIT_IMG=buildkitd-staging ./buildkitd+buildkitd + - name: Save artifacts (next) for fork CI + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository + run: |- + set -euo pipefail + export TAG_SUFFIX="ubuntu-latest-docker-ticktock" + + mkdir -p ./artifacts-next + + # Build earthly CLI binary with correct installation name (earthly, not earthly-dev) + # This ensures the buildkitd container is named "earthly-buildkitd" as tests expect + ./build/linux/amd64/earthly --ci --artifact \ + +earthly/earthly \ + --DEFAULT_BUILDKITD_IMAGE="ghcr.io/earthbuild/earthbuild:buildkitd-staging-${GITHUB_SHA}-${TAG_SUFFIX}" \ + --VERSION="0.8.18" \ + --DEFAULT_INSTALLATION_NAME=earthly \ + ./artifacts-next/earthly + + # Save the buildkitd image as tarball + docker save \ + "ghcr.io/earthbuild/earthbuild:buildkitd-staging-${GITHUB_SHA}-${TAG_SUFFIX}" \ + -o ./artifacts-next/buildkitd-image.tar + + # Save the tag suffix for downstream jobs + echo "${TAG_SUFFIX}" > ./artifacts-next/tag-suffix.txt + - name: Upload artifacts (next) for fork CI + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: earthly-build-ubuntu-latest-docker-ticktock + path: ./artifacts-next/ + retention-days: 1 + docker: name: Docker needs: fast-check From e2ed3ea1d7cd695fcdcf84c40f8abef2cffd600e Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Mon, 29 Jun 2026 16:33:49 +0100 Subject: [PATCH 02/29] ci: set EARTHLY_BUILDKIT_IMAGE in fast-check to resolve dev image error --- .github/workflows/ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e323f6ab66..e870cd718c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,6 +34,11 @@ jobs: permissions: contents: read packages: write + env: + FORCE_COLOR: 1 + EARTHLY_INSTALL_ID: "earthly-githubactions" + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + EARTHLY_BUILDKIT_IMAGE: ghcr.io/earthbuild/earthbuild:buildkitd-v0.8.17-fix.1 steps: - uses: earthbuild/actions-setup@5d323543fa1d7b963384b46b2cbaef0bf6d88216 # v2.1.0 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd From 678e1c48979d7f18d41a0cce3a64ff109c82336a Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Mon, 29 Jun 2026 16:45:41 +0100 Subject: [PATCH 03/29] ci: rename display names from Bootstrap Check to Bootstrap Test --- .github/workflows/ci-docker-ubuntu.yml | 2 +- .github/workflows/ci-earthly-next-docker-ubuntu.yml | 2 +- .github/workflows/ci-podman-ubuntu.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-docker-ubuntu.yml b/.github/workflows/ci-docker-ubuntu.yml index cc19d2f173..14182c3620 100644 --- a/.github/workflows/ci-docker-ubuntu.yml +++ b/.github/workflows/ci-docker-ubuntu.yml @@ -22,7 +22,7 @@ jobs: # pull-requests: read # secrets: inherit docker-bootstrap-test: - name: Bootstrap Check (docker) + name: Bootstrap Test (docker) runs-on: ubuntu-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ci-earthly-next-docker-ubuntu.yml b/.github/workflows/ci-earthly-next-docker-ubuntu.yml index fa42d560c3..e2a8ad7cf5 100644 --- a/.github/workflows/ci-earthly-next-docker-ubuntu.yml +++ b/.github/workflows/ci-earthly-next-docker-ubuntu.yml @@ -12,7 +12,7 @@ env: jobs: next-bootstrap-test: - name: Bootstrap Check (next) + name: Bootstrap Test (next) runs-on: ubuntu-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ci-podman-ubuntu.yml b/.github/workflows/ci-podman-ubuntu.yml index e8daa96ca0..a3ab09a9bf 100644 --- a/.github/workflows/ci-podman-ubuntu.yml +++ b/.github/workflows/ci-podman-ubuntu.yml @@ -23,7 +23,7 @@ jobs: # pull-requests: read # secrets: inherit podman-bootstrap-test: - name: Bootstrap Check (podman) + name: Bootstrap Test (podman) runs-on: ubuntu-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 71a84a473a0f4c04a5fe7c82726219206148b9f0 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Mon, 29 Jun 2026 17:01:17 +0100 Subject: [PATCH 04/29] ci: rename fast-check job to fast-check-and-build --- .github/workflows/ci.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e870cd718c..98dfe00a2c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,8 +28,8 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - fast-check: - name: Fast Check + fast-check-and-build: + name: Fast Check & Build runs-on: ubuntu-24.04 permissions: contents: read @@ -170,18 +170,18 @@ jobs: docker: name: Docker - needs: fast-check + needs: fast-check-and-build uses: ./.github/workflows/ci-docker-ubuntu.yml secrets: inherit podman: name: Podman - needs: fast-check + needs: fast-check-and-build uses: ./.github/workflows/ci-podman-ubuntu.yml secrets: inherit next: name: Next - needs: fast-check + needs: fast-check-and-build uses: ./.github/workflows/ci-earthly-next-docker-ubuntu.yml secrets: inherit From 28a6aeb5457e4fb725834592e4d443f809dc15d2 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 30 Jun 2026 09:41:09 +0100 Subject: [PATCH 05/29] chore: tidy --- .github/workflows/build-earthly.yml | 1 - .github/workflows/ci-docker-ubuntu.yml | 4 ++-- .github/workflows/ci-earthly-next-docker-ubuntu.yml | 4 ++-- .github/workflows/ci-podman-ubuntu.yml | 4 ++-- .github/workflows/ci.yml | 9 ++++----- 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-earthly.yml b/.github/workflows/build-earthly.yml index b50311991b..39c6f7164d 100644 --- a/.github/workflows/build-earthly.yml +++ b/.github/workflows/build-earthly.yml @@ -44,7 +44,6 @@ jobs: contents: read packages: write env: - FORCE_COLOR: 1 EARTHLY_INSTALL_ID: "earthly-githubactions" # Used in our github action as the token - TODO: look to change it into an input GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ci-docker-ubuntu.yml b/.github/workflows/ci-docker-ubuntu.yml index 14182c3620..ede8e166c7 100644 --- a/.github/workflows/ci-docker-ubuntu.yml +++ b/.github/workflows/ci-docker-ubuntu.yml @@ -22,8 +22,8 @@ jobs: # pull-requests: read # secrets: inherit docker-bootstrap-test: - name: Bootstrap Test (docker) - runs-on: ubuntu-latest + name: Bootstrap Test + runs-on: ubuntu-24.04 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: diff --git a/.github/workflows/ci-earthly-next-docker-ubuntu.yml b/.github/workflows/ci-earthly-next-docker-ubuntu.yml index e2a8ad7cf5..703f6611b1 100644 --- a/.github/workflows/ci-earthly-next-docker-ubuntu.yml +++ b/.github/workflows/ci-earthly-next-docker-ubuntu.yml @@ -12,8 +12,8 @@ env: jobs: next-bootstrap-test: - name: Bootstrap Test (next) - runs-on: ubuntu-latest + name: Bootstrap Test + runs-on: ubuntu-24.04 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: diff --git a/.github/workflows/ci-podman-ubuntu.yml b/.github/workflows/ci-podman-ubuntu.yml index a3ab09a9bf..b12ad27207 100644 --- a/.github/workflows/ci-podman-ubuntu.yml +++ b/.github/workflows/ci-podman-ubuntu.yml @@ -23,8 +23,8 @@ jobs: # pull-requests: read # secrets: inherit podman-bootstrap-test: - name: Bootstrap Test (podman) - runs-on: ubuntu-latest + name: Bootstrap Test + runs-on: ubuntu-24.04 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98dfe00a2c..b61b71b470 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,7 +35,6 @@ jobs: contents: read packages: write env: - FORCE_COLOR: 1 EARTHLY_INSTALL_ID: "earthly-githubactions" GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} EARTHLY_BUILDKIT_IMAGE: ghcr.io/earthbuild/earthbuild:buildkitd-v0.8.17-fix.1 @@ -49,7 +48,7 @@ jobs: - name: Fuzz tests run: earth --ci +fuzz-test - # --- Build Standard Earthly --- + # --- Build Standard EarthBuild --- - name: Login to GitHub Container Registry if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin @@ -118,17 +117,17 @@ jobs: path: ./artifacts-standard/ retention-days: 1 - # --- Build Next Earthly --- + # --- Build Next EarthBuild --- - name: Update Buildkit to earthly-next run: earth +update-buildkit --BUILDKIT_GIT_SHA="$(cat earthly-next)" - name: Build latest earthly (next) using released earthly run: earth --use-inline-cache +for-linux - - name: Build and push +ci-release (next) using latest earthly build + - name: Build and push +ci-release (next) using latest earth build if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository run: |- export TAG_SUFFIX="ubuntu-latest-docker-ticktock" ./build/linux/amd64/earthly --ci --push --build-arg TAG_SUFFIX +ci-release - - name: Build +ci-release (next) using latest earthly build (fork - no push) + - name: Build +ci-release (next) using latest earth build (fork - no push) if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository run: |- export TAG_SUFFIX="ubuntu-latest-docker-ticktock" From f6f1fc049be8e89008a5424ce9113f09c7615592 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 30 Jun 2026 13:59:37 +0100 Subject: [PATCH 06/29] chore: remove redundant suffix -docker --- .github/actions/stage2-setup/action.yml | 4 ++-- .github/workflows/ci-staging-deploy.yml | 20 ++++++++++---------- .github/workflows/ci.yml | 16 ++++++++-------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.github/actions/stage2-setup/action.yml b/.github/actions/stage2-setup/action.yml index be3f6c21f0..c139ec3657 100644 --- a/.github/actions/stage2-setup/action.yml +++ b/.github/actions/stage2-setup/action.yml @@ -62,7 +62,7 @@ runs: if: steps.fork-check.outputs.is_fork == 'true' uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: - name: earthly-build-ubuntu-latest-docker${{ inputs.USE_NEXT == 'true' && '-ticktock' || '' }} + name: earthly-build-ubuntu-latest${{ inputs.USE_NEXT == 'true' && '-ticktock' || '' }} path: ./fork-artifacts - name: Load buildkitd image from artifact (fork) if: steps.fork-check.outputs.is_fork == 'true' @@ -168,7 +168,7 @@ runs: if: steps.fork-check.outputs.is_fork != 'true' run: |- echo "Extracting earthly binary from stage1 of build" - export TAG=${GITHUB_SHA}-ubuntu-latest-docker + export TAG=${GITHUB_SHA}-ubuntu-latest if [ "${{inputs.USE_NEXT}}" = "true" ]; then export TAG="$TAG-ticktock"; fi ${{inputs.SUDO}} ./earthly upgrade ${{inputs.SUDO}} chown -R $USER ~/.earthly # restore non-sudo user ownership diff --git a/.github/workflows/ci-staging-deploy.yml b/.github/workflows/ci-staging-deploy.yml index cfbedfc0d3..0447beb5d5 100644 --- a/.github/workflows/ci-staging-deploy.yml +++ b/.github/workflows/ci-staging-deploy.yml @@ -58,9 +58,9 @@ jobs: fetch-depth: 0 - name: Retrieve earthbuild from build-earthly job run: | - BUILDKITD_IMAGE=docker.io/earthbuild/buildkitd-staging TAG="${GITHUB_SHA}-ubuntu-latest-docker" ./earthly upgrade + BUILDKITD_IMAGE=docker.io/earthbuild/buildkitd-staging TAG="${GITHUB_SHA}-ubuntu-latest" ./earthly upgrade mkdir -p "$(dirname "./build/linux/amd64/earthly")" - mv "${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest-docker" ./build/linux/amd64/earthly + mv "${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest" ./build/linux/amd64/earthly - name: Compute release tag id: compute-tag run: |- @@ -138,9 +138,9 @@ jobs: fetch-depth: 0 - name: Retrieve earthbuild from build-earthly job run: |- - BUILDKITD_IMAGE=docker.io/earthbuild/buildkitd-staging TAG="${GITHUB_SHA}-ubuntu-latest-docker" ./earthly upgrade + BUILDKITD_IMAGE=docker.io/earthbuild/buildkitd-staging TAG="${GITHUB_SHA}-ubuntu-latest" ./earthly upgrade mkdir -p "$(dirname "./build/linux/amd64/earthly")" - mv "${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest-docker" ./build/linux/amd64/earthly + mv "${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest" ./build/linux/amd64/earthly - name: Release to DockerHub (main) env: RELEASE_TAG: ${{ needs.prepare-release.outputs.release_tag }} @@ -189,9 +189,9 @@ jobs: fetch-depth: 0 - name: Retrieve earthbuild from build-earthly job run: |- - BUILDKITD_IMAGE=docker.io/earthbuild/buildkitd-staging TAG="${GITHUB_SHA}-ubuntu-latest-docker" ./earthly upgrade + BUILDKITD_IMAGE=docker.io/earthbuild/buildkitd-staging TAG="${GITHUB_SHA}-ubuntu-latest" ./earthly upgrade mkdir -p "$(dirname "./build/linux/amd64/earthly")" - mv "${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest-docker" ./build/linux/amd64/earthly + mv "${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest" ./build/linux/amd64/earthly - name: Release to DockerHub (ticktock) env: RELEASE_TAG: ${{ needs.prepare-release.outputs.release_tag }} @@ -223,9 +223,9 @@ jobs: fetch-depth: 0 - name: Retrieve earthbuild from build-earthly job run: |- - BUILDKITD_IMAGE=docker.io/earthbuild/buildkitd-staging TAG="${GITHUB_SHA}-ubuntu-latest-docker" ./earthly upgrade + BUILDKITD_IMAGE=docker.io/earthbuild/buildkitd-staging TAG="${GITHUB_SHA}-ubuntu-latest" ./earthly upgrade mkdir -p "$(dirname "./build/linux/amd64/earthly")" - mv "${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest-docker" ./build/linux/amd64/earthly + mv "${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest" ./build/linux/amd64/earthly - name: Copy buildkitd from GHCR to DockerHub env: DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} @@ -268,9 +268,9 @@ jobs: fetch-depth: 0 - name: Retrieve earthbuild from build-earthly job run: |- - BUILDKITD_IMAGE=docker.io/earthbuild/buildkitd-staging TAG="${GITHUB_SHA}-ubuntu-latest-docker" ./earthly upgrade + BUILDKITD_IMAGE=docker.io/earthbuild/buildkitd-staging TAG="${GITHUB_SHA}-ubuntu-latest" ./earthly upgrade mkdir -p "$(dirname "./build/linux/amd64/earthly")" - mv "${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest-docker" ./build/linux/amd64/earthly + mv "${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest" ./build/linux/amd64/earthly # This step creates earthly binaries for all platforms plus signature files for them under # the ./release/release/ dir - name: Create Release Binaries diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b61b71b470..b26ebe3e16 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,12 +75,12 @@ jobs: - name: Build and push +ci-release using latest earthly build if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository run: |- - export TAG_SUFFIX="ubuntu-latest-docker" + export TAG_SUFFIX="ubuntu-latest" ./build/linux/amd64/earthly --ci --push --build-arg TAG_SUFFIX +ci-release - name: Build +ci-release using latest earthly build (fork - no push) if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository run: |- - export TAG_SUFFIX="ubuntu-latest-docker" + export TAG_SUFFIX="ubuntu-latest" # Build ci-release (builds binary and buildkitd but doesn't push) ./build/linux/amd64/earthly --ci --output --build-arg TAG_SUFFIX +ci-release # Explicitly output the buildkitd image to local docker daemon @@ -89,7 +89,7 @@ jobs: if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository run: |- set -euo pipefail - export TAG_SUFFIX="ubuntu-latest-docker" + export TAG_SUFFIX="ubuntu-latest" mkdir -p ./artifacts-standard @@ -113,7 +113,7 @@ jobs: if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: earthly-build-ubuntu-latest-docker + name: earthly-build-ubuntu-latest path: ./artifacts-standard/ retention-days: 1 @@ -125,12 +125,12 @@ jobs: - name: Build and push +ci-release (next) using latest earth build if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository run: |- - export TAG_SUFFIX="ubuntu-latest-docker-ticktock" + export TAG_SUFFIX="ubuntu-latest-ticktock" ./build/linux/amd64/earthly --ci --push --build-arg TAG_SUFFIX +ci-release - name: Build +ci-release (next) using latest earth build (fork - no push) if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository run: |- - export TAG_SUFFIX="ubuntu-latest-docker-ticktock" + export TAG_SUFFIX="ubuntu-latest-ticktock" # Build ci-release (builds binary and buildkitd but doesn't push) ./build/linux/amd64/earthly --ci --output --build-arg TAG_SUFFIX +ci-release # Explicitly output the buildkitd image to local docker daemon @@ -139,7 +139,7 @@ jobs: if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository run: |- set -euo pipefail - export TAG_SUFFIX="ubuntu-latest-docker-ticktock" + export TAG_SUFFIX="ubuntu-latest-ticktock" mkdir -p ./artifacts-next @@ -163,7 +163,7 @@ jobs: if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: earthly-build-ubuntu-latest-docker-ticktock + name: earthly-build-ubuntu-latest-ticktock path: ./artifacts-next/ retention-days: 1 From 965c957fee29f8512ff1db4c86ed36b827940eb6 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Sat, 25 Jul 2026 10:42:24 +0100 Subject: [PATCH 07/29] fix: rename BUILT_EARTHLY_PATH to BUILT_EARTH_PATH --- .github/workflows/ci-docker-ubuntu.yml | 2 +- .github/workflows/ci-earthly-next-docker-ubuntu.yml | 2 +- .github/workflows/ci-podman-ubuntu.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-docker-ubuntu.yml b/.github/workflows/ci-docker-ubuntu.yml index 46403c0d1e..ba22efe54b 100644 --- a/.github/workflows/ci-docker-ubuntu.yml +++ b/.github/workflows/ci-docker-ubuntu.yml @@ -30,7 +30,7 @@ jobs: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: ./.github/actions/stage2-setup with: - BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly" + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" BINARY: "docker" SUDO: "" - name: Verify bootstrap works diff --git a/.github/workflows/ci-earthly-next-docker-ubuntu.yml b/.github/workflows/ci-earthly-next-docker-ubuntu.yml index 8501dece6e..971ba172e4 100644 --- a/.github/workflows/ci-earthly-next-docker-ubuntu.yml +++ b/.github/workflows/ci-earthly-next-docker-ubuntu.yml @@ -20,7 +20,7 @@ jobs: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: ./.github/actions/stage2-setup with: - BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly" + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" BINARY: "docker" USE_NEXT: true SUDO: "" diff --git a/.github/workflows/ci-podman-ubuntu.yml b/.github/workflows/ci-podman-ubuntu.yml index b059fdf462..cf3e47042e 100644 --- a/.github/workflows/ci-podman-ubuntu.yml +++ b/.github/workflows/ci-podman-ubuntu.yml @@ -31,7 +31,7 @@ jobs: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: ./.github/actions/stage2-setup with: - BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly" + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" BINARY: "podman" SUDO: "sudo -E" - name: Verify bootstrap works From cc8797a253448a5ffff3d913b36793e8cdc83e1c Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 11:57:17 +0100 Subject: [PATCH 08/29] chore: tidy --- .github/workflows/build-earthly.yml | 8 ++++---- .github/workflows/ci.yml | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-earthly.yml b/.github/workflows/build-earthly.yml index dcf0d451d6..55d6c475c1 100644 --- a/.github/workflows/build-earthly.yml +++ b/.github/workflows/build-earthly.yml @@ -108,13 +108,13 @@ jobs: - name: Build and push +ci-release using latest earthly build if: github.event_name == 'push' || github.event_name == 'merge_group' || github.event.pull_request.head.repo.full_name == github.repository run: |- - export TAG_SUFFIX="${{inputs.RUNS_ON}}-${{inputs.BINARY}}" + export TAG_SUFFIX="${{inputs.RUNS_ON}}" if [ "${{inputs.USE_NEXT}}" = "true" ]; then export TAG_SUFFIX="$TAG_SUFFIX-ticktock"; fi ${{inputs.SUDO}} ./build/linux/amd64/earthly --ci --push --build-arg TAG_SUFFIX +ci-release - name: Build +ci-release using latest earthly build (fork - no push) if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository run: |- - export TAG_SUFFIX="${{inputs.RUNS_ON}}-${{inputs.BINARY}}" + export TAG_SUFFIX="${{inputs.RUNS_ON}}" if [ "${{inputs.USE_NEXT}}" = "true" ]; then export TAG_SUFFIX="$TAG_SUFFIX-ticktock"; fi # Build ci-release (builds binary and buildkitd but doesn't push) ${{inputs.SUDO}} ./build/linux/amd64/earthly --ci --output --build-arg TAG_SUFFIX +ci-release @@ -124,7 +124,7 @@ jobs: if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository run: |- set -euo pipefail - export TAG_SUFFIX="${{inputs.RUNS_ON}}-${{inputs.BINARY}}" + export TAG_SUFFIX="${{inputs.RUNS_ON}}" if [ "${{inputs.USE_NEXT}}" = "true" ]; then export TAG_SUFFIX="$TAG_SUFFIX-ticktock"; fi mkdir -p ./artifacts @@ -149,7 +149,7 @@ jobs: if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: earthly-build-${{inputs.RUNS_ON}}-${{inputs.BINARY}}${{ inputs.USE_NEXT && '-ticktock' || '' }} + name: earthly-build-${{inputs.RUNS_ON}}${{ inputs.USE_NEXT && '-ticktock' || '' }} path: ./artifacts/ retention-days: 1 - name: Buildkit logs (runs on failure) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eaa969de19..b07289bd8b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,7 +56,7 @@ jobs: # --- Build Standard EarthBuild --- - name: Login to GitHub Container Registry - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository + if: github.event_name == 'push' || github.event_name == 'merge_group' || github.event.pull_request.head.repo.full_name == github.repository run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin - name: "Put back the git branch into git (EarthBuild uses it for tagging)" run: | @@ -79,7 +79,7 @@ jobs: EARTHLY_VERSION_FLAG_OVERRIDES="$(tr -d '\n' < .earthly_version_flag_overrides)" echo "EARTHLY_VERSION_FLAG_OVERRIDES=$EARTHLY_VERSION_FLAG_OVERRIDES" >> "$GITHUB_ENV" - name: Build and push +ci-release using latest earthly build - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository + if: github.event_name == 'push' || github.event_name == 'merge_group' || github.event.pull_request.head.repo.full_name == github.repository run: |- export TAG_SUFFIX="ubuntu-latest" ./build/linux/amd64/earthly --ci --push --build-arg TAG_SUFFIX +ci-release @@ -129,7 +129,7 @@ jobs: - name: Build latest earthly (next) using released earthly run: earth --use-inline-cache +for-linux - name: Build and push +ci-release (next) using latest earth build - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository + if: github.event_name == 'push' || github.event_name == 'merge_group' || github.event.pull_request.head.repo.full_name == github.repository run: |- export TAG_SUFFIX="ubuntu-latest-ticktock" ./build/linux/amd64/earthly --ci --push --build-arg TAG_SUFFIX +ci-release From 1ebb14cc06d08968e55acbfee76a3e86d8ffc286 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 12:07:09 +0100 Subject: [PATCH 09/29] refactor: remove bootstrap test --- .github/workflows/ci-docker-ubuntu.yml | 149 ------------------ .../ci-earthly-next-docker-ubuntu.yml | 40 ----- .github/workflows/ci-podman-ubuntu.yml | 131 ++------------- 3 files changed, 16 insertions(+), 304 deletions(-) diff --git a/.github/workflows/ci-docker-ubuntu.yml b/.github/workflows/ci-docker-ubuntu.yml index ba22efe54b..f8cd681cd3 100644 --- a/.github/workflows/ci-docker-ubuntu.yml +++ b/.github/workflows/ci-docker-ubuntu.yml @@ -21,24 +21,7 @@ jobs: # permissions: # pull-requests: read # secrets: inherit - docker-bootstrap-test: - name: Bootstrap Test - runs-on: ubuntu-24.04 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/actions/stage2-setup - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - BINARY: "docker" - SUDO: "" - - name: Verify bootstrap works - run: ./build/linux/amd64/earthly bootstrap - docker-test-misc: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-misc" @@ -46,13 +29,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group1: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group1" @@ -60,13 +40,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group2: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group2" @@ -74,13 +51,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group3: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group3" @@ -88,13 +62,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group4: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group4" @@ -102,13 +73,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group5: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group5" @@ -116,13 +84,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group6: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group6" @@ -130,13 +95,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group7: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group7" @@ -144,13 +106,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group8: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group8" @@ -158,13 +117,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group9: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group9" @@ -172,13 +128,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group10: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group10" @@ -186,13 +139,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group11: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group11" @@ -200,13 +150,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-group12: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group12" @@ -214,13 +161,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-slow: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-slow" @@ -228,13 +172,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-tests-no-qemu-kind: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-kind" @@ -264,8 +205,6 @@ jobs: # secrets: inherit docker-tests-qemu: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-qemu" @@ -274,13 +213,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-examples-1: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -288,12 +224,9 @@ jobs: BINARY: "docker" SUDO: "" EXAMPLE_NAME: "+examples-1" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-examples-2: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -301,12 +234,9 @@ jobs: BINARY: "docker" SUDO: "" EXAMPLE_NAME: "+examples-2" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-examples-3: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -314,12 +244,9 @@ jobs: BINARY: "docker" SUDO: "" EXAMPLE_NAME: "+examples-3" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-examples-4: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -327,13 +254,10 @@ jobs: BINARY: "docker" SUDO: "" EXAMPLE_NAME: "+examples-4" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} MORE_SPACE: false secrets: inherit docker-examples-5: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -341,12 +265,9 @@ jobs: BINARY: "docker" SUDO: "" EXAMPLE_NAME: "+examples-5" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-test-local: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test-local.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -354,230 +275,176 @@ jobs: BINARY: "docker" BINARY_COMPOSE: "\"docker compose\"" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-push-integrations: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-push-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-bootstrap-integrations: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-bootstrap-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-repo-auth-tests: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-repo-auth-tests.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-export-test: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-export-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-docker-build-integrations: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-docker-build-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-earthbuild-image-test: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-earthbuild-image-tests.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-misc-test-1: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-misc-tests-1.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-misc-test-2: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-misc-tests-2.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-wait-block-main: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-main.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit docker-wait-block-quick: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-misc" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-wait-block-no-qemu-group1: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-no-qemu-group1" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-wait-block-no-qemu-group2: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-no-qemu-group2" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-wait-block-no-qemu-group3: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-no-qemu-group3" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-wait-block-no-qemu-group4: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-no-qemu-group4" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-wait-block-no-qemu-slow: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-no-qemu-slow" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-wait-block-qemu: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-wait-block-target.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} TARGET_NAME: "+test-qemu" # EXTRA_ARGS: "--auto-skip" secrets: inherit docker-git-metadata-test: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-git-metadata-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} secrets: inherit race-test-misc: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-race-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -586,13 +453,10 @@ jobs: USE_QEMU: false BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit race-tests-no-qemu-group1: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-race-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -601,13 +465,10 @@ jobs: USE_QEMU: false BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit race-tests-no-qemu-group2: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-race-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -616,13 +477,10 @@ jobs: USE_QEMU: false BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit race-tests-no-qemu-group3: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-race-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -631,13 +489,10 @@ jobs: USE_QEMU: false BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit race-tests-no-qemu-group4: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-race-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -646,13 +501,10 @@ jobs: USE_QEMU: false BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit race-tests-no-qemu-slow: - needs: docker-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-race-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -661,6 +513,5 @@ jobs: USE_QEMU: false BINARY: "docker" SUDO: "" - SKIP_JOB: ${{ needs.docker-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit diff --git a/.github/workflows/ci-earthly-next-docker-ubuntu.yml b/.github/workflows/ci-earthly-next-docker-ubuntu.yml index 971ba172e4..1a6011ffd9 100644 --- a/.github/workflows/ci-earthly-next-docker-ubuntu.yml +++ b/.github/workflows/ci-earthly-next-docker-ubuntu.yml @@ -11,24 +11,7 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - next-bootstrap-test: - name: Bootstrap Test - runs-on: ubuntu-24.04 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/actions/stage2-setup - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - - name: Verify bootstrap works - run: ./build/linux/amd64/earthly bootstrap - earthly-next-docker-tests-no-qemu-group1: - needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group1" @@ -37,12 +20,10 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group2: - needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group2" @@ -51,12 +32,10 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group3: - needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group3" @@ -65,12 +44,10 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group4: - needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group4" @@ -79,12 +56,10 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group5: - needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group5" @@ -93,12 +68,10 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group6: - needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group6" @@ -107,12 +80,10 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group7: - needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group7" @@ -121,12 +92,10 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group8: - needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group8" @@ -135,12 +104,10 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group9: - needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group9" @@ -149,12 +116,10 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group10: - needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group10" @@ -163,12 +128,10 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group11: - needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group11" @@ -177,12 +140,10 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit earthly-next-docker-tests-no-qemu-group12: - needs: next-bootstrap-test uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group12" @@ -191,6 +152,5 @@ jobs: BINARY: "docker" USE_NEXT: true SUDO: "" - SKIP_JOB: ${{ needs.next-bootstrap-test.result != 'success' }} # EXTRA_ARGS: "--auto-skip" secrets: inherit diff --git a/.github/workflows/ci-podman-ubuntu.yml b/.github/workflows/ci-podman-ubuntu.yml index cf3e47042e..61d5775521 100644 --- a/.github/workflows/ci-podman-ubuntu.yml +++ b/.github/workflows/ci-podman-ubuntu.yml @@ -22,24 +22,7 @@ jobs: # permissions: # pull-requests: read # secrets: inherit - podman-bootstrap-test: - name: Bootstrap Test - runs-on: ubuntu-24.04 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/actions/stage2-setup - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - BINARY: "podman" - SUDO: "sudo -E" - - name: Verify bootstrap works - run: sudo -E ./build/linux/amd64/earthly bootstrap - podman-tests-quick: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-misc" @@ -47,12 +30,9 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group1: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group1" @@ -60,12 +40,9 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group2: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group2" @@ -73,12 +50,9 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group3: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group3" @@ -86,12 +60,9 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group4: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group4" @@ -99,12 +70,9 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group5: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group5" @@ -112,12 +80,9 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group6: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group6" @@ -125,12 +90,9 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group7: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group7" @@ -138,12 +100,9 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group8: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group8" @@ -151,12 +110,9 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group9: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group9" @@ -164,12 +120,9 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group10: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group10" @@ -177,12 +130,9 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group11: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group11" @@ -190,12 +140,9 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-group12: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-group12" @@ -203,12 +150,9 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-tests-no-qemu-slow: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-no-qemu-slow" @@ -216,7 +160,6 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit # TODO: Commented out until we have an AWS account to run tests in @@ -234,8 +177,6 @@ jobs: # secrets: inherit podman-tests-qemu: - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-qemu" @@ -244,13 +185,10 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-examples-1: # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -259,13 +197,10 @@ jobs: USE_QEMU: true SUDO: "sudo -E" EXAMPLE_NAME: "+examples-1" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-examples-2: # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -274,13 +209,10 @@ jobs: USE_QEMU: true SUDO: "sudo -E" EXAMPLE_NAME: "+examples-2" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-examples-3: # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -289,13 +221,10 @@ jobs: USE_QEMU: true SUDO: "sudo -E" EXAMPLE_NAME: "+examples-3" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit podman-examples-4: # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -304,14 +233,11 @@ jobs: USE_QEMU: true SUDO: "sudo -E" EXAMPLE_NAME: "+examples-4" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} MORE_SPACE: false secrets: inherit podman-examples-5: # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - needs: podman-bootstrap-test - if: ${{ !failure() }} uses: ./.github/workflows/reusable-example.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -320,111 +246,86 @@ jobs: USE_QEMU: true SUDO: "sudo -E" EXAMPLE_NAME: "+examples-5" - SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} secrets: inherit # podman-test-local: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: podman-bootstrap-test -# if: ${{ !failure() }} -# uses: ./.github/workflows/reusable-test-local.yml +### uses: ./.github/workflows/reusable-test-local.yml # with: # BUILT_EARTH_PATH: "./build/linux/amd64/earthly" # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # BINARY_COMPOSE: "\"sudo -E podman-compose\"" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} -# secrets: inherit +## secrets: inherit # # TODO: Fix and bring back the below tests # podman-push-integrations: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: podman-bootstrap-test -# if: ${{ !failure() }} -# uses: ./.github/workflows/reusable-push-integrations.yml +### uses: ./.github/workflows/reusable-push-integrations.yml # with: # BUILT_EARTH_PATH: "./build/linux/amd64/earthly" # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} -# secrets: inherit +## secrets: inherit # # podman-bootstrap-integrations: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: podman-bootstrap-test -# if: ${{ !failure() }} -# uses: ./.github/workflows/reusable-bootstrap-integrations.yml +### uses: ./.github/workflows/reusable-bootstrap-integrations.yml # with: # BUILT_EARTH_PATH: "./build/linux/amd64/earthly" # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} -# secrets: inherit +## secrets: inherit # # podman-repo-auth-tests: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: podman-bootstrap-test -# if: ${{ !failure() }} -# uses: ./.github/workflows/reusable-repo-auth-tests.yml +### uses: ./.github/workflows/reusable-repo-auth-tests.yml # with: # BUILT_EARTH_PATH: "./build/linux/amd64/earthly" # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} -# secrets: inherit +## secrets: inherit # # podman-export-tests: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: podman-bootstrap-test -# if: ${{ !failure() }} -# uses: ./.github/workflows/reusable-export-test.yml +### uses: ./.github/workflows/reusable-export-test.yml # with: # BUILT_EARTH_PATH: "./build/linux/amd64/earthly" # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} -# secrets: inherit +## secrets: inherit # # podman-earthbuild-image-tests: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: podman-bootstrap-test -# if: ${{ !failure() }} -# uses: ./.github/workflows/reusable-earthbuild-image-tests.yml +### uses: ./.github/workflows/reusable-earthbuild-image-tests.yml # with: # BUILT_EARTH_PATH: "./build/linux/amd64/earthly" # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} -# secrets: inherit +## secrets: inherit # # podman-misc-tests-1: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: podman-bootstrap-test -# if: ${{ !failure() }} -# uses: ./.github/workflows/reusable-misc-tests-1.yml +### uses: ./.github/workflows/reusable-misc-tests-1.yml # with: # BUILT_EARTH_PATH: "./build/linux/amd64/earthly" # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} -# secrets: inherit +## secrets: inherit # # podman-misc-tests-2: # # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -# needs: podman-bootstrap-test -# if: ${{ !failure() }} -# uses: ./.github/workflows/reusable-misc-tests-2.yml +### uses: ./.github/workflows/reusable-misc-tests-2.yml # with: # BUILT_EARTH_PATH: "./build/linux/amd64/earthly" # RUNS_ON: "ubuntu-latest" # BINARY: "podman" # SUDO: "sudo -E" -# SKIP_JOB: ${{ needs.podman-bootstrap-test.result != 'success' }} -# secrets: inherit +## secrets: inherit From 430d2374c3bc9edd25ec07189e3553af3efeade6 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 12:36:40 +0100 Subject: [PATCH 10/29] refactor: matrix tests --- .github/workflows/ci-docker-ubuntu.yml | 417 +++--------------- .../ci-earthly-next-docker-ubuntu.yml | 153 +------ .github/workflows/ci-podman-ubuntu.yml | 322 ++------------ 3 files changed, 105 insertions(+), 787 deletions(-) diff --git a/.github/workflows/ci-docker-ubuntu.yml b/.github/workflows/ci-docker-ubuntu.yml index f8cd681cd3..3e8c27d2c0 100644 --- a/.github/workflows/ci-docker-ubuntu.yml +++ b/.github/workflows/ci-docker-ubuntu.yml @@ -11,199 +11,34 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - # this job will output a boolean value to check whether files that require these tests to run - # since all jobs depend on `build-earthly` job, conditionally running it will either cause all jobs to run or skip, - # depending on the output value of this job -# check-essential-files: -# # only run on pull request since push to main is already checking files with paths-ignore -# if: ${{ github.event_name == 'pull_request' }} -# uses: ./.github/workflows/reusable-find-pr-changes.yaml -# permissions: -# pull-requests: read -# secrets: inherit - docker-test-misc: + docker-tests: + strategy: + fail-fast: false + matrix: + target: + - "+test-misc" + - "+test-no-qemu-group1" + - "+test-no-qemu-group2" + - "+test-no-qemu-group3" + - "+test-no-qemu-group4" + - "+test-no-qemu-group5" + - "+test-no-qemu-group6" + - "+test-no-qemu-group7" + - "+test-no-qemu-group8" + - "+test-no-qemu-group9" + - "+test-no-qemu-group10" + - "+test-no-qemu-group11" + - "+test-no-qemu-group12" + - "+test-no-qemu-slow" uses: ./.github/workflows/reusable-test.yml with: - TEST_TARGET: "+test-misc" + TEST_TARGET: ${{ matrix.target }} BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - # EXTRA_ARGS: "--auto-skip" secrets: inherit - docker-tests-no-qemu-group1: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group1" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-tests-no-qemu-group2: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group2" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-tests-no-qemu-group3: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group3" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-tests-no-qemu-group4: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group4" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-tests-no-qemu-group5: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group5" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-tests-no-qemu-group6: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group6" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-tests-no-qemu-group7: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group7" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-tests-no-qemu-group8: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group8" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-tests-no-qemu-group9: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group9" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-tests-no-qemu-group10: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group10" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-tests-no-qemu-group11: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group11" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-tests-no-qemu-group12: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group12" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-tests-no-qemu-slow: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-slow" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-tests-no-qemu-kind: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-kind" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-24.04" - BINARY: "docker" - SUDO: "" - # Temporarily disabled due to failures on the ubuntu-24.04 runner. See EarthBuild/earthbuild#122. - # SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} - SKIP_JOB: true - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - # TODO: The oidc tests are ignored until we have an AWS account to test with. - # docker-test-oidc-command: - # if: ${{ !failure() && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) }} - # needs: build-earthly - # uses: ./.github/workflows/reusable-test.yml - # with: - # TEST_TARGET: "./tests/oidc+test" - # BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - # RUNS_ON: "ubuntu-latest" - # BINARY: "docker" - # SUDO: "" - # SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} - # # EXTRA_ARGS: "--auto-skip" - # secrets: inherit - docker-tests-qemu: uses: ./.github/workflows/reusable-test.yml with: @@ -213,58 +48,25 @@ jobs: RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - # EXTRA_ARGS: "--auto-skip" secrets: inherit - docker-examples-1: + docker-examples: + strategy: + fail-fast: false + matrix: + example: + - "+examples-1" + - "+examples-2" + - "+examples-3" + - "+examples-4" + - "+examples-5" uses: ./.github/workflows/reusable-example.yml with: + EXAMPLE_NAME: ${{ matrix.example }} BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - EXAMPLE_NAME: "+examples-1" - secrets: inherit - - docker-examples-2: - uses: ./.github/workflows/reusable-example.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - EXAMPLE_NAME: "+examples-2" - secrets: inherit - - docker-examples-3: - uses: ./.github/workflows/reusable-example.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - EXAMPLE_NAME: "+examples-3" - secrets: inherit - - docker-examples-4: - uses: ./.github/workflows/reusable-example.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - EXAMPLE_NAME: "+examples-4" - MORE_SPACE: false - secrets: inherit - - docker-examples-5: - uses: ./.github/workflows/reusable-example.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - EXAMPLE_NAME: "+examples-5" secrets: inherit docker-test-local: @@ -358,81 +160,25 @@ jobs: SUDO: "" secrets: inherit - docker-wait-block-quick: - uses: ./.github/workflows/reusable-wait-block-target.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - TARGET_NAME: "+test-misc" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-wait-block-no-qemu-group1: - uses: ./.github/workflows/reusable-wait-block-target.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - TARGET_NAME: "+test-no-qemu-group1" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-wait-block-no-qemu-group2: - uses: ./.github/workflows/reusable-wait-block-target.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - TARGET_NAME: "+test-no-qemu-group2" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-wait-block-no-qemu-group3: - uses: ./.github/workflows/reusable-wait-block-target.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - TARGET_NAME: "+test-no-qemu-group3" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-wait-block-no-qemu-group4: - uses: ./.github/workflows/reusable-wait-block-target.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - TARGET_NAME: "+test-no-qemu-group4" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-wait-block-no-qemu-slow: + docker-wait-block-targets: + strategy: + fail-fast: false + matrix: + target: + - "+test-misc" + - "+test-no-qemu-group1" + - "+test-no-qemu-group2" + - "+test-no-qemu-group3" + - "+test-no-qemu-group4" + - "+test-no-qemu-slow" + - "+test-qemu" uses: ./.github/workflows/reusable-wait-block-target.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" SUDO: "" - TARGET_NAME: "+test-no-qemu-slow" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - docker-wait-block-qemu: - uses: ./.github/workflows/reusable-wait-block-target.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - TARGET_NAME: "+test-qemu" - # EXTRA_ARGS: "--auto-skip" + TARGET_NAME: ${{ matrix.target }} secrets: inherit docker-git-metadata-test: @@ -444,74 +190,23 @@ jobs: SUDO: "" secrets: inherit - race-test-misc: - uses: ./.github/workflows/reusable-race-test.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - TEST_TARGET: "+test-misc" - RUNS_ON: "ubuntu-latest" - USE_QEMU: false - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - race-tests-no-qemu-group1: - uses: ./.github/workflows/reusable-race-test.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - TEST_TARGET: "+test-no-qemu-group1" - RUNS_ON: "ubuntu-latest" - USE_QEMU: false - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - race-tests-no-qemu-group2: - uses: ./.github/workflows/reusable-race-test.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - TEST_TARGET: "+test-no-qemu-group2" - RUNS_ON: "ubuntu-latest" - USE_QEMU: false - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - race-tests-no-qemu-group3: - uses: ./.github/workflows/reusable-race-test.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - TEST_TARGET: "+test-no-qemu-group3" - RUNS_ON: "ubuntu-latest" - USE_QEMU: false - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - race-tests-no-qemu-group4: - uses: ./.github/workflows/reusable-race-test.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - TEST_TARGET: "+test-no-qemu-group4" - RUNS_ON: "ubuntu-latest" - USE_QEMU: false - BINARY: "docker" - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - race-tests-no-qemu-slow: + race-tests: + strategy: + fail-fast: false + matrix: + target: + - "+test-misc" + - "+test-no-qemu-group1" + - "+test-no-qemu-group2" + - "+test-no-qemu-group3" + - "+test-no-qemu-group4" + - "+test-no-qemu-slow" uses: ./.github/workflows/reusable-race-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - TEST_TARGET: "+test-no-qemu-slow" + TEST_TARGET: ${{ matrix.target }} RUNS_ON: "ubuntu-latest" USE_QEMU: false BINARY: "docker" SUDO: "" - # EXTRA_ARGS: "--auto-skip" secrets: inherit diff --git a/.github/workflows/ci-earthly-next-docker-ubuntu.yml b/.github/workflows/ci-earthly-next-docker-ubuntu.yml index 1a6011ffd9..00981dcfb3 100644 --- a/.github/workflows/ci-earthly-next-docker-ubuntu.yml +++ b/.github/workflows/ci-earthly-next-docker-ubuntu.yml @@ -11,146 +11,29 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - earthly-next-docker-tests-no-qemu-group1: + next-tests: + strategy: + fail-fast: false + matrix: + target: + - "+test-no-qemu-group1" + - "+test-no-qemu-group2" + - "+test-no-qemu-group3" + - "+test-no-qemu-group4" + - "+test-no-qemu-group5" + - "+test-no-qemu-group6" + - "+test-no-qemu-group7" + - "+test-no-qemu-group8" + - "+test-no-qemu-group9" + - "+test-no-qemu-group10" + - "+test-no-qemu-group11" + - "+test-no-qemu-group12" uses: ./.github/workflows/reusable-test.yml with: - TEST_TARGET: "+test-no-qemu-group1" + TEST_TARGET: ${{ matrix.target }} BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "docker" USE_NEXT: true SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - earthly-next-docker-tests-no-qemu-group2: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group2" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - earthly-next-docker-tests-no-qemu-group3: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group3" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - earthly-next-docker-tests-no-qemu-group4: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group4" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - earthly-next-docker-tests-no-qemu-group5: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group5" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - earthly-next-docker-tests-no-qemu-group6: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group6" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - earthly-next-docker-tests-no-qemu-group7: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group7" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - earthly-next-docker-tests-no-qemu-group8: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group8" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - earthly-next-docker-tests-no-qemu-group9: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group9" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - earthly-next-docker-tests-no-qemu-group10: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group10" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - earthly-next-docker-tests-no-qemu-group11: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group11" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - # EXTRA_ARGS: "--auto-skip" - secrets: inherit - - earthly-next-docker-tests-no-qemu-group12: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group12" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - # EXTRA_ARGS: "--auto-skip" secrets: inherit diff --git a/.github/workflows/ci-podman-ubuntu.yml b/.github/workflows/ci-podman-ubuntu.yml index 61d5775521..357a26c92a 100644 --- a/.github/workflows/ci-podman-ubuntu.yml +++ b/.github/workflows/ci-podman-ubuntu.yml @@ -3,7 +3,6 @@ name: Podman CI Ubuntu on: workflow_call: - env: OTEL_SERVICE_NAME: ${{ vars.OTEL_SERVICE_NAME }} OTEL_EXPORTER_OTLP_ENDPOINT: ${{ vars.OTEL_EXPORTER_OTLP_ENDPOINT }} @@ -12,170 +11,34 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - # this job will output a boolean value to check whether files that require these tests to run - # since all jobs depend on `build-earthly` job, conditionally running it will either cause all jobs to run or skip, - # depending on the output value of this job -# check-essential-files: -# # only run on pull request since push to main is already checking files with paths-ignore -# if: ${{ github.event_name == 'pull_request' }} -# uses: ./.github/workflows/reusable-find-pr-changes.yaml -# permissions: -# pull-requests: read -# secrets: inherit - podman-tests-quick: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-misc" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - podman-tests-no-qemu-group1: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group1" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - podman-tests-no-qemu-group2: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group2" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - podman-tests-no-qemu-group3: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group3" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - podman-tests-no-qemu-group4: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group4" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - podman-tests-no-qemu-group5: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group5" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - podman-tests-no-qemu-group6: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group6" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - podman-tests-no-qemu-group7: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group7" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - podman-tests-no-qemu-group8: + podman-tests: + strategy: + fail-fast: false + matrix: + target: + - "+test-misc" + - "+test-no-qemu-group1" + - "+test-no-qemu-group2" + - "+test-no-qemu-group3" + - "+test-no-qemu-group4" + - "+test-no-qemu-group5" + - "+test-no-qemu-group6" + - "+test-no-qemu-group7" + - "+test-no-qemu-group8" + - "+test-no-qemu-group9" + - "+test-no-qemu-group10" + - "+test-no-qemu-group11" + - "+test-no-qemu-group12" + - "+test-no-qemu-slow" uses: ./.github/workflows/reusable-test.yml with: - TEST_TARGET: "+test-no-qemu-group8" + TEST_TARGET: ${{ matrix.target }} BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "podman" SUDO: "sudo -E" secrets: inherit - podman-tests-no-qemu-group9: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group9" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - podman-tests-no-qemu-group10: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group10" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - podman-tests-no-qemu-group11: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group11" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - podman-tests-no-qemu-group12: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-group12" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - podman-tests-no-qemu-slow: - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-no-qemu-slow" - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - # TODO: Commented out until we have an AWS account to run tests in - # podman-test-oidc-command: - # if: ${{ !failure() && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) }} - # needs: build-earthly - # uses: ./.github/workflows/reusable-test.yml - # with: - # TEST_TARGET: "./tests/oidc+test" - # BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - # RUNS_ON: "ubuntu-latest" - # BINARY: "podman" - # SUDO: "sudo -E" - # SKIP_JOB: ${{ needs.build-earthly.result != 'success' }} - # secrets: inherit - podman-tests-qemu: uses: ./.github/workflows/reusable-test.yml with: @@ -187,145 +50,22 @@ jobs: SUDO: "sudo -E" secrets: inherit - podman-examples-1: - # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd + podman-examples: + strategy: + fail-fast: false + matrix: + example: + - "+examples-1" + - "+examples-2" + - "+examples-3" + - "+examples-4" + - "+examples-5" uses: ./.github/workflows/reusable-example.yml with: + EXAMPLE_NAME: ${{ matrix.example }} BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-latest" BINARY: "podman" USE_QEMU: true SUDO: "sudo -E" - EXAMPLE_NAME: "+examples-1" secrets: inherit - - podman-examples-2: - # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - uses: ./.github/workflows/reusable-example.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - USE_QEMU: true - SUDO: "sudo -E" - EXAMPLE_NAME: "+examples-2" - secrets: inherit - - podman-examples-3: - # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - uses: ./.github/workflows/reusable-example.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - USE_QEMU: true - SUDO: "sudo -E" - EXAMPLE_NAME: "+examples-3" - secrets: inherit - - podman-examples-4: - # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - uses: ./.github/workflows/reusable-example.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - USE_QEMU: true - SUDO: "sudo -E" - EXAMPLE_NAME: "+examples-4" - MORE_SPACE: false - secrets: inherit - - podman-examples-5: - # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd - uses: ./.github/workflows/reusable-example.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - USE_QEMU: true - SUDO: "sudo -E" - EXAMPLE_NAME: "+examples-5" - secrets: inherit - -# podman-test-local: -# # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -### uses: ./.github/workflows/reusable-test-local.yml -# with: -# BUILT_EARTH_PATH: "./build/linux/amd64/earthly" -# RUNS_ON: "ubuntu-latest" -# BINARY: "podman" -# BINARY_COMPOSE: "\"sudo -E podman-compose\"" -# SUDO: "sudo -E" -## secrets: inherit -# -# TODO: Fix and bring back the below tests -# podman-push-integrations: -# # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -### uses: ./.github/workflows/reusable-push-integrations.yml -# with: -# BUILT_EARTH_PATH: "./build/linux/amd64/earthly" -# RUNS_ON: "ubuntu-latest" -# BINARY: "podman" -# SUDO: "sudo -E" -## secrets: inherit -# -# podman-bootstrap-integrations: -# # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -### uses: ./.github/workflows/reusable-bootstrap-integrations.yml -# with: -# BUILT_EARTH_PATH: "./build/linux/amd64/earthly" -# RUNS_ON: "ubuntu-latest" -# BINARY: "podman" -# SUDO: "sudo -E" -## secrets: inherit -# -# podman-repo-auth-tests: -# # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -### uses: ./.github/workflows/reusable-repo-auth-tests.yml -# with: -# BUILT_EARTH_PATH: "./build/linux/amd64/earthly" -# RUNS_ON: "ubuntu-latest" -# BINARY: "podman" -# SUDO: "sudo -E" -## secrets: inherit -# -# podman-export-tests: -# # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -### uses: ./.github/workflows/reusable-export-test.yml -# with: -# BUILT_EARTH_PATH: "./build/linux/amd64/earthly" -# RUNS_ON: "ubuntu-latest" -# BINARY: "podman" -# SUDO: "sudo -E" -## secrets: inherit -# -# podman-earthbuild-image-tests: -# # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -### uses: ./.github/workflows/reusable-earthbuild-image-tests.yml -# with: -# BUILT_EARTH_PATH: "./build/linux/amd64/earthly" -# RUNS_ON: "ubuntu-latest" -# BINARY: "podman" -# SUDO: "sudo -E" -## secrets: inherit -# -# podman-misc-tests-1: -# # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -### uses: ./.github/workflows/reusable-misc-tests-1.yml -# with: -# BUILT_EARTH_PATH: "./build/linux/amd64/earthly" -# RUNS_ON: "ubuntu-latest" -# BINARY: "podman" -# SUDO: "sudo -E" -## secrets: inherit -# -# podman-misc-tests-2: -# # TODO: Figure out how to run multiple Podman instances in parallel with different ports for buildkitd -### uses: ./.github/workflows/reusable-misc-tests-2.yml -# with: -# BUILT_EARTH_PATH: "./build/linux/amd64/earthly" -# RUNS_ON: "ubuntu-latest" -# BINARY: "podman" -# SUDO: "sudo -E" -## secrets: inherit From 1db25edf836d74183b03695b8dfa44157cc2ef43 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 12:47:34 +0100 Subject: [PATCH 11/29] chore: tidy --- .github/workflows/ci-docker-ubuntu.yml | 22 +++++++++++++++++++ .../ci-earthly-next-docker-ubuntu.yml | 10 ++++++++- .github/workflows/ci-podman-ubuntu.yml | 18 ++++++++++++--- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci-docker-ubuntu.yml b/.github/workflows/ci-docker-ubuntu.yml index 3e8c27d2c0..3296dbfe95 100644 --- a/.github/workflows/ci-docker-ubuntu.yml +++ b/.github/workflows/ci-docker-ubuntu.yml @@ -11,7 +11,14 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: + docker-init: + name: Docker Test Suite + runs-on: ubuntu-24.04 + steps: + - run: echo "Initializing Docker test suite" + docker-tests: + needs: docker-init strategy: fail-fast: false matrix: @@ -40,6 +47,7 @@ jobs: secrets: inherit docker-tests-qemu: + needs: docker-init uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-qemu" @@ -51,6 +59,7 @@ jobs: secrets: inherit docker-examples: + needs: docker-init strategy: fail-fast: false matrix: @@ -70,6 +79,7 @@ jobs: secrets: inherit docker-test-local: + needs: docker-init uses: ./.github/workflows/reusable-test-local.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -80,6 +90,7 @@ jobs: secrets: inherit docker-push-integrations: + needs: docker-init uses: ./.github/workflows/reusable-push-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -89,6 +100,7 @@ jobs: secrets: inherit docker-bootstrap-integrations: + needs: docker-init uses: ./.github/workflows/reusable-bootstrap-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -98,6 +110,7 @@ jobs: secrets: inherit docker-repo-auth-tests: + needs: docker-init uses: ./.github/workflows/reusable-repo-auth-tests.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -107,6 +120,7 @@ jobs: secrets: inherit docker-export-test: + needs: docker-init uses: ./.github/workflows/reusable-export-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -116,6 +130,7 @@ jobs: secrets: inherit docker-docker-build-integrations: + needs: docker-init uses: ./.github/workflows/reusable-docker-build-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -125,6 +140,7 @@ jobs: secrets: inherit docker-earthbuild-image-test: + needs: docker-init uses: ./.github/workflows/reusable-earthbuild-image-tests.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -134,6 +150,7 @@ jobs: secrets: inherit docker-misc-test-1: + needs: docker-init uses: ./.github/workflows/reusable-misc-tests-1.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -143,6 +160,7 @@ jobs: secrets: inherit docker-misc-test-2: + needs: docker-init uses: ./.github/workflows/reusable-misc-tests-2.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -152,6 +170,7 @@ jobs: secrets: inherit docker-wait-block-main: + needs: docker-init uses: ./.github/workflows/reusable-wait-block-main.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -161,6 +180,7 @@ jobs: secrets: inherit docker-wait-block-targets: + needs: docker-init strategy: fail-fast: false matrix: @@ -182,6 +202,7 @@ jobs: secrets: inherit docker-git-metadata-test: + needs: docker-init uses: ./.github/workflows/reusable-git-metadata-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -191,6 +212,7 @@ jobs: secrets: inherit race-tests: + needs: docker-init strategy: fail-fast: false matrix: diff --git a/.github/workflows/ci-earthly-next-docker-ubuntu.yml b/.github/workflows/ci-earthly-next-docker-ubuntu.yml index 00981dcfb3..ee8d50bdb4 100644 --- a/.github/workflows/ci-earthly-next-docker-ubuntu.yml +++ b/.github/workflows/ci-earthly-next-docker-ubuntu.yml @@ -11,7 +11,15 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - next-tests: + init: + name: Init + runs-on: ubuntu-24.04 + steps: + - run: echo "Initializing Next test suite" + + tests: + name: Tests + needs: init strategy: fail-fast: false matrix: diff --git a/.github/workflows/ci-podman-ubuntu.yml b/.github/workflows/ci-podman-ubuntu.yml index 357a26c92a..c6610432da 100644 --- a/.github/workflows/ci-podman-ubuntu.yml +++ b/.github/workflows/ci-podman-ubuntu.yml @@ -11,7 +11,15 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - podman-tests: + init: + name: Init + runs-on: ubuntu-24.04 + steps: + - run: echo "Initializing Podman test suite" + + tests: + name: Tests + needs: init strategy: fail-fast: false matrix: @@ -39,7 +47,9 @@ jobs: SUDO: "sudo -E" secrets: inherit - podman-tests-qemu: + tests-qemu: + name: Tests (QEMU) + needs: init uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-qemu" @@ -50,7 +60,9 @@ jobs: SUDO: "sudo -E" secrets: inherit - podman-examples: + examples: + name: Examples + needs: init strategy: fail-fast: false matrix: From d2c17850497aaa279b24c9ef9f5d701280493647 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 12:50:24 +0100 Subject: [PATCH 12/29] docs: earth or EarhBuild in AGENTS.md --- AGENTS.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index cd98d39e22..1e895f112a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,6 +6,12 @@ * Prefer std packages over 3rd party packages, where possible. * Ensure all exposed interfaces and types are documented. +## Naming & Terminology + +* The `earthly` naming is deprecated and being systematically eliminated. +* Use `earth` when referring to the CLI command. +* Use `EarthBuild` when referring to organization or project context. + ## Earthfile Parser * When making changes to the parser, it is critical to keep [earthfile.abnf](file:///Users/jhorsts/projects/earthbuild/earthbuild/internal/earthfile/earthfile.abnf) up to date. And ensure the parser's implementation matches the ABNF grammar. From 85d385a70feb58d2102de75aae1dd8086b8d9852 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 12:52:52 +0100 Subject: [PATCH 13/29] chore: tidy --- .github/workflows/ci.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b07289bd8b..444a401124 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -78,12 +78,12 @@ jobs: set -euo pipefail EARTHLY_VERSION_FLAG_OVERRIDES="$(tr -d '\n' < .earthly_version_flag_overrides)" echo "EARTHLY_VERSION_FLAG_OVERRIDES=$EARTHLY_VERSION_FLAG_OVERRIDES" >> "$GITHUB_ENV" - - name: Build and push +ci-release using latest earthly build + - name: Build and push +ci-release using latest earth build if: github.event_name == 'push' || github.event_name == 'merge_group' || github.event.pull_request.head.repo.full_name == github.repository run: |- export TAG_SUFFIX="ubuntu-latest" ./build/linux/amd64/earthly --ci --push --build-arg TAG_SUFFIX +ci-release - - name: Build +ci-release using latest earthly build (fork - no push) + - name: Build +ci-release using latest earth build (fork - no push) if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository run: |- export TAG_SUFFIX="ubuntu-latest" @@ -99,7 +99,7 @@ jobs: mkdir -p ./artifacts-standard - # Build earthly CLI binary with correct installation name (earthly, not earthly-dev) + # Build earth CLI binary with correct installation name (earthly, not earthly-dev) # This ensures the buildkitd container is named "earthly-buildkitd" as tests expect ./build/linux/amd64/earthly --ci --artifact \ +earthly/earthly \ @@ -126,7 +126,7 @@ jobs: # --- Build Next EarthBuild --- - name: Update Buildkit to earthly-next run: earth +update-buildkit --BUILDKIT_GIT_SHA="$(cat earthly-next)" - - name: Build latest earthly (next) using released earthly + - name: Build latest earth (next) using released earth run: earth --use-inline-cache +for-linux - name: Build and push +ci-release (next) using latest earth build if: github.event_name == 'push' || github.event_name == 'merge_group' || github.event.pull_request.head.repo.full_name == github.repository @@ -149,7 +149,7 @@ jobs: mkdir -p ./artifacts-next - # Build earthly CLI binary with correct installation name (earthly, not earthly-dev) + # Build earth CLI binary with correct installation name (earthly, not earthly-dev) # This ensures the buildkitd container is named "earthly-buildkitd" as tests expect ./build/linux/amd64/earthly --ci --artifact \ +earthly/earthly \ From bc240c476f3ec2c73d2c62f3a7c7a847f65613ff Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 14:37:57 +0100 Subject: [PATCH 14/29] chore: tidy --- .github/workflows/ci-docker-ubuntu.yml | 82 +++++++++++++++----------- 1 file changed, 49 insertions(+), 33 deletions(-) diff --git a/.github/workflows/ci-docker-ubuntu.yml b/.github/workflows/ci-docker-ubuntu.yml index 3296dbfe95..b7e6768266 100644 --- a/.github/workflows/ci-docker-ubuntu.yml +++ b/.github/workflows/ci-docker-ubuntu.yml @@ -11,14 +11,15 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - docker-init: - name: Docker Test Suite + init: + name: Init runs-on: ubuntu-24.04 steps: - run: echo "Initializing Docker test suite" - docker-tests: - needs: docker-init + tests: + name: Tests + needs: init strategy: fail-fast: false matrix: @@ -46,8 +47,9 @@ jobs: SUDO: "" secrets: inherit - docker-tests-qemu: - needs: docker-init + tests-qemu: + name: Tests (QEMU) + needs: init uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-qemu" @@ -58,8 +60,9 @@ jobs: SUDO: "" secrets: inherit - docker-examples: - needs: docker-init + examples: + name: Examples + needs: init strategy: fail-fast: false matrix: @@ -78,8 +81,9 @@ jobs: SUDO: "" secrets: inherit - docker-test-local: - needs: docker-init + test-local: + name: Test Local + needs: init uses: ./.github/workflows/reusable-test-local.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -89,8 +93,9 @@ jobs: SUDO: "" secrets: inherit - docker-push-integrations: - needs: docker-init + push-integrations: + name: Push Integrations + needs: init uses: ./.github/workflows/reusable-push-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -99,8 +104,9 @@ jobs: SUDO: "" secrets: inherit - docker-bootstrap-integrations: - needs: docker-init + bootstrap-integrations: + name: Bootstrap Integrations + needs: init uses: ./.github/workflows/reusable-bootstrap-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -109,8 +115,9 @@ jobs: SUDO: "" secrets: inherit - docker-repo-auth-tests: - needs: docker-init + repo-auth-tests: + name: Repo Auth Tests + needs: init uses: ./.github/workflows/reusable-repo-auth-tests.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -119,8 +126,9 @@ jobs: SUDO: "" secrets: inherit - docker-export-test: - needs: docker-init + export-test: + name: Export Test + needs: init uses: ./.github/workflows/reusable-export-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -129,8 +137,9 @@ jobs: SUDO: "" secrets: inherit - docker-docker-build-integrations: - needs: docker-init + docker-build-integrations: + name: Docker Build Integrations + needs: init uses: ./.github/workflows/reusable-docker-build-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -139,8 +148,9 @@ jobs: SUDO: "" secrets: inherit - docker-earthbuild-image-test: - needs: docker-init + earthbuild-image-test: + name: EarthBuild Image Test + needs: init uses: ./.github/workflows/reusable-earthbuild-image-tests.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -149,8 +159,9 @@ jobs: SUDO: "" secrets: inherit - docker-misc-test-1: - needs: docker-init + misc-test-1: + name: Misc Test 1 + needs: init uses: ./.github/workflows/reusable-misc-tests-1.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -159,8 +170,9 @@ jobs: SUDO: "" secrets: inherit - docker-misc-test-2: - needs: docker-init + misc-test-2: + name: Misc Test 2 + needs: init uses: ./.github/workflows/reusable-misc-tests-2.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -169,8 +181,9 @@ jobs: SUDO: "" secrets: inherit - docker-wait-block-main: - needs: docker-init + wait-block-main: + name: Wait Block Main + needs: init uses: ./.github/workflows/reusable-wait-block-main.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -179,8 +192,9 @@ jobs: SUDO: "" secrets: inherit - docker-wait-block-targets: - needs: docker-init + wait-block-targets: + name: Wait Block Targets + needs: init strategy: fail-fast: false matrix: @@ -201,8 +215,9 @@ jobs: TARGET_NAME: ${{ matrix.target }} secrets: inherit - docker-git-metadata-test: - needs: docker-init + git-metadata-test: + name: Git Metadata Test + needs: init uses: ./.github/workflows/reusable-git-metadata-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -212,7 +227,8 @@ jobs: secrets: inherit race-tests: - needs: docker-init + name: Race Tests + needs: init strategy: fail-fast: false matrix: From 027a88970033fbf62df8c64f1e27114428430611 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 14:46:14 +0100 Subject: [PATCH 15/29] chore: tidy --- .github/workflows/ci-docker-ubuntu.yml | 22 ------------------- .../ci-earthly-next-docker-ubuntu.yml | 7 ------ .github/workflows/ci-podman-ubuntu.yml | 9 -------- 3 files changed, 38 deletions(-) diff --git a/.github/workflows/ci-docker-ubuntu.yml b/.github/workflows/ci-docker-ubuntu.yml index b7e6768266..442238de36 100644 --- a/.github/workflows/ci-docker-ubuntu.yml +++ b/.github/workflows/ci-docker-ubuntu.yml @@ -11,15 +11,8 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - init: - name: Init - runs-on: ubuntu-24.04 - steps: - - run: echo "Initializing Docker test suite" - tests: name: Tests - needs: init strategy: fail-fast: false matrix: @@ -49,7 +42,6 @@ jobs: tests-qemu: name: Tests (QEMU) - needs: init uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-qemu" @@ -62,7 +54,6 @@ jobs: examples: name: Examples - needs: init strategy: fail-fast: false matrix: @@ -83,7 +74,6 @@ jobs: test-local: name: Test Local - needs: init uses: ./.github/workflows/reusable-test-local.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -95,7 +85,6 @@ jobs: push-integrations: name: Push Integrations - needs: init uses: ./.github/workflows/reusable-push-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -106,7 +95,6 @@ jobs: bootstrap-integrations: name: Bootstrap Integrations - needs: init uses: ./.github/workflows/reusable-bootstrap-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -117,7 +105,6 @@ jobs: repo-auth-tests: name: Repo Auth Tests - needs: init uses: ./.github/workflows/reusable-repo-auth-tests.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -128,7 +115,6 @@ jobs: export-test: name: Export Test - needs: init uses: ./.github/workflows/reusable-export-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -139,7 +125,6 @@ jobs: docker-build-integrations: name: Docker Build Integrations - needs: init uses: ./.github/workflows/reusable-docker-build-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -150,7 +135,6 @@ jobs: earthbuild-image-test: name: EarthBuild Image Test - needs: init uses: ./.github/workflows/reusable-earthbuild-image-tests.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -161,7 +145,6 @@ jobs: misc-test-1: name: Misc Test 1 - needs: init uses: ./.github/workflows/reusable-misc-tests-1.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -172,7 +155,6 @@ jobs: misc-test-2: name: Misc Test 2 - needs: init uses: ./.github/workflows/reusable-misc-tests-2.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -183,7 +165,6 @@ jobs: wait-block-main: name: Wait Block Main - needs: init uses: ./.github/workflows/reusable-wait-block-main.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -194,7 +175,6 @@ jobs: wait-block-targets: name: Wait Block Targets - needs: init strategy: fail-fast: false matrix: @@ -217,7 +197,6 @@ jobs: git-metadata-test: name: Git Metadata Test - needs: init uses: ./.github/workflows/reusable-git-metadata-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -228,7 +207,6 @@ jobs: race-tests: name: Race Tests - needs: init strategy: fail-fast: false matrix: diff --git a/.github/workflows/ci-earthly-next-docker-ubuntu.yml b/.github/workflows/ci-earthly-next-docker-ubuntu.yml index ee8d50bdb4..56490b7608 100644 --- a/.github/workflows/ci-earthly-next-docker-ubuntu.yml +++ b/.github/workflows/ci-earthly-next-docker-ubuntu.yml @@ -11,15 +11,8 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - init: - name: Init - runs-on: ubuntu-24.04 - steps: - - run: echo "Initializing Next test suite" - tests: name: Tests - needs: init strategy: fail-fast: false matrix: diff --git a/.github/workflows/ci-podman-ubuntu.yml b/.github/workflows/ci-podman-ubuntu.yml index c6610432da..c09de3254a 100644 --- a/.github/workflows/ci-podman-ubuntu.yml +++ b/.github/workflows/ci-podman-ubuntu.yml @@ -11,15 +11,8 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - init: - name: Init - runs-on: ubuntu-24.04 - steps: - - run: echo "Initializing Podman test suite" - tests: name: Tests - needs: init strategy: fail-fast: false matrix: @@ -49,7 +42,6 @@ jobs: tests-qemu: name: Tests (QEMU) - needs: init uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-qemu" @@ -62,7 +54,6 @@ jobs: examples: name: Examples - needs: init strategy: fail-fast: false matrix: From e67f83ef97f0eb9e10bd4d7b4720119f931827e9 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 15:04:57 +0100 Subject: [PATCH 16/29] refactor: frontend matrix --- .github/workflows/ci-docker-ubuntu.yml | 228 ------------- .../ci-earthly-next-docker-ubuntu.yml | 40 --- .github/workflows/ci-frontend-suite.yml | 302 ++++++++++++++++++ .github/workflows/ci-podman-ubuntu.yml | 74 ----- .github/workflows/ci.yml | 50 ++- 5 files changed, 337 insertions(+), 357 deletions(-) delete mode 100644 .github/workflows/ci-docker-ubuntu.yml delete mode 100644 .github/workflows/ci-earthly-next-docker-ubuntu.yml create mode 100644 .github/workflows/ci-frontend-suite.yml delete mode 100644 .github/workflows/ci-podman-ubuntu.yml diff --git a/.github/workflows/ci-docker-ubuntu.yml b/.github/workflows/ci-docker-ubuntu.yml deleted file mode 100644 index 442238de36..0000000000 --- a/.github/workflows/ci-docker-ubuntu.yml +++ /dev/null @@ -1,228 +0,0 @@ -name: Docker - -on: - workflow_call: - -env: - OTEL_SERVICE_NAME: ${{ vars.OTEL_SERVICE_NAME }} - OTEL_EXPORTER_OTLP_ENDPOINT: ${{ vars.OTEL_EXPORTER_OTLP_ENDPOINT }} - OTEL_EXPORTER_OTLP_PROTOCOL: ${{ vars.OTEL_EXPORTER_OTLP_PROTOCOL }} - OTEL_RESOURCE_ATTRIBUTES: ${{ vars.OTEL_RESOURCE_ATTRIBUTES != '' && format('{0},', vars.OTEL_RESOURCE_ATTRIBUTES) || '' }}${{ github.event.pull_request != null && format('vcs.repository.change.id={0},vcs.repository.change.title={1},', github.event.pull_request.number, github.event.pull_request.title) || '' }}cicd.pipeline.run.id=${{ github.run_number }},cicd.pipeline.run.url.full=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }},cicd.pipeline.name=${{ github.workflow }},vcs.revision.id=${{ github.sha }},vcs.ref.name=${{ github.ref_name }},vcs.repository.name=${{ github.repository }},user.id=${{ github.actor }} - OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} - -jobs: - tests: - name: Tests - strategy: - fail-fast: false - matrix: - target: - - "+test-misc" - - "+test-no-qemu-group1" - - "+test-no-qemu-group2" - - "+test-no-qemu-group3" - - "+test-no-qemu-group4" - - "+test-no-qemu-group5" - - "+test-no-qemu-group6" - - "+test-no-qemu-group7" - - "+test-no-qemu-group8" - - "+test-no-qemu-group9" - - "+test-no-qemu-group10" - - "+test-no-qemu-group11" - - "+test-no-qemu-group12" - - "+test-no-qemu-slow" - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: ${{ matrix.target }} - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - secrets: inherit - - tests-qemu: - name: Tests (QEMU) - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-qemu" - USE_QEMU: true - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - secrets: inherit - - examples: - name: Examples - strategy: - fail-fast: false - matrix: - example: - - "+examples-1" - - "+examples-2" - - "+examples-3" - - "+examples-4" - - "+examples-5" - uses: ./.github/workflows/reusable-example.yml - with: - EXAMPLE_NAME: ${{ matrix.example }} - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - secrets: inherit - - test-local: - name: Test Local - uses: ./.github/workflows/reusable-test-local.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - BINARY_COMPOSE: "\"docker compose\"" - SUDO: "" - secrets: inherit - - push-integrations: - name: Push Integrations - uses: ./.github/workflows/reusable-push-integrations.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - secrets: inherit - - bootstrap-integrations: - name: Bootstrap Integrations - uses: ./.github/workflows/reusable-bootstrap-integrations.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - secrets: inherit - - repo-auth-tests: - name: Repo Auth Tests - uses: ./.github/workflows/reusable-repo-auth-tests.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - secrets: inherit - - export-test: - name: Export Test - uses: ./.github/workflows/reusable-export-test.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - secrets: inherit - - docker-build-integrations: - name: Docker Build Integrations - uses: ./.github/workflows/reusable-docker-build-integrations.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - secrets: inherit - - earthbuild-image-test: - name: EarthBuild Image Test - uses: ./.github/workflows/reusable-earthbuild-image-tests.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - secrets: inherit - - misc-test-1: - name: Misc Test 1 - uses: ./.github/workflows/reusable-misc-tests-1.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - secrets: inherit - - misc-test-2: - name: Misc Test 2 - uses: ./.github/workflows/reusable-misc-tests-2.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - secrets: inherit - - wait-block-main: - name: Wait Block Main - uses: ./.github/workflows/reusable-wait-block-main.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - secrets: inherit - - wait-block-targets: - name: Wait Block Targets - strategy: - fail-fast: false - matrix: - target: - - "+test-misc" - - "+test-no-qemu-group1" - - "+test-no-qemu-group2" - - "+test-no-qemu-group3" - - "+test-no-qemu-group4" - - "+test-no-qemu-slow" - - "+test-qemu" - uses: ./.github/workflows/reusable-wait-block-target.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - TARGET_NAME: ${{ matrix.target }} - secrets: inherit - - git-metadata-test: - name: Git Metadata Test - uses: ./.github/workflows/reusable-git-metadata-test.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - SUDO: "" - secrets: inherit - - race-tests: - name: Race Tests - strategy: - fail-fast: false - matrix: - target: - - "+test-misc" - - "+test-no-qemu-group1" - - "+test-no-qemu-group2" - - "+test-no-qemu-group3" - - "+test-no-qemu-group4" - - "+test-no-qemu-slow" - uses: ./.github/workflows/reusable-race-test.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - TEST_TARGET: ${{ matrix.target }} - RUNS_ON: "ubuntu-latest" - USE_QEMU: false - BINARY: "docker" - SUDO: "" - secrets: inherit diff --git a/.github/workflows/ci-earthly-next-docker-ubuntu.yml b/.github/workflows/ci-earthly-next-docker-ubuntu.yml deleted file mode 100644 index 56490b7608..0000000000 --- a/.github/workflows/ci-earthly-next-docker-ubuntu.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Next - -on: - workflow_call: - -env: - OTEL_SERVICE_NAME: ${{ vars.OTEL_SERVICE_NAME }} - OTEL_EXPORTER_OTLP_ENDPOINT: ${{ vars.OTEL_EXPORTER_OTLP_ENDPOINT }} - OTEL_EXPORTER_OTLP_PROTOCOL: ${{ vars.OTEL_EXPORTER_OTLP_PROTOCOL }} - OTEL_RESOURCE_ATTRIBUTES: ${{ vars.OTEL_RESOURCE_ATTRIBUTES != '' && format('{0},', vars.OTEL_RESOURCE_ATTRIBUTES) || '' }}${{ github.event.pull_request != null && format('vcs.repository.change.id={0},vcs.repository.change.title={1},', github.event.pull_request.number, github.event.pull_request.title) || '' }}cicd.pipeline.run.id=${{ github.run_number }},cicd.pipeline.run.url.full=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }},cicd.pipeline.name=${{ github.workflow }},vcs.revision.id=${{ github.sha }},vcs.ref.name=${{ github.ref_name }},vcs.repository.name=${{ github.repository }},user.id=${{ github.actor }} - OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} - -jobs: - tests: - name: Tests - strategy: - fail-fast: false - matrix: - target: - - "+test-no-qemu-group1" - - "+test-no-qemu-group2" - - "+test-no-qemu-group3" - - "+test-no-qemu-group4" - - "+test-no-qemu-group5" - - "+test-no-qemu-group6" - - "+test-no-qemu-group7" - - "+test-no-qemu-group8" - - "+test-no-qemu-group9" - - "+test-no-qemu-group10" - - "+test-no-qemu-group11" - - "+test-no-qemu-group12" - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: ${{ matrix.target }} - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "docker" - USE_NEXT: true - SUDO: "" - secrets: inherit diff --git a/.github/workflows/ci-frontend-suite.yml b/.github/workflows/ci-frontend-suite.yml new file mode 100644 index 0000000000..c9d88d593e --- /dev/null +++ b/.github/workflows/ci-frontend-suite.yml @@ -0,0 +1,302 @@ +name: Frontend Suite + +on: + workflow_call: + inputs: + FRONTEND: + required: true + type: string + SUDO: + required: false + type: string + default: "" + USE_NEXT: + required: false + type: boolean + default: false + RUN_INTEGRATION_TESTS: + required: false + type: boolean + default: false + RUN_EXAMPLES: + required: false + type: boolean + default: true + RUN_QEMU: + required: false + type: boolean + default: true + +env: + OTEL_SERVICE_NAME: ${{ vars.OTEL_SERVICE_NAME }} + OTEL_EXPORTER_OTLP_ENDPOINT: ${{ vars.OTEL_EXPORTER_OTLP_ENDPOINT }} + OTEL_EXPORTER_OTLP_PROTOCOL: ${{ vars.OTEL_EXPORTER_OTLP_PROTOCOL }} + OTEL_RESOURCE_ATTRIBUTES: ${{ vars.OTEL_RESOURCE_ATTRIBUTES != '' && format('{0},', vars.OTEL_RESOURCE_ATTRIBUTES) || '' }}${{ github.event.pull_request != null && format('vcs.repository.change.id={0},vcs.repository.change.title={1},', github.event.pull_request.number, github.event.pull_request.title) || '' }}cicd.pipeline.run.id=${{ github.run_number }},cicd.pipeline.run.url.full=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }},cicd.pipeline.name=${{ github.workflow }},vcs.revision.id=${{ github.sha }},vcs.ref.name=${{ github.ref_name }},vcs.repository.name=${{ github.repository }},user.id=${{ github.actor }} + OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} + +jobs: + tests: + name: ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + - target: "+test-misc" + name: "Misc (AST & Parser)" + - target: "+test-no-qemu-group1" + name: "Group 1 (Autocompletion, Dockerfile & Imports)" + - target: "+test-no-qemu-group2" + name: "Group 2 (COPY & Git Clone Operations)" + - target: "+test-no-qemu-group3" + name: "Group 3 (Secrets, Build ARGs & Host Bind)" + - target: "+test-no-qemu-group4" + name: "Group 4 (Dockerfile, Artifact Saves & Env)" + - target: "+test-no-qemu-group5" + name: "Group 5 (Control Flow, Cache Mounts & AWS)" + - target: "+test-no-qemu-group6" + name: "Group 6 (Cache & Credential Scrubbing)" + - target: "+test-no-qemu-group7" + name: "Group 7 (Selective Save, Compose & Dotenv)" + - target: "+test-no-qemu-group8" + name: "Group 8 (Docker Registry & SSH Config)" + - target: "+test-no-qemu-group9" + name: "Group 9 (Config & ARG Redeclare Validation)" + - target: "+test-no-qemu-group10" + name: "Group 10 (SSH & Remote Resolution)" + - target: "+test-no-qemu-group11" + name: "Group 11 (Expose, Artifacts & Logbus)" + - target: "+test-no-qemu-group12" + name: "Group 12 (Label Validation & Run Cache)" + - target: "+test-no-qemu-slow" + name: "Slow (Server Daemon & WITH DOCKER)" + uses: ./.github/workflows/reusable-test.yml + with: + TEST_TARGET: ${{ matrix.target }} + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + USE_NEXT: ${{ inputs.USE_NEXT }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + tests-qemu: + name: QEMU Multi-Arch Tests + if: ${{ inputs.RUN_QEMU }} + uses: ./.github/workflows/reusable-test.yml + with: + TEST_TARGET: "+test-qemu" + USE_QEMU: true + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + USE_NEXT: ${{ inputs.USE_NEXT }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + examples: + name: ${{ matrix.name }} + if: ${{ inputs.RUN_EXAMPLES }} + strategy: + fail-fast: false + matrix: + include: + - example: "+examples-1" + name: "Examples 1 (C, C++, Go, Elixir, Multi-repo)" + - example: "+examples-2" + name: "Examples 2 (Ruby, Rust, Scala, Multi-platform)" + - example: "+examples-3" + name: "Examples 3 (Python, Bazel, MkDocs, Zig)" + - example: "+examples-4" + name: "Examples 4 (gRPC)" + - example: "+examples-5" + name: "Examples 5 (Java, JS & Node)" + uses: ./.github/workflows/reusable-example.yml + with: + EXAMPLE_NAME: ${{ matrix.example }} + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + USE_QEMU: ${{ inputs.FRONTEND == 'podman' }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + test-local: + name: Test Local + if: ${{ inputs.RUN_INTEGRATION_TESTS }} + uses: ./.github/workflows/reusable-test-local.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + BINARY_COMPOSE: "\"docker compose\"" + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + push-integrations: + name: Push Integrations + if: ${{ inputs.RUN_INTEGRATION_TESTS }} + uses: ./.github/workflows/reusable-push-integrations.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + bootstrap-integrations: + name: Bootstrap Integrations + if: ${{ inputs.RUN_INTEGRATION_TESTS }} + uses: ./.github/workflows/reusable-bootstrap-integrations.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + repo-auth-tests: + name: Repo Auth Tests + if: ${{ inputs.RUN_INTEGRATION_TESTS }} + uses: ./.github/workflows/reusable-repo-auth-tests.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + export-test: + name: Export Test + if: ${{ inputs.RUN_INTEGRATION_TESTS }} + uses: ./.github/workflows/reusable-export-test.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + docker-build-integrations: + name: Docker Build Integrations + if: ${{ inputs.RUN_INTEGRATION_TESTS }} + uses: ./.github/workflows/reusable-docker-build-integrations.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + earthbuild-image-test: + name: EarthBuild Image Test + if: ${{ inputs.RUN_INTEGRATION_TESTS }} + uses: ./.github/workflows/reusable-earthbuild-image-tests.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + misc-test-1: + name: Misc Test 1 + if: ${{ inputs.RUN_INTEGRATION_TESTS }} + uses: ./.github/workflows/reusable-misc-tests-1.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + misc-test-2: + name: Misc Test 2 + if: ${{ inputs.RUN_INTEGRATION_TESTS }} + uses: ./.github/workflows/reusable-misc-tests-2.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + wait-block-main: + name: Wait Block Main + if: ${{ inputs.RUN_INTEGRATION_TESTS }} + uses: ./.github/workflows/reusable-wait-block-main.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + wait-block-targets: + name: ${{ matrix.name }} + if: ${{ inputs.RUN_INTEGRATION_TESTS }} + strategy: + fail-fast: false + matrix: + include: + - target: "+test-misc" + name: "Wait Block (Misc)" + - target: "+test-no-qemu-group1" + name: "Wait Block (Group 1)" + - target: "+test-no-qemu-group2" + name: "Wait Block (Group 2)" + - target: "+test-no-qemu-group3" + name: "Wait Block (Group 3)" + - target: "+test-no-qemu-group4" + name: "Wait Block (Group 4)" + - target: "+test-no-qemu-slow" + name: "Wait Block (Slow)" + - target: "+test-qemu" + name: "Wait Block (QEMU)" + uses: ./.github/workflows/reusable-wait-block-target.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + SUDO: ${{ inputs.SUDO }} + TARGET_NAME: ${{ matrix.target }} + secrets: inherit + + git-metadata-test: + name: Git Metadata Test + if: ${{ inputs.RUN_INTEGRATION_TESTS }} + uses: ./.github/workflows/reusable-git-metadata-test.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-latest" + BINARY: ${{ inputs.FRONTEND }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + race-tests: + name: ${{ matrix.name }} + if: ${{ inputs.RUN_INTEGRATION_TESTS }} + strategy: + fail-fast: false + matrix: + include: + - target: "+test-misc" + name: "Race Tests (Misc)" + - target: "+test-no-qemu-group1" + name: "Race Tests (Group 1)" + - target: "+test-no-qemu-group2" + name: "Race Tests (Group 2)" + - target: "+test-no-qemu-group3" + name: "Race Tests (Group 3)" + - target: "+test-no-qemu-group4" + name: "Race Tests (Group 4)" + - target: "+test-no-qemu-slow" + name: "Race Tests (Slow)" + uses: ./.github/workflows/reusable-race-test.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + TEST_TARGET: ${{ matrix.target }} + RUNS_ON: "ubuntu-latest" + USE_QEMU: false + BINARY: ${{ inputs.FRONTEND }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit diff --git a/.github/workflows/ci-podman-ubuntu.yml b/.github/workflows/ci-podman-ubuntu.yml deleted file mode 100644 index c09de3254a..0000000000 --- a/.github/workflows/ci-podman-ubuntu.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: Podman CI Ubuntu - -on: - workflow_call: - -env: - OTEL_SERVICE_NAME: ${{ vars.OTEL_SERVICE_NAME }} - OTEL_EXPORTER_OTLP_ENDPOINT: ${{ vars.OTEL_EXPORTER_OTLP_ENDPOINT }} - OTEL_EXPORTER_OTLP_PROTOCOL: ${{ vars.OTEL_EXPORTER_OTLP_PROTOCOL }} - OTEL_RESOURCE_ATTRIBUTES: ${{ vars.OTEL_RESOURCE_ATTRIBUTES != '' && format('{0},', vars.OTEL_RESOURCE_ATTRIBUTES) || '' }}${{ github.event.pull_request != null && format('vcs.repository.change.id={0},vcs.repository.change.title={1},', github.event.pull_request.number, github.event.pull_request.title) || '' }}cicd.pipeline.run.id=${{ github.run_number }},cicd.pipeline.run.url.full=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }},cicd.pipeline.name=${{ github.workflow }},vcs.revision.id=${{ github.sha }},vcs.ref.name=${{ github.ref_name }},vcs.repository.name=${{ github.repository }},user.id=${{ github.actor }} - OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} - -jobs: - tests: - name: Tests - strategy: - fail-fast: false - matrix: - target: - - "+test-misc" - - "+test-no-qemu-group1" - - "+test-no-qemu-group2" - - "+test-no-qemu-group3" - - "+test-no-qemu-group4" - - "+test-no-qemu-group5" - - "+test-no-qemu-group6" - - "+test-no-qemu-group7" - - "+test-no-qemu-group8" - - "+test-no-qemu-group9" - - "+test-no-qemu-group10" - - "+test-no-qemu-group11" - - "+test-no-qemu-group12" - - "+test-no-qemu-slow" - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: ${{ matrix.target }} - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - tests-qemu: - name: Tests (QEMU) - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-qemu" - USE_QEMU: true - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - SUDO: "sudo -E" - secrets: inherit - - examples: - name: Examples - strategy: - fail-fast: false - matrix: - example: - - "+examples-1" - - "+examples-2" - - "+examples-3" - - "+examples-4" - - "+examples-5" - uses: ./.github/workflows/reusable-example.yml - with: - EXAMPLE_NAME: ${{ matrix.example }} - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" - BINARY: "podman" - USE_QEMU: true - SUDO: "sudo -E" - secrets: inherit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 444a401124..d99f562798 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -173,20 +173,40 @@ jobs: path: ./artifacts-next/ retention-days: 1 - docker: - name: Docker + frontends: + name: ${{ matrix.name }} needs: fast-check-and-build - uses: ./.github/workflows/ci-docker-ubuntu.yml - secrets: inherit - - podman: - name: Podman - needs: fast-check-and-build - uses: ./.github/workflows/ci-podman-ubuntu.yml - secrets: inherit - - next: - name: Next - needs: fast-check-and-build - uses: ./.github/workflows/ci-earthly-next-docker-ubuntu.yml + strategy: + fail-fast: false + matrix: + include: + - name: Docker + frontend: "docker" + sudo: "" + use_next: false + run_integrations: true + run_examples: true + run_qemu: true + - name: Podman + frontend: "podman" + sudo: "sudo -E" + use_next: false + run_integrations: false + run_examples: true + run_qemu: true + - name: Next + frontend: "docker" + sudo: "" + use_next: true + run_integrations: false + run_examples: false + run_qemu: false + uses: ./.github/workflows/ci-frontend-suite.yml + with: + FRONTEND: ${{ matrix.frontend }} + SUDO: ${{ matrix.sudo }} + USE_NEXT: ${{ matrix.use_next }} + RUN_INTEGRATION_TESTS: ${{ matrix.run_integrations }} + RUN_EXAMPLES: ${{ matrix.run_examples }} + RUN_QEMU: ${{ matrix.run_qemu }} secrets: inherit From ccadb104456e51d4b1adfc413abf97eee552468c Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 15:20:16 +0100 Subject: [PATCH 17/29] refactor: docker, podman, next groups --- .github/workflows/ci.yml | 67 ++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d99f562798..39c4573385 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -173,40 +173,41 @@ jobs: path: ./artifacts-next/ retention-days: 1 - frontends: - name: ${{ matrix.name }} + docker: + name: Docker needs: fast-check-and-build - strategy: - fail-fast: false - matrix: - include: - - name: Docker - frontend: "docker" - sudo: "" - use_next: false - run_integrations: true - run_examples: true - run_qemu: true - - name: Podman - frontend: "podman" - sudo: "sudo -E" - use_next: false - run_integrations: false - run_examples: true - run_qemu: true - - name: Next - frontend: "docker" - sudo: "" - use_next: true - run_integrations: false - run_examples: false - run_qemu: false uses: ./.github/workflows/ci-frontend-suite.yml with: - FRONTEND: ${{ matrix.frontend }} - SUDO: ${{ matrix.sudo }} - USE_NEXT: ${{ matrix.use_next }} - RUN_INTEGRATION_TESTS: ${{ matrix.run_integrations }} - RUN_EXAMPLES: ${{ matrix.run_examples }} - RUN_QEMU: ${{ matrix.run_qemu }} + FRONTEND: "docker" + SUDO: "" + USE_NEXT: false + RUN_INTEGRATION_TESTS: true + RUN_EXAMPLES: true + RUN_QEMU: true + secrets: inherit + + podman: + name: Podman + needs: fast-check-and-build + uses: ./.github/workflows/ci-frontend-suite.yml + with: + FRONTEND: "podman" + SUDO: "sudo -E" + USE_NEXT: false + RUN_INTEGRATION_TESTS: false + RUN_EXAMPLES: true + RUN_QEMU: true + secrets: inherit + + next: + name: Next + needs: fast-check-and-build + uses: ./.github/workflows/ci-frontend-suite.yml + with: + FRONTEND: "docker" + SUDO: "" + USE_NEXT: true + RUN_INTEGRATION_TESTS: false + RUN_EXAMPLES: false + RUN_QEMU: false secrets: inherit From a612e0a03e9f3d72932096cb3755e583ad8a399d Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 15:43:45 +0100 Subject: [PATCH 18/29] ci: group under docker, podman or next --- .github/workflows/ci-frontend-suite.yml | 65 +++++++++++++++++++------ 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci-frontend-suite.yml b/.github/workflows/ci-frontend-suite.yml index c9d88d593e..b2d05d0c90 100644 --- a/.github/workflows/ci-frontend-suite.yml +++ b/.github/workflows/ci-frontend-suite.yml @@ -35,8 +35,26 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: + bootstrap-test: + name: Bootstrap Test + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd + - uses: ./.github/actions/stage2-setup + with: + GHCR_USERNAME: ${{ github.actor }} + GHCR_PASSWORD: ${{ secrets.GITHUB_TOKEN }} + DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }} + DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + BINARY: "${{ inputs.FRONTEND }}" + SUDO: "${{ inputs.SUDO }}" + - name: Run earth bootstrap + run: ${{ inputs.SUDO }} ./build/linux/amd64/earthly bootstrap + tests: name: ${{ matrix.name }} + needs: bootstrap-test strategy: fail-fast: false matrix: @@ -73,7 +91,7 @@ jobs: with: TEST_TARGET: ${{ matrix.target }} BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} USE_NEXT: ${{ inputs.USE_NEXT }} SUDO: ${{ inputs.SUDO }} @@ -81,13 +99,14 @@ jobs: tests-qemu: name: QEMU Multi-Arch Tests + needs: bootstrap-test if: ${{ inputs.RUN_QEMU }} uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: "+test-qemu" USE_QEMU: true BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} USE_NEXT: ${{ inputs.USE_NEXT }} SUDO: ${{ inputs.SUDO }} @@ -95,6 +114,7 @@ jobs: examples: name: ${{ matrix.name }} + needs: bootstrap-test if: ${{ inputs.RUN_EXAMPLES }} strategy: fail-fast: false @@ -114,7 +134,7 @@ jobs: with: EXAMPLE_NAME: ${{ matrix.example }} BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} USE_QEMU: ${{ inputs.FRONTEND == 'podman' }} SUDO: ${{ inputs.SUDO }} @@ -122,11 +142,12 @@ jobs: test-local: name: Test Local + needs: bootstrap-test if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-test-local.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} BINARY_COMPOSE: "\"docker compose\"" SUDO: ${{ inputs.SUDO }} @@ -134,105 +155,115 @@ jobs: push-integrations: name: Push Integrations + needs: bootstrap-test if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-push-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} SUDO: ${{ inputs.SUDO }} secrets: inherit bootstrap-integrations: name: Bootstrap Integrations + needs: bootstrap-test if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-bootstrap-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} SUDO: ${{ inputs.SUDO }} secrets: inherit repo-auth-tests: name: Repo Auth Tests + needs: bootstrap-test if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-repo-auth-tests.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} SUDO: ${{ inputs.SUDO }} secrets: inherit export-test: name: Export Test + needs: bootstrap-test if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-export-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} SUDO: ${{ inputs.SUDO }} secrets: inherit docker-build-integrations: name: Docker Build Integrations + needs: bootstrap-test if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-docker-build-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} SUDO: ${{ inputs.SUDO }} secrets: inherit earthbuild-image-test: name: EarthBuild Image Test + needs: bootstrap-test if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-earthbuild-image-tests.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} SUDO: ${{ inputs.SUDO }} secrets: inherit misc-test-1: name: Misc Test 1 + needs: bootstrap-test if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-misc-tests-1.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} SUDO: ${{ inputs.SUDO }} secrets: inherit misc-test-2: name: Misc Test 2 + needs: bootstrap-test if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-misc-tests-2.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} SUDO: ${{ inputs.SUDO }} secrets: inherit wait-block-main: name: Wait Block Main + needs: bootstrap-test if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-wait-block-main.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} SUDO: ${{ inputs.SUDO }} secrets: inherit wait-block-targets: name: ${{ matrix.name }} + needs: bootstrap-test if: ${{ inputs.RUN_INTEGRATION_TESTS }} strategy: fail-fast: false @@ -255,7 +286,7 @@ jobs: uses: ./.github/workflows/reusable-wait-block-target.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} SUDO: ${{ inputs.SUDO }} TARGET_NAME: ${{ matrix.target }} @@ -263,17 +294,19 @@ jobs: git-metadata-test: name: Git Metadata Test + needs: bootstrap-test if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-git-metadata-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} SUDO: ${{ inputs.SUDO }} secrets: inherit race-tests: name: ${{ matrix.name }} + needs: bootstrap-test if: ${{ inputs.RUN_INTEGRATION_TESTS }} strategy: fail-fast: false @@ -295,7 +328,7 @@ jobs: with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" TEST_TARGET: ${{ matrix.target }} - RUNS_ON: "ubuntu-latest" + RUNS_ON: "ubuntu-24.04" USE_QEMU: false BINARY: ${{ inputs.FRONTEND }} SUDO: ${{ inputs.SUDO }} From f5f7ac65c62075cfe8510d9681273615fbbd7814 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 16:22:36 +0100 Subject: [PATCH 19/29] chore: tidy --- .github/workflows/ci-frontend-suite.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci-frontend-suite.yml b/.github/workflows/ci-frontend-suite.yml index b2d05d0c90..7dea272df8 100644 --- a/.github/workflows/ci-frontend-suite.yml +++ b/.github/workflows/ci-frontend-suite.yml @@ -49,6 +49,7 @@ jobs: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" BINARY: "${{ inputs.FRONTEND }}" SUDO: "${{ inputs.SUDO }}" + USE_NEXT: "${{ inputs.USE_NEXT }}" - name: Run earth bootstrap run: ${{ inputs.SUDO }} ./build/linux/amd64/earthly bootstrap From c58e2e5f78c85750c234f11765b6ee858c0e637e Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 16:48:34 +0100 Subject: [PATCH 20/29] chore: tidy --- .github/workflows/ci-frontend-suite.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/ci-frontend-suite.yml b/.github/workflows/ci-frontend-suite.yml index 7dea272df8..a96ba6bb70 100644 --- a/.github/workflows/ci-frontend-suite.yml +++ b/.github/workflows/ci-frontend-suite.yml @@ -38,6 +38,8 @@ jobs: bootstrap-test: name: Bootstrap Test runs-on: ubuntu-24.04 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - uses: ./.github/actions/stage2-setup @@ -50,7 +52,13 @@ jobs: BINARY: "${{ inputs.FRONTEND }}" SUDO: "${{ inputs.SUDO }}" USE_NEXT: "${{ inputs.USE_NEXT }}" + - name: Set EARTH_VERSION_FLAG_OVERRIDES env + run: |- + set -euo pipefail + EARTH_VERSION_FLAG_OVERRIDES="$(tr -d '\n' < .earthly_version_flag_overrides)" + echo "EARTH_VERSION_FLAG_OVERRIDES=$EARTH_VERSION_FLAG_OVERRIDES" >> "$GITHUB_ENV" - name: Run earth bootstrap + if: ${{ inputs.FRONTEND != 'podman' }} run: ${{ inputs.SUDO }} ./build/linux/amd64/earthly bootstrap tests: From bd8042a7e1c52f483f32e8114644abca421379d4 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 19:11:52 +0100 Subject: [PATCH 21/29] ci: no pending jobs --- .github/workflows/ci-examples-suite.yml | 50 ++++++ ...end-suite.yml => ci-integration-suite.yml} | 154 +----------------- .github/workflows/ci-test-suite.yml | 114 +++++++++++++ .github/workflows/ci.yml | 50 ++++-- 4 files changed, 199 insertions(+), 169 deletions(-) create mode 100644 .github/workflows/ci-examples-suite.yml rename .github/workflows/{ci-frontend-suite.yml => ci-integration-suite.yml} (53%) create mode 100644 .github/workflows/ci-test-suite.yml diff --git a/.github/workflows/ci-examples-suite.yml b/.github/workflows/ci-examples-suite.yml new file mode 100644 index 0000000000..f43b0ebd36 --- /dev/null +++ b/.github/workflows/ci-examples-suite.yml @@ -0,0 +1,50 @@ +name: Examples Suite + +on: + workflow_call: + inputs: + FRONTEND: + required: true + type: string + SUDO: + required: false + type: string + default: "" + USE_NEXT: + required: false + type: boolean + default: false + +env: + OTEL_SERVICE_NAME: ${{ vars.OTEL_SERVICE_NAME }} + OTEL_EXPORTER_OTLP_ENDPOINT: ${{ vars.OTEL_EXPORTER_OTLP_ENDPOINT }} + OTEL_EXPORTER_OTLP_PROTOCOL: ${{ vars.OTEL_EXPORTER_OTLP_PROTOCOL }} + OTEL_RESOURCE_ATTRIBUTES: ${{ vars.OTEL_RESOURCE_ATTRIBUTES != '' && format('{0},', vars.OTEL_RESOURCE_ATTRIBUTES) || '' }}${{ github.event.pull_request != null && format('vcs.repository.change.id={0},vcs.repository.change.title={1},', github.event.pull_request.number, github.event.pull_request.title) || '' }}cicd.pipeline.run.id=${{ github.run_number }},cicd.pipeline.run.url.full=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }},cicd.pipeline.name=${{ github.workflow }},vcs.revision.id=${{ github.sha }},vcs.ref.name=${{ github.ref_name }},vcs.repository.name=${{ github.repository }},user.id=${{ github.actor }} + OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} + +jobs: + examples: + name: ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + - example: "+examples-1" + name: "Examples 1 (C, C++, Go, Elixir, Multi-repo)" + - example: "+examples-2" + name: "Examples 2 (Ruby, Rust, Scala, Multi-platform)" + - example: "+examples-3" + name: "Examples 3 (Python, Bazel, MkDocs, Zig)" + - example: "+examples-4" + name: "Examples 4 (gRPC)" + - example: "+examples-5" + name: "Examples 5 (Java, JS & Node)" + uses: ./.github/workflows/reusable-example.yml + with: + EXAMPLE_NAME: ${{ matrix.example }} + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-24.04" + BINARY: ${{ inputs.FRONTEND }} + USE_QEMU: ${{ inputs.FRONTEND == 'podman' }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit diff --git a/.github/workflows/ci-frontend-suite.yml b/.github/workflows/ci-integration-suite.yml similarity index 53% rename from .github/workflows/ci-frontend-suite.yml rename to .github/workflows/ci-integration-suite.yml index a96ba6bb70..f32d7eb1e2 100644 --- a/.github/workflows/ci-frontend-suite.yml +++ b/.github/workflows/ci-integration-suite.yml @@ -1,4 +1,4 @@ -name: Frontend Suite +name: Integration Suite on: workflow_call: @@ -14,18 +14,6 @@ on: required: false type: boolean default: false - RUN_INTEGRATION_TESTS: - required: false - type: boolean - default: false - RUN_EXAMPLES: - required: false - type: boolean - default: true - RUN_QEMU: - required: false - type: boolean - default: true env: OTEL_SERVICE_NAME: ${{ vars.OTEL_SERVICE_NAME }} @@ -35,124 +23,8 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - bootstrap-test: - name: Bootstrap Test - runs-on: ubuntu-24.04 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - - uses: ./.github/actions/stage2-setup - with: - GHCR_USERNAME: ${{ github.actor }} - GHCR_PASSWORD: ${{ secrets.GITHUB_TOKEN }} - DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }} - DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - BINARY: "${{ inputs.FRONTEND }}" - SUDO: "${{ inputs.SUDO }}" - USE_NEXT: "${{ inputs.USE_NEXT }}" - - name: Set EARTH_VERSION_FLAG_OVERRIDES env - run: |- - set -euo pipefail - EARTH_VERSION_FLAG_OVERRIDES="$(tr -d '\n' < .earthly_version_flag_overrides)" - echo "EARTH_VERSION_FLAG_OVERRIDES=$EARTH_VERSION_FLAG_OVERRIDES" >> "$GITHUB_ENV" - - name: Run earth bootstrap - if: ${{ inputs.FRONTEND != 'podman' }} - run: ${{ inputs.SUDO }} ./build/linux/amd64/earthly bootstrap - - tests: - name: ${{ matrix.name }} - needs: bootstrap-test - strategy: - fail-fast: false - matrix: - include: - - target: "+test-misc" - name: "Misc (AST & Parser)" - - target: "+test-no-qemu-group1" - name: "Group 1 (Autocompletion, Dockerfile & Imports)" - - target: "+test-no-qemu-group2" - name: "Group 2 (COPY & Git Clone Operations)" - - target: "+test-no-qemu-group3" - name: "Group 3 (Secrets, Build ARGs & Host Bind)" - - target: "+test-no-qemu-group4" - name: "Group 4 (Dockerfile, Artifact Saves & Env)" - - target: "+test-no-qemu-group5" - name: "Group 5 (Control Flow, Cache Mounts & AWS)" - - target: "+test-no-qemu-group6" - name: "Group 6 (Cache & Credential Scrubbing)" - - target: "+test-no-qemu-group7" - name: "Group 7 (Selective Save, Compose & Dotenv)" - - target: "+test-no-qemu-group8" - name: "Group 8 (Docker Registry & SSH Config)" - - target: "+test-no-qemu-group9" - name: "Group 9 (Config & ARG Redeclare Validation)" - - target: "+test-no-qemu-group10" - name: "Group 10 (SSH & Remote Resolution)" - - target: "+test-no-qemu-group11" - name: "Group 11 (Expose, Artifacts & Logbus)" - - target: "+test-no-qemu-group12" - name: "Group 12 (Label Validation & Run Cache)" - - target: "+test-no-qemu-slow" - name: "Slow (Server Daemon & WITH DOCKER)" - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: ${{ matrix.target }} - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-24.04" - BINARY: ${{ inputs.FRONTEND }} - USE_NEXT: ${{ inputs.USE_NEXT }} - SUDO: ${{ inputs.SUDO }} - secrets: inherit - - tests-qemu: - name: QEMU Multi-Arch Tests - needs: bootstrap-test - if: ${{ inputs.RUN_QEMU }} - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-qemu" - USE_QEMU: true - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-24.04" - BINARY: ${{ inputs.FRONTEND }} - USE_NEXT: ${{ inputs.USE_NEXT }} - SUDO: ${{ inputs.SUDO }} - secrets: inherit - - examples: - name: ${{ matrix.name }} - needs: bootstrap-test - if: ${{ inputs.RUN_EXAMPLES }} - strategy: - fail-fast: false - matrix: - include: - - example: "+examples-1" - name: "Examples 1 (C, C++, Go, Elixir, Multi-repo)" - - example: "+examples-2" - name: "Examples 2 (Ruby, Rust, Scala, Multi-platform)" - - example: "+examples-3" - name: "Examples 3 (Python, Bazel, MkDocs, Zig)" - - example: "+examples-4" - name: "Examples 4 (gRPC)" - - example: "+examples-5" - name: "Examples 5 (Java, JS & Node)" - uses: ./.github/workflows/reusable-example.yml - with: - EXAMPLE_NAME: ${{ matrix.example }} - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-24.04" - BINARY: ${{ inputs.FRONTEND }} - USE_QEMU: ${{ inputs.FRONTEND == 'podman' }} - SUDO: ${{ inputs.SUDO }} - secrets: inherit - test-local: name: Test Local - needs: bootstrap-test - if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-test-local.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -164,8 +36,6 @@ jobs: push-integrations: name: Push Integrations - needs: bootstrap-test - if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-push-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -176,8 +46,6 @@ jobs: bootstrap-integrations: name: Bootstrap Integrations - needs: bootstrap-test - if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-bootstrap-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -188,8 +56,6 @@ jobs: repo-auth-tests: name: Repo Auth Tests - needs: bootstrap-test - if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-repo-auth-tests.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -200,8 +66,6 @@ jobs: export-test: name: Export Test - needs: bootstrap-test - if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-export-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -212,8 +76,6 @@ jobs: docker-build-integrations: name: Docker Build Integrations - needs: bootstrap-test - if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-docker-build-integrations.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -224,8 +86,6 @@ jobs: earthbuild-image-test: name: EarthBuild Image Test - needs: bootstrap-test - if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-earthbuild-image-tests.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -236,8 +96,6 @@ jobs: misc-test-1: name: Misc Test 1 - needs: bootstrap-test - if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-misc-tests-1.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -248,8 +106,6 @@ jobs: misc-test-2: name: Misc Test 2 - needs: bootstrap-test - if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-misc-tests-2.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -260,8 +116,6 @@ jobs: wait-block-main: name: Wait Block Main - needs: bootstrap-test - if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-wait-block-main.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -272,8 +126,6 @@ jobs: wait-block-targets: name: ${{ matrix.name }} - needs: bootstrap-test - if: ${{ inputs.RUN_INTEGRATION_TESTS }} strategy: fail-fast: false matrix: @@ -303,8 +155,6 @@ jobs: git-metadata-test: name: Git Metadata Test - needs: bootstrap-test - if: ${{ inputs.RUN_INTEGRATION_TESTS }} uses: ./.github/workflows/reusable-git-metadata-test.yml with: BUILT_EARTH_PATH: "./build/linux/amd64/earthly" @@ -315,8 +165,6 @@ jobs: race-tests: name: ${{ matrix.name }} - needs: bootstrap-test - if: ${{ inputs.RUN_INTEGRATION_TESTS }} strategy: fail-fast: false matrix: diff --git a/.github/workflows/ci-test-suite.yml b/.github/workflows/ci-test-suite.yml new file mode 100644 index 0000000000..aead2bb792 --- /dev/null +++ b/.github/workflows/ci-test-suite.yml @@ -0,0 +1,114 @@ +name: Test Suite + +on: + workflow_call: + inputs: + FRONTEND: + required: true + type: string + SUDO: + required: false + type: string + default: "" + USE_NEXT: + required: false + type: boolean + default: false + RUN_QEMU: + required: false + type: boolean + default: true + +env: + OTEL_SERVICE_NAME: ${{ vars.OTEL_SERVICE_NAME }} + OTEL_EXPORTER_OTLP_ENDPOINT: ${{ vars.OTEL_EXPORTER_OTLP_ENDPOINT }} + OTEL_EXPORTER_OTLP_PROTOCOL: ${{ vars.OTEL_EXPORTER_OTLP_PROTOCOL }} + OTEL_RESOURCE_ATTRIBUTES: ${{ vars.OTEL_RESOURCE_ATTRIBUTES != '' && format('{0},', vars.OTEL_RESOURCE_ATTRIBUTES) || '' }}${{ github.event.pull_request != null && format('vcs.repository.change.id={0},vcs.repository.change.title={1},', github.event.pull_request.number, github.event.pull_request.title) || '' }}cicd.pipeline.run.id=${{ github.run_number }},cicd.pipeline.run.url.full=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }},cicd.pipeline.name=${{ github.workflow }},vcs.revision.id=${{ github.sha }},vcs.ref.name=${{ github.ref_name }},vcs.repository.name=${{ github.repository }},user.id=${{ github.actor }} + OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} + +jobs: + bootstrap-test: + name: Bootstrap Test + runs-on: ubuntu-24.04 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd + - uses: ./.github/actions/stage2-setup + with: + GHCR_USERNAME: ${{ github.actor }} + GHCR_PASSWORD: ${{ secrets.GITHUB_TOKEN }} + DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }} + DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + BINARY: "${{ inputs.FRONTEND }}" + SUDO: "${{ inputs.SUDO }}" + USE_NEXT: "${{ inputs.USE_NEXT }}" + - name: Set EARTH_VERSION_FLAG_OVERRIDES env + run: |- + set -euo pipefail + EARTH_VERSION_FLAG_OVERRIDES="$(tr -d '\n' < .earthly_version_flag_overrides)" + echo "EARTH_VERSION_FLAG_OVERRIDES=$EARTH_VERSION_FLAG_OVERRIDES" >> "$GITHUB_ENV" + - name: Run earth bootstrap + if: ${{ inputs.FRONTEND != 'podman' }} + run: ${{ inputs.SUDO }} ./build/linux/amd64/earthly bootstrap + + tests: + name: ${{ matrix.name }} + needs: bootstrap-test + strategy: + fail-fast: false + matrix: + include: + - target: "+test-misc" + name: "Misc (AST & Parser)" + - target: "+test-no-qemu-group1" + name: "Group 1 (Autocompletion, Dockerfile & Imports)" + - target: "+test-no-qemu-group2" + name: "Group 2 (COPY & Git Clone Operations)" + - target: "+test-no-qemu-group3" + name: "Group 3 (Secrets, Build ARGs & Host Bind)" + - target: "+test-no-qemu-group4" + name: "Group 4 (Dockerfile, Artifact Saves & Env)" + - target: "+test-no-qemu-group5" + name: "Group 5 (Control Flow, Cache Mounts & AWS)" + - target: "+test-no-qemu-group6" + name: "Group 6 (Cache & Credential Scrubbing)" + - target: "+test-no-qemu-group7" + name: "Group 7 (Selective Save, Compose & Dotenv)" + - target: "+test-no-qemu-group8" + name: "Group 8 (Docker Registry & SSH Config)" + - target: "+test-no-qemu-group9" + name: "Group 9 (Config & ARG Redeclare Validation)" + - target: "+test-no-qemu-group10" + name: "Group 10 (SSH & Remote Resolution)" + - target: "+test-no-qemu-group11" + name: "Group 11 (Expose, Artifacts & Logbus)" + - target: "+test-no-qemu-group12" + name: "Group 12 (Label Validation & Run Cache)" + - target: "+test-no-qemu-slow" + name: "Slow (Server Daemon & WITH DOCKER)" + uses: ./.github/workflows/reusable-test.yml + with: + TEST_TARGET: ${{ matrix.target }} + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-24.04" + BINARY: ${{ inputs.FRONTEND }} + USE_NEXT: ${{ inputs.USE_NEXT }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + + tests-qemu: + name: QEMU Multi-Arch Tests + needs: bootstrap-test + if: ${{ inputs.RUN_QEMU }} + uses: ./.github/workflows/reusable-test.yml + with: + TEST_TARGET: "+test-qemu" + USE_QEMU: true + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-24.04" + BINARY: ${{ inputs.FRONTEND }} + USE_NEXT: ${{ inputs.USE_NEXT }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 39c4573385..dd2b3ad264 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -173,41 +173,59 @@ jobs: path: ./artifacts-next/ retention-days: 1 - docker: + # --- Docker Suite --- + docker-tests: name: Docker needs: fast-check-and-build - uses: ./.github/workflows/ci-frontend-suite.yml + uses: ./.github/workflows/ci-test-suite.yml with: FRONTEND: "docker" - SUDO: "" - USE_NEXT: false - RUN_INTEGRATION_TESTS: true - RUN_EXAMPLES: true RUN_QEMU: true secrets: inherit - podman: + docker-examples: + name: Docker Examples + needs: docker-tests + uses: ./.github/workflows/ci-examples-suite.yml + with: + FRONTEND: "docker" + secrets: inherit + + docker-integrations: + name: Docker Integrations + needs: docker-tests + uses: ./.github/workflows/ci-integration-suite.yml + with: + FRONTEND: "docker" + secrets: inherit + + # --- Podman Suite --- + podman-tests: name: Podman needs: fast-check-and-build - uses: ./.github/workflows/ci-frontend-suite.yml + uses: ./.github/workflows/ci-test-suite.yml with: FRONTEND: "podman" SUDO: "sudo -E" - USE_NEXT: false - RUN_INTEGRATION_TESTS: false - RUN_EXAMPLES: true RUN_QEMU: true secrets: inherit - next: + podman-examples: + name: Podman Examples + needs: podman-tests + uses: ./.github/workflows/ci-examples-suite.yml + with: + FRONTEND: "podman" + SUDO: "sudo -E" + secrets: inherit + + # --- Next Suite --- + next-tests: name: Next needs: fast-check-and-build - uses: ./.github/workflows/ci-frontend-suite.yml + uses: ./.github/workflows/ci-test-suite.yml with: FRONTEND: "docker" - SUDO: "" USE_NEXT: true - RUN_INTEGRATION_TESTS: false - RUN_EXAMPLES: false RUN_QEMU: false secrets: inherit From a209e5a678b1636fd82e54ac022eeebe5ea53019 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 19:55:44 +0100 Subject: [PATCH 22/29] ci: remove bootstrap test --- .github/workflows/ci-test-suite.yml | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/.github/workflows/ci-test-suite.yml b/.github/workflows/ci-test-suite.yml index aead2bb792..f97fc1a6a4 100644 --- a/.github/workflows/ci-test-suite.yml +++ b/.github/workflows/ci-test-suite.yml @@ -27,35 +27,8 @@ env: OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} jobs: - bootstrap-test: - name: Bootstrap Test - runs-on: ubuntu-24.04 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - - uses: ./.github/actions/stage2-setup - with: - GHCR_USERNAME: ${{ github.actor }} - GHCR_PASSWORD: ${{ secrets.GITHUB_TOKEN }} - DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }} - DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - BINARY: "${{ inputs.FRONTEND }}" - SUDO: "${{ inputs.SUDO }}" - USE_NEXT: "${{ inputs.USE_NEXT }}" - - name: Set EARTH_VERSION_FLAG_OVERRIDES env - run: |- - set -euo pipefail - EARTH_VERSION_FLAG_OVERRIDES="$(tr -d '\n' < .earthly_version_flag_overrides)" - echo "EARTH_VERSION_FLAG_OVERRIDES=$EARTH_VERSION_FLAG_OVERRIDES" >> "$GITHUB_ENV" - - name: Run earth bootstrap - if: ${{ inputs.FRONTEND != 'podman' }} - run: ${{ inputs.SUDO }} ./build/linux/amd64/earthly bootstrap - tests: name: ${{ matrix.name }} - needs: bootstrap-test strategy: fail-fast: false matrix: @@ -100,7 +73,7 @@ jobs: tests-qemu: name: QEMU Multi-Arch Tests - needs: bootstrap-test + needs: tests if: ${{ inputs.RUN_QEMU }} uses: ./.github/workflows/reusable-test.yml with: From d5f877a5638a1f0769c8d41ac1f62716dea5d176 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Tue, 28 Jul 2026 21:02:48 +0100 Subject: [PATCH 23/29] chore: tidy --- .github/workflows/ci-test-suite.yml | 23 ++++------------------- .github/workflows/ci.yml | 3 --- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/.github/workflows/ci-test-suite.yml b/.github/workflows/ci-test-suite.yml index f97fc1a6a4..80584edc46 100644 --- a/.github/workflows/ci-test-suite.yml +++ b/.github/workflows/ci-test-suite.yml @@ -14,10 +14,6 @@ on: required: false type: boolean default: false - RUN_QEMU: - required: false - type: boolean - default: true env: OTEL_SERVICE_NAME: ${{ vars.OTEL_SERVICE_NAME }} @@ -61,24 +57,13 @@ jobs: name: "Group 12 (Label Validation & Run Cache)" - target: "+test-no-qemu-slow" name: "Slow (Server Daemon & WITH DOCKER)" + - target: "+test-qemu" + name: "QEMU Multi-Arch Tests" + use_qemu: true uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: ${{ matrix.target }} - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-24.04" - BINARY: ${{ inputs.FRONTEND }} - USE_NEXT: ${{ inputs.USE_NEXT }} - SUDO: ${{ inputs.SUDO }} - secrets: inherit - - tests-qemu: - name: QEMU Multi-Arch Tests - needs: tests - if: ${{ inputs.RUN_QEMU }} - uses: ./.github/workflows/reusable-test.yml - with: - TEST_TARGET: "+test-qemu" - USE_QEMU: true + USE_QEMU: ${{ matrix.use_qemu || false }} BUILT_EARTH_PATH: "./build/linux/amd64/earthly" RUNS_ON: "ubuntu-24.04" BINARY: ${{ inputs.FRONTEND }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dd2b3ad264..45541affc0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -180,7 +180,6 @@ jobs: uses: ./.github/workflows/ci-test-suite.yml with: FRONTEND: "docker" - RUN_QEMU: true secrets: inherit docker-examples: @@ -207,7 +206,6 @@ jobs: with: FRONTEND: "podman" SUDO: "sudo -E" - RUN_QEMU: true secrets: inherit podman-examples: @@ -227,5 +225,4 @@ jobs: with: FRONTEND: "docker" USE_NEXT: true - RUN_QEMU: false secrets: inherit From c0c4853dd0ba7ba7583bfe9e0549b10cc49da4ce Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Wed, 29 Jul 2026 09:17:36 +0100 Subject: [PATCH 24/29] fix: test title --- .github/workflows/reusable-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-test.yml b/.github/workflows/reusable-test.yml index b54c7b5dcc..4115ec2bd3 100644 --- a/.github/workflows/reusable-test.yml +++ b/.github/workflows/reusable-test.yml @@ -45,7 +45,7 @@ env: jobs: test: - name: +testing-gha-${{inputs.RUNS_ON}}-${{inputs.BINARY}} + name: ${{ inputs.TEST_TARGET }} if: ${{!inputs.SKIP_JOB}} runs-on: ${{inputs.RUNS_ON}} env: From b2174448f2340a9881d63c37d4b4739f3461eaa5 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Wed, 29 Jul 2026 09:30:08 +0100 Subject: [PATCH 25/29] ci: parity with origin/main --- .github/workflows/ci-integration-suite.yml | 10 ++++++++++ .github/workflows/ci-test-suite.yml | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/.github/workflows/ci-integration-suite.yml b/.github/workflows/ci-integration-suite.yml index f32d7eb1e2..517c974785 100644 --- a/.github/workflows/ci-integration-suite.yml +++ b/.github/workflows/ci-integration-suite.yml @@ -44,6 +44,16 @@ jobs: SUDO: ${{ inputs.SUDO }} secrets: inherit + secrets-integrations: + name: Secrets Integrations + uses: ./.github/workflows/reusable-secrets-integrations.yml + with: + BUILT_EARTH_PATH: "./build/linux/amd64/earthly" + RUNS_ON: "ubuntu-24.04" + BINARY: ${{ inputs.FRONTEND }} + SUDO: ${{ inputs.SUDO }} + secrets: inherit + bootstrap-integrations: name: Bootstrap Integrations uses: ./.github/workflows/reusable-bootstrap-integrations.yml diff --git a/.github/workflows/ci-test-suite.yml b/.github/workflows/ci-test-suite.yml index 80584edc46..8e188224e8 100644 --- a/.github/workflows/ci-test-suite.yml +++ b/.github/workflows/ci-test-suite.yml @@ -31,6 +31,7 @@ jobs: include: - target: "+test-misc" name: "Misc (AST & Parser)" + skip_on: ["next"] - target: "+test-no-qemu-group1" name: "Group 1 (Autocompletion, Dockerfile & Imports)" - target: "+test-no-qemu-group2" @@ -57,9 +58,14 @@ jobs: name: "Group 12 (Label Validation & Run Cache)" - target: "+test-no-qemu-slow" name: "Slow (Server Daemon & WITH DOCKER)" + skip_on: ["next"] - target: "+test-qemu" name: "QEMU Multi-Arch Tests" use_qemu: true + skip_on: ["next"] + - target: "+test-no-qemu-kind" + name: "KinD Integration Tests" + skip_on: ["all"] uses: ./.github/workflows/reusable-test.yml with: TEST_TARGET: ${{ matrix.target }} @@ -69,4 +75,5 @@ jobs: BINARY: ${{ inputs.FRONTEND }} USE_NEXT: ${{ inputs.USE_NEXT }} SUDO: ${{ inputs.SUDO }} + SKIP_JOB: ${{ contains(matrix.skip_on, 'all') || (inputs.USE_NEXT && contains(matrix.skip_on, 'next')) || false }} secrets: inherit From 5d9936fed4089fe0c335a7e215bb88a23c99c0d7 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Wed, 29 Jul 2026 09:49:20 +0100 Subject: [PATCH 26/29] fix: title inputs.TEST_TARGET --- .github/workflows/ci-test-suite.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-test-suite.yml b/.github/workflows/ci-test-suite.yml index 8e188224e8..0edbe2108b 100644 --- a/.github/workflows/ci-test-suite.yml +++ b/.github/workflows/ci-test-suite.yml @@ -24,7 +24,8 @@ env: jobs: tests: - name: ${{ matrix.name }} + name: ${{ matrix.target }} + if: ${{ !contains(matrix.skip_on, 'all') && (!inputs.USE_NEXT || !contains(matrix.skip_on, 'next')) }} strategy: fail-fast: false matrix: @@ -75,5 +76,4 @@ jobs: BINARY: ${{ inputs.FRONTEND }} USE_NEXT: ${{ inputs.USE_NEXT }} SUDO: ${{ inputs.SUDO }} - SKIP_JOB: ${{ contains(matrix.skip_on, 'all') || (inputs.USE_NEXT && contains(matrix.skip_on, 'next')) || false }} secrets: inherit From 2efeccdcd9e296c1d42cb9d81995f547908a2c47 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Wed, 29 Jul 2026 14:10:09 +0100 Subject: [PATCH 27/29] ci: remove obsolete secrets-integrations workflow and job --- .github/workflows/ci-integration-suite.yml | 10 --- .../reusable-secrets-integrations.yml | 74 ------------------- 2 files changed, 84 deletions(-) delete mode 100644 .github/workflows/reusable-secrets-integrations.yml diff --git a/.github/workflows/ci-integration-suite.yml b/.github/workflows/ci-integration-suite.yml index 517c974785..f32d7eb1e2 100644 --- a/.github/workflows/ci-integration-suite.yml +++ b/.github/workflows/ci-integration-suite.yml @@ -44,16 +44,6 @@ jobs: SUDO: ${{ inputs.SUDO }} secrets: inherit - secrets-integrations: - name: Secrets Integrations - uses: ./.github/workflows/reusable-secrets-integrations.yml - with: - BUILT_EARTH_PATH: "./build/linux/amd64/earthly" - RUNS_ON: "ubuntu-24.04" - BINARY: ${{ inputs.FRONTEND }} - SUDO: ${{ inputs.SUDO }} - secrets: inherit - bootstrap-integrations: name: Bootstrap Integrations uses: ./.github/workflows/reusable-bootstrap-integrations.yml diff --git a/.github/workflows/reusable-secrets-integrations.yml b/.github/workflows/reusable-secrets-integrations.yml deleted file mode 100644 index 380d0ccacc..0000000000 --- a/.github/workflows/reusable-secrets-integrations.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: Secrets Integrations - -on: - workflow_call: - inputs: - BUILT_EARTH_PATH: - required: true - type: string - BINARY: - required: true - type: string - SUDO: - type: string - required: false - RUNS_ON: - required: true - type: string - SKIP_JOB: - required: false - type: boolean - default: false - USE_SATELLITE: - required: false - type: boolean - default: false - SATELLITE_NAME: - required: false - type: string - -env: - OTEL_SERVICE_NAME: ${{ vars.OTEL_SERVICE_NAME }} - OTEL_EXPORTER_OTLP_ENDPOINT: ${{ vars.OTEL_EXPORTER_OTLP_ENDPOINT }} - OTEL_EXPORTER_OTLP_PROTOCOL: ${{ vars.OTEL_EXPORTER_OTLP_PROTOCOL }} - OTEL_RESOURCE_ATTRIBUTES: ${{ vars.OTEL_RESOURCE_ATTRIBUTES != '' && format('{0},', vars.OTEL_RESOURCE_ATTRIBUTES) || '' }}${{ github.event.pull_request != null && format('vcs.repository.change.id={0},vcs.repository.change.title={1},', github.event.pull_request.number, github.event.pull_request.title) || '' }}cicd.pipeline.run.id=${{ github.run_number }},cicd.pipeline.run.url.full=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }},cicd.pipeline.name=${{ github.workflow }},vcs.revision.id=${{ github.sha }},vcs.ref.name=${{ github.ref_name }},vcs.repository.name=${{ github.repository }},user.id=${{ github.actor }} - OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} - -jobs: - secret-integration: - if: ${{ !inputs.SKIP_JOB && (github.event_name == 'push' || github.event_name == 'merge_group' || github.event.pull_request.head.repo.full_name == github.repository) }} - runs-on: ${{inputs.RUNS_ON}} - env: - FORCE_COLOR: 1 - EARTHLY_TOKEN: "${{ secrets.EARTHLY_TOKEN }}" - EARTHLY_INSTALL_ID: "earthly-githubactions" - DOCKERHUB_MIRROR_USERNAME: "${{ secrets.DOCKERHUB_MIRROR_USERNAME }}" - DOCKERHUB_MIRROR_PASSWORD: "${{ secrets.DOCKERHUB_MIRROR_PASSWORD }}" - # Used in our github action as the token - TODO: look to change it into an input - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - - uses: ./.github/actions/stage2-setup - with: - DOCKERHUB_MIRROR_USERNAME: "${{ secrets.DOCKERHUB_MIRROR_USERNAME }}" - DOCKERHUB_MIRROR_PASSWORD: "${{ secrets.DOCKERHUB_MIRROR_PASSWORD }}" - DOCKERHUB_USERNAME: "${{ vars.DOCKERHUB_USERNAME }}" - DOCKERHUB_PASSWORD: "${{ secrets.DOCKERHUB_TOKEN }}" - EARTHLY_TOKEN: "${{ secrets.EARTHLY_TOKEN }}" - BUILT_EARTH_PATH: "${{ inputs.BUILT_EARTH_PATH }}" - BINARY: "${{ inputs.BINARY }}" - SUDO: "${{ inputs.SUDO }}" - - name: Set EARTHLY_VERSION_FLAG_OVERRIDES env - run: |- - set -euo pipefail - EARTHLY_VERSION_FLAG_OVERRIDES="$(tr -d '\n' < .earthly_version_flag_overrides)" - echo "EARTHLY_VERSION_FLAG_OVERRIDES=$EARTHLY_VERSION_FLAG_OVERRIDES" >> "$GITHUB_ENV" - - name: install expect - run: sudo apt-get install -y expect - - name: run secrets-integration - run: env earthly=${{inputs.BUILT_EARTH_PATH}} scripts/tests/secrets-integration.sh - - name: Buildkit logs (runs on failure) - if: ${{ failure() }} - run: ${{inputs.SUDO}} ${{inputs.BINARY}} logs earthly-buildkitd || true From b774106a05b349d3aa29ba255f89b37451759eb5 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Wed, 29 Jul 2026 22:56:16 +0100 Subject: [PATCH 28/29] ci: run all jobs in parallel --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 45541affc0..6455035f84 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -184,7 +184,7 @@ jobs: docker-examples: name: Docker Examples - needs: docker-tests + needs: fast-check-and-build uses: ./.github/workflows/ci-examples-suite.yml with: FRONTEND: "docker" @@ -192,7 +192,7 @@ jobs: docker-integrations: name: Docker Integrations - needs: docker-tests + needs: fast-check-and-build uses: ./.github/workflows/ci-integration-suite.yml with: FRONTEND: "docker" @@ -210,7 +210,7 @@ jobs: podman-examples: name: Podman Examples - needs: podman-tests + needs: fast-check-and-build uses: ./.github/workflows/ci-examples-suite.yml with: FRONTEND: "podman" From 01c7eb4e0fd7b71ce660ffae61815728d94d5bf5 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Thu, 30 Jul 2026 12:57:37 +0100 Subject: [PATCH 29/29] fix: Podman / +test-misc --- .github/actions/stage2-setup/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/stage2-setup/action.yml b/.github/actions/stage2-setup/action.yml index f0b9773946..3af05d0ca5 100644 --- a/.github/actions/stage2-setup/action.yml +++ b/.github/actions/stage2-setup/action.yml @@ -160,7 +160,7 @@ runs: run: ${{inputs.SUDO}} apt-get update && ${{inputs.SUDO}} apt-get install -y qemu-user-static shell: bash - name: Set fixed buildkitd image for Docker 29+ (non-fork) - if: steps.fork-check.outputs.is_fork != 'true' + if: inputs.BINARY == 'docker' && steps.fork-check.outputs.is_fork != 'true' shell: bash run: | echo "EARTHLY_BUILDKIT_IMAGE=ghcr.io/earthbuild/earthbuild:buildkitd-v0.8.17-fix.1" >> $GITHUB_ENV