# Copyright 2020-2021 Signal Messenger, LLC
# SPDX-License-Identifier: AGPL-3.0-only

name: CI
on: [push, pull_request]

jobs:
  lint:
    runs-on: ubuntu-latest

    steps:
    - run: lsb_release -a
    - run: uname -a
    - uses: actions/checkout@v2
    - uses: actions/setup-node@v2
      with:
        node-version: '14.16.0'
    - run: npm install -g yarn@1.22.10

    - name: Cache Desktop node_modules
      id: cache-desktop-modules
      uses: actions/cache@v2
      with:
        path: node_modules
        key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }}
    - name: Install Desktop node_modules
      if: steps.cache-desktop-modules.outputs.cache-hit != 'true'
      run: yarn install --frozen-lockfile

    - run: yarn generate
    - run: yarn lint
    - run: yarn lint-deps
    # - run: yarn lint-license-comments
    - run: git diff --exit-code

  macos:
    needs: lint
    runs-on: macos-latest
    if: github.ref == 'refs/heads/development' || github.ref == 'refs/heads/master'

    steps:
    - run: uname -a
    - uses: actions/checkout@v2
    - uses: actions/setup-node@v2
      with:
        node-version: '14.16.0'
    - run: npm install -g yarn@1.22.10

    - name: Cache Desktop node_modules
      id: cache-desktop-modules
      uses: actions/cache@v2
      with:
        path: node_modules
        key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }}
    - name: Install Desktop node_modules
      if: steps.cache-desktop-modules.outputs.cache-hit != 'true'
      run: yarn install --frozen-lockfile

    - run: yarn generate
    - run: yarn prepare-beta-build
    - run: yarn build
    - run: yarn test-node
    - run: yarn test-electron
    - run: yarn grunt test-release:osx
      env:
        NODE_ENV: production

  linux:
    needs: lint
    runs-on: ubuntu-latest

    steps:
    - run: lsb_release -a
    - run: uname -a
    - uses: actions/checkout@v2
    - uses: actions/setup-node@v2
      with:
        node-version: '14.16.0'
    - run: sudo apt-get install xvfb
    - run: npm install -g yarn@1.22.10

    - name: Cache Desktop node_modules
      id: cache-desktop-modules
      uses: actions/cache@v2
      with:
        path: node_modules
        key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }}
    - name: Install Desktop node_modules
      if: steps.cache-desktop-modules.outputs.cache-hit != 'true'
      run: yarn install --frozen-lockfile

    - run: yarn generate
    - run: yarn prepare-beta-build
    - run: yarn build
    - run: xvfb-run --auto-servernum yarn test-node
    - run: xvfb-run --auto-servernum yarn test-electron
      env:
        LANG: en_US
        LANGUAGE: en_US
    - run: xvfb-run --auto-servernum yarn grunt test-release:linux
      env:
        NODE_ENV: production

  windows:
    needs: lint
    runs-on: windows-latest

    steps:
    - run: systeminfo
    - run: git config --global core.autocrlf false
    - run: git config --global core.eol lf
    - uses: actions/checkout@v2
    - uses: actions/setup-node@v2
      with:
        node-version: '14.16.0'
    - run: npm install -g yarn@1.22.10

    - name: Cache Desktop node_modules
      id: cache-desktop-modules
      uses: actions/cache@v2
      with:
        path: node_modules
        key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }}
    - name: Install Desktop node_modules
      if: steps.cache-desktop-modules.outputs.cache-hit != 'true'
      run: yarn install --frozen-lockfile

    - run: yarn generate
    - run: node build\grunt.js
    - run: yarn test-node
    - run: copy package.json temp.json
    - run: del package.json
    - run: type temp.json | findstr /v certificateSubjectName | findstr /v certificateSha1 > package.json
    - run: yarn prepare-beta-build
    - run: yarn build
    - run: node build\grunt.js test
    - run: node build\grunt.js test-release:win
      env:
        SIGNAL_ENV: production
