--- # Please see contrib/podmanimage/README.md for details on the intentions # of this workflow. # # BIG FAT WARNING: This workflow is duplicated across containers/skopeo, # containers/buildah, and containers/podman. ANY AND # ALL CHANGES MADE HERE MUST BE MANUALLY DUPLICATED # TO THE OTHER REPOS. name: build multi-arch images on: # Upstream podman tends to be very active, with many merges per day. # Only run this daily via cron schedule, or manually, not by branch push. schedule: - cron: '0 8 * * *' # allows to run this workflow manually from the Actions tab workflow_dispatch: jobs: multi: name: multi-arch Podman build env: PODMAN_QUAY_REGISTRY: quay.io/podman CONTAINERS_QUAY_REGISTRY: quay.io/containers # list of architectures for build PLATFORMS: linux/amd64,linux/s390x,linux/ppc64le,linux/arm64 # build several images (upstream, testing, stable) in parallel strategy: # By default, failure of one matrix item cancels all others fail-fast: false matrix: # Builds are located under contrib/podmanimage/ directory source: - upstream - testing - stable runs-on: ubuntu-latest # internal registry caches build for inspection before push services: registry: image: quay.io/libpod/registry:2 ports: - 5000:5000 steps: - name: Checkout uses: actions/checkout@v2 - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 with: driver-opts: network=host install: true - name: Build and locally push Podman uses: docker/build-push-action@v2 with: context: contrib/podmanimage/${{ matrix.source }} file: ./contrib/podmanimage/${{ matrix.source }}/Dockerfile platforms: ${{ env.PLATFORMS }} push: true tags: localhost:5000/podman/${{ matrix.source }} # Simple verification that stable images work, and # also grab version number use in forming the FQIN. - name: amd64 container sniff test if: matrix.source == 'stable' id: sniff_test run: | VERSION_OUTPUT="$(docker run localhost:5000/podman/${{ matrix.source }} \ podman --storage-driver=vfs version)" echo "$VERSION_OUTPUT" VERSION=$(grep -Em1 '^Version: ' <<<"$VERSION_OUTPUT" | awk '{print $2}') test -n "$VERSION" echo "::set-output name=version::${VERSION}" - name: Generate podman reg. image FQIN(s) id: podman_reg run: | if [[ "${{ matrix.source }}" == 'stable' ]]; then # The `podman version` in image just built VERSION='v${{ steps.sniff_test.outputs.version }}' # workaround vim syntax-highlight bug: ' # Image tags previously pushed to quay ALLTAGS=$(skopeo list-tags \ docker://$PODMAN_QUAY_REGISTRY/stable | \ jq -r '.Tags[]') # New version? Push quay.io/podman/stable:vX.X.X and :latest if ! fgrep -qx "$VERSION" <<<"$ALLTAGS"; then # Assume version-tag is also the most up to date (i.e. "latest") FQIN="$PODMAN_QUAY_REGISTRY/stable:$VERSION,$PODMAN_QUAY_REGISTRY/stable:latest" else # Not a new version-tagged image # Assume other contents changed, so this is the "new" latest. FQIN="$PODMAN_QUAY_REGISTRY/stable:latest" fi elif [[ "${{ matrix.source }}" == 'testing' ]]; then # Assume some contents changed, always push latest testing. FQIN="$PODMAN_QUAY_REGISTRY/testing:latest" elif [[ "${{ matrix.source }}" == 'upstream' ]]; then # Assume some contents changed, always push latest upstream. FQIN="$PODMAN_QUAY_REGISTRY/upstream:latest" else echo "::error::Unknown matrix item '${{ matrix.source }}'" exit 1 fi echo "::warning::Pushing $FQIN" echo "::set-output name=fqin::${FQIN}" echo '::set-output name=push::true' # This is substantially similar to the above logic, # but only handles $CONTAINERS_QUAY_REGISTRY for # the stable "latest" and named-version tagged images. - name: Generate containers reg. image FQIN(s) if: matrix.source == 'stable' id: containers_reg run: | VERSION='v${{ steps.sniff_test.outputs.version }}' # workaround vim syntax-highlight bug: ' ALLTAGS=$(skopeo list-tags \ docker://$CONTAINERS_QUAY_REGISTRY/podman | \ jq -r '.Tags[]') # New version? Push quay.io/containers/podman:vX.X.X and latest if ! fgrep -qx "$VERSION" <<<"$ALLTAGS"; then FQIN="$CONTAINERS_QUAY_REGISTRY/podman:$VERSION,$CONTAINERS_QUAY_REGISTRY/podman:latest" else # Not a new version-tagged image, only update latest. FQIN="$CONTAINERS_QUAY_REGISTRY/podman:latest" fi echo "::warning::Pushing $FQIN" echo "::set-output name=fqin::${FQIN}" echo '::set-output name=push::true' - name: Define LABELS multi-line env. var. value run: | # This is a really hacky/strange workflow idiom, required # for setting multi-line $LABELS value for consumption in # a future step. # https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#multiline-strings cat << EOF | tee -a $GITHUB_ENV LABELS<