name: crossbuild-mingw

on:
  push:
    branches: [ main ]
    tags: ["*.*.*"]
  pull_request:
    branches: [ main ]

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-24.04
    name: ${{ matrix.name }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: win32
            ARCH: 32
            PACKAGES: g++-mingw-w64-i686 wine wine32
          - name: win64
            ARCH: 64
            PACKAGES: g++-mingw-w64-x86-64 wine wine64 wine32:i386

    steps:
    - name: Checkout
      uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
    - name: Setup Ccache
      uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23
    - name: Install Dependencies
      run: |
        sudo dpkg --add-architecture i386
        sudo apt-get update
        sudo apt install -y \
          zip \
          ${{ matrix.PACKAGES }}
    - name: Setup Python
      uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
      with:
        python-version: '3.12'
    - name: Install Python Dependencies
      run: pip3 install -r .ci/requirements.txt --require-hashes
    - name: Build
      run: bash .ci/build-win.sh ${{ matrix.ARCH }}
    - name: Test
      run: meson devenv -Cbuild-win${{ matrix.ARCH }} meson test -t 10 --print-errorlogs --suite=harfbuzz
    - name: Archive artifacts
      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
      with:
        name: harfbuzz-win${{ matrix.ARCH }}
        path: harfbuzz-win${{ matrix.ARCH }}.zip
        if-no-files-found: error

  release:
    name: Create and populate release
    permissions:
      contents: write
    needs: build
    runs-on: ubuntu-24.04
    if: contains(github.ref, 'refs/tags/')
    env:
      GH_TOKEN: ${{ github.token }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - name: Download artifacts
        uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
        with:
          merge-multiple: true
      - name: Rename artifacts
        run: |
          for file in harfbuzz-win*.zip; do
            mv -v "$file" "${file%.zip}-${{ github.ref_name }}.zip"
          done
      - name: Check for release
        id: create_release
        run: |
          if ! gh release view ${{ github.ref_name }}; then
            gh release create ${{ github.ref_name }} --title ${{ github.ref_name }}
          fi
      - name: Populate release
        run: |
          gh release upload ${{ github.ref_name }} harfbuzz-win*-${{ github.ref_name }}.zip --clobber
