name: E2E

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - "*"

jobs:
  e2e_linux:
    runs-on: ubuntu-latest
    name: Test on Linux with Node ${{ matrix.node }}
    strategy:
      matrix:
        node: [16, 18, 20]
    
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node }}
          cache: 'npm'
      
      - name: Install dependencies
        run: npm install --include=dev
      
      - name: Run linter
        run: npm run lint
      
      - name: Generate Docs
        run: npm run docs 
      
      - name: Pack
        run: npm pack
      
      - name: Global Installation
        run: npm i -g solhint*tgz

      - name: Check solhint version
        run: solhint --version
      
      - name: Run E2E Tests
        run: cd e2e && npm install && npm test

  e2e_windows:
    runs-on: windows-latest
    name: Test on Windows    

    steps:
      - name: Enable Debugging
        run: |
          echo "::debug::Debugging enabled"
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: 'npm'

      - name: Install dependencies
        run: npm install --include=dev

      - name: Run linter
        run: npm run lint

      - name: Generate Docs
        run: npm run docs 

      - name: Pack
        run: npm pack

      - name: Global Installation
        run: npm i -g @(Get-ChildItem -Filter *.tgz)

      - name: Check solhint version
        run: solhint --version

      - name: List directory contents
        run: dir

      - name: Run linter
        run: npm run lint

      - name: Run E2E Tests
        run: cd e2e && npm install && npm test

  e2e_macos:
    runs-on: macos-latest
    name: Test on MacOS

    steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-node@v3
      with:
        node-version: 18
        cache: 'npm'

    - name: Install dependencies
      run: npm install --include=dev

    - name: Pack
      run: npm pack
    
    - name: Install solhint
      run: npm i -g solhint*tgz

    - name: Run linter
      run: npm run lint

    - name: Run Tests
      run: cd e2e && npm install && npm test