# 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] w_tests: [g1, g2, g3] 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 #### Experimental stuff: # Install KiAuto pip3 install git+https://github.com/INTI-CMNB/KiAuto.git@kicad_interposer # Uninstall the system level version rm /usr/bin/pcbnew_do rm /usr/bin/eeschema_do rm /usr/bin/kicad2step_do rm -r /usr/lib/python3/dist-packages/kiauto* which pcbnew_do ls -la /github/home/.local/bin/ || true ls -la /github/home/.local/lib/python3*/dist-packages/kiauto* || true #### End Experimental stuff # Unify coverage versions to allow combine pip3 install --upgrade coverage==5.1 ln -s /usr/local/bin/coverage3 /usr/local/bin/python3-coverage || true # The KiCad 5 image currently has a very old pytest (no parallel run) pip3 install --upgrade pytest pip3 install --upgrade pytest-xdist # Ensure we start a fresh coverage meassurement python3-coverage erase # Create the caches with macros python3-coverage run src/kibot --help-outputs > /dev/null # Individual run for specific tests # pytest --log-cli-level debug -k "test_ibom_parse_fail" --test_dir=output # Run the 90% faster tests (under 3 s) # Do it in parallel ./${{ matrix.w_tests }}.sh - name: Store coverage if: ${{ always() }} uses: actions/upload-artifact@v3 with: name: Test_Coverage_${{ matrix.ki_release }}_${{ matrix.w_tests }} path: .coverage.* - name: Collect coverage ${{ matrix.ki_release }} run: | python3-coverage combine python3-coverage report python3-coverage html -d output/htmlcov_${{ matrix.w_tests }} - name: Store results if: ${{ always() }} uses: actions/upload-artifact@v3 with: name: Test_Output_${{ matrix.ki_release }}_${{ matrix.w_tests }} # Important! empty directories are skipped!!!! path: output - name: Upload Coverage env: COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} COVERALLS_FLAG_NAME: ${{ matrix.ki_release }}_${{ matrix.w_tests }} COVERALLS_PARALLEL: true GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | # apt-get update # apt-get -y install python3-pip # pip3 install coveralls #coveralls --service=github #echo Disabled by now coveralls consolidate_coverage: name: Consolidate coverage data runs-on: ubuntu-latest container: setsoft/kicad_auto_test:ki6 needs: test steps: - uses: actions/checkout@v2 with: submodules: recursive - name: Download coverage k5 g1 uses: actions/download-artifact@v3 with: name: Test_Coverage_latest_g1 - name: Download coverage k5 g2 uses: actions/download-artifact@v3 with: name: Test_Coverage_latest_g2 - name: Download coverage k5 g3 uses: actions/download-artifact@v3 with: name: Test_Coverage_latest_g3 - name: Download coverage k6 g1 uses: actions/download-artifact@v3 with: name: Test_Coverage_ki6_g1 - name: Download coverage k6 g2 uses: actions/download-artifact@v3 with: name: Test_Coverage_ki6_g2 - name: Download coverage k6 g3 uses: actions/download-artifact@v3 with: name: Test_Coverage_ki6_g3 - name: Combine coverage run: | pip3 install --upgrade coverage==5.1 ln -s /usr/local/bin/coverage3 /usr/local/bin/python3-coverage || true python3-coverage combine python3-coverage report python3-coverage html -d htmlcov - name: Store result uses: actions/upload-artifact@v3 with: name: Test_Coverage_combined path: htmlcov 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"