name: macOS Build
on: [push, pull_request]
jobs:
  build:
    runs-on: macos-11.0
    strategy:
      matrix:
        include:
          - arch: x86_64
            electron_setup_cmd: 'true'
          - arch: arm64
            electron_setup_cmd: 'yarn add -D electron@11.1.1'

    steps:
    - name: Checkout
      uses: actions/checkout@v1

    - name: Installing Node
      uses: actions/setup-node@v1
      with:
        node-version: 15

    - name: Install deps
      run: |
        sudo npm i -g yarn@1.22.1
        cd app
        yarn
        cd ..
        rm app/node_modules/.yarn-integrity
        yarn

    - name: Upgrade Electron for ARM builds
      run: ${{ matrix.electron_setup_cmd }}

    - name: Build native deps
      run: scripts/build-native.js
      env:
        ARCH: ${{matrix.arch}}

    - name: Webpack
      run: yarn run build

    - name: Prepackage plugins
      run: scripts/prepackage-plugins.js
      env:
        ARCH: ${{matrix.arch}}

    - run: sed -i '' 's/updateInfo = await/\/\/updateInfo = await/g' node_modules/app-builder-lib/out/targets/ArchiveTarget.js

    - name: Build and sign packages
      run: scripts/build-macos.js
      if: github.repository == 'Eugeny/terminus' && github.event_name == 'push'
      env:
        ARCH: ${{matrix.arch}}
        GH_TOKEN: ${{ secrets.GH_TOKEN }}
        CSC_LINK: ${{ secrets.CSC_LINK }}
        CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
        APPSTORE_USERNAME: ${{ secrets.APPSTORE_USERNAME }}
        APPSTORE_PASSWORD: ${{ secrets.APPSTORE_PASSWORD }}
        USE_HARD_LINKS: false
        # DEBUG: electron-builder,electron-builder:*

    - name: Build packages without signing
      run: scripts/build-macos.js
      if: github.repository != 'Eugeny/terminus' || github.event_name != 'push'
      env:
        ARCH: ${{matrix.arch}}
        # DEBUG: electron-builder,electron-builder:*

    - name: Upload symbols
      run: |
        sudo npm install -g @sentry/cli --unsafe-perm
        ./scripts/sentry-upload.js
      env:
        SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
        SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
        SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}

    - name: Package artifacts
      run: |
        mkdir artifact-pkg
        mv dist/*.pkg artifact-pkg/
        mkdir artifact-zip
        mv dist/*.zip artifact-zip/

    - uses: actions/upload-artifact@master
      name: Upload PKG
      with:
        name: macOS .pkg (${{matrix.arch}})
        path: artifact-pkg

    - uses: actions/upload-artifact@master
      name: Upload ZIP
      with:
        name: macOS .zip (${{matrix.arch}})
        path: artifact-zip
