Skip to content

Update BK for new inline cache (won't merge) #4640

Update BK for new inline cache (won't merge)

Update BK for new inline cache (won't merge) #4640

name: Docker CI Ubuntu
on:
push:
branches: [ main ]
paths-ignore:
- 'docs/**'
- '**.md'
- '.github/renovate.json5'
- '.github/CODEOWNERS'
- 'LICENSE'
pull_request:
branches: [ main ]
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
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
build-earthly:
# needs: check-essential-files
# allow the job to execute even if check-essential-files is skipped
if: ${{ !failure() }}
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-lint:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+lint-all"
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-test-misc:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-misc"
BUILT_EARTHLY_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-no-qemu-group1:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group1"
BUILT_EARTHLY_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-no-qemu-group2:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group2"
BUILT_EARTHLY_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-no-qemu-group1-no-logbus:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group1"
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
EXTRA_ARGS: "--logstream=false --logstream-upload=false --auto-skip"
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-tests-no-qemu-group2-no-logbus:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group2"
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
EXTRA_ARGS: "--logstream=false --logstream-upload=false --auto-skip"
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-tests-no-qemu-group3:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group3"
BUILT_EARTHLY_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-no-qemu-group3-no-logbus:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group3"
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
EXTRA_ARGS: "--logstream=false --logstream-upload=false --auto-skip"
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-tests-no-qemu-group4:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group4"
BUILT_EARTHLY_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-no-qemu-group4-no-logbus:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group4"
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
EXTRA_ARGS: "--logstream=false --logstream-upload=false --auto-skip"
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-tests-no-qemu-group5:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group5"
BUILT_EARTHLY_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-no-qemu-group5-no-logbus:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group5"
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
EXTRA_ARGS: "--logstream=false --logstream-upload=false --auto-skip"
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-tests-no-qemu-group6:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group6"
BUILT_EARTHLY_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-no-qemu-group6-no-logbus:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group6"
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
EXTRA_ARGS: "--logstream=false --logstream-upload=false --auto-skip"
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-tests-no-qemu-group7:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group7"
BUILT_EARTHLY_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-no-qemu-group7-no-logbus:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group7"
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
EXTRA_ARGS: "--logstream=false --logstream-upload=false --auto-skip"
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-tests-no-qemu-group8:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group8"
BUILT_EARTHLY_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-no-qemu-group8-no-logbus:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group8"
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
EXTRA_ARGS: "--logstream=false --logstream-upload=false --auto-skip"
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-tests-no-qemu-group9:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group9"
BUILT_EARTHLY_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-no-qemu-group10:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group10"
BUILT_EARTHLY_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-no-qemu-group11:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group11"
BUILT_EARTHLY_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-no-qemu-group12:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-group12"
BUILT_EARTHLY_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-no-qemu-slow:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-slow"
BUILT_EARTHLY_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-no-qemu-kind:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-no-qemu-kind"
BUILT_EARTHLY_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-test-earthly-mirror-was-setup:
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+test-earthly-mirror-was-setup"
BUILT_EARTHLY_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-test-account:
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/account+test"
BUILT_EARTHLY_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-test-registry-command-dockerhub:
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/registry-command+test-dockerhub"
BUILT_EARTHLY_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-test-registry-command-ecr:
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/registry-command+test-ecr"
BUILT_EARTHLY_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-test-registry-command-gcp:
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/registry-command+test-gcp"
BUILT_EARTHLY_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-test-registry-command-multi:
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/registry-command+test-multi"
BUILT_EARTHLY_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-test-web-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/web+test"
BUILT_EARTHLY_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-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_EARTHLY_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:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test.yml
with:
TEST_TARGET: "+test-qemu"
USE_QEMU: true
BUILT_EARTHLY_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-examples-1:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-example.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
EXAMPLE_NAME: "+examples-1"
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-examples-2:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-example.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
EXAMPLE_NAME: "+examples-2"
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-examples-3:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-example.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
EXAMPLE_NAME: "+examples-3"
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-test-local:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-test-local.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
BINARY_COMPOSE: "\"docker compose\""
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-push-integrations:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-push-integrations.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-secret-integrations:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-secrets-integrations.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-bootstrap-integrations:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-bootstrap-integrations.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-repo-auth-tests:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-repo-auth-tests.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-export-test:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-export-test.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-docker-build-integrations:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-docker-build-integrations.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-earthly-image-test:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-earthly-image-tests.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-misc-test-1:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-misc-tests-1.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-misc-test-2:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-misc-tests-2.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-wait-block-main:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-wait-block-main.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
docker-wait-block-quick:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-wait-block-target.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
TARGET_NAME: "+test-misc"
EXTRA_ARGS: "--auto-skip"
secrets: inherit
docker-wait-block-no-qemu-group1:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-wait-block-target.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
TARGET_NAME: "+test-no-qemu-group1"
EXTRA_ARGS: "--auto-skip"
secrets: inherit
docker-wait-block-no-qemu-group2:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-wait-block-target.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
TARGET_NAME: "+test-no-qemu-group2"
EXTRA_ARGS: "--auto-skip"
secrets: inherit
docker-wait-block-no-qemu-group3:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-wait-block-target.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
TARGET_NAME: "+test-no-qemu-group3"
EXTRA_ARGS: "--auto-skip"
secrets: inherit
docker-wait-block-no-qemu-group4:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-wait-block-target.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
TARGET_NAME: "+test-no-qemu-group4"
EXTRA_ARGS: "--auto-skip"
secrets: inherit
docker-wait-block-no-qemu-slow:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-wait-block-target.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
TARGET_NAME: "+test-no-qemu-slow"
EXTRA_ARGS: "--auto-skip"
secrets: inherit
docker-wait-block-qemu:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-wait-block-target.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
TARGET_NAME: "+test-qemu"
EXTRA_ARGS: "--auto-skip"
secrets: inherit
docker-git-metadata-test:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-git-metadata-test.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
RUNS_ON: "ubuntu-latest"
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
secrets: inherit
race-test-misc:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-race-test.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
TEST_TARGET: "+test-misc"
RUNS_ON: "ubuntu-latest"
USE_QEMU: false
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
EXTRA_ARGS: "--auto-skip"
secrets: inherit
race-tests-no-qemu-group1:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-race-test.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
TEST_TARGET: "+test-no-qemu-group1"
RUNS_ON: "ubuntu-latest"
USE_QEMU: false
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
EXTRA_ARGS: "--auto-skip"
secrets: inherit
race-tests-no-qemu-group2:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-race-test.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
TEST_TARGET: "+test-no-qemu-group2"
RUNS_ON: "ubuntu-latest"
USE_QEMU: false
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
EXTRA_ARGS: "--auto-skip"
secrets: inherit
race-tests-no-qemu-group3:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-race-test.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
TEST_TARGET: "+test-no-qemu-group3"
RUNS_ON: "ubuntu-latest"
USE_QEMU: false
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
EXTRA_ARGS: "--auto-skip"
secrets: inherit
race-tests-no-qemu-group4:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-race-test.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
TEST_TARGET: "+test-no-qemu-group4"
RUNS_ON: "ubuntu-latest"
USE_QEMU: false
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
EXTRA_ARGS: "--auto-skip"
secrets: inherit
race-tests-no-qemu-slow:
needs: build-earthly
if: ${{ !failure() }}
uses: ./.github/workflows/reusable-race-test.yml
with:
BUILT_EARTHLY_PATH: "./build/linux/amd64/earthly"
TEST_TARGET: "+test-no-qemu-slow"
RUNS_ON: "ubuntu-latest"
USE_QEMU: false
BINARY: "docker"
SUDO: ""
SKIP_JOB: ${{ needs.build-earthly.result != 'success' }}
EXTRA_ARGS: "--auto-skip"
secrets: inherit
tutorial:
needs: build-earthly
name: Tutorial
runs-on: ubuntu-latest
env:
FORCE_COLOR: 1
EARTHLY_TOKEN: "${{ secrets.EARTHLY_TOKEN }}"
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 }}
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Docker mirror login (Earthly Only)
run: docker login registry-1.docker.io.mirror.corp.earthly.dev --username "${{ secrets.DOCKERHUB_MIRROR_USERNAME }}" --password "${{ secrets.DOCKERHUB_MIRROR_PASSWORD }}"
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
- name: Retrieve earthly from build-earthly job
run: |-
BUILDKITD_IMAGE=docker.io/earthly/buildkitd-staging TAG=${GITHUB_SHA}-ubuntu-latest-docker ./earthly upgrade
mkdir -p $(dirname "./build/earthly")
mv ${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest-docker ./build/earthly
- name: Configure Earthly to use mirror (Earthly Only)
run: |-
./build/earthly config global.buildkit_additional_config "'[registry.\"docker.io\"]
mirrors = [\"registry-1.docker.io.mirror.corp.earthly.dev\"]'"
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
- 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 tutorial part 1
run: ./build/earthly -P ./examples/tutorial+test-part1 --earthly=$(realpath ./build/earthly)
- name: Build tutorial part 2
run: ./build/earthly -P ./examples/tutorial+test-part2 --earthly=$(realpath ./build/earthly)
- name: Build tutorial part 3
run: ./build/earthly -P ./examples/tutorial+test-part3 --earthly=$(realpath ./build/earthly)
- name: Build tutorial part 4
run: ./build/earthly -P ./examples/tutorial+test-part4 --earthly=$(realpath ./build/earthly)
- name: Build tutorial part 5
run: ./build/earthly -P ./examples/tutorial+test-part5 --earthly=$(realpath ./build/earthly)
- name: Build tutorial part 6
run: ./build/earthly -P ./examples/tutorial+test-part6 --earthly=$(realpath ./build/earthly)
- name: Buildkit logs (runs on failure)
run: docker logs earthly-buildkitd
if: ${{ failure() }}
buildkitd-amd64:
needs: build-earthly
name: +all-buildkitd-amd64
runs-on: ubuntu-latest
env:
FORCE_COLOR: 1
EARTHLY_TOKEN: "${{ secrets.EARTHLY_TOKEN }}"
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 }}
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up QEMU
id: qemu
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:latest
platforms: all
- name: "Put back the git branch into git (Earthly 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: Docker mirror login (Earthly Only)
run: docker login registry-1.docker.io.mirror.corp.earthly.dev --username "${{ secrets.DOCKERHUB_MIRROR_USERNAME }}" --password "${{ secrets.DOCKERHUB_MIRROR_PASSWORD }}"
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
- name: Retrieve earthly from build-earthly job
run: |-
BUILDKITD_IMAGE=docker.io/earthly/buildkitd-staging TAG=${GITHUB_SHA}-ubuntu-latest-docker ./earthly upgrade
mkdir -p $(dirname "./build/earthly")
mv ${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest-docker ./build/earthly
- name: Configure Earthly to use mirror (Earthly Only)
run: |-
./build/earthly config global.buildkit_additional_config "'[registry.\"docker.io\"]
mirrors = [\"registry-1.docker.io.mirror.corp.earthly.dev\"]'"
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
- 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 linux/amd64 +buildkitd
run: |-
./build/earthly --ci --platform=linux/amd64 ./buildkitd+buildkitd --BUILDKIT_PROJECT="$BUILDKIT_PROJECT"
- name: Buildkit logs (runs on failure)
run: docker logs earthly-buildkitd
if: ${{ failure() }}
buildkitd-arm64:
needs: build-earthly
name: +all-buildkitd-arm64
runs-on: ubuntu-latest
env:
FORCE_COLOR: 1
EARTHLY_TOKEN: "${{ secrets.EARTHLY_TOKEN }}"
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 }}
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up QEMU
id: qemu
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:latest
platforms: all
- name: "Put back the git branch into git (Earthly 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: Docker mirror login (Earthly Only)
run: docker login registry-1.docker.io.mirror.corp.earthly.dev --username "${{ secrets.DOCKERHUB_MIRROR_USERNAME }}" --password "${{ secrets.DOCKERHUB_MIRROR_PASSWORD }}"
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
- name: Retrieve earthly from build-earthly job
run: |-
BUILDKITD_IMAGE=docker.io/earthly/buildkitd-staging TAG=${GITHUB_SHA}-ubuntu-latest-docker ./earthly upgrade
mkdir -p $(dirname "./build/earthly")
mv ${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest-docker ./build/earthly
- name: Configure Earthly to use mirror (Earthly Only)
run: |-
./build/earthly config global.buildkit_additional_config "'[registry.\"docker.io\"]
mirrors = [\"registry-1.docker.io.mirror.corp.earthly.dev\"]'"
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
- 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 linux/arm64 +buildkitd
run: |-
./build/earthly --ci --platform=linux/arm64 ./buildkitd+buildkitd --BUILDKIT_PROJECT="$BUILDKIT_PROJECT"
- name: Buildkit logs (runs on failure)
run: docker logs earthly-buildkitd
if: ${{ failure() }}
earthly:
needs: build-earthly
name: +earthly-all +earthly-docker
runs-on: ubuntu-latest
env:
FORCE_COLOR: 1
EARTHLY_TOKEN: "${{ secrets.EARTHLY_TOKEN }}"
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 }}
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up QEMU
id: qemu
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:latest
platforms: all
- name: "Put back the git branch into git (Earthly 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: Docker mirror login (Earthly Only)
run: docker login registry-1.docker.io.mirror.corp.earthly.dev --username "${{ secrets.DOCKERHUB_MIRROR_USERNAME }}" --password "${{ secrets.DOCKERHUB_MIRROR_PASSWORD }}"
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
- name: Retrieve earthly from build-earthly job
run: |-
BUILDKITD_IMAGE=docker.io/earthly/buildkitd-staging TAG=${GITHUB_SHA}-ubuntu-latest-docker ./earthly upgrade
mkdir -p $(dirname "./build/earthly")
mv ${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest-docker ./build/earthly
- name: Configure Earthly to use mirror (Earthly Only)
run: |-
./build/earthly config global.buildkit_additional_config "'[registry.\"docker.io\"]
mirrors = [\"registry-1.docker.io.mirror.corp.earthly.dev\"]'"
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
- 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 +earthly-all
run: ./build/earthly --ci +earthly-all
- name: Build +earthly-docker
run: ./build/earthly --ci +earthly-docker
- name: Buildkit logs (runs on failure)
run: docker logs earthly-buildkitd
if: ${{ failure() }}
prerelease:
needs: build-earthly
name: +prerelease
runs-on: ubuntu-latest
env:
FORCE_COLOR: 1
EARTHLY_TOKEN: "${{ secrets.EARTHLY_TOKEN }}"
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 }}
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up QEMU
id: qemu
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:latest
platforms: all
- name: "Put back the git branch into git (Earthly 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: Docker mirror login (Earthly Only)
run: docker login registry-1.docker.io.mirror.corp.earthly.dev --username "${{ secrets.DOCKERHUB_MIRROR_USERNAME }}" --password "${{ secrets.DOCKERHUB_MIRROR_PASSWORD }}"
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
- name: Retrieve earthly from build-earthly job
run: |-
BUILDKITD_IMAGE=docker.io/earthly/buildkitd-staging TAG=${GITHUB_SHA}-ubuntu-latest-docker ./earthly upgrade
mkdir -p $(dirname "./build/earthly")
mv ${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest-docker ./build/earthly
- name: Configure Earthly to use mirror (Earthly Only)
run: |-
./build/earthly config global.buildkit_additional_config "'[registry.\"docker.io\"]
mirrors = [\"registry-1.docker.io.mirror.corp.earthly.dev\"]'"
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
- 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 +prerelease
run: ./build/earthly --ci +prerelease
- name: Buildkit logs (runs on failure)
run: docker logs earthly-buildkitd
if: ${{ failure() }}
push-prerelease:
name: --push +prerelease
if: github.event_name == 'push'
needs:
- build-earthly
- buildkitd-amd64
- buildkitd-arm64
- prerelease
- earthly
runs-on: ubuntu-latest
env:
FORCE_COLOR: 1
EARTHLY_TOKEN: "${{ secrets.EARTHLY_TOKEN }}"
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 }}
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up QEMU
id: qemu
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:latest
platforms: all
- name: "Put back the git branch into git (Earthly 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: Docker mirror login (Earthly Only)
run: docker login registry-1.docker.io.mirror.corp.earthly.dev --username "${{ secrets.DOCKERHUB_MIRROR_USERNAME }}" --password "${{ secrets.DOCKERHUB_MIRROR_PASSWORD }}"
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
- name: Retrieve earthly from build-earthly job
run: |-
BUILDKITD_IMAGE=docker.io/earthly/buildkitd-staging TAG=${GITHUB_SHA}-ubuntu-latest-docker ./earthly upgrade
mkdir -p $(dirname "./build/earthly")
mv ${HOME}/.earthly/earthly-${GITHUB_SHA}-ubuntu-latest-docker ./build/earthly
- name: Configure Earthly to use mirror (Earthly Only)
run: |-
./build/earthly config global.buildkit_additional_config "'[registry.\"docker.io\"]
mirrors = [\"registry-1.docker.io.mirror.corp.earthly.dev\"]'"
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
- name: Docker Login (main build)
run: docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password "${{ secrets.DOCKERHUB_TOKEN }}"
- 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 +prerelease
run: ./build/earthly --ci --push +prerelease
- name: Buildkit logs (runs on failure)
run: docker logs earthly-buildkitd
if: ${{ failure() }}