# 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' - 'g*.sh' - 'src/kibot' - 'tests/**' - '.github/workflows/pythonapp.yml' - 'tools/dev_image/Dockerfile' - 'tools/dev_image_k6/Dockerfile' pull_request: paths: - '**.py' - 'g*.sh' - 'src/kibot' - 'tests/**' - '.github/workflows/pythonapp.yml' - 'tools/dev_image/Dockerfile' - 'tools/dev_image_k6/Dockerfile' repository_dispatch: types: [run_tests] jobs: test: strategy: fail-fast: false matrix: ki_release: [ki5, ki6, ki7, ki8] w_tests: [g1, g2, g3] runs-on: ubuntu-latest container: ghcr.io/inti-cmnb/kicad_auto_test:${{ matrix.ki_release }} steps: - uses: actions/checkout@v4 with: submodules: recursive - name: Test ${{ matrix.ki_release }} env: KI_RELEASE: ${{ matrix.ki_release }} run: | rm -rf output rm -f tests/.local ##### Experimental stuff: ## Remove KiAuto #dpkg --remove kiauto ## Install KiAuto@master #curl https://codeload.github.com/INTI-CMNB/KiAuto/zip/refs/heads/master --output pp.zip #unzip pp.zip #pip3 install KiAuto-master/ ## Clean the downloaded stuff #rm -rf KiAuto-master/ pp.zip ## Check what we got #echo $PATH #ls -la /usr/bin/*_do || true #ls -la /usr/local/bin/*_do || true #which pcbnew_do #pcbnew_do --version # KiDiff tests #curl https://codeload.github.com/INTI-CMNB/KiDiff/zip/refs/heads/kiri_mode --output pp.zip #unzip pp.zip #prefix=/usr make -C KiDiff-kiri_mode install #rm -rf KiDiff-kiri_mode/ pp.zip #kicad-diff.py --version ##### End Experimental stuff # 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) together # Do it in parallel ./${{ matrix.w_tests }}.sh - name: Store coverage if: ${{ always() }} uses: actions/upload-artifact@v4 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@v4 with: name: Test_Output_${{ matrix.ki_release }}_${{ matrix.w_tests }} # Important! empty directories are skipped!!!! path: output - name: Upload Coverage # Don't mix stable coverage with development coverage if: ${{ (github.ref == 'refs/heads/dev') && (matrix.ki_release != 'ki8') }} 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 test_indep: strategy: fail-fast: false runs-on: ubuntu-latest container: ghcr.io/inti-cmnb/kicad_auto_test:latest steps: - uses: actions/checkout@v4 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 Independent env: KI_RELEASE: latest run: | rm -rf output rm -f tests/.local # Ensure we start a fresh coverage meassurement python3-coverage erase # Create the caches with macros python3-coverage run src/kibot --help-outputs > /dev/null ./g4.sh - name: Store coverage if: ${{ always() }} uses: actions/upload-artifact@v4 with: name: Test_Coverage_Independent path: .coverage.* - name: Collect coverage independent run: | python3-coverage combine python3-coverage report python3-coverage html -d output/htmlcov_independent - name: Store results if: ${{ always() }} uses: actions/upload-artifact@v4 with: name: Test_Output_Independent # Important! empty directories are skipped!!!! path: output - name: Upload Coverage # Don't mix stable coverage with development coverage if: github.ref == 'refs/heads/dev' env: COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} COVERALLS_FLAG_NAME: independent 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 create_images: name: Triggers the docker images creation runs-on: ubuntu-latest needs: [test, test_indep] if: github.ref == 'refs/heads/dev' steps: - name: Trigger `dev` images build run: | curl -L -X POST -H "Authorization: Bearer ${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/INTI-CMNB/KiBot/actions/workflows/dev_images.yml/dispatches --data '{"ref": "dev"}' consolidate_coverage: name: Consolidate coverage data runs-on: ubuntu-latest container: setsoft/kicad_auto_test:ki7 needs: [test, test_indep] # Don't mix stable coverage with development coverage if: github.ref == 'refs/heads/dev' steps: - uses: actions/checkout@v4 with: submodules: recursive - name: Download coverage k5 g1 uses: actions/download-artifact@v4 with: name: Test_Coverage_ki5_g1 - name: Download coverage k5 g2 uses: actions/download-artifact@v4 with: name: Test_Coverage_ki5_g2 - name: Download coverage k5 g3 uses: actions/download-artifact@v4 with: name: Test_Coverage_ki5_g3 - name: Download coverage k6 g1 uses: actions/download-artifact@v4 with: name: Test_Coverage_ki6_g1 - name: Download coverage k6 g2 uses: actions/download-artifact@v4 with: name: Test_Coverage_ki6_g2 - name: Download coverage k6 g3 uses: actions/download-artifact@v4 with: name: Test_Coverage_ki6_g3 - name: Download coverage independent uses: actions/download-artifact@v4 with: name: Test_Coverage_Independent - name: Combine coverage run: | pip3 install --upgrade --break-system-packages 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@v4 with: name: Test_Coverage_combined path: htmlcov coveralls: name: Finish Coveralls needs: [test, test_indep] runs-on: ubuntu-latest # Don't mix stable coverage with development coverage if: github.ref == 'refs/heads/dev' 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"