| name: build |
| |
| # Default to 'contents: read', which grants actions to read commits. |
| # |
| # If any permission is set, any permission not included in the list is |
| # implicitly set to "none". |
| # |
| # see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions |
| permissions: |
| contents: read |
| |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.ref }} |
| cancel-in-progress: true |
| |
| env: |
| VERSION: ${{ github.ref }} |
| |
| on: |
| workflow_dispatch: |
| push: |
| branches: |
| - 'master' |
| - '[0-9]+.[0-9]+' |
| - '[0-9]+.x' |
| tags: |
| - 'v*' |
| pull_request: |
| |
| jobs: |
| prepare: |
| runs-on: ubuntu-24.04 |
| outputs: |
| matrix: ${{ steps.platforms.outputs.matrix }} |
| steps: |
| - |
| name: Checkout |
| uses: actions/checkout@v6 |
| - |
| name: Create matrix |
| id: platforms |
| run: | |
| echo "matrix=$(docker buildx bake cross --print | jq -cr '.target."cross".platforms')" >>${GITHUB_OUTPUT} |
| - |
| name: Show matrix |
| run: | |
| echo ${{ steps.platforms.outputs.matrix }} |
| |
| build: |
| runs-on: ubuntu-24.04 |
| needs: |
| - prepare |
| strategy: |
| fail-fast: false |
| matrix: |
| target: |
| - binary |
| - dynbinary |
| platform: ${{ fromJson(needs.prepare.outputs.matrix) }} |
| use_glibc: |
| - "" |
| - glibc |
| steps: |
| - |
| name: Set up Docker Buildx |
| uses: docker/setup-buildx-action@v3 |
| - |
| name: Build |
| uses: docker/bake-action@v6 |
| with: |
| targets: ${{ matrix.target }} |
| set: | |
| *.platform=${{ matrix.platform }} |
| env: |
| USE_GLIBC: ${{ matrix.use_glibc }} |
| - |
| name: Create tarball |
| working-directory: ./build |
| run: | |
| mkdir /tmp/out |
| platform=${{ matrix.platform }} |
| platformPair=${platform//\//-} |
| tar -cvzf "/tmp/out/docker-${platformPair}.tar.gz" . |
| if [ -z "${{ matrix.use_glibc }}" ]; then |
| echo "ARTIFACT_NAME=${{ matrix.target }}-${platformPair}" >> $GITHUB_ENV |
| else |
| echo "ARTIFACT_NAME=${{ matrix.target }}-${platformPair}-glibc" >> $GITHUB_ENV |
| fi |
| - |
| name: Upload artifacts |
| uses: actions/upload-artifact@v6 |
| with: |
| name: ${{ env.ARTIFACT_NAME }} |
| path: /tmp/out/* |
| if-no-files-found: error |
| |
| bin-image: |
| runs-on: ubuntu-24.04 |
| if: ${{ github.event_name != 'pull_request' && github.repository == 'docker/cli' }} |
| steps: |
| - |
| name: Login to DockerHub |
| if: github.event_name != 'pull_request' |
| uses: docker/login-action@v3 |
| with: |
| username: ${{ secrets.DOCKERHUB_CLIBIN_USERNAME }} |
| password: ${{ secrets.DOCKERHUB_CLIBIN_TOKEN }} |
| - |
| name: Set up QEMU |
| uses: docker/setup-qemu-action@v3 |
| - |
| name: Set up Docker Buildx |
| uses: docker/setup-buildx-action@v3 |
| - |
| name: Docker meta |
| id: meta |
| uses: docker/metadata-action@v5 |
| with: |
| images: dockereng/cli-bin |
| tags: | |
| type=semver,pattern={{version}} |
| type=ref,event=branch |
| type=ref,event=pr |
| type=semver,pattern={{major}} |
| type=semver,pattern={{major}}.{{minor}} |
| - |
| name: Build and push image |
| uses: docker/bake-action@v6 |
| with: |
| files: | |
| ./docker-bake.hcl |
| cwd://${{ steps.meta.outputs.bake-file }} |
| targets: bin-image-cross |
| push: ${{ github.event_name != 'pull_request' }} |
| set: | |
| *.cache-from=type=gha,scope=bin-image |
| *.cache-to=type=gha,scope=bin-image,mode=max |
| |
| prepare-plugins: |
| runs-on: ubuntu-24.04 |
| outputs: |
| matrix: ${{ steps.platforms.outputs.matrix }} |
| steps: |
| - |
| name: Checkout |
| uses: actions/checkout@v6 |
| - |
| name: Create matrix |
| id: platforms |
| run: | |
| echo "matrix=$(docker buildx bake plugins-cross --print | jq -cr '.target."plugins-cross".platforms')" >>${GITHUB_OUTPUT} |
| - |
| name: Show matrix |
| run: | |
| echo ${{ steps.platforms.outputs.matrix }} |
| |
| plugins: |
| runs-on: ubuntu-24.04 |
| needs: |
| - prepare-plugins |
| strategy: |
| fail-fast: false |
| matrix: |
| platform: ${{ fromJson(needs.prepare-plugins.outputs.matrix) }} |
| steps: |
| - |
| name: Set up Docker Buildx |
| uses: docker/setup-buildx-action@v3 |
| - |
| name: Build |
| uses: docker/bake-action@v6 |
| with: |
| targets: plugins-cross |
| set: | |
| *.platform=${{ matrix.platform }} |