From 70fd8e834dfd7a5fee1b73228117a02b5857e6dc Mon Sep 17 00:00:00 2001 From: Luktug Ltd Date: Mon, 13 Jan 2025 23:44:06 +0000 Subject: [PATCH] Add Continuous Integration Github Workflow - Add pytest dependencies to 'project.toml' - Add sphinx dependencies to 'projetc.toml' --- .github/workflows/ci.yml | 207 +++++++++++++++++++++++++++++++++++++++ pyccx/__init__.py | 1 + pyccx/mesh/__init__.py | 3 +- pyproject.toml | 20 +++- 4 files changed, 228 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..6259056 --- /dev/null +++ b/.github/workflows/ci.yml @@ -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 diff --git a/pyccx/__init__.py b/pyccx/__init__.py index fccc6b4..0032a61 100644 --- a/pyccx/__init__.py +++ b/pyccx/__init__.py @@ -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__ \ No newline at end of file diff --git a/pyccx/mesh/__init__.py b/pyccx/mesh/__init__.py index 150db0a..f54644d 100644 --- a/pyccx/mesh/__init__.py +++ b/pyccx/mesh/__init__.py @@ -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 diff --git a/pyproject.toml b/pyproject.toml index 00b2922..dffc53d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,8 @@ dependencies = [ "matplotlib", "gmsh>4.13", "numpy>1.21", - "colorlog" + "colorlog", + "setuptools" ] [project.optional-dependencies] @@ -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"]