name: build concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true on: workflow_dispatch: push: branches: - 'master' - '[0-9]+.[0-9]+' tags: - 'v*' pull_request: jobs: prepare: runs-on: ubuntu-20.04 outputs: matrix: ${{ steps.platforms.outputs.matrix }} steps: - name: Checkout uses: actions/checkout@v3 - 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-20.04 needs: - prepare strategy: fail-fast: false matrix: target: - binary - dynbinary platform: ${{ fromJson(needs.prepare.outputs.matrix) }} use_glibc: - "" - glibc steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Build uses: docker/bake-action@v3 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@v4 with: name: ${{ env.ARTIFACT_NAME }} path: /tmp/out/* if-no-files-found: error prepare-plugins: runs-on: ubuntu-20.04 outputs: matrix: ${{ steps.platforms.outputs.matrix }} steps: - name: Checkout uses: actions/checkout@v3 - 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-20.04 needs: - prepare-plugins strategy: fail-fast: false matrix: platform: ${{ fromJson(needs.prepare-plugins.outputs.matrix) }} steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Build uses: docker/bake-action@v3 with: targets: plugins-cross set: | *.platform=${{ matrix.platform }}