name: Master deployment

on:
  push:
    branches:
      - master
jobs:
  cancel-previous:
    name: 'Cancel Previous Runs'
    runs-on: ubuntu-latest
    timeout-minutes: 3
    steps:
      - uses: styfle/cancel-workflow-action@0.9.1
        with:
          access_token: ${{ github.token }}

  deploy-application:
    services:
      postgres:
        image: postgres
        env:
          POSTGRES_DB: 'origin'
          POSTGRES_PASSWORD: 'postgres'
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 10s
          --health-retries 10  
        ports:
          - 5432:5432
    runs-on: ubuntu-latest
    needs: cancel-previous
    steps:
    - name: Inject slug/short variables
      uses: rlespinasse/github-slug-action@v3.x

    - uses: actions/checkout@v2
      with:
        fetch-depth: 0

    - uses: actions/setup-node@v2-beta
      with:
        node-version: '14'

    - name: "Generate unique id"
      id: generate_unique_id
      uses: ./.github/actions/build_id

    - name: Restore timestamp
      run: |
        sh scripts/restore-original-timestamps.sh

    - name: Install rush
      run: |
        npm install -g @microsoft/rush

    - name: Install application
      # lerna doesn't work without additional fetch
      run: |
        node common/scripts/install-run-rush.js update

    - name: Build application
      run: |
        node common/scripts/install-run-rush.js rebuild -v

    - name: Deploy application
      run: |
        yarn build:containers:canary
        yarn deploy:heroku:canary
      env:
        BUILD_ID: ${{ steps.generate_unique_id.outputs.unique_id }}
        HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
        HEROKU_CANARY_APP_API: ${{ secrets.HEROKU_CANARY_APP_API }}
        HEROKU_CANARY_APP_UI: ${{ secrets.HEROKU_CANARY_APP_UI }}
        HEROKU_CANARY_APP_SIM: ${{ secrets.HEROKU_CANARY_APP_SIM }}
        HEROKU_CANARY_APP_IREC_UI: ${{ secrets.HEROKU_CANARY_APP_IREC_UI }}
        HEROKU_CANARY_APP_IREC_API: ${{ secrets.HEROKU_CANARY_APP_IREC_API }}
