name: Release Core

on:
  push:
    tags:
      - core@*

env:
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  GITHUB_REF: ${{ github.ref }}
  GITHUB_SHA: ${{ github.sha }}
  NPM_CONFIG_TARGET: 11.2.3
  NPM_CONFIG_DISTURL: https://electronjs.org/headers
  NPM_CONFIG_RUNTIME: electron

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: true
      matrix:
        os: [ macos-latest, windows-latest, ubuntu-latest ]
    steps:
      - name: Checkout branch
        uses: actions/checkout@v1
      - name: Read Node version from .nvmrc
        run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)"
        id: nvm
      - uses: actions/setup-node@v1
        with:
          node-version: ${{ steps.nvm.outputs.NVMRC }}
      - name: Bootstrap packages
        run: npm run bootstrap
      - name: Run tests
        run: npm test
  npm:
    needs: [ test ]
    name: npm
    runs-on: ubuntu-latest
    steps:
      - name: Checkout branch
        uses: actions/checkout@v1
      - name: Read Node version from .nvmrc
        run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)"
        id: nvm
      - uses: actions/setup-node@v1
        with:
          node-version: ${{ steps.nvm.outputs.NVMRC }}
      - name: Bootstrap packages
        run: npm run bootstrap
      - name: Release NPM packages
        run: |
          npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN}
          npm run release
        env:
          NPM_TOKEN: ${{ secrets.NPM_TOKEN}}
  Windows:
    needs: [ npm ]
    name: Windows
    runs-on: windows-2016
    steps:
      - name: Checkout branch
        uses: actions/checkout@v1
      - name: Read Node version from .nvmrc
        run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)"
        id: nvm
      - uses: actions/setup-node@v1
        with:
          node-version: ${{ steps.nvm.outputs.NVMRC }}
      - name: Bootstrap packages
        run: npm run bootstrap
      - name: Release app
        run: npm run app-release
        env:
          CSC_LINK: ${{ secrets.DESIGNER_WINDOWS_CSC_LINK }}
          CSC_KEY_PASSWORD: ${{ secrets.DESIGNER_WINDOWS_CSC_KEY_PASSWORD }}
  Mac:
    needs: [ npm ]
    name: Mac
    runs-on: macos-latest
    steps:
      - name: Checkout branch
        uses: actions/checkout@v1
      - name: Read Node version from .nvmrc
        run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)"
        id: nvm
      - uses: actions/setup-node@v1
        with:
          node-version: ${{ steps.nvm.outputs.NVMRC }}
      - name: Bootstrap packages
        run: npm run bootstrap
      - name: Release app
        run: npm run app-release
        env:
          APPLE_ID: ${{ secrets.DESIGNER_APPLE_ID }}
          APPLE_ID_PASSWORD: ${{ secrets.DESIGNER_APPLE_ID_PASSWORD }}
          CSC_LINK: ${{ secrets.DESIGNER_MAC_CSC_LINK }}
          CSC_KEY_PASSWORD: ${{ secrets.DESIGNER_MAC_CSC_KEY_PASSWORD }}
  Linux:
    needs: [ npm ]
    name: Linux
    runs-on: ubuntu-latest
    steps:
      - name: Install Snapcraft
        run: |
          sudo snap install snapcraft --classic
          echo "${{ secrets.SNAPCRAFT_LOGIN_FILE }}" > snapcraft.txt && snapcraft login --with snapcraft.txt
      - name: Checkout branch
        uses: actions/checkout@v1
      - name: Read Node version from .nvmrc
        run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)"
        id: nvm
      - uses: actions/setup-node@v1
        with:
          node-version: ${{ steps.nvm.outputs.NVMRC }}
      - name: Bootstrap packages
        run: npm run bootstrap
      - name: Release app
        run: npm run app-release
        env:
          BUILD_TARGETS: AppImage,deb,tar.gz,rpm,snap
