Merge pull request #2225 from jsternberg/command-duration-metric #3277
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- 'master' | |
- 'v[0-9]*' | |
tags: | |
- 'v*' | |
pull_request: | |
paths-ignore: | |
- '.github/releases.json' | |
- 'README.md' | |
- 'docs/**' | |
env: | |
BUILDX_VERSION: "latest" | |
BUILDKIT_IMAGE: "moby/buildkit:latest" | |
REPO_SLUG: "docker/buildx-bin" | |
DESTDIR: "./bin" | |
TEST_CACHE_SCOPE: "test" | |
TESTFLAGS: "-v --parallel=6 --timeout=30m" | |
GOTESTSUM_FORMAT: "standard-verbose" | |
GO_VERSION: "1.21.6" | |
GOTESTSUM_VERSION: "v1.9.0" # same as one in Dockerfile | |
jobs: | |
prepare-test-integration: | |
runs-on: ubuntu-22.04 | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver-opts: image=${{ env.BUILDKIT_IMAGE }} | |
buildkitd-flags: --debug | |
- | |
name: Build | |
uses: docker/bake-action@v4 | |
with: | |
targets: integration-test-base | |
set: | | |
*.cache-from=type=gha,scope=${{ env.TEST_CACHE_SCOPE }} | |
*.cache-to=type=gha,scope=${{ env.TEST_CACHE_SCOPE }} | |
test-integration: | |
runs-on: ubuntu-22.04 | |
needs: | |
- prepare-test-integration | |
env: | |
TESTFLAGS_DOCKER: "-v --parallel=1 --timeout=30m" | |
TEST_IMAGE_BUILD: "0" | |
TEST_IMAGE_ID: "buildx-tests" | |
strategy: | |
fail-fast: false | |
matrix: | |
worker: | |
- docker | |
- docker\+containerd # same as docker, but with containerd snapshotter | |
- docker-container | |
- remote | |
pkg: | |
- ./tests | |
steps: | |
- | |
name: Prepare | |
run: | | |
echo "TESTREPORTS_NAME=${{ github.job }}-$(echo "${{ matrix.pkg }}-${{ matrix.worker }}" | tr -dc '[:alnum:]-\n\r' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- | |
name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver-opts: image=${{ env.BUILDKIT_IMAGE }} | |
buildkitd-flags: --debug | |
- | |
name: Build test image | |
uses: docker/bake-action@v4 | |
with: | |
targets: integration-test | |
set: | | |
*.cache-from=type=gha,scope=${{ env.TEST_CACHE_SCOPE }} | |
*.output=type=docker,name=${{ env.TEST_IMAGE_ID }} | |
- | |
name: Test | |
run: | | |
./hack/test | |
env: | |
TEST_REPORT_SUFFIX: "-${{ env.TESTREPORTS_NAME }}" | |
TEST_DOCKERD: "${{ startsWith(matrix.worker, 'docker') && '1' || '0' }}" | |
TESTFLAGS: "${{ (matrix.worker == 'docker' || matrix.worker == 'docker\\+containerd') && env.TESTFLAGS_DOCKER || env.TESTFLAGS }} --run=//worker=${{ matrix.worker }}$" | |
TESTPKGS: "${{ matrix.pkg }}" | |
- | |
name: Send to Codecov | |
if: always() | |
uses: codecov/codecov-action@v4 | |
with: | |
directory: ./bin/testreports | |
flags: integration | |
- | |
name: Generate annotations | |
if: always() | |
uses: crazy-max/.github/.github/actions/gotest-annotations@fa6141aedf23596fb8bdcceab9cce8dadaa31bd9 | |
with: | |
directory: ./bin/testreports | |
- | |
name: Upload test reports | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-reports-${{ env.TESTREPORTS_NAME }} | |
path: ./bin/testreports | |
test-unit: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-22.04 | |
- macos-12 | |
- windows-2022 | |
env: | |
SKIP_INTEGRATION_TESTS: 1 | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: "${{ env.GO_VERSION }}" | |
- | |
name: Prepare | |
run: | | |
testreportsName=${{ github.job }}--${{ matrix.os }} | |
testreportsBaseDir=./bin/testreports | |
testreportsDir=$testreportsBaseDir/$testreportsName | |
echo "TESTREPORTS_NAME=$testreportsName" >> $GITHUB_ENV | |
echo "TESTREPORTS_BASEDIR=$testreportsBaseDir" >> $GITHUB_ENV | |
echo "TESTREPORTS_DIR=$testreportsDir" >> $GITHUB_ENV | |
mkdir -p $testreportsDir | |
shell: bash | |
- | |
name: Install gotestsum | |
run: | | |
go install gotest.tools/gotestsum@${{ env.GOTESTSUM_VERSION }} | |
- | |
name: Test | |
env: | |
TMPDIR: ${{ runner.temp }} | |
run: | | |
gotestsum \ | |
--jsonfile="${{ env.TESTREPORTS_DIR }}/go-test-report.json" \ | |
--junitfile="${{ env.TESTREPORTS_DIR }}/junit-report.xml" \ | |
--packages="./..." \ | |
-- \ | |
"-mod=vendor" \ | |
"-coverprofile" "${{ env.TESTREPORTS_DIR }}/coverage.txt" \ | |
"-covermode" "atomic" ${{ env.TESTFLAGS }} | |
shell: bash | |
- | |
name: Send to Codecov | |
if: always() | |
uses: codecov/codecov-action@v4 | |
with: | |
directory: ${{ env.TESTREPORTS_DIR }} | |
env_vars: RUNNER_OS | |
flags: unit | |
- | |
name: Generate annotations | |
if: always() | |
uses: crazy-max/.github/.github/actions/gotest-annotations@fa6141aedf23596fb8bdcceab9cce8dadaa31bd9 | |
with: | |
directory: ${{ env.TESTREPORTS_DIR }} | |
- | |
name: Upload test reports | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-reports-${{ env.TESTREPORTS_NAME }} | |
path: ${{ env.TESTREPORTS_BASEDIR }} | |
prepare-binaries: | |
runs-on: ubuntu-22.04 | |
outputs: | |
matrix: ${{ steps.platforms.outputs.matrix }} | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Create matrix | |
id: platforms | |
run: | | |
echo "matrix=$(docker buildx bake binaries-cross --print | jq -cr '.target."binaries-cross".platforms')" >>${GITHUB_OUTPUT} | |
- | |
name: Show matrix | |
run: | | |
echo ${{ steps.platforms.outputs.matrix }} | |
binaries: | |
runs-on: ubuntu-22.04 | |
needs: | |
- prepare-binaries | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: ${{ fromJson(needs.prepare-binaries.outputs.matrix) }} | |
steps: | |
- | |
name: Prepare | |
run: | | |
platform=${{ matrix.platform }} | |
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver-opts: image=${{ env.BUILDKIT_IMAGE }} | |
buildkitd-flags: --debug | |
- | |
name: Build | |
run: | | |
make release | |
env: | |
PLATFORMS: ${{ matrix.platform }} | |
CACHE_FROM: type=gha,scope=binaries-${{ env.PLATFORM_PAIR }} | |
CACHE_TO: type=gha,scope=binaries-${{ env.PLATFORM_PAIR }},mode=max | |
- | |
name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: buildx-${{ env.PLATFORM_PAIR }} | |
path: ${{ env.DESTDIR }}/* | |
if-no-files-found: error | |
bin-image: | |
runs-on: ubuntu-22.04 | |
needs: | |
- test-integration | |
- test-unit | |
if: ${{ github.event_name != 'pull_request' && github.repository == 'docker/buildx' }} | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver-opts: image=${{ env.BUILDKIT_IMAGE }} | |
buildkitd-flags: --debug | |
- | |
name: Docker meta | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
${{ env.REPO_SLUG }} | |
tags: | | |
type=ref,event=branch | |
type=ref,event=pr | |
type=semver,pattern={{version}} | |
bake-target: meta-helper | |
- | |
name: Login to DockerHub | |
if: github.event_name != 'pull_request' | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ vars.DOCKERPUBLICBOT_USERNAME }} | |
password: ${{ secrets.DOCKERPUBLICBOT_WRITE_PAT }} | |
- | |
name: Build and push image | |
uses: docker/bake-action@v4 | |
with: | |
files: | | |
./docker-bake.hcl | |
${{ steps.meta.outputs.bake-file }} | |
targets: image-cross | |
push: ${{ github.event_name != 'pull_request' }} | |
sbom: true | |
set: | | |
*.cache-from=type=gha,scope=bin-image | |
*.cache-to=type=gha,scope=bin-image,mode=max | |
release: | |
runs-on: ubuntu-22.04 | |
needs: | |
- test-integration | |
- test-unit | |
- binaries | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Download binaries | |
uses: actions/download-artifact@v4 | |
with: | |
path: ${{ env.DESTDIR }} | |
pattern: buildx-* | |
merge-multiple: true | |
- | |
name: Create checksums | |
run: ./hack/hash-files | |
- | |
name: List artifacts | |
run: | | |
tree -nh ${{ env.DESTDIR }} | |
- | |
name: Check artifacts | |
run: | | |
find ${{ env.DESTDIR }} -type f -exec file -e ascii -- {} + | |
- | |
name: GitHub Release | |
if: startsWith(github.ref, 'refs/tags/v') | |
uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # v0.1.15 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
draft: true | |
files: ${{ env.DESTDIR }}/* | |
buildkit-edge: | |
runs-on: ubuntu-22.04 | |
continue-on-error: true | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver-opts: image=moby/buildkit:master | |
buildkitd-flags: --debug | |
- | |
# Just run a bake target to check eveything runs fine | |
name: Build | |
uses: docker/bake-action@v4 | |
with: | |
targets: binaries |