name: prebuild

on:
  push:
    branches:
      - master
    tags:
      - '*'
  pull_request:
    branches:
      - master
  workflow_dispatch:

jobs:
  prebuild:
    strategy:
      matrix:
        include:
          - name: darwin
            os: macos-13
            node: x64
          - name: linux
            os: ubuntu-latest
          - name: win32
            os: windows-latest
    name: Build ${{ matrix.name }}
    runs-on: ${{ matrix.os }}
    steps:
      - if: matrix.node
        uses: actions/setup-node@v4
        with:
          node-version: 20
          architecture: ${{ matrix.node }}
      - uses: actions/setup-python@v5
        with:
          python-version: '3.13'
      - uses: actions/checkout@v3
      - name: Install dependencies (ubuntu-latest)
        # Use g++-9 only on versions after 'ubuntu-18.04'
        if: ${{ matrix.os == 'ubuntu-latest' }}
        run: |
          sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
          sudo apt -qq update
          sudo apt install -y g++-9
          export CC="g++-9"
      - run: npm install --ignore-scripts
      - run: npm run prebuild-${{ matrix.name }}
      - run: tar -zcvf ${{ matrix.name }}.tar.gz -C prebuilds .
      - uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.name }}
          path: ${{ matrix.name }}.tar.gz
          retention-days: 1
  release:
    needs: prebuild
    name: Release
    runs-on: ubuntu-latest
    if: startsWith(github.ref, 'refs/tags/')
    steps:
      - uses: actions/checkout@v3
      - uses: actions/download-artifact@v4
        with:
          path: artifacts
      - uses: docker://antonyurchenko/git-release:v4
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          args: artifacts/*/*.tar.gz