name: Release - Build and publish docker, and trigger package release on: push: branches: - "feat/*" - "develop" pull_request: types: [closed] branches: - main env: GHCR: ghcr.io GHCR_IMAGE_NAME: ${{ github.repository }} DH_REGISTRY_NAME: jqtype/rpxy jobs: build_and_push: runs-on: ubuntu-latest if: ${{ github.event_name == 'push' }} || ${{ github.event_name == 'pull_request' && github.event.pull_request.merged == true }} strategy: fail-fast: false matrix: include: - target: "default" dockerfile: ./docker/Dockerfile platforms: linux/amd64,linux/arm64 # Aliases must be used only for release builds aliases: | jqtype/rpxy:latest ghcr.io/junkurihara/rust-rpxy:latest - target: "default-slim" dockerfile: ./docker/Dockerfile-slim build-contexts: | messense/rust-musl-cross:amd64-musl=docker-image://messense/rust-musl-cross:x86_64-musl messense/rust-musl-cross:arm64-musl=docker-image://messense/rust-musl-cross:aarch64-musl platforms: linux/amd64,linux/arm64 tags-suffix: "-slim" # Aliases must be used only for release builds aliases: | jqtype/rpxy:slim ghcr.io/junkurihara/rust-rpxy:slim - target: "s2n" dockerfile: ./docker/Dockerfile build-args: | "CARGO_FEATURES=--no-default-features --features=http3-s2n,cache,rustls-backend" "ADDITIONAL_DEPS=pkg-config libssl-dev cmake libclang1 gcc g++" platforms: linux/amd64,linux/arm64 tags-suffix: "-s2n" # Aliases must be used only for release builds aliases: | jqtype/rpxy:s2n ghcr.io/junkurihara/rust-rpxy:s2n - target: "webpki-roots" dockerfile: ./docker/Dockerfile platforms: linux/amd64,linux/arm64 build-args: | "CARGO_FEATURES=--no-default-features --features=http3-quinn,cache,webpki-roots" tags-suffix: "-webpki-roots" # Aliases must be used only for release builds aliases: | jqtype/rpxy:webpki-roots ghcr.io/junkurihara/rust-rpxy:webpki-roots - target: "slim-webpki-roots" dockerfile: ./docker/Dockerfile-slim build-args: | "CARGO_FEATURES=--no-default-features --features=http3-quinn,cache,webpki-roots" build-contexts: | messense/rust-musl-cross:amd64-musl=docker-image://messense/rust-musl-cross:x86_64-musl messense/rust-musl-cross:arm64-musl=docker-image://messense/rust-musl-cross:aarch64-musl platforms: linux/amd64,linux/arm64 tags-suffix: "-slim-webpki-roots" # Aliases must be used only for release builds aliases: | jqtype/rpxy:slim-webpki-roots ghcr.io/junkurihara/rust-rpxy:slim-webpki-roots - target: "s2n-webpki-roots" dockerfile: ./docker/Dockerfile build-args: | "CARGO_FEATURES=--no-default-features --features=http3-s2n,cache,webpki-roots" "ADDITIONAL_DEPS=pkg-config libssl-dev cmake libclang1 gcc g++" platforms: linux/amd64,linux/arm64 tags-suffix: "-s2n-webpki-roots" # Aliases must be used only for release builds aliases: | jqtype/rpxy:s2n-webpki-roots ghcr.io/junkurihara/rust-rpxy:s2n-webpki-roots steps: - name: Checkout uses: actions/checkout@v4 with: submodules: recursive - name: Docker meta id: meta uses: docker/metadata-action@v5 with: images: ${{ env.GHCR }}/${{ env.GHCR_IMAGE_NAME }} - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ${{ env.GHCR }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} # - name: Nightly build test on amd64 for pull requests # if: ${{ github.event_name == 'pull_request' }} # uses: docker/build-push-action@v5 # with: # context: . # build-args: ${{ matrix.build-args }} # push: false # build-contexts: ${{ matrix.build-contexts }} # file: ${{ matrix.dockerfile }} # cache-from: type=gha,scope=rpxy-nightly-${{ matrix.target }} # cache-to: type=gha,mode=max,scope=rpxy-nightly-${{ matrix.target }} # platforms: linux/amd64 # labels: ${{ steps.meta.outputs.labels }} - name: Unstable build and push from develop branch if: ${{ startsWith(github.ref_name, 'feat/') && (github.event_name == 'push') }} uses: docker/build-push-action@v5 with: context: . build-args: ${{ matrix.build-args }} push: true tags: | ${{ env.GHCR }}/${{ env.GHCR_IMAGE_NAME }}:unstable${{ matrix.tags-suffix }} ${{ env.DH_REGISTRY_NAME }}:unstable${{ matrix.tags-suffix }} build-contexts: ${{ matrix.build-contexts }} file: ${{ matrix.dockerfile }} cache-from: type=gha,scope=rpxy-unstable-${{ matrix.target }} cache-to: type=gha,mode=max,scope=rpxy-unstable-${{ matrix.target }} platforms: linux/amd64 labels: ${{ steps.meta.outputs.labels }} - name: Nightly build and push from develop branch if: ${{ (github.ref_name == 'develop') && (github.event_name == 'push') }} uses: docker/build-push-action@v5 with: context: . build-args: ${{ matrix.build-args }} push: true tags: | ${{ env.GHCR }}/${{ env.GHCR_IMAGE_NAME }}:nightly${{ matrix.tags-suffix }} ${{ env.DH_REGISTRY_NAME }}:nightly${{ matrix.tags-suffix }} build-contexts: ${{ matrix.build-contexts }} file: ${{ matrix.dockerfile }} cache-from: type=gha,scope=rpxy-nightly-${{ matrix.target }} cache-to: type=gha,mode=max,scope=rpxy-nightly-${{ matrix.target }} platforms: ${{ matrix.platforms }} labels: ${{ steps.meta.outputs.labels }} - name: Release build and push from main branch if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.ref == 'develop' && github.event.pull_request.base.ref == 'main' && github.event.pull_request.merged == true }} uses: docker/build-push-action@v5 with: context: . build-args: ${{ matrix.build-args }} push: true tags: | ${{ env.GHCR }}/${{ env.GHCR_IMAGE_NAME }}:latest${{ matrix.tags-suffix }} ${{ env.DH_REGISTRY_NAME }}:latest${{ matrix.tags-suffix }} ${{ matrix.aliases }} build-contexts: ${{ matrix.build-contexts }} file: ${{ matrix.dockerfile }} cache-from: type=gha,scope=rpxy-latest-${{ matrix.target }} cache-to: type=gha,mode=max,scope=rpxy-latest-${{ matrix.target }} platforms: ${{ matrix.platforms }} labels: ${{ steps.meta.outputs.labels }} dispatch_release_event: runs-on: ubuntu-latest if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.ref == 'develop' && github.event.pull_request.base.ref == 'main' && github.event.pull_request.merged == true }} needs: build_and_push steps: - name: Repository dispatch for release uses: peter-evans/repository-dispatch@v3 with: event-type: release-event client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}", "pull_request": { "title": "${{ github.event.pull_request.title }}", "body": ${{ toJson(github.event.pull_request.body) }}, "number": "${{ github.event.pull_request.number }}", "head": "${{ github.event.pull_request.head.ref }}", "base": "${{ github.event.pull_request.base.ref}}"}}'