diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml new file mode 100644 index 0000000..a036a63 --- /dev/null +++ b/.github/workflows/docker.yaml @@ -0,0 +1,71 @@ +# GitHub actions workflow which builds and publishes the docker images. + +name: Build and push docker images + +on: + push: + tags: ["v*"] + branches: [ main ] + workflow_dispatch: + +permissions: + contents: read + packages: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Set up QEMU + id: qemu + uses: docker/setup-qemu-action@v2 + with: + platforms: arm64 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + + - name: Inspect builder + run: docker buildx inspect + + - name: Log in to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Log in to GHCR + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Calculate docker image tag + id: set-tag + uses: docker/metadata-action@master + with: + images: | + ghcr.io/${{ github.repository }} + docker.io/${{ secrets.DOCKERHUB_USERNAME }}/${{ github.event.repository.name }} + flavor: | + latest=false + tags: | + type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }} + type=semver,pattern=v{{version}} + type=semver,pattern=v{{major}}.{{minor}} + + - name: Build and push all platforms + uses: docker/build-push-action@v4 + with: + push: true + labels: "gitsha1=${{ github.sha }}" + tags: "${{ steps.set-tag.outputs.tags }}" + platforms: linux/amd64,linux/arm64 + + # arm64 builds OOM without the git fetch setting. c.f. + # https://github.com/rust-lang/cargo/issues/10583 + build-args: | + CARGO_NET_GIT_FETCH_WITH_CLI=true + BUILD_PROFILE=release diff --git a/Dockerfile b/Dockerfile index d66df13..0f21055 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,19 @@ FROM docker.io/rust:alpine AS builder -RUN apk add python3 musl-dev pkgconfig openssl-dev make +RUN apk add python3 musl-dev pkgconfig openssl-dev make git + +WORKDIR /opt/synapse-compressor/ +COPY . . ENV RUSTFLAGS="-C target-feature=-crt-static" -WORKDIR /opt/synapse-compressor/ +# arm64 builds consume a lot of memory if `CARGO_NET_GIT_FETCH_WITH_CLI` is not +# set to true, so we expose it as a build-arg. +ARG CARGO_NET_GIT_FETCH_WITH_CLI=false +ENV CARGO_NET_GIT_FETCH_WITH_CLI=$CARGO_NET_GIT_FETCH_WITH_CLI +ARG BUILD_PROFILE=dev -COPY . . - -RUN cargo build +RUN cargo build --profile=$BUILD_PROFILE WORKDIR /opt/synapse-compressor/synapse_auto_compressor/ @@ -18,5 +23,5 @@ FROM docker.io/alpine RUN apk add --no-cache libgcc -COPY --from=builder /opt/synapse-compressor/target/debug/synapse_compress_state /usr/local/bin/synapse_compress_state -COPY --from=builder /opt/synapse-compressor/target/debug/synapse_auto_compressor /usr/local/bin/synapse_auto_compressor +COPY --from=builder /opt/synapse-compressor/target/*/synapse_compress_state /usr/local/bin/synapse_compress_state +COPY --from=builder /opt/synapse-compressor/target/*/synapse_auto_compressor /usr/local/bin/synapse_auto_compressor