# This workflow will install Python dependencies, run tests and lint with a single version of Python.
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

name: Regression tests

on:
  push:
    paths:
    - '**.py'
    - 'src/kibot'
    - 'tests/**'
    - '.github/workflows/pythonapp.yml'
    - 'tools/dev_image/Dockerfile'
    - 'tools/dev_image_k6/Dockerfile'
  pull_request:
    paths:
    - '**.py'
    - 'src/kibot'
    - 'tests/**'
    - '.github/workflows/pythonapp.yml'
    - 'tools/dev_image/Dockerfile'
    - 'tools/dev_image_k6/Dockerfile'
  repository_dispatch:
    types: [run_tests]

jobs:
  test:
    strategy:
      matrix:
        ki_release: [latest, ki6]

    runs-on: ubuntu-latest
    container: setsoft/kicad_auto_test:${{ matrix.ki_release }}

    steps:
    - uses: actions/checkout@v2
      with:
        submodules: recursive
    - name: Lint with flake8
      run: |
        # stop the build if there are Python syntax errors or undefined names
        flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
        # exit-zero treats all errors as warnings.
        flake8 . --count --exit-zero --statistics
    - name: Test ${{ matrix.ki_release }}
      run: |
        rm -rf output
        rm -f tests/.local
        python3-coverage erase
        # Create the caches with macros
        python3-coverage run -a src/kibot --help-outputs > /dev/null
        pytest-3 --test_dir output
        # pytest-3 --log-cli-level debug -k "test_misc" --test_dir output
        python3-coverage report
        python3-coverage html -d output/htmlcov
    - name: Store results
      if: ${{ always() }}
      uses: actions/upload-artifact@v1
      with:
        name: Test_Output_${{ matrix.ki_release }}
        path: output
    - name: Upload Coverage
      env:
        COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
        COVERALLS_FLAG_NAME: ${{ matrix.ki_release }}
        COVERALLS_PARALLEL: true
      run: coveralls


  push_to_registry:
    name: Push Docker image to Docker Hub
    runs-on: ubuntu-latest
    needs: test

    steps:
    - name: Check out the repo
      uses: actions/checkout@v2

    - name: Log in to Docker Hub
      uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}

    - name: Extract metadata (tags, labels) for Docker
      id: meta
      uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
      with:
        images: setsoft/kicad_auto

    - name: Build and push Docker image
      uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
      with:
        context: tools/dev_image
        push: true
        tags: setsoft/kicad_auto:dev
        labels: ${{ steps.meta.outputs.labels }}

  push_to_registry_k6:
    name: Push Docker image to Docker Hub (KiCad 6)
    runs-on: ubuntu-latest
    needs: test

    steps:
    - name: Check out the repo
      uses: actions/checkout@v2

    - name: Log in to Docker Hub
      uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}

    - name: Extract metadata (tags, labels) for Docker
      id: meta
      uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
      with:
        images: setsoft/kicad_auto

    - name: Build and push Docker image
      uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
      with:
        context: tools/dev_image_k6
        push: true
        tags: setsoft/kicad_auto:dev_k6
        labels: ${{ steps.meta.outputs.labels }}

  coveralls:
    name: Finish Coveralls
    needs: test
    runs-on: ubuntu-latest
    steps:
    - name: Finished
      env:
        COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
      run: |
        curl -k https://coveralls.io/webhook?repo_token=$COVERALLS_REPO_TOKEN -d "payload[build_num]="$GITHUB_RUN_ID"&payload[status]=done"

