name: Release App

on:
  push:
    tags:
      - "v*.*.*"
    paths-ignore:
      - 'README.md'
      - 'docs/**'
      - '.vscode'
  pull_request:
    branches:
      - master
    paths-ignore:
      - 'docs/**'
      - 'README.md'
      - '.vscode'

concurrency: 
  group: release-ci-group
  cancel-in-progress: true

jobs:
  Linux:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
  
    - name: Install Snapcraft
      uses: samuelmeuli/action-snapcraft@v1
      with:
        snapcraft_token: ${{ secrets.SNAP_TOKEN }}
    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: 14.x

    - name: Get npm cache directory
      uses: actions/cache@v2
      with:
        path: ~/.npm
        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
          ${{ runner.os }}-node-

    - name: Install dependencies
      run: npm ci

    - name: Make Linux (x64)
      run: npm run make:linux-x64
      env:
        CI: true
        CI_PULL_REQUEST: ${{ github.event_name == 'pull_request' }}
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    - name: Make Linux (arm64)
      run: npm run make:linux-arm
      env:
        CI: true
        CI_PULL_REQUEST: ${{ github.event_name == 'pull_request' }}
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    - name: Create Release
      uses: softprops/action-gh-release@v1
      if: startsWith(github.ref, 'refs/tags/')
      with:
        draft: true
        files: out/make/**/*
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  MacOS:
    runs-on: macos-latest

    steps:
    - uses: actions/checkout@v2

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: 14.x

    - name: Get npm cache directory
      uses: actions/cache@v2
      with:
        path: ~/.npm
        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
          ${{ runner.os }}-node-

    - name: Install dependencies
      run: npm ci

    - name: Make macOS (x64)
      run: npm run make:mac-x64
      env:
        APPLE_ID: ${{ secrets.APPLE_ID }}
        APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
        CI: true
        CI_PULL_REQUEST: ${{ github.event_name == 'pull_request' }}
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    - name: Make macOS (arm64)
      run: npm run make:mac-arm
      env:
        APPLE_ID: ${{ secrets.APPLE_ID }}
        APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
        CI: true
        CI_PULL_REQUEST: ${{ github.event_name == 'pull_request' }}
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    - name: Create Release
      uses: softprops/action-gh-release@v1
      if: startsWith(github.ref, 'refs/tags/')
      with:
        draft: true
        files: out/make/**/*
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  Windows:
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v2

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: 14.x

    - name: Get npm cache directory
      id: npm-cache
      run: |
        echo "::set-output name=dir::$(npm config get cache)"
    - uses: actions/cache@v2
      with:
        path: ${{ steps.npm-cache.outputs.dir }}
        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
          ${{ runner.os }}-node-

    - name: Install dependencies
      run: npm ci

    - name: Make Windows (x64)
      run: npm run make:win-x64
      env:
        CSC_LINK: ${{ secrets.WIN_CERT }}
        CSC_KEY_PASSWORD: ${{ secrets.WIN_CERT_PASS }}
        CI: true
        CI_PULL_REQUEST: ${{ github.event_name == 'pull_request' }}
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    - name: Make Windows (arm64)
      run: npm run make:win-arm
      env:
        CSC_LINK: ${{ secrets.WIN_CERT }}
        CSC_KEY_PASSWORD: ${{ secrets.WIN_CERT_PASS }}
        CI: true
        CI_PULL_REQUEST: ${{ github.event_name == 'pull_request' }}
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    - name: Create Release
      uses: softprops/action-gh-release@v1
      if: startsWith(github.ref, 'refs/tags/')
      with:
        draft: true
        files: out/make/**/*
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}