Skip to content

Commit

Permalink
Add Continuous Integration Github Workflow
Browse files Browse the repository at this point in the history
- Add pytest dependencies to 'project.toml'
- Add sphinx dependencies to 'projetc.toml'
  • Loading branch information
luktug-ltd committed Jan 14, 2025
1 parent 15e25fc commit 4c57b41
Show file tree
Hide file tree
Showing 5 changed files with 230 additions and 5 deletions.
207 changes: 207 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
name: CI

on:
push:
branches:
- dev
pull_request:
branches:
- dev

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

jobs:

lint-build:
name: Linting
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install ruff
- name: Ruff lint
run: |
ruff check --output-format=github .
docs-build:
name: Docs
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Install calculix dependencies
run: |
sudo apt-get update -y -qq
sudo apt-get install -qq -y calculix-ccx libglu1-mesa gmsh
- name: Install dev dependencies
run: |
python -m pip install --upgrade pip
pip install -U -e .[docs]
- name: Build docs
run: |
cd docs
sphinx-build --builder html . out
test-builds:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- name: Test py39
os: ubuntu-latest
pyversion: '3.9'
- name: Test py310
os: ubuntu-latest
pyversion: '3.10'
- name: Test py311
os: ubuntu-latest
pyversion: '3.11'
- name: Test py312
os: ubuntu-latest
pyversion: '3.12'
- name: Test py313
os: ubuntu-latest
pyversion: '3.13'
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.pyversion }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.pyversion }}
- name: Install calculix
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update -y -qq
sudo apt-get install -qq -y calculix-ccx
- name: Install package and dev dependencies
run: |
python -m pip install --upgrade pip
pip install .
pip install .[tests]
pip install .[support]
rm -r pyccx
- name: Unit tests with pytest
run: |
pytest tests/
test-coverage:
name: Test Coverage
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Install calculix
run: |
sudo apt-get update -y -qq
sudo apt-get install -qq -y calculix-ccx gmsh libglu1-mesa
- name: Install package and dev dependencies
run: |
python -m pip install --upgrade pip
pip install .
pip install .[tests]
pip install .[support]
rm -r pyccx
- name: Run Pytest coverage
run: |
pytest --junitxml=pytest.xml --cov-report=term-missing:skip-covered --cov=pyccx tests/ | tee pytest-coverage.txt
- name: Pytest coverage comment
uses: MishaKav/pytest-coverage-comment@main
with:
pytest-coverage-path: ./pytest-coverage.txt
junitxml-path: ./pytest.xml
test-examples-build:
name: Test examples ${{ matrix.pyversion }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
pyversion: '3.10'
- os: ubuntu-latest
pyversion: '3.12'
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Install calculix solver
run: |
sudo apt-get update -y -qq
sudo apt-get install -qq -y calculix-ccx gmsh libglu1-mesa
- name: Install dev dependencies
run: |
python -m pip install --upgrade pip
pip install -e .[examples]
- name: Show pyccx version and calculix version
run: |
python -c "import pyccx; print(pyccx.__version__)"
python -c "import pyccx; print(pyccx.Simulation.version())"
release-build:
name: Build release on ubuntu-latest
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Install Hatch
uses: pypa/hatch@install
- name: Install calculix solver
run: |
sudo apt-get update -y -qq
sudo apt-get install -qq -y calculix-ccx gmsh libglu1-mesa
- name: Install dev dependencies
run: |
python -m pip install --upgrade pip
pip install -U setuptools flit build twine hatchling
- name: Create source distribution
run: |
python -m build -n -s
- name: Build wheel
run: |
python -m build -n -w
- name: Test sdist
shell: bash
run: |
rm -rf ./pyccx
pushd $HOME
pip install $GITHUB_WORKSPACE/dist/*.tar.gz
python -c "import pyccx; print(pyccx.__version__)"
popd
# don't run tests, we just want to know if the sdist can be installed
pip uninstall -y pyccx
git reset --hard HEAD
- name: Twine check
run: |
twine check dist/*
- name: Upload distributions
uses: actions/upload-artifact@v4
with:
path: dist
name: dist
4 changes: 2 additions & 2 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ PyCCX - a library for creating and running 3D FEA simulations using the opensour
The aims of this project was to provide a simple framework for implemented 3D FEA Analysis using the opensource
`Calculix <http://www.calculix.de>`_ solver.
The analysis is complimented by use of the recent introduction of the
`GMSH-SDK <http://https://gitlab.onelab.info/gmsh/gmsh/api>`_ , an extension to `GMSH <http://gmsh.info/>`_to provide
`GMSH-SDK <http://https://gitlab.onelab.info/gmsh/gmsh/api>`_ , an extension to `GMSH <http://gmsh.info/>`_ to provide
API bindings for different programming languages by the project authors to provide sophisticated 3D FEA mesh
generation outside of the GUI implementation. This project aims to provide an integrated approach for generating full
3D FEA analysis for use in research, development and prototyping in a Python environment. Along with setting up and
processing the analysis, convenience functions are included.

The inception of this project was a result of finding no native Python/Matlab package available to perform full
non-linear FEA analysis of 3D CAD models in order to prototype a concept related to 3D printing. The project aims to
compliment the work of the`PyCalculix project <https://github.com/spacether/pycalculix>`_, which currently is limited
compliment the work of the `PyCalculix project <https://github.com/spacether/pycalculix>`_, which currently is limited
to providing capabilities to generate 2D Meshes and FEA analysis for 2D planar structures. The potential in the
future is to provide a more generic extensible framework compatible with different opensource and commercial FEA
solvers (e.g. Abaqus, Marc, Z88, Elmer).
Expand Down
1 change: 1 addition & 0 deletions pyccx/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@
from .core import Connector, DOF, ElementSet, MeshSet, NodeSet, SurfaceSet
from .loadcase import LoadCaseType, LoadCase
from .results import ElementResult, NodalResult, ResultProcessor
from .version import __version__

Check failure on line 10 in pyccx/__init__.py

View workflow job for this annotation

GitHub Actions / Linting

Ruff (W292)

pyccx/__init__.py:10:33: W292 No newline at end of file
3 changes: 2 additions & 1 deletion pyccx/mesh/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from .mesher import MeshingAlgorithm2D, MeshingAlgorithm3D, RecombinationAlgorithm
from .mesher import (Mesher,
MeshingAlgorithm2D, MeshingAlgorithm3D, RecombinationAlgorithm)
from .mesh import getSurfaceFacesFromRegion, getNodesFromRegion, getNodesFromVolume, removeSurfaceMeshes
from .utils import Ent
20 changes: 18 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ dependencies = [
"matplotlib",
"gmsh>4.13",
"numpy>1.21",
"colorlog"
"colorlog",
"setuptools"
]

[project.optional-dependencies]
Expand All @@ -41,11 +42,26 @@ docs = [
'jupyter',
'sphinx_rtd_theme',
'sphinx-paramlinks',
'sphinx_automodapi',
'sphinx_rtd_theme',
'furo',
'sphinx-autodoc-typehints',
'autodocsumm',
'm2r2',
'docutils==0.20',
'pypandoc',
'autodocsumm',
'mock',
'matplotlib',
'trimesh',
'trimesh'
]

tests = [
"pytest",
"pytest-cov",
"coverage-badge"
]

build = ["build", "hatchling", "requests", "twine"]
codegen = ["pytest", "numpy"]
lint = ["ruff", "pre-commit"]
Expand Down

1 comment on commit 4c57b41

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tests Skipped Failures Errors Time
0 0 💤 0 ❌ 0 🔥 0.027s ⏱️

Please sign in to comment.