name: sync-tests

on: workflow_dispatch

jobs:
  integration-sync-test:
    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

      - 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: docker-compose up -d && ./scripts/wait-for-sequencer.sh

      - name: Run the sync tests
        working-directory: ./integration-tests
        run: |
          yarn
          yarn build
          yarn test:sync

      - 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'
          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
