name: Capsule tests -- nightly

# This workflow runs the frontend tests against latest develop of the core to preempt breaking changes

on:
  schedule:
    - cron: '0 4 * * *'

jobs:
  nightly:
    name: Run capsule tests -- nightly
    runs-on: ubuntu-latest
    env:
      GO111MODULE: 'on'
      GOPROXY: ${{ secrets.GO_PROXY }}
    steps:
      #######
      ## Setup langs
      #######
      - name: Set up Go
        uses: actions/setup-go@v3
        id: go
        with:
          go-version: 1.18
      - name: Set up Node 16
        uses: actions/setup-node@v2
        id: npm
        with:
          node-version: 16

      #######
      ## Checkout all the things
      #######

      # Checkout repos required to build vega capsule
      - name: Checkout vega
        uses: actions/checkout@v2
        with:
          repository: vegaprotocol/vega
          ref: master
          token: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }}
          path: './vega'

      - name: Checkout data node
        uses: actions/checkout@v2
        with:
          repository: vegaprotocol/data-node
          ref: main
          token: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }}
          path: './data-node'

      - name: Checkout protos
        uses: actions/checkout@v2
        with:
          repository: vegaprotocol/protos
          ref: master
          token: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }}
          path: './protos'

      - name: Checkout vegatools
        uses: actions/checkout@v2
        with:
          repository: vegaprotocol/vegatools
          ref: main
          token: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }}
          path: './vegatools'

      - name: Checkout vega wallet
        uses: actions/checkout@v2
        with:
          repository: vegaprotocol/vegawallet
          ref: master
          path: './vegawallet'

      # Checkout capsule to build local network
      - name: Checkout capsule
        uses: actions/checkout@v2
        with:
          repository: vegaprotocol/vegacapsule
          ref: main
          token: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }}
          path: './capsule'

      #######
      ## Build binaries
      #######
      - name: Build capsule
        run: go install
        working-directory: capsule

      - name: Build vega
        run: go install ./cmd/vega/
        working-directory: vega

      - name: Build vegawallet
        run: go install
        working-directory: vegawallet

      - name: Build data-node
        run: go install ./cmd/data-node/
        working-directory: data-node

      ######
      ## Start capsule
      ######
      - name: Login to docker
        run: echo -n ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} | docker login https://ghcr.io -u vega-ci-bot --password-stdin
      - name: Start nomad
        run: vegacapsule nomad &

      - name: Bootstrap network
        run: vegacapsule network bootstrap --config-path=./net_confs/config.hcl
        working-directory: capsule

      ######
      ## Setup a Vega wallet for our user
      ######
      - name: Create passphrase
        run: echo "${{ secrets.CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE }}" > ./passphrase
      - name: Create recovery
        run: echo "${{ secrets.TRADING_TEST_VEGA_WALLET_RECOVERY }}" > ./recovery

      - name: Initialize wallet
        run: vegawallet init -f --home ~/.vegacapsule/testnet/wallet
      - name: Import wallet
        run: vegawallet import -w UI_Trading_Test --recovery-phrase-file ./recovery -p ./passphrase --home ~/.vegacapsule/testnet/wallet
      - name: Create public key 2
        run: vegawallet key generate -w UI_Trading_Test -p ./passphrase --home ~/.vegacapsule/testnet/wallet
      - name: Start service
        run: vegawallet service run --network DV --automatic-consent  --home ~/.vegacapsule/testnet/wallet &

      ######
      ## Run some tests
      ######

      # Checkout front ends
      - name: Checkout frontend mono repo
        uses: actions/checkout@v2
        with:
          ref: ${{ github.event.pull_request.head.ref }}
          fetch-depth: 0

      - name: Install root dependencies
        run: yarn install

      - name: Run Cypress tests
        run: yarn nx run-many --target=e2e --all --record --key ${{ secrets.CYPRESS_RECORD_KEY }} --browser chrome
        env:
          CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE: ${{ secrets.CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE }}
          CYPRESS_SLACK_WEBHOOK: ${{ secrets.CYPRESS_SLACK_WEBHOOK }}
          CYPRESS_ETH_WALLET_MNEMONIC: ${{ secrets.CYPESS_ETH_WALLET_MNEMONIC }}
          CYPRESS_NIGHTLY_RUN: true

      ######
      ## Upload logs
      ######

      - name: Logs
        if: ${{ always() }}
        run: vegacapsule network logs > vega-capsule-logs.txt

      - uses: actions/upload-artifact@v2
        with:
          name: logs
          path: ./vega-capsule-logs.txt
