'name': 'build'

'env':
  'GO_VERSION': '1.14'
  'NODE_VERSION': '13'

'on':
  'push':
    'branches':
    - '*'
    'tags':
    - 'v*'
  'pull_request':

'jobs':
  'test':
    'runs-on': '${{ matrix.os }}'
    'env':
      'GO111MODULE': 'on'
      'GOPROXY': 'https://goproxy.io'
    'strategy':
      'fail-fast': false
      'matrix':
        'os':
        - 'ubuntu-latest'
        - 'macOS-latest'
        - 'windows-latest'
    'steps':
    - 'name': 'Checkout'
      'uses': 'actions/checkout@v2'
      'with':
        'fetch-depth': 0
    - 'name': 'Set up Go'
      'uses': 'actions/setup-go@v2'
      'with':
        'go-version': '${{ env.GO_VERSION }}'
    - 'name': 'Set up Node'
      'uses': 'actions/setup-node@v1'
      'with':
        'node-version': '${{ env.NODE_VERSION }}'
    - 'name': 'Set up Go modules cache'
      'uses': 'actions/cache@v2'
      'with':
        'path': '~/go/pkg/mod'
        'key': "${{ runner.os }}-go-${{ hashFiles('go.sum') }}"
        'restore-keys': '${{ runner.os }}-go-'
    - 'name': 'Get npm cache directory'
      'id': 'npm-cache'
      'run': 'echo "::set-output name=dir::$(npm config get cache)"'
    - 'name': 'Set up npm cache'
      'uses': 'actions/cache@v2'
      'with':
        'path': '${{ steps.npm-cache.outputs.dir }}'
        'key': "${{ runner.os }}-node-${{ hashFiles('client/package-lock.json') }}"
        'restore-keys': '${{ runner.os }}-node-'
    - 'name': 'Run make ci'
      'shell': 'bash'
      'run': 'make ci'
    - 'name': 'Upload coverage'
      'uses': 'codecov/codecov-action@v1'
      'if': "success() && matrix.os == 'ubuntu-latest'"
      'with':
        'token': '${{ secrets.CODECOV_TOKEN }}'
        'file': './coverage.txt'
  'app':
    'runs-on': 'ubuntu-latest'
    'needs': 'test'
    'steps':
    - 'name': 'Checkout'
      'uses': 'actions/checkout@v2'
      'with':
        'fetch-depth': 0
    - 'name': 'Set up Go'
      'uses': 'actions/setup-go@v2'
      'with':
        'go-version': '${{ env.GO_VERSION }}'
    - 'name': 'Set up Node'
      'uses': 'actions/setup-node@v1'
      'with':
        'node-version': '${{ env.NODE_VERSION }}'
    - 'name': 'Set up Go modules cache'
      'uses': 'actions/cache@v2'
      'with':
        'path': '~/go/pkg/mod'
        'key': "${{ runner.os }}-go-${{ hashFiles('go.sum') }}"
        'restore-keys': '${{ runner.os }}-go-'
    - 'name': 'Get npm cache directory'
      'id': 'npm-cache'
      'run': 'echo "::set-output name=dir::$(npm config get cache)"'
    - 'name': 'Set up node_modules cache'
      'uses': 'actions/cache@v2'
      'with':
        'path': '${{ steps.npm-cache.outputs.dir }}'
        'key': "${{ runner.os }}-node-${{ hashFiles('client/package-lock.json') }}"
        'restore-keys': '${{ runner.os }}-node-'
    - 'name': 'Set up Snapcraft'
      'run': 'sudo apt-get -yq --no-install-suggests --no-install-recommends install snapcraft'
    - 'name': 'Set up GoReleaser'
      'run': 'curl -sfL https://install.goreleaser.com/github.com/goreleaser/goreleaser.sh | BINDIR="$(go env GOPATH)/bin" sh'
    - 'name': 'Run snapshot build'
      'run': 'make release'

  'docker':
    'runs-on': 'ubuntu-latest'
    'needs': 'test'
    'steps':
    - 'name': 'Checkout'
      'uses': 'actions/checkout@v2'
      'with':
        'fetch-depth': 0
    - 'name': 'Set up QEMU'
      'uses': 'docker/setup-qemu-action@v1'
    - 'name': 'Set up Docker Buildx'
      'uses': 'docker/setup-buildx-action@v1'
    - 'name': 'Docker Buildx (build)'
      'run': 'make docker-multi-arch'

  'notify':
    'needs':
    - 'app'
    - 'docker'
    # Secrets are not passed to workflows that are triggered by a pull request
    # from a fork.
    #
    # Use always() to signal to the runner that this job must run even if the
    # previous ones failed.
    'if':
      ${{ always() &&
        (
          github.event_name == 'push' ||
          github.event.pull_request.head.repo.full_name == github.repository
        )
      }}
    'runs-on': 'ubuntu-latest'
    'steps':
    - 'name': 'Conclusion'
      'uses': 'technote-space/workflow-conclusion-action@v1'
    - 'name': 'Send Slack notif'
      'uses': '8398a7/action-slack@v3'
      'with':
        'status': '${{ env.WORKFLOW_CONCLUSION }}'
        'fields': 'repo, message, commit, author, job'
      'env':
        'GITHUB_TOKEN': '${{ secrets.GITHUB_TOKEN }}'
        'SLACK_WEBHOOK_URL': '${{ secrets.SLACK_WEBHOOK_URL }}'