name: C/C++ CI

on: [push]

concurrency: 
  group: environment-${{ github.head_ref }}
  cancel-in-progress: true

jobs:
  build-linux:
    runs-on: ubuntu-22.04
    steps:
    - uses: actions/checkout@v2
      with:
        repository: 'davidgiven/fluxengine'
        path: 'fluxengine'
    - uses: actions/checkout@v2
      with:
        repository: 'davidgiven/fluxengine-testdata'
        path: 'fluxengine-testdata'
    - name: apt
      run: |
        sudo apt install libudev-dev libsqlite3-dev protobuf-compiler libwxgtk3.0-gtk3-dev libfmt-dev libprotobuf-dev wx-common qtbase5-dev qttools5-dev-tools
    - name: make
      run: CXXFLAGS="-Wp,-D_GLIBCXX_ASSERTIONS" make -j`nproc` -C fluxengine

  build-macos-current:
    runs-on: macos-latest
    steps:
    - uses: actions/checkout@v2
      with:
        repository: 'davidgiven/fluxengine'
        path: 'fluxengine'
    - uses: actions/checkout@v2
      with:
        repository: 'davidgiven/fluxengine-testdata'
        path: 'fluxengine-testdata'
    - name: brew
      run: brew install sqlite pkg-config libusb protobuf wxwidgets fmt make coreutils dylibbundler libjpeg qt@5
    - name: make
      run: gmake -j`nproc` -C fluxengine

    - name: Upload build artifacts
      uses: actions/upload-artifact@v2
      with:
        name: ${{ github.event.repository.name }}.${{ github.sha }}
        path: fluxengine/FluxEngine.pkg

  build-windows:
    runs-on: windows-latest
    defaults:
      run:
        shell: msys2 {0}
    steps:
    - uses: msys2/setup-msys2@v2
      with:
        update: true
        msystem: MINGW32
        install: >-
          diffutils
          make
          mingw-w64-i686-binutils
          mingw-w64-i686-fmt
          mingw-w64-i686-gcc
          mingw-w64-i686-libusb
          mingw-w64-i686-nsis
          mingw-w64-i686-pkg-config
          mingw-w64-i686-python
          mingw-w64-i686-sqlite3
          mingw-w64-i686-wxWidgets
          mingw-w64-i686-zlib
          mingw-w64-i686-png2ico
          mingw-w64-i686-qt5-base
          vim
          zip
    - name: update-protobuf
      run: |
         pacman -U --noconfirm https://repo.msys2.org/mingw/mingw32/mingw-w64-i686-protobuf-21.9-1-any.pkg.tar.zst
    - uses: actions/checkout@v2
      with:
        repository: 'davidgiven/fluxengine'
        path: 'fluxengine'
    - uses: actions/checkout@v2
      with:
        repository: 'davidgiven/fluxengine-testdata'
        path: 'fluxengine-testdata'
    - name: build
      run: MAGICK_TIME_LIMIT=100 make -j`nproc` -C fluxengine

    - name: nsis
      run: |
        cd fluxengine
        strip fluxengine.exe -o fluxengine-stripped.exe
        strip fluxengine-gui.exe -o fluxengine-gui-stripped.exe
        makensis -v2 -nocd -dOUTFILE=fluxengine-installer.exe extras/windows-installer.nsi

    - name: zip
      run: |
        cd fluxengine
        zip -9 fluxengine-windows.zip fluxengine.exe fluxengine-gui.exe upgrade-flux-file.exe brother120tool.exe brother240tool.exe FluxEngine.cydsn/CortexM3/ARM_GCC_541/Release/FluxEngine.hex fluxengine-installer.exe

    - name: Upload build artifacts
      uses: actions/upload-artifact@v2
      with:
        name: ${{ github.event.repository.name }}.${{ github.sha }}
        path: fluxengine/fluxengine-windows.zip
