pact-stub-server 0.7.0

Standalone pact stub server
Documentation
name: Release workflow

on:
  release:
    types: [published]

  pull_request:
    branches:
      - master

concurrency:
  group: release-${{ github.ref }}
  cancel-in-progress: true
  
jobs:
  build-release:
    runs-on: ${{ matrix.operating-system }}
    strategy:
      matrix:
        include:
          - operating-system: ubuntu-22.04
            targets: x86_64-unknown-linux-gnu,x86_64-unknown-linux-musl,aarch64-unknown-linux-gnu,aarch64-unknown-linux-musl
          - operating-system: windows-latest
            targets: aarch64-pc-windows-msvc,x86_64-pc-windows-msvc
          - operating-system: macos-latest
            targets: aarch64-apple-darwin,x86_64-apple-darwin
      fail-fast: false
    steps:
      - uses: actions/checkout@v4

      - name: Install stable Rust toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: stable
          targets: ${{ matrix.targets }}

      - name: Rust caching
        uses: Swatinem/rust-cache@v2

      - name: Set up QEMU
        if: runner.os == 'Linux'
        uses: docker/setup-qemu-action@v3

      - name: Set up Docker Buildx
        if: runner.os == 'Linux'
        uses: docker/setup-buildx-action@v3

      - name: Cargo flags
        id: cargo-flags
        shell: bash
        run: |
          if [[ "${{ github.event_name }}" = "release" ]]; then
            echo "flags=--release" >> "$GITHUB_OUTPUT"
          else
            echo "flags=" >> "$GITHUB_OUTPUT"
          fi

      - name: Install LLVM
        run: choco install -y llvm
        if: runner.os == 'Windows'

      - name: build and release ${{ runner.os }}
        run: ./release.sh ${{ runner.os }} ${{ steps.cargo-flags.outputs.flags }}
        shell: bash

      - name: Upload Release Assets
        if: |
          startsWith(github.ref, 'refs/tags/v')
        id: upload-release-asset
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: release_artifacts/*
          file_glob: true
          tag: ${{ github.ref }}

  release_docker:
    runs-on: ubuntu-latest
    needs: build-release
    if: |
      startsWith(github.ref, 'refs/tags/v')

    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Log into ghcr registry
        uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Log into docker registry
        uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_TOKEN }}

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3

      - name: push_image
        id: cargo-flags
        shell: bash
        run: |
          if [[ "${{ github.event_name }}" = "release" ]]; then
            echo "PUSH_IMAGE=true" >> "$GITHUB_ENV"
          fi

      - name: Release image
        run: cd docker && hooks/build
        env:
          DOCKER_TAG: ${{ github.ref }}
          PUSH_IMAGE: ${{ env.PUSH_IMAGE }}