github.1git.de/docker/cli@v26.1.3+incompatible/.github/workflows/build.yml (about) 1 name: build 2 3 concurrency: 4 group: ${{ github.workflow }}-${{ github.ref }} 5 cancel-in-progress: true 6 7 env: 8 VERSION: ${{ github.ref }} 9 10 on: 11 workflow_dispatch: 12 push: 13 branches: 14 - 'master' 15 - '[0-9]+.[0-9]+' 16 tags: 17 - 'v*' 18 pull_request: 19 20 jobs: 21 prepare: 22 runs-on: ubuntu-22.04 23 outputs: 24 matrix: ${{ steps.platforms.outputs.matrix }} 25 steps: 26 - 27 name: Checkout 28 uses: actions/checkout@v4 29 - 30 name: Create matrix 31 id: platforms 32 run: | 33 echo "matrix=$(docker buildx bake cross --print | jq -cr '.target."cross".platforms')" >>${GITHUB_OUTPUT} 34 - 35 name: Show matrix 36 run: | 37 echo ${{ steps.platforms.outputs.matrix }} 38 39 build: 40 runs-on: ubuntu-22.04 41 needs: 42 - prepare 43 strategy: 44 fail-fast: false 45 matrix: 46 target: 47 - binary 48 - dynbinary 49 platform: ${{ fromJson(needs.prepare.outputs.matrix) }} 50 use_glibc: 51 - "" 52 - glibc 53 steps: 54 - 55 name: Checkout 56 uses: actions/checkout@v4 57 with: 58 fetch-depth: 0 59 - 60 name: Set up Docker Buildx 61 uses: docker/setup-buildx-action@v3 62 - 63 name: Build 64 uses: docker/bake-action@v4 65 with: 66 targets: ${{ matrix.target }} 67 set: | 68 *.platform=${{ matrix.platform }} 69 env: 70 USE_GLIBC: ${{ matrix.use_glibc }} 71 - 72 name: Create tarball 73 working-directory: ./build 74 run: | 75 mkdir /tmp/out 76 platform=${{ matrix.platform }} 77 platformPair=${platform//\//-} 78 tar -cvzf "/tmp/out/docker-${platformPair}.tar.gz" . 79 if [ -z "${{ matrix.use_glibc }}" ]; then 80 echo "ARTIFACT_NAME=${{ matrix.target }}" >> $GITHUB_ENV 81 else 82 echo "ARTIFACT_NAME=${{ matrix.target }}-glibc" >> $GITHUB_ENV 83 fi 84 - 85 name: Upload artifacts 86 uses: actions/upload-artifact@v3 87 with: 88 name: ${{ env.ARTIFACT_NAME }} 89 path: /tmp/out/* 90 if-no-files-found: error 91 92 bin-image: 93 runs-on: ubuntu-22.04 94 if: ${{ github.event_name != 'pull_request' && github.repository == 'docker/cli' }} 95 steps: 96 - 97 name: Checkout 98 uses: actions/checkout@v4 99 - 100 name: Set up QEMU 101 uses: docker/setup-qemu-action@v3 102 - 103 name: Set up Docker Buildx 104 uses: docker/setup-buildx-action@v3 105 - 106 name: Docker meta 107 id: meta 108 uses: docker/metadata-action@v5 109 with: 110 images: dockereng/cli-bin 111 tags: | 112 type=semver,pattern={{version}} 113 type=ref,event=branch 114 type=ref,event=pr 115 type=sha 116 - 117 name: Login to DockerHub 118 if: github.event_name != 'pull_request' 119 uses: docker/login-action@v3 120 with: 121 username: ${{ secrets.DOCKERHUB_CLIBIN_USERNAME }} 122 password: ${{ secrets.DOCKERHUB_CLIBIN_TOKEN }} 123 - 124 name: Build and push image 125 uses: docker/bake-action@v4 126 with: 127 files: | 128 ./docker-bake.hcl 129 ${{ steps.meta.outputs.bake-file }} 130 targets: bin-image-cross 131 push: ${{ github.event_name != 'pull_request' }} 132 set: | 133 *.cache-from=type=gha,scope=bin-image 134 *.cache-to=type=gha,scope=bin-image,mode=max 135 136 prepare-plugins: 137 runs-on: ubuntu-22.04 138 outputs: 139 matrix: ${{ steps.platforms.outputs.matrix }} 140 steps: 141 - 142 name: Checkout 143 uses: actions/checkout@v4 144 - 145 name: Create matrix 146 id: platforms 147 run: | 148 echo "matrix=$(docker buildx bake plugins-cross --print | jq -cr '.target."plugins-cross".platforms')" >>${GITHUB_OUTPUT} 149 - 150 name: Show matrix 151 run: | 152 echo ${{ steps.platforms.outputs.matrix }} 153 154 plugins: 155 runs-on: ubuntu-22.04 156 needs: 157 - prepare-plugins 158 strategy: 159 fail-fast: false 160 matrix: 161 platform: ${{ fromJson(needs.prepare-plugins.outputs.matrix) }} 162 steps: 163 - 164 name: Checkout 165 uses: actions/checkout@v4 166 - 167 name: Set up Docker Buildx 168 uses: docker/setup-buildx-action@v3 169 - 170 name: Build 171 uses: docker/bake-action@v4 172 with: 173 targets: plugins-cross 174 set: | 175 *.platform=${{ matrix.platform }}