name: Continuous Integration

on: [push, pull_request]

jobs:
  build:
    name: ${{ matrix.config.name }}
    runs-on: ${{ matrix.config.os }}
    strategy:
      fail-fast: false
      matrix:
        config:
        - {
            name: "Linux Clang",
            os: ubuntu-20.04,
            extra_options: "-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++"
          }
        - {
            name: "Linux GCC",
            os: ubuntu-20.04
          }
        - {
            name: "macOS",
            os: macos-12
          }
        - {
            name: "Windows",
            os: windows-2022
          }

    steps:
    - uses: actions/checkout@v3

    - name: Configure
      shell: bash
      run: |
        cmake -B build ${{ matrix.config.extra_options }} .

    - name: Build
      shell: bash
      run: |
        export MAKEFLAGS=--keep-going
        cmake --build build --config Release --parallel 3

    - name: Create Package
      if: runner.os == 'Windows'  # Remove to make packages of all targets
      shell: bash
      run: |
        cd build
        mkdir package
        if [[ "${{ runner.os }}" == 'Windows' ]]; then
          cp Release/zdray.exe package
        elif [[ "${{ runner.os }}" == 'macOS' ]]; then
          cp zdray package
        elif [[ "${{ runner.os }}" == 'Linux' ]]; then
          cp zdray package
        fi

    - name: Upload Package
      if: runner.os == 'Windows'  # Remove to store packages of all targets
      uses: actions/upload-artifact@v4
      with:
        path: build/package
        name: ${{ matrix.config.name }}

    - name: List Build Directory
      if: always()
      shell: bash
      run: |
        git status
        ls -lR build

  deploy:
    name: Update Latest successful build
    runs-on: ubuntu-latest
    needs: build
    if: github.event_name == 'push' && github.ref == 'refs/heads/master'

    steps:
    - name: Download artifact
      uses: actions/download-artifact@v4
      with:
        name: Windows
        path: build/zdray-prerelease

    - name: Zip artifacts
      shell: bash
      run: |
        cd build
        zip -r zdray-prerelease.zip zdray-prerelease

    - name: Update nightly release
      uses: pyTooling/Actions/releaser@r0
      with:
        tag: nightly
        rm: true
        token: ${{ secrets.GITHUB_TOKEN }}
        files: build/zdray-prerelease.zip
