name: Exteral Tests (Synthetix)

on: workflow_dispatch

jobs:
  integration:
    runs-on: ubuntu-latest
    services:
      registry:
        image: registry:2
        ports:
          - 5000:5000
    env:
      DOCKER_BUILDKIT: 1
      COMPOSE_DOCKER_CLI_BUILD: 1
    steps:
      - uses: actions/checkout@v2

      # Required for some installation in the SNX repo
      - uses: webfactory/ssh-agent@v0.4.1
        with:
          ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY_READ }}

      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "::set-output name=dir::$(yarn cache dir)"

      - uses: actions/cache@v2
        id: yarn-cache
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-

      - uses: actions/cache@v2
        name: Set up layer cache
        with:
          path: /tmp/.buildx-cache
          key: ${{ runner.os }}-buildx-1-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-buildx-1-

      - uses: docker/setup-buildx-action@master
        name: Set up Docker Buildx
        id: buildx
        with:
          version: latest
          driver-opts: image=moby/buildkit:master,network=host

      - name: Build the services
        run: ./ops/scripts/build-ci.sh

      - name: Bring the stack up
        working-directory: ./ops
        run: |
          ./scripts/stats.sh &
          docker-compose up -d

      - name: Wait for the Sequencer node
        working-directory: ./ops
        run: ./scripts/wait-for-sequencer.sh

      - name: Run the SNX test suite
        working-directory: ./integration-tests
        run: ./ext-test/snx.sh

      - name: Collect docker logs on failure
        if: failure()
        uses: jwalton/gh-docker-logs@v1
        with:
          images: 'ethereumoptimism/builder,ethereumoptimism/hardhat,ethereumoptimism/deployer,ethereumoptimism/data-transport-layer,ethereumoptimism/l2geth,ethereumoptimism/message-relayer,ethereumoptimism/batch-submitter,ethereumoptimism/l2geth,ethereumoptimism/integration-tests'
          dest: '~/logs'

      - name: Tar logs
        if: failure()
        run: tar cvzf ./logs.tgz ~/logs

      - name: Upload logs to GitHub
        if: failure()
        uses: actions/upload-artifact@master
        with:
          name: logs.tgz
          path: ./logs.tgz

      - name: Move cache
        run: |
          rm -rf /tmp/.buildx-cache
          mv /tmp/.buildx-cache-new /tmp/.buildx-cache
