name: GitHub CI
on:
  push:
    branches: [ master ]
    tags:
      - '**'
  workflow_dispatch:
  pull_request:

concurrency:
  group: ${{ github.ref }}-${{ github.workflow }}
  cancel-in-progress: true

jobs:
  linux_build:
    strategy:
      matrix:
        include:
          - arch: x86
            artifact: subconverter_linux32
            os: ubuntu-latest
          - arch: amd64
            artifact: subconverter_linux64
            os: ubuntu-latest
          - arch: armv7
            artifact: subconverter_armv7
            os: ubuntu-latest
          - arch: aarch64
            artifact: subconverter_aarch64
            os: ubuntu-latest
    runs-on: ${{ matrix.os }}
    name: Linux ${{ matrix.arch }} Build
    steps:
      - name: Checkout base
        uses: actions/checkout@v4
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      - name: Add commit id into version
        if: ${{ !startsWith(github.ref, 'refs/tags/') }}
        run: SHA=$(git rev-parse --short HEAD) && sed -i 's/\(v[0-9]\.[0-9]\.[0-9]\)/\1-'"$SHA"'/' src/version.h
      - name: Build
        run: docker run --rm -v $GITHUB_WORKSPACE:/root/workdir multiarch/alpine:${{ matrix.arch }}-latest-stable /bin/sh -c "apk add bash git nodejs npm && cd /root/workdir && chmod +x scripts/build.alpine.release.sh && bash scripts/build.alpine.release.sh"
      - name: Upload
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.artifact }}
          path: subconverter/
      - name: Package Release
        if: ${{ github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') }}
        run: tar czf ${{ matrix.artifact }}.tar.gz subconverter
      - name: Draft Release
        if: ${{ github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') }}
        uses: softprops/action-gh-release@v2
        with:
          files: ${{ matrix.artifact }}.tar.gz
          draft: true

  macos_build:
    strategy:
      matrix:
        include:
          - arch: x86
            artifact: subconverter_darwin64
            os: macos-13
          - arch: arm
            artifact: subconverter_darwinarm
            os: macos-14
    runs-on: ${{ matrix.os }}
    name: macOS ${{ matrix.arch }} Build
    steps:
      - name: Checkout base
        uses: actions/checkout@v4
      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      - name: Add commit id into version
        if: ${{ !startsWith(github.ref, 'refs/tags/') }}
        run: SHA=$(git rev-parse --short HEAD) && sed -i -e 's/\(v[0-9]\.[0-9]\.[0-9]\)/\1-'"$SHA"'/' src/version.h
      - name: Build
        run: bash scripts/build.macos.release.sh
      - name: Upload
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.artifact }}
          path: subconverter/
      - name: Package Release
        if: ${{ github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') }}
        run: tar czf ${{ matrix.artifact }}.tar.gz subconverter
      - name: Draft Release
        if: ${{ github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') }}
        uses: softprops/action-gh-release@v2
        with:
          files: ${{ matrix.artifact }}.tar.gz
          draft: true

  windows_build:
    strategy:
      matrix:
        include:
          - arch: x86
            artifact: subconverter_win32
            env: i686
            msystem: MINGW32
          - arch: amd64
            artifact: subconverter_win64
            env: x86_64
            msystem: MINGW64
    runs-on: windows-latest
    name: Windows ${{ matrix.arch }} Build
    defaults:
      run:
        shell: msys2 {0}
    steps:
      - name: Checkout base
        uses: actions/checkout@v4
      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '16'
      - name: Setup MSYS2
        uses: msys2/setup-msys2@v2
        with:
          update: true
          install: base-devel git mingw-w64-${{ matrix.env }}-gcc mingw-w64-${{ matrix.env }}-cmake mingw-w64-${{ matrix.env }}-pcre2 patch
          msystem: ${{ matrix.msystem }}
          path-type: inherit
      - name: Add commit id into version
        if: ${{ !startsWith(github.ref, 'refs/tags/') }}
        run: SHA=$(git rev-parse --short HEAD) && sed -i 's/\(v[0-9]\.[0-9]\.[0-9]\)/\1-'"$SHA"'/' src/version.h
      - name: Build
        run: bash scripts/build.windows.release.sh
      - name: Upload
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.artifact }}
          path: subconverter/
      - name: Package Release
        if: ${{ github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') }}
        run: 7z a ${{ matrix.artifact }}.7z subconverter/
      - name: Draft Release
        if: ${{ github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') }}
        uses: softprops/action-gh-release@v2
        with:
          files: ${{ matrix.artifact }}.7z
          draft: true