polytune 0.2.0-alpha.4

Maliciously-Secure Multi-Party Computation (MPC) Engine using Authenticated Garbling
Documentation
name: Build and push polytune-http-server image

on:
  push:
    branches: [ "main" ]
    tags: ["http-server-v[0-9]*"]

jobs:
  build-and-push-http-server:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9
        with:
          toolchain: stable
      - run: cargo test --profile debug-release --package polytune --package polytune-server-core --package polytune-http-server
      - name: Extract version
        if: startsWith(github.ref, 'refs/tags/http-server-v')
        id: get-version
        run: |
          # Strip the http-server-v prefix
          RAW_TAG=${{ github.ref_name }}
          echo "version=${RAW_TAG#http-server-v}" >> $GITHUB_OUTPUT
      - name: Install taplo for extracting http-server version
        uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532
        if: startsWith(github.ref, 'refs/tags/http-server-v')
        with:
          tool: taplo@0.10.0
      - name: Check that crate version matches tag version
        if: startsWith(github.ref, 'refs/tags/http-server-v')
        run: |
          http_server_version=$(taplo get -f crates/polytune-http-server/Cargo.toml 'package.version')
          if [[ "$http_server_version" != "${{ steps.get-version.outputs.version }}" ]]; then
            echo "::error:: polytune-http-server crate version ${http_server_version} does not match tag version ${{ steps.get-version.outputs.version }}"
            exit 1
          fi
      - name: Log in to GitHub Container Registry
        uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051
        with:
          images: ghcr.io/${{ github.repository }}/polytune-http-server
          tags: |
            # Tags main branch pushes as 'dev'
            type=raw,value=dev,enable={{ is_default_branch }}

            # On git tag pushes, push e.g. 1.2.4, 1.2, and 1 versions (if major 0 is zero, skip major only push) 
            # metadata-action also tags a :latest image automatically when type=semver is enabled
            # TODO, there might be an issue with this action when releasing e.g. a patch release 1.2.1 when 2.0.0 is already
            # released, as then 1.2.1 would be tagged as :latest which is wrong.
            # See https://github.com/docker/metadata-action/issues/407
            type=semver,pattern={{major}},value=${{ steps.get-version.outputs.version }},enable=${{ steps.get-version.outputs.version != '' && !startsWith(steps.get-version.outputs.version, '0.') }}
            type=semver,pattern={{major.minor}},value=${{ steps.get-version.outputs.version }},enable=${{ steps.get-version.outputs.version != '' }}
            type=semver,pattern={{version}},value=${{ steps.get-version.outputs.version }},enable=${{ steps.get-version.outputs.version != '' }}

      - name: Build and push http-server image
        uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83
        with:
          context: .
          file: ./crates/polytune-http-server/Dockerfile
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}