name: safe-contracts
on: [ push, pull_request ]

jobs:
  tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: 16.7.0
      - uses: actions/cache@v2
        with:
          path: "**/node_modules"
          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
      - run: yarn --frozen-lockfile
      - run: yarn build
      - run: yarn coverage
      - name: Coveralls
        uses: coverallsapp/github-action@master
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: 16.7.0
      - uses: actions/cache@v2
        with:
          path: "**/node_modules"
          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
      - run: yarn --frozen-lockfile
      - run: yarn lint:sol
  tests-other:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        contract-name: ["SafeL2"]
    env:
      SAFE_CONTRACT_UNDER_TEST: ${{ matrix.contract-name }}
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: 16.7.0
      - uses: actions/cache@v2
        with:
          path: "**/node_modules"
          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
      - run: yarn --frozen-lockfile
      - run: yarn build
      - run: yarn coverage
      - name: Coveralls
        uses: coverallsapp/github-action@master
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
  benchmarks:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        solidity: ["0.7.6", "0.8.2"]
        include:
        - solidity: "0.8.2"
          settings: '{"viaIR":true,"optimizer":{"enabled":true,"runs":10000}}'
    env:
      SOLIDITY_VERSION: ${{ matrix.solidity }}
      SOLIDITY_SETTINGS: ${{ matrix.settings }}
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: 16.7.0
      - uses: actions/cache@v2
        with:
          path: "**/node_modules"
          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
      - run: (yarn --frozen-lockfile && yarn build && yarn hardhat codesize --contractname Safe && yarn benchmark) || echo "Benchmark failed"
