name: Hyperion CI Build
on:
  push:
    branches-ignore:
      - 'gh-pages'
      - 'docker-ci'
    tags:
      - '*'

jobs:

######################
###### Linux #########
######################

  Linux:
    name: ${{ matrix.dockerName }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        dockerImage: [ x86_64, armv6l, armv7l, aarch64 ]
        include:
          - dockerImage: x86_64
            dockerName: Debian Stretch (x86_64)
            platform: x11
          - dockerImage: armv6l
            dockerName: Debian Stretch (Raspberry Pi v1 & ZERO)
            platform: rpi
          - dockerImage: armv7l
            dockerName: Debian Stretch (Raspberry Pi 2 & 3)
            platform: rpi
          - dockerImage: aarch64
            dockerName: Debian Stretch (Generic AARCH64)
            platform: amlogic

    steps:
      - uses: actions/checkout@v1
        with:
          submodules: true

      # build process
      - name: Build packages
        env:
          DOCKER_IMAGE: ${{ matrix.dockerImage }}
          DOCKER_TAG: stretch
          DOCKER_NAME: ${{ matrix.dockerName }}
          PLATFORM: ${{ matrix.platform }}
        shell: bash
        run: ./.ci/ci_build.sh

      # upload artifacts (only on tagged commit)
      - name: Upload artifacts
        if: startsWith(github.event.ref, 'refs/tags')
        uses: actions/upload-artifact@v2
        with:
          path: deploy/Hyperion-*

######################
###### macOS #########
######################

  macOS:
    name: macOS
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v1
        with:
          submodules: true

      # install dependencies
      - name: Install dependencies
        shell: bash
        run: ./.ci/ci_install.sh

      # build process
      - name: Build packages
        env:
          PLATFORM: osx
        shell: bash
        run: ./.ci/ci_build.sh

      # upload artifacts (only on tagged commit)
      - name: Upload artifacts
        if: startsWith(github.event.ref, 'refs/tags')
        uses: actions/upload-artifact@v2
        with:
          path: build/Hyperion-*

######################
###### Windows #######
######################

  windows:
    name: Windows
    runs-on: windows-latest
    env:
      VCINSTALLDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC'
    steps:
      - name: Checkout
        uses: actions/checkout@v1
        with:
          submodules: true

      - name: Install Qt
        uses: jurplel/install-qt-action@v2
        with:
          version: '5.15.0'
          target: 'desktop'
          arch: 'win64_msvc2019_64'

      - name: Install Python
        uses: actions/setup-python@v1
        with:
          python-version: '3.x'

      - name: Install NSIS
        run: choco install --no-progress nsis -y

      - name: Install OpenSSL
        run: choco install --no-progress openssl -y

      - name: Set up x64 build architecture environment
        shell: cmd
        run: call "${{env.VCINSTALLDIR}}\Auxiliary\Build\vcvars64.bat"

      # Build packages
      - name: Build packages
        env:
          PLATFORM: windows
        shell: bash
        run: ./.ci/ci_build.sh

      # upload artifacts (only on tagged commit)
      - name: Upload artifacts
        if: startsWith(github.event.ref, 'refs/tags')
        uses: actions/upload-artifact@v2
        with:
          path: build/Hyperion-*

######################
#### Documentation ###
######################

  Docs:
    name: Documentation
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: docs
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      # Install dependencies
      - name: Setup node 12
        uses: actions/setup-node@v1
        with:
          node-version: '12'

      # Build Docs
      - name: Build docs
        run: |
          cd docs
          npm install -g yarn
          yarn install
          yarn docs:build

      # Deploy to gh-pages (only on tagged commit)
      - name: Deploy to gh-pages
        if: startsWith(github.event.ref, 'refs/tags')
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./docs/dist
          cname: docs.hyperion-project.org

################################
###### Publish Releases ########
################################

  publish:
    name: Publish Releases
    if: startsWith(github.event.ref, 'refs/tags')
    needs: [Linux, macOS, windows, Docs]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      # generate environment variables
      - name: Generate environment variables from version and tag
        run: |
          echo ::set-env name=TAG::${GITHUB_REF/refs\/tags\//}
          echo ::set-env name=VERSION::$(tr -d '\n' < version)
          echo ::set-env name=preRelease::false

      # If version contains alpha or beta, mark draft release as pre-release
      - name: Mark release as pre-release
        if: contains(env.VERSION, 'alpha') || contains(env.VERSION, 'beta')
        run: echo ::set-env name=preRelease::true

      # Download artifacts from previous build process
      - name: Download artifacts
        uses: actions/download-artifact@v2
        with:
          path: artifacts

      # create draft release and upload artifacts
      - name: Create draft release
        uses: softprops/action-gh-release@v1
        with:
          name: Hyperion ${{ env.VERSION }}
          tag_name: ${{ env.TAG }}
          files: "artifacts/**"
          draft: true
          prerelease: ${{ env.preRelease }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
