name: Release

on:
  push:
    tags:
      - "v*"

jobs:
  release:
    name: Release - ${{ matrix.platform.os-name }}
    permissions:
      contents: write
    strategy:
      matrix:
        platform:
          - os-name: Linux-x86_64
            runs-on: ubuntu-24.04
            target: x86_64-unknown-linux-musl
          - os-name: Linux-aarch64
            runs-on: ubuntu-24.04
            target: aarch64-unknown-linux-musl
          - os-name: Windows-x86_64
            runs-on: windows-latest
            target: x86_64-pc-windows-msvc
          - os-name: macOS-x86_64
            runs-on: macOS-latest
            target: x86_64-apple-darwin
          - os-name: macOS-aarch64
            runs-on: macOS-latest
            target: aarch64-apple-darwin
    runs-on: ${{ matrix.platform.runs-on }}
    steps:
      - uses: actions/checkout@v4
      - uses: swatinem/rust-cache@v2
      - name: Build hoi binary
        uses: houseabsolute/actions-rust-cross@v1
        with:
          command: build
          target: ${{ matrix.platform.target }}
          args: "--locked --release"
          strip: true
      - name: Publish GitHub release artifact
        uses: houseabsolute/actions-rust-release@v0
        with:
          changes-file: CHANGELOG.md
          executable-name: hoi
          action-gh-release-parameters: '{ "make_latest": true }'
          target: ${{ matrix.platform.target }}

  publish:
    name: Publish to crates.io
    runs-on: ubuntu-latest
    needs: release
    environment: crates.io
    steps:
      - uses: actions/checkout@v4
      - uses: swatinem/rust-cache@v2
      - name: Publish
        run: cargo publish --verbose --locked --token ${{ secrets.CARGO_TOKEN }}
