KiBot/.github/workflows/pythonapp.yml

234 lines
7.1 KiB
YAML

# 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"