Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
pystencils-sfg
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
pycodegen
pystencils-sfg
Commits
e067b6b6
Commit
e067b6b6
authored
4 months ago
by
Frederik Hennig
Committed by
Christoph Alt
4 months ago
Browse files
Options
Downloads
Patches
Plain Diff
Introduce Nox for Test Automation
parent
448e9087
No related branches found
No related tags found
1 merge request
!10
Introduce Nox for Test Automation
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
.gitlab-ci.yml
+14
-33
14 additions, 33 deletions
.gitlab-ci.yml
CONTRIBUTING.md
+29
-7
29 additions, 7 deletions
CONTRIBUTING.md
noxfile.py
+88
-0
88 additions, 0 deletions
noxfile.py
pyproject.toml
+9
-4
9 additions, 4 deletions
pyproject.toml
with
140 additions
and
44 deletions
.gitlab-ci.yml
+
14
−
33
View file @
e067b6b6
...
...
@@ -4,44 +4,31 @@ stages:
-
"
Documentation"
-
deploy
.nox-base
:
image
:
i10git.cs.fau.de:5005/pycodegen/pycodegen/nox:alpine
tags
:
-
docker
linter
:
extends
:
.nox-base
stage
:
"
Code
Quality"
needs
:
[]
except
:
variables
:
-
$ENABLE_NIGHTLY_BUILDS
image
:
i10git.cs.fau.de:5005/pycodegen/pycodegen/full
script
:
-
flake8 src/pystencilssfg
tags
:
-
docker
-
nox --session lint
typechecker
:
extends
:
.nox-base
stage
:
"
Code
Quality"
needs
:
[]
except
:
variables
:
-
$ENABLE_NIGHTLY_BUILDS
image
:
i10git.cs.fau.de:5005/pycodegen/pycodegen/full
script
:
-
pip install mypy
-
mypy src/pystencilssfg
tags
:
-
docker
-
nox --session typecheck
testsuite
:
extends
:
.nox-base
stage
:
"
Tests"
image
:
i10git.cs.fau.de:5005/pycodegen/pycodegen/full
needs
:
[]
tags
:
-
docker
before_script
:
-
pip install "git+https://i10git.cs.fau.de/pycodegen/pystencils.git@v2.0-dev"
-
pip install -e .[tests]
script
:
-
pytest -v --cov=src/pystencilssfg --cov-report=term --cov-config=pyproject.toml
-
coverage html
-
coverage xml
-
nox --session testsuite
coverage
:
'
/TOTAL.*\s+(\d+%)$/'
artifacts
:
when
:
always
...
...
@@ -54,23 +41,17 @@ testsuite:
path
:
coverage.xml
build-documentation
:
extends
:
.nox-base
stage
:
"
Documentation"
image
:
i10git.cs.fau.de:5005/pycodegen/pycodegen/full
needs
:
[]
before_script
:
-
pip install "git+https://i10git.cs.fau.de/pycodegen/pystencils.git@v2.0-dev"
-
pip install -e .[docs]
script
:
-
cd docs
-
make html
tags
:
-
docker
-
nox --session docs
artifacts
:
paths
:
-
docs/build/html
pages
:
image
:
i10git.cs.fau.de:5005/pycodegen/pycodegen/full
image
:
alpine:latest
stage
:
deploy
script
:
-
ls -l
...
...
This diff is collapsed.
Click to expand it.
CONTRIBUTING.md
+
29
−
7
View file @
e067b6b6
...
...
@@ -13,6 +13,19 @@ As such, any submission of contributions via merge requests is considered as agr
## Developing `pystencils-sfg`
### Prequesites
To develop pystencils-sfg, you will need at least these packages:
-
Python 3.10
-
Git
-
A C++ compiler supporting at least C++20 (gcc >= 10, or clang >= 10)
-
GNU Make
-
CMake
-
Nox
Before continuing, make sure that the above packages are installed on your machine.
### Fork and Clone
To work within the
`pystencils-sfg`
source tree, first create a
*fork*
of this repository
...
...
@@ -29,28 +42,29 @@ source .venv/bin/activate
pip
install
-e
.
```
If you have
[
nox
](
https://nox.thea.codes/en/stable/
)
installed, you can also set up your virtual environment
by running
`nox --session dev_env`
.
### Code Style and Type Checking
To contribute, please adhere to the Python code style set by
[
PEP 8
](
https://peps.python.org/pep-0008/
)
.
For consistency, format all your source files using the
[
black
](
https://pypi.org/project/black/
)
formatter
.
Us
e flake8
to check your code style
:
For consistency, format all your source files using the
[
black
](
https://pypi.org/project/black/
)
formatter
,
and check them regularily using th
e
`
flake8
`
linter through Nox
:
```
shell
flake8 src/pystencilssfg
nox
--session
lint
```
Further,
`pystencils-sfg`
is being fully type-checked using
[
MyPy
](
https://www.mypy-lang.org/
)
.
All submitted code should contain type annotations (
[
PEP 484
](
https://peps.python.org/pep-0484/
)
) and must be
correctly statically typed.
Before each commit, check your types by call
ing
Regularily check your code for type errors us
ing
```
shell
mypy src/pystencilssfg
nox
--session
typecheck
```
Both
`flake8`
and
`mypy`
are also run in the integration pipeline.
You can automate the code quality checks by running them via a git pre-commit hook.
Such a hook can be installed using the
[
`install_git_hooks.sh`
](
install_git_hooks.sh
)
script located at the project root.
### Test Your Code
...
...
@@ -65,3 +79,11 @@ In [tests/generator_scripts](tests/generator_scripts), a framework is provided t
for successful execution, correctness, and compilability of their output.
Read the documentation within
[
test_generator_scripts.py
](
tests/generator_scripts/test_generator_scripts.py
)
for more information.
Run the test suite by calling it through Nox:
```
shell
nox
--session
testsuite
```
This will also collect coverage information and produce a coverage report as a HTML site placed in the
`htmlcov`
folder.
This diff is collapsed.
Click to expand it.
noxfile.py
0 → 100644
+
88
−
0
View file @
e067b6b6
from
__future__
import
annotations
from
typing
import
Sequence
import
nox
nox
.
options
.
sessions
=
[
"
lint
"
,
"
typecheck
"
,
"
testsuite
"
]
def
add_pystencils_git
(
session
:
nox
.
Session
):
"""
Clone the pystencils 2.0 development branch and install it in the current session
"""
cache_dir
=
session
.
cache_dir
pystencils_dir
=
cache_dir
/
"
pystencils
"
if
not
pystencils_dir
.
exists
():
session
.
run_install
(
"
git
"
,
"
clone
"
,
"
--branch
"
,
"
v2.0-dev
"
,
"
--single-branch
"
,
"
https://i10git.cs.fau.de/pycodegen/pystencils.git
"
,
pystencils_dir
,
external
=
True
,
)
session
.
install
(
"
-e
"
,
str
(
pystencils_dir
))
def
editable_install
(
session
:
nox
.
Session
,
opts
:
Sequence
[
str
]
=
()):
add_pystencils_git
(
session
)
if
opts
:
opts_str
=
"
[
"
+
"
,
"
.
join
(
opts
)
+
"
]
"
else
:
opts_str
=
""
session
.
install
(
"
-e
"
,
f
"
.
{
opts_str
}
"
)
@nox.session
(
python
=
"
3.10
"
,
tags
=
[
"
qa
"
,
"
code-quality
"
])
def
lint
(
session
:
nox
.
Session
):
"""
Lint code using flake8
"""
session
.
install
(
"
flake8
"
)
session
.
run
(
"
flake8
"
,
"
src/pystencilssfg
"
)
@nox.session
(
python
=
"
3.10
"
,
tags
=
[
"
qa
"
,
"
code-quality
"
])
def
typecheck
(
session
:
nox
.
Session
):
"""
Run MyPy for static type checking
"""
editable_install
(
session
)
session
.
install
(
"
mypy
"
)
session
.
run
(
"
mypy
"
,
"
src/pystencilssfg
"
)
@nox.session
(
python
=
[
"
3.10
"
],
tags
=
[
"
tests
"
])
def
testsuite
(
session
:
nox
.
Session
):
"""
Run the testsuite and measure coverage.
"""
editable_install
(
session
,
[
"
testsuite
"
])
session
.
run
(
"
pytest
"
,
"
-v
"
,
"
--cov=src/pystencilssfg
"
,
"
--cov-report=term
"
,
"
--cov-config=pyproject.toml
"
,
)
session
.
run
(
"
coverage
"
,
"
html
"
)
session
.
run
(
"
coverage
"
,
"
xml
"
)
@nox.session
(
python
=
[
"
3.10
"
],
tags
=
[
"
docs
"
])
def
docs
(
session
:
nox
.
Session
):
"""
Build the documentation pages
"""
editable_install
(
session
,
[
"
docs
"
])
session
.
chdir
(
"
docs
"
)
session
.
run
(
"
make
"
,
"
html
"
,
external
=
True
)
@nox.session
()
def
dev_env
(
session
:
nox
.
Session
):
"""
Set up the development environment at .venv
"""
session
.
install
(
"
virtualenv
"
)
session
.
run
(
"
virtualenv
"
,
"
.venv
"
,
"
--prompt
"
,
"
pystencils-sfg
"
)
session
.
run
(
"
.venv/bin/pip
"
,
"
install
"
,
"
git+https://i10git.cs.fau.de/pycodegen/pystencils.git@v2.0-dev
"
,
external
=
True
,
)
session
.
run
(
"
.venv/bin/pip
"
,
"
install
"
,
"
-e
"
,
"
.[dev]
"
,
external
=
True
)
This diff is collapsed.
Click to expand it.
pyproject.toml
+
9
−
4
View file @
e067b6b6
...
...
@@ -23,10 +23,15 @@ requires = [
build-backend
=
"setuptools.build_meta"
[project.optional-dependencies]
tests
=
[
"flake8
>
=
6.1
.
0
",
"mypy
>
=
1.7
.
0
",
dev
=
[
"flake8"
,
"mypy"
,
"black"
,
"clang-format"
,
]
testsuite
=
[
"pytest"
,
"pytest-cov"
,
"pyyaml"
,
"requests"
,
"fasteners"
,
...
...
@@ -60,7 +65,7 @@ omit = [
[tool.coverage.report]
exclude_also
=
[
"
\\
.
\\
.
\\
."
,
"
\\
.
\\
.
\\
.
\n
"
,
"if TYPE_CHECKING:"
,
"@(abc
\\
.)?abstractmethod"
,
]
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment