Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integration tests #23

Merged
merged 7 commits into from
Dec 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 24 additions & 20 deletions .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ on:
- '.github/workflows/publish-reports-github-pages.yml'
- '**.md'
- '*.sh'
workflow_call:
workflow_dispatch:
release:
types: [published]
Expand All @@ -69,7 +70,7 @@ jobs:
# To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list.
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: ['3.13']
python-version: ['3.12']
build_type: [RelWithDebInfo]
c_compiler: [clang, cl]
include:
Expand Down Expand Up @@ -98,7 +99,7 @@ jobs:

env:
ALLURE_RESULTS_PATH: build/allure-results
COVERAGE_REPORT_PATH: build/python-coverage
COVERAGE_DATA_PATH: build/python-coverage.sqlite

steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -237,51 +238,54 @@ jobs:

- name: "[🐍] Run Unit tests"
run: >
poetry run coverage run -m pytest -m "not slow"
poetry run coverage run --data-file=${{ env.COVERAGE_DATA_PATH }} -m pytest -m "not slow"
--alluredir ${{ env.ALLURE_RESULTS_PATH }}
--color no
shell: bash # NOTE: required for windows poetry calls

- name: "[🐍] Create coverage report"
if: success() || failure()
run: poetry run coverage html --directory ${{ env.COVERAGE_REPORT_PATH }}
shell: bash # NOTE: required for windows poetry calls
- run: pwd

# - name: "Print listing of build dir"
# if: success() || failure()
# run: find ${{github.workspace}}/build -path ${{github.workspace}}/build/_deps -prune -o -print
# shell: bash # NOTE: required for windows
- run: ls -aR

- name: "[🐍] Store coverage results"
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: upload-python-coverage-report-${{ matrix.os }}_py${{ matrix.python-version }}
path: ${{ env.COVERAGE_REPORT_PATH }}
name: python-unit-tests-coverage-report-${{ matrix.os }}_py${{ matrix.python-version }}
path: ${{ env.COVERAGE_DATA_PATH }} # NOTE: pytest-cov coverage binary file, can be combined later!
retention-days: 1
if-no-files-found: error

- name: "[🐍] Store allure test results"
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: upload-python-allure-report-${{ matrix.os }}_py${{ matrix.python-version }}
name: python-unit-tests-allure-report-${{ matrix.os }}_py${{ matrix.python-version }}
path: ${{ env.ALLURE_RESULTS_PATH }}
retention-days: 1
if-no-files-found: error

call-publish-pypi:
name: "Trigger workflow to publish distribution 📦s to PyPI/TestPyPI"
name: "Publish distribution 📦s to PyPI/TestPyPI"
needs: build_and_test
concurrency:
group: ${{ github.repository }}-${{ github.event.number || github.head_ref || github.sha }}-${{ github.workflow }}-publish-pypi
cancel-in-progress: true
uses: ./.github/workflows/publish-pypi.yml

call-publish-reports-github-pages:
name: "Trigger workflow to publish reports to GitHub Pages"
call-integration-tests:
name: "Integration Tests"
needs: build_and_test
concurrency:
group: ${{ github.repository }}-${{ github.event.number || github.head_ref || github.sha }}-${{ github.workflow }}-publish-reports-github-pages
group: ${{ github.repository }}-${{ github.event.number || github.head_ref || github.sha }}-${{ github.workflow }}-integration-tests
cancel-in-progress: true
uses: ./.github/workflows/publish-reports-github-pages.yml
uses: ./.github/workflows/integration-tests.yml

# NOTE: this is called from integration tests
# call-publish-reports-github-pages:
# name: "Publish reports to GitHub Pages"
# needs: build_and_test
# concurrency:
# group: ${{ github.repository }}-${{ github.event.number || github.head_ref || github.sha }}-${{ github.workflow }}-publish-reports-github-pages
# cancel-in-progress: true
# uses: ./.github/workflows/publish-reports-github-pages.yml
202 changes: 202 additions & 0 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
##
## --------------------------------------------------------------------------------
## SPDX-FileCopyrightText: 2024 Martin Jan Köhler and Harald Pretl
## Johannes Kepler University, Institute for Integrated Circuits.
##
## This file is part of KPEX
## (see https://github.com/martinjankoehler/klayout-pex).
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
## SPDX-License-Identifier: GPL-3.0-or-later
## --------------------------------------------------------------------------------
##

name: "Integration tests"

on:
workflow_call:
workflow_dispatch:
# pull_request:
# branches: [ "main" ]
# paths:
# - '.github/workflows/integration-tests.yml'

env:
KLAYOUT_DEB: "klayout_0.29.10-1_amd64.deb"
KLAYOUT_URL: "https://www.klayout.org/downloads/Ubuntu-22/klayout_0.29.10-1_amd64.deb"


jobs:
run-tests:
name: Integration Test ${{ matrix.os }}-${{ matrix.build_type }}-py${{ matrix.python-version }}
runs-on: ${{ matrix.os }}

strategy:
# Set fail-fast to false to ensure that feedback is delivered for all matrix combinations.
# Consider changing this to true when your workflow is stable.
fail-fast: false

matrix:
os: [ubuntu-22.04]
python-version: ['3.12']

continue-on-error: true

env:
ALLURE_RESULTS_PATH: build/allure-results
COVERAGE_DATA_PATH: build/python-coverage.sqlite

steps:
- uses: actions/checkout@v4

- name: "[🐍] Setup python ${{ matrix.python-version }}"
id: setup-python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: "[🐍] Install Poetry"
uses: snok/install-poetry@v1
with:
virtualenvs-create: true
virtualenvs-in-project: true
virtualenvs-path: .venv
installer-parallel: true

- name: "[🐍] Load cached venv"
id: cached-poetry-dependencies
uses: actions/cache@v4
with:
path: .venv
key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}

- name: "[🐍] Install dependencies"
run: poetry install --no-interaction --no-root
shell: bash # NOTE: required for windows poetry calls

- name: "Restore cached klayout deb 📦 download"
id: cache-klayout-deb
uses: actions/cache/restore@v4
with:
path: klayout-deb
key: ${{ runner.os }}-klayout-deb

- name: "Download klayout deb 📦"
if: steps.cache-klayout-deb.outputs.cache-hit != 'true'
run: |
mkdir -p klayout-deb
pushd klayout-deb
wget "$KLAYOUT_URL"
popd

- name: "Save cached klayout deb 📦 download"
if: success() || failure()
uses: actions/cache/save@v4
with:
path: klayout-deb
key: ${{ runner.os }}-klayout-deb

- name: "Install klayout deb 📦"
run: |
pushd klayout-deb
sudo apt-get update
sudo apt-get install ./$KLAYOUT_DEB
popd

- name: "Restore cached LVSDB results"
uses: actions/cache/restore@v4
with:
path: output_sky130A/.kpex_cache
key: ${{ matrix.os }}-${{ matrix.python-version }}-kpex_cache

- name: "Download and merge Python dist artifacts"
uses: actions/download-artifact@v4
with:
pattern: python-dist-ubuntu-latest*
merge-multiple: true
path: dist # destination

- name: "Unpack Source Distribution"
run: |
tar xvfz dist/klayout_pex*.tar.gz --strip-components=1

- name: "[🐍] Run Unit tests"
run: >
poetry run coverage run --data-file=${{ env.COVERAGE_DATA_PATH }} -m pytest -m "slow"
--alluredir ${{ env.ALLURE_RESULTS_PATH }}
--color no
shell: bash # NOTE: required for windows poetry calls

- name: "[🐍] Store coverage results"
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: python-integration-tests-coverage-report-${{ matrix.os }}_py${{ matrix.python-version }}
path: ${{ env.COVERAGE_DATA_PATH }} # NOTE: pytest-cov coverage binary file, can be combined later!
retention-days: 1
if-no-files-found: error

- name: "[🐍] Store allure test results"
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: python-integration-tests-allure-report-${{ matrix.os }}_py${{ matrix.python-version }}
path: ${{ env.ALLURE_RESULTS_PATH }}
retention-days: 1
if-no-files-found: error

- name: "Save cached LVSDB results"
if: success() || failure()
uses: actions/cache/save@v4
with:
path: output_sky130A/.kpex_cache
key: ${{ matrix.os }}-${{ matrix.python-version }}-kpex_cache

call-publish-reports-github-pages:
name: "Publish reports to GitHub Pages"
needs: run-tests
concurrency:
group: ${{ github.repository }}-${{ github.event.number || github.head_ref || github.sha }}-${{ github.workflow }}-publish-reports-github-pages
cancel-in-progress: true
uses: ./.github/workflows/publish-reports-github-pages.yml

# run-inside-docker:
# name: "Run tests"
# runs-on: ubuntu-latest
# continue-on-error: true
#
# steps:
# - uses: actions/checkout@v4
#
# - name: Generate Cache Key from Dockerfiles
# id: generate_cache_key
# run: |
# files="./tests/fixtures/docker-compose.yml"
# file_contents=$(cat $files)
# key=$(echo "${file_contents}" | sha1sum | awk '{print $1}')
# echo "key=${key}" >> "$GITHUB_OUTPUT"
#
# - name: "Cache Docker images"
# uses: ScribeMD/[email protected]
# with:
# key: docker-${{ runner.os }}-integration-tests-${{ steps.generate_cache_key.outputs.key }}
#
# - name: "Install Docker and run tests"
# uses: adambirds/[email protected]
# with:
# compose-file: "./tests/fixtures/docker-compose.yml"
# test-container: iic-osic-tools
# test-command: --skip ./run_integration_tests.sh
# continue-on-error: true # ensure docker cache is written nevertheless

49 changes: 40 additions & 9 deletions .github/workflows/publish-reports-github-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,17 @@ jobs:
# uses: actions/upload-artifact/merge@v4
# with:
# name: merged-allure-reports
# pattern: upload-python-allure-report-*
# pattern: python-*-tests-allure-report-ubuntu*
# # delete-merged: true
# retention-days: 1

- name: "Download and merge Allure coverage artifacts"
uses: actions/download-artifact@v4
with:
pattern: upload-python-allure-report-*
pattern: python-*-tests-allure-report-*
merge-multiple: true
path: build/allure-results # destination

- name: "Set up JDK (for Allure)"
uses: actions/setup-java@v4
with:
Expand Down Expand Up @@ -92,18 +92,49 @@ jobs:
python-coverage-report:
name: "Generate Coverage Report (Aggregated Suites)"
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- name: "Download and merge Python coverage artifacts"

- name: "[🐍] Download and merge 📦 artifacts"
uses: actions/download-artifact@v4
with:
pattern: upload-python-coverage-report-*
pattern: python-dist-ubuntu-latest*
merge-multiple: true
path: pycov # destination
path: dist # destination

- name: "[🐍] Unpack Source 📦"
run: |
tar xvfz dist/klayout_pex*.tar.gz --strip-components=1

- name: "[🐍] Download and merge coverage artifacts"
uses: actions/download-artifact@v4
with:
pattern: python-*-tests-coverage-report-ubuntu-*
merge-multiple: false
path: pycov-databases # destination

- name: "Display structure of downloaded files"
run: ls -R pycov-databases

- name: "[🐍] Setup python"
id: setup-python
uses: actions/setup-python@v5

- name: "[🐍] Install dependencies"
run: |
python -m pip install --upgrade pip
pip install coverage

- name: Display structure of downloaded files
- name: "[🐍] Combine coverage reports"
run: |
coverage combine pycov-databases/*/python-coverage.sqlite

- name: "[🐍] Create coverage report"
run: |
coverage html --directory pycov --data-file=.coverage

- name: "Display structure of coverage report"
run: ls -R pycov

- name: "Publish test report"
Expand Down
Loading
Loading