name: Build Binaries
defaults:
  run:
    shell: bash

on:
  workflow_dispatch

jobs:
  create_release:
    name: Create Release
    if: contains('["raub"]', github.actor)
    runs-on: ubuntu-latest

    outputs:
      upload_url: ${{ steps.create_release.outputs.upload_url }}

    steps:

      - name: Fetch Repository
        uses: actions/checkout@v3
        with:
          persist-credentials: false

      - name: Install Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18.16.0
          cache: 'npm'

      - name: Get Package Version
        id: package-version
        run: node -p "'version='+require('./package').version" >> $GITHUB_OUTPUT

      - name: Create Draft Release
        id: create_release
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          draft: true
          tag_name: ${{ steps.package-version.outputs.version }}
          name: Release ${{ steps.package-version.outputs.version }}
          body: Binaries at ${{ github.sha }}

  build:
    name: Build
    strategy:
        matrix:
          os: [ubuntu-20.04, windows-2022, macos-11, [self-hosted, linux, ARM64]]

    runs-on: ${{ matrix.os }}

    steps:

      - name: Fetch Repository
        uses: actions/checkout@v3
        with:
          persist-credentials: false

      - name: Install Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18.16.0
          cache: 'npm'

      - name: Install Modules
        run: npm ci --ignore-scripts

      - name: Add msbuild to PATH
        if: matrix.os == 'windows-2022'
        uses: microsoft/setup-msbuild@v1.1
        with:
          msbuild-architecture: x64

      - name: Build Pre Step
        run: chmod +x src/extract.sh && src/extract.sh

      - name: Build Unix
        if: matrix.os != 'windows-2022'
        run: node src/build-unix

      - name: Build Windows
        if: matrix.os == 'windows-2022'
        run: src/windows.sh

      - name: Build Post Step
        run: node src/build-post

      - name: Get Package Version
        id: package-version
        shell: bash
        run: node -p "'version='+require('./package').version" >> $GITHUB_OUTPUT

      - name: Pack Files
        id: pack-files
        run: node -e "require('addon-tools-raub').actionPack()" >> $GITHUB_OUTPUT

      - name: Store Binaries
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          draft: true
          tag_name: ${{ steps.package-version.outputs.version }}
          name: Release ${{ steps.package-version.outputs.version }}
          files: ${{ steps.pack-files.outputs.pack }}