rhiza 0.8.8__tar.gz → 0.9.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rhiza-0.8.8 → rhiza-0.9.1}/.editorconfig +5 -0
- rhiza-0.8.8/.rhiza/agentic/Makefile.agentic → rhiza-0.9.1/.github/agents/agentic.mk +4 -4
- {rhiza-0.8.8 → rhiza-0.9.1}/.github/copilot-instructions.md +2 -2
- rhiza-0.8.8/.github/Makefile.gh → rhiza-0.9.1/.github/github.mk +1 -1
- rhiza-0.9.1/.github/workflows/rhiza_benchmarks.yml +83 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_book.yml +11 -8
- {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_ci.yml +32 -8
- {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_codeql.yml +28 -5
- {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_deptry.yml +4 -4
- {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_marimo.yml +11 -6
- rhiza-0.9.1/.github/workflows/rhiza_mypy.yml +34 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_pre-commit.yml +2 -2
- {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_release.yml +38 -39
- rhiza-0.9.1/.github/workflows/rhiza_security.yml +44 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_sync.yml +18 -9
- {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_validate.yml +3 -3
- {rhiza-0.8.8 → rhiza-0.9.1}/.gitignore +5 -2
- {rhiza-0.8.8 → rhiza-0.9.1}/.pre-commit-config.yaml +16 -9
- rhiza-0.9.1/.rhiza/.gitignore +2 -0
- rhiza-0.9.1/.rhiza/.rhiza-version +1 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/docs/CONFIG.md +1 -1
- {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/history +22 -18
- rhiza-0.9.1/.rhiza/make.d/01-custom-env.mk +9 -0
- rhiza-0.9.1/.rhiza/make.d/10-custom-task.mk +12 -0
- rhiza-0.9.1/.rhiza/make.d/README.md +82 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/requirements/docs.txt +1 -0
- rhiza-0.9.1/.rhiza/requirements/tests.txt +12 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/requirements/tools.txt +3 -0
- rhiza-0.8.8/Makefile → rhiza-0.9.1/.rhiza/rhiza.mk +124 -48
- {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/scripts/release.sh +61 -20
- {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/utils/version_matrix.py +41 -6
- {rhiza-0.8.8 → rhiza-0.9.1}/CLI.md +22 -11
- {rhiza-0.8.8 → rhiza-0.9.1}/CODE_OF_CONDUCT.md +3 -3
- rhiza-0.9.1/Makefile +8 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/PKG-INFO +46 -26
- {rhiza-0.8.8 → rhiza-0.9.1}/README.md +45 -25
- {rhiza-0.8.8 → rhiza-0.9.1}/USAGE.md +50 -20
- rhiza-0.9.1/book/README.md +67 -0
- rhiza-0.9.1/book/book.mk +156 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/book/marimo/README.md +2 -2
- rhiza-0.9.1/book/marimo/marimo.mk +67 -0
- {rhiza-0.8.8/book/marimo → rhiza-0.9.1/book/marimo/notebooks}/rhiza.py +56 -95
- rhiza-0.9.1/pr-description.md +83 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/presentation/README.md +5 -5
- rhiza-0.8.8/presentation/Makefile.presentation → rhiza-0.9.1/presentation/presentation.mk +1 -1
- {rhiza-0.8.8 → rhiza-0.9.1}/pyproject.toml +28 -1
- {rhiza-0.8.8 → rhiza-0.9.1}/renovate.json +1 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/ruff.toml +51 -14
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/__init__.py +4 -4
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/__main__.py +1 -1
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/cli.py +122 -49
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/__init__.py +7 -5
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/init.py +34 -11
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/materialize.py +48 -23
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/migrate.py +1 -1
- rhiza-0.9.1/src/rhiza/commands/summarise.py +416 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/uninstall.py +2 -1
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/validate.py +8 -7
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/welcome.py +2 -2
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/models.py +28 -6
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_cli_commands.py +51 -1
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_commands/test_init.py +51 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_commands/test_materialize.py +35 -8
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_commands/test_migrate.py +1 -1
- rhiza-0.9.1/tests/test_commands/test_summarise.py +477 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_commands/test_uninstall.py +3 -3
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_models.py +38 -1
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/README.md +1 -1
- rhiza-0.9.1/tests/test_rhiza/__init__.py +5 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/benchmarks/analyze_benchmarks.py +2 -2
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/conftest.py +58 -29
- rhiza-0.9.1/tests/test_rhiza/test_book.py +68 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_docstrings.py +21 -11
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_makefile.py +137 -44
- rhiza-0.9.1/tests/test_rhiza/test_makefile_api.py +267 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_makefile_gh.py +11 -3
- rhiza-0.9.1/tests/test_rhiza/test_marimushka_target.py +93 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_notebooks.py +10 -8
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_readme.py +2 -2
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_release_script.py +104 -3
- rhiza-0.9.1/tests/test_rhiza/test_rhiza_workflows.py +227 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_structure.py +2 -3
- rhiza-0.9.1/tests/test_rhiza/test_version_matrix.py +264 -0
- rhiza-0.9.1/tests/tests.mk +104 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/uv.lock +247 -229
- rhiza-0.8.8/.rhiza/.env +0 -14
- rhiza-0.8.8/.rhiza/Makefile.rhiza +0 -38
- rhiza-0.8.8/.rhiza/customisations/Makefile.customisations +0 -29
- rhiza-0.8.8/.rhiza/customisations/scripts/build-extras.sh +0 -48
- rhiza-0.8.8/.rhiza/customisations/scripts/post-release.sh +0 -46
- rhiza-0.8.8/.rhiza/requirements/tests.txt +0 -9
- rhiza-0.8.8/.rhiza/scripts/book.sh +0 -99
- rhiza-0.8.8/.rhiza/scripts/generate-coverage-badge.sh +0 -79
- rhiza-0.8.8/.rhiza/scripts/marimushka.sh +0 -77
- rhiza-0.8.8/.rhiza/scripts/update-readme-help.sh +0 -110
- rhiza-0.8.8/.rhiza.env +0 -11
- rhiza-0.8.8/book/Makefile.book +0 -55
- rhiza-0.8.8/book/README.md +0 -23
- rhiza-0.8.8/book/pdoc-templates/module.html.jinja2 +0 -19
- rhiza-0.8.8/tests/Makefile.tests +0 -31
- rhiza-0.8.8/tests/test_rhiza/test_coverage_badge.py +0 -94
- rhiza-0.8.8/tests/test_rhiza/test_marimushka_script.py +0 -76
- rhiza-0.8.8/tests/test_rhiza/test_updatereadme_script.py +0 -98
- {rhiza-0.8.8 → rhiza-0.9.1}/.github/ISSUE_TEMPLATE/assign_ui_implementation.md +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.github/agents/analyser.md +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.github/agents/summarise.md +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.python-version +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/.cfg.toml +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/docs/TOKEN_SETUP.md +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/requirements/README.md +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/requirements/marimo.txt +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/template.yml +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/CONTRIBUTING.md +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/GETTING_STARTED.md +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/LICENSE +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/book/marimo/.gitkeep +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/book/minibook-templates/custom.html.jinja2 +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/pytest.ini +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/_templates/basic/__init__.py.jinja2 +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/_templates/basic/main.py.jinja2 +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/_templates/basic/pyproject.toml.jinja2 +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/subprocess_utils.py +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_commands/test_validate.py +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_package.py +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/benchmarks/.gitignore +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/benchmarks/README.md +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_git_repo_fixture.py +0 -0
- {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_requirements_folder.py +0 -0
|
@@ -24,6 +24,11 @@ indent_size = 2
|
|
|
24
24
|
# [*.{md,markdown}]
|
|
25
25
|
# trim_trailing_whitespace = false
|
|
26
26
|
|
|
27
|
+
# Makefiles require tabs
|
|
28
|
+
[{Makefile,*.mk,*.make}]
|
|
29
|
+
indent_style = tab
|
|
30
|
+
indent_size = 4
|
|
31
|
+
|
|
27
32
|
# Don't apply editorconfig rules to vendor/ resources
|
|
28
33
|
# This is a "defensive" rule for the day we may have
|
|
29
34
|
# the vendor folder
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
##
|
|
1
|
+
## customisations.mk - User-defined scripts and overrides
|
|
2
2
|
# This file is included by the main Makefile
|
|
3
3
|
|
|
4
4
|
# Declare phony targets
|
|
5
|
-
.PHONY: install-copilot analyse-repo
|
|
5
|
+
.PHONY: install-copilot analyse-repo summarise-changes
|
|
6
6
|
|
|
7
7
|
COPILOT_BIN ?= $(shell command -v copilot 2>/dev/null || echo "$(INSTALL_DIR)/copilot")
|
|
8
8
|
##@ Agentic Workflows
|
|
@@ -17,8 +17,8 @@ analyse-repo: install-copilot ## run the analyser agent to update REPOSITORY_ANA
|
|
|
17
17
|
--allow-tool 'write' --deny-tool 'remove' \
|
|
18
18
|
--allow-all-paths
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
@"$(COPILOT_BIN)" -p "Show me the commits since the last release/tag and
|
|
20
|
+
summarise-changes: install-copilot ## summarise changes since the most recent release/tag
|
|
21
|
+
@"$(COPILOT_BIN)" -p "Show me the commits since the last release/tag and summarise them" --allow-tool 'shell(git)' --model "$(DEFAULT_AI_MODEL)" --agent summarise
|
|
22
22
|
|
|
23
23
|
install-copilot: ## checks for copilot and prompts to install
|
|
24
24
|
@if command -v copilot >/dev/null 2>&1; then \
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Rhiza Copilot Instructions
|
|
2
2
|
|
|
3
|
-
You are working in a project that
|
|
4
|
-
configuration templates and tooling designed to
|
|
3
|
+
You are working in a project that utilises the `rhiza` framework. Rhiza is a collection of reusable
|
|
4
|
+
configuration templates and tooling designed to standardise and streamline modern Python development.
|
|
5
5
|
|
|
6
6
|
As a Rhiza-based project, this workspace adheres to specific conventions for structure, dependency management, and automation.
|
|
7
7
|
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# This file is part of the jebel-quant/rhiza repository
|
|
2
|
+
# (https://github.com/jebel-quant/rhiza).
|
|
3
|
+
#
|
|
4
|
+
# Workflow: Performance Benchmarks
|
|
5
|
+
#
|
|
6
|
+
# Purpose: Run performance benchmarks and detect regressions.
|
|
7
|
+
#
|
|
8
|
+
# Trigger: On push to main/master branches, PRs, and manual trigger.
|
|
9
|
+
#
|
|
10
|
+
# Regression Detection:
|
|
11
|
+
# - Compares against previous benchmark results stored in gh-pages branch
|
|
12
|
+
# - Alerts if performance degrades by more than 150% (configurable)
|
|
13
|
+
# - PRs will show a warning comment but not fail
|
|
14
|
+
# - Main branch updates the baseline for future comparisons
|
|
15
|
+
|
|
16
|
+
name: "(RHIZA) BENCHMARKS"
|
|
17
|
+
|
|
18
|
+
permissions:
|
|
19
|
+
contents: write
|
|
20
|
+
pull-requests: write
|
|
21
|
+
|
|
22
|
+
on:
|
|
23
|
+
push:
|
|
24
|
+
branches: [ main, master ]
|
|
25
|
+
pull_request:
|
|
26
|
+
branches: [ main, master ]
|
|
27
|
+
workflow_dispatch:
|
|
28
|
+
|
|
29
|
+
jobs:
|
|
30
|
+
benchmark:
|
|
31
|
+
runs-on: ubuntu-latest
|
|
32
|
+
|
|
33
|
+
steps:
|
|
34
|
+
- name: Checkout repository
|
|
35
|
+
uses: actions/checkout@v6.0.2
|
|
36
|
+
with:
|
|
37
|
+
lfs: true
|
|
38
|
+
|
|
39
|
+
- name: Install uv
|
|
40
|
+
uses: astral-sh/setup-uv@v7.2.1
|
|
41
|
+
with:
|
|
42
|
+
version: "0.9.28"
|
|
43
|
+
python-version: "3.12"
|
|
44
|
+
|
|
45
|
+
- name: Run benchmarks
|
|
46
|
+
env:
|
|
47
|
+
UV_EXTRA_INDEX_URL: ${{ secrets.UV_EXTRA_INDEX_URL }}
|
|
48
|
+
run: |
|
|
49
|
+
make benchmark
|
|
50
|
+
|
|
51
|
+
- name: Upload benchmark results
|
|
52
|
+
uses: actions/upload-artifact@v6.0.0
|
|
53
|
+
if: always()
|
|
54
|
+
with:
|
|
55
|
+
name: benchmark-results
|
|
56
|
+
path: |
|
|
57
|
+
_benchmarks/benchmarks.json
|
|
58
|
+
_benchmarks/benchmarks.svg
|
|
59
|
+
_benchmarks/benchmarks.html
|
|
60
|
+
|
|
61
|
+
# Regression detection using github-action-benchmark
|
|
62
|
+
# Stores benchmark history in gh-pages branch under /benchmarks
|
|
63
|
+
# Alerts if performance degrades by more than 150% of baseline
|
|
64
|
+
- name: Store benchmark result and check for regression
|
|
65
|
+
uses: benchmark-action/github-action-benchmark@v1
|
|
66
|
+
# run this only if _benchmarks/benchmarks.json exists
|
|
67
|
+
if: hashFiles('_benchmarks/benchmarks.json') != ''
|
|
68
|
+
with:
|
|
69
|
+
tool: 'pytest'
|
|
70
|
+
output-file-path: _benchmarks/benchmarks.json
|
|
71
|
+
# Store benchmark data in gh-pages branch
|
|
72
|
+
gh-pages-branch: gh-pages
|
|
73
|
+
benchmark-data-dir-path: benchmarks
|
|
74
|
+
# Only update baseline on main branch push (not PRs)
|
|
75
|
+
auto-push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
|
|
76
|
+
# Alert if performance degrades by more than 150%
|
|
77
|
+
alert-threshold: '150%'
|
|
78
|
+
# Post comment on PR if regression detected
|
|
79
|
+
comment-on-alert: ${{ github.event_name == 'pull_request' }}
|
|
80
|
+
# Fail workflow if regression detected (disabled for PRs to allow investigation)
|
|
81
|
+
fail-on-alert: ${{ github.event_name == 'push' }}
|
|
82
|
+
# GitHub token for pushing to gh-pages and commenting
|
|
83
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
# - 🧪 Run tests and generate coverage reports
|
|
15
15
|
# - 🚀 Deploy combined documentation to GitHub Pages
|
|
16
16
|
|
|
17
|
-
name: "BOOK"
|
|
17
|
+
name: "(RHIZA) BOOK"
|
|
18
18
|
|
|
19
19
|
on:
|
|
20
20
|
push:
|
|
@@ -36,39 +36,42 @@ jobs:
|
|
|
36
36
|
|
|
37
37
|
steps:
|
|
38
38
|
# Check out the repository code
|
|
39
|
-
- uses: actions/checkout@v6
|
|
39
|
+
- uses: actions/checkout@v6.0.2
|
|
40
40
|
with:
|
|
41
41
|
lfs: true
|
|
42
42
|
|
|
43
43
|
- name: Install uv
|
|
44
|
-
uses: astral-sh/setup-uv@v7
|
|
44
|
+
uses: astral-sh/setup-uv@v7.2.1
|
|
45
45
|
with:
|
|
46
|
-
version: "0.9.
|
|
46
|
+
version: "0.9.28"
|
|
47
47
|
|
|
48
48
|
- name: "Sync the virtual environment for ${{ github.repository }}"
|
|
49
49
|
shell: bash
|
|
50
|
+
env:
|
|
51
|
+
UV_EXTRA_INDEX_URL: ${{ secrets.UV_EXTRA_INDEX_URL }}
|
|
50
52
|
run: |
|
|
51
|
-
export UV_EXTRA_INDEX_URL="${{ secrets.uv-extra-index-url }}"
|
|
52
53
|
# will just use .python-version?
|
|
53
54
|
uv sync --all-extras --all-groups --frozen
|
|
54
55
|
|
|
55
56
|
- name: "Make the book"
|
|
57
|
+
env:
|
|
58
|
+
UV_EXTRA_INDEX_URL: ${{ secrets.UV_EXTRA_INDEX_URL }}
|
|
56
59
|
run: |
|
|
57
60
|
make book
|
|
58
61
|
|
|
59
62
|
# Step 5: Package all artifacts for GitHub Pages deployment
|
|
60
63
|
# This prepares the combined outputs for deployment by creating a single artifact
|
|
61
64
|
- name: Upload static files as artifact
|
|
62
|
-
uses: actions/upload-pages-artifact@v4 # Official GitHub Pages artifact upload action
|
|
65
|
+
uses: actions/upload-pages-artifact@v4.0.0 # Official GitHub Pages artifact upload action
|
|
63
66
|
with:
|
|
64
67
|
path: _book/ # Path to the directory containing all artifacts to deploy
|
|
65
68
|
|
|
66
69
|
# Step 6: Deploy the packaged artifacts to GitHub Pages
|
|
67
70
|
# This step publishes the content to GitHub Pages
|
|
68
71
|
# The deployment is conditional based on whether the repository is a fork and the PUBLISH_COMPANION_BOOK variable is set
|
|
69
|
-
# If the repository is a fork, deployment is skipped to avoid
|
|
72
|
+
# If the repository is a fork, deployment is skipped to avoid unauthorised publishing
|
|
70
73
|
# If PUBLISH_COMPANION_BOOK is not set, it defaults to allowing deployment
|
|
71
74
|
- name: Deploy to GitHub Pages
|
|
72
75
|
if: ${{ !github.event.repository.fork && (vars.PUBLISH_COMPANION_BOOK == 'true' || vars.PUBLISH_COMPANION_BOOK == '') }}
|
|
73
|
-
uses: actions/deploy-pages@v4 # Official GitHub Pages deployment action
|
|
76
|
+
uses: actions/deploy-pages@v4.0.5 # Official GitHub Pages deployment action
|
|
74
77
|
continue-on-error: true
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
#
|
|
8
8
|
# Trigger: On push and pull requests to main/master branches.
|
|
9
9
|
|
|
10
|
-
name: CI
|
|
10
|
+
name: (RHIZA) CI
|
|
11
11
|
|
|
12
12
|
permissions:
|
|
13
13
|
contents: read
|
|
@@ -24,17 +24,21 @@ jobs:
|
|
|
24
24
|
outputs:
|
|
25
25
|
matrix: ${{ steps.versions.outputs.list }}
|
|
26
26
|
steps:
|
|
27
|
-
- uses: actions/checkout@v6
|
|
27
|
+
- uses: actions/checkout@v6.0.2
|
|
28
|
+
with:
|
|
29
|
+
lfs: true
|
|
28
30
|
|
|
29
31
|
- name: Install uv
|
|
30
|
-
uses: astral-sh/setup-uv@v7
|
|
32
|
+
uses: astral-sh/setup-uv@v7.2.1
|
|
31
33
|
with:
|
|
32
|
-
version: "0.9.
|
|
34
|
+
version: "0.9.28"
|
|
33
35
|
|
|
34
36
|
- id: versions
|
|
37
|
+
env:
|
|
38
|
+
UV_EXTRA_INDEX_URL: ${{ secrets.UV_EXTRA_INDEX_URL }}
|
|
35
39
|
run: |
|
|
36
40
|
# Generate Python versions JSON from the script
|
|
37
|
-
JSON=$(make -s version-matrix)
|
|
41
|
+
JSON=$(make -f .rhiza/rhiza.mk -s version-matrix)
|
|
38
42
|
echo "list=$JSON" >> "$GITHUB_OUTPUT"
|
|
39
43
|
|
|
40
44
|
- name: Debug matrix
|
|
@@ -51,16 +55,36 @@ jobs:
|
|
|
51
55
|
|
|
52
56
|
steps:
|
|
53
57
|
- name: Checkout repository
|
|
54
|
-
uses: actions/checkout@v6
|
|
58
|
+
uses: actions/checkout@v6.0.2
|
|
55
59
|
with:
|
|
56
60
|
lfs: true
|
|
57
61
|
|
|
58
62
|
- name: Install uv
|
|
59
|
-
uses: astral-sh/setup-uv@v7
|
|
63
|
+
uses: astral-sh/setup-uv@v7.2.1
|
|
60
64
|
with:
|
|
61
|
-
version: "0.9.
|
|
65
|
+
version: "0.9.28"
|
|
62
66
|
python-version: ${{ matrix.python-version }}
|
|
63
67
|
|
|
64
68
|
- name: Run tests
|
|
69
|
+
env:
|
|
70
|
+
UV_EXTRA_INDEX_URL: ${{ secrets.UV_EXTRA_INDEX_URL }}
|
|
65
71
|
run: |
|
|
66
72
|
make test
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
docs-coverage:
|
|
76
|
+
runs-on: ubuntu-latest
|
|
77
|
+
steps:
|
|
78
|
+
- name: Checkout repository
|
|
79
|
+
uses: actions/checkout@v6.0.2
|
|
80
|
+
|
|
81
|
+
- name: Install uv
|
|
82
|
+
uses: astral-sh/setup-uv@v7.2.1
|
|
83
|
+
with:
|
|
84
|
+
version: "0.9.28"
|
|
85
|
+
|
|
86
|
+
- name: Check docs coverage
|
|
87
|
+
env:
|
|
88
|
+
UV_EXTRA_INDEX_URL: ${{ secrets.UV_EXTRA_INDEX_URL }}
|
|
89
|
+
run: |
|
|
90
|
+
make docs-coverage
|
|
@@ -9,7 +9,22 @@
|
|
|
9
9
|
# the `language` matrix defined below to confirm you have the correct set of
|
|
10
10
|
# supported CodeQL languages.
|
|
11
11
|
#
|
|
12
|
-
|
|
12
|
+
# ******** IMPORTANT: GitHub Advanced Security Required ********
|
|
13
|
+
# CodeQL is FREE for public repositories, but requires GitHub Advanced Security
|
|
14
|
+
# (part of GitHub Enterprise) for private repositories.
|
|
15
|
+
#
|
|
16
|
+
# This workflow automatically:
|
|
17
|
+
# - Runs on public repositories
|
|
18
|
+
# - Skips on private repositories (unless Advanced Security is available)
|
|
19
|
+
#
|
|
20
|
+
# To control this behavior, set the CODEQL_ENABLED repository variable:
|
|
21
|
+
# - Set to 'true' to force enable (if you have Advanced Security on private repos)
|
|
22
|
+
# - Set to 'false' to disable entirely
|
|
23
|
+
# - Leave unset for automatic behavior (recommended)
|
|
24
|
+
#
|
|
25
|
+
# For more information, see docs/CUSTOMIZATION.md
|
|
26
|
+
#
|
|
27
|
+
name: "(RHIZA) CODEQL"
|
|
13
28
|
|
|
14
29
|
on:
|
|
15
30
|
push:
|
|
@@ -28,7 +43,15 @@ jobs:
|
|
|
28
43
|
# - https://gh.io/using-larger-runners (GitHub.com only)
|
|
29
44
|
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
|
|
30
45
|
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
|
|
31
|
-
|
|
46
|
+
# CodeQL requires GitHub Advanced Security (part of GitHub Enterprise).
|
|
47
|
+
# For users without Enterprise license:
|
|
48
|
+
# - Public repositories: CodeQL is available for free
|
|
49
|
+
# - Private repositories: Requires GitHub Advanced Security
|
|
50
|
+
# To disable this workflow, set CODEQL_ENABLED repository variable to 'false'
|
|
51
|
+
# To enable this workflow for private repos with Advanced Security, set CODEQL_ENABLED to 'true'
|
|
52
|
+
if: |
|
|
53
|
+
vars.CODEQL_ENABLED == 'true' ||
|
|
54
|
+
(vars.CODEQL_ENABLED != 'false' && github.event.repository.visibility == 'public')
|
|
32
55
|
permissions:
|
|
33
56
|
# required for all workflows
|
|
34
57
|
security-events: write
|
|
@@ -58,7 +81,7 @@ jobs:
|
|
|
58
81
|
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
|
|
59
82
|
steps:
|
|
60
83
|
- name: Checkout repository
|
|
61
|
-
uses: actions/checkout@v6
|
|
84
|
+
uses: actions/checkout@v6.0.2
|
|
62
85
|
|
|
63
86
|
# Add any setup steps before running the `github/codeql-action/init` action.
|
|
64
87
|
# This includes steps like installing compilers or runtimes (`actions/setup-node`
|
|
@@ -68,7 +91,7 @@ jobs:
|
|
|
68
91
|
|
|
69
92
|
# Initializes the CodeQL tools for scanning.
|
|
70
93
|
- name: Initialize CodeQL
|
|
71
|
-
uses: github/codeql-action/init@v4
|
|
94
|
+
uses: github/codeql-action/init@v4.32.0
|
|
72
95
|
with:
|
|
73
96
|
languages: ${{ matrix.language }}
|
|
74
97
|
build-mode: ${{ matrix.build-mode }}
|
|
@@ -97,6 +120,6 @@ jobs:
|
|
|
97
120
|
exit 1
|
|
98
121
|
|
|
99
122
|
- name: Perform CodeQL Analysis
|
|
100
|
-
uses: github/codeql-action/analyze@v4
|
|
123
|
+
uses: github/codeql-action/analyze@v4.32.0
|
|
101
124
|
with:
|
|
102
125
|
category: "/language:${{matrix.language}}"
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# Trigger: This workflow runs on every push and on pull requests to main/master
|
|
11
11
|
# branches (including from forks)
|
|
12
12
|
|
|
13
|
-
name: "DEPTRY"
|
|
13
|
+
name: "(RHIZA) DEPTRY"
|
|
14
14
|
|
|
15
15
|
# Permissions: Only read access to repository contents is needed
|
|
16
16
|
permissions:
|
|
@@ -27,14 +27,14 @@ jobs:
|
|
|
27
27
|
name: Check dependencies with deptry
|
|
28
28
|
runs-on: ubuntu-latest
|
|
29
29
|
container:
|
|
30
|
-
image: ghcr.io/astral-sh/uv:0.9.
|
|
30
|
+
image: ghcr.io/astral-sh/uv:0.9.28-bookworm
|
|
31
31
|
|
|
32
32
|
steps:
|
|
33
|
-
- uses: actions/checkout@v6
|
|
33
|
+
- uses: actions/checkout@v6.0.2
|
|
34
34
|
|
|
35
35
|
- name: Run deptry
|
|
36
36
|
run: make deptry
|
|
37
37
|
# NOTE: make deptry is good style because it encapsulates the folders to check
|
|
38
38
|
# (e.g. src and book/marimo) and keeps CI in sync with local development.
|
|
39
|
-
# Since we use a 'uv' container, the Makefile is
|
|
39
|
+
# Since we use a 'uv' container, the Makefile is optimised to use the
|
|
40
40
|
# pre-installed 'uv' and 'uvx' from the system PATH.
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
# - 🧪 Run each notebook in parallel using a matrix strategy
|
|
16
16
|
# - ✅ Fail-fast disabled to report all failing notebooks
|
|
17
17
|
|
|
18
|
-
name: "MARIMO"
|
|
18
|
+
name: "(RHIZA) MARIMO"
|
|
19
19
|
|
|
20
20
|
permissions:
|
|
21
21
|
contents: read
|
|
@@ -34,13 +34,16 @@ jobs:
|
|
|
34
34
|
notebook-list: ${{ steps.notebooks.outputs.matrix }}
|
|
35
35
|
steps:
|
|
36
36
|
# Check out the repository code
|
|
37
|
-
- uses: actions/checkout@v6
|
|
37
|
+
- uses: actions/checkout@v6.0.2
|
|
38
38
|
|
|
39
39
|
# Find all Python files in the marimo folder and create a matrix for parallel execution
|
|
40
40
|
- name: Find notebooks and build matrix
|
|
41
41
|
id: notebooks
|
|
42
42
|
run: |
|
|
43
|
-
|
|
43
|
+
# Extract MARIMO_FOLDER from the project configuration (via Makefile)
|
|
44
|
+
# shellcheck disable=SC2016 # Single quotes intentional - Make syntax, not shell expansion
|
|
45
|
+
NOTEBOOK_DIR=$(make -s -f Makefile -f - <<< 'print: ; @echo $(or $(MARIMO_FOLDER),marimo)' print)
|
|
46
|
+
|
|
44
47
|
echo "Searching notebooks in: $NOTEBOOK_DIR"
|
|
45
48
|
# Check if directory exists
|
|
46
49
|
if [ ! -d "$NOTEBOOK_DIR" ]; then
|
|
@@ -72,18 +75,20 @@ jobs:
|
|
|
72
75
|
name: Run notebook ${{ matrix.notebook }}
|
|
73
76
|
steps:
|
|
74
77
|
# Check out the repository code
|
|
75
|
-
- uses: actions/checkout@v6
|
|
78
|
+
- uses: actions/checkout@v6.0.2
|
|
76
79
|
with:
|
|
77
80
|
lfs: true
|
|
78
81
|
|
|
79
82
|
# Install uv/uvx
|
|
80
83
|
- name: Install uv
|
|
81
|
-
uses: astral-sh/setup-uv@v7
|
|
84
|
+
uses: astral-sh/setup-uv@v7.2.1
|
|
82
85
|
with:
|
|
83
|
-
version: "0.9.
|
|
86
|
+
version: "0.9.28"
|
|
84
87
|
|
|
85
88
|
# Execute the notebook with the appropriate runner based on its content
|
|
86
89
|
- name: Run notebook
|
|
90
|
+
env:
|
|
91
|
+
UV_EXTRA_INDEX_URL: ${{ secrets.UV_EXTRA_INDEX_URL }}
|
|
87
92
|
run: |
|
|
88
93
|
uvx uv run "${{ matrix.notebook }}"
|
|
89
94
|
# uvx → creates a fresh ephemeral environment
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# This file is part of the jebel-quant/rhiza repository
|
|
2
|
+
# (https://github.com/jebel-quant/rhiza).
|
|
3
|
+
#
|
|
4
|
+
# Workflow: Mypy
|
|
5
|
+
#
|
|
6
|
+
# Purpose: Run static type checking with mypy in strict mode to ensure
|
|
7
|
+
# type safety across the codebase.
|
|
8
|
+
#
|
|
9
|
+
# Trigger: On push and pull requests to main/master branches.
|
|
10
|
+
|
|
11
|
+
name: "(RHIZA) MYPY"
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
on:
|
|
17
|
+
push:
|
|
18
|
+
branches: [ main, master ]
|
|
19
|
+
pull_request:
|
|
20
|
+
branches: [ main, master ]
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
mypy:
|
|
24
|
+
name: Static type checking with mypy
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
container:
|
|
27
|
+
image: ghcr.io/astral-sh/uv:0.9.28-bookworm
|
|
28
|
+
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v6
|
|
31
|
+
|
|
32
|
+
# to brutal for now
|
|
33
|
+
# - name: Run mypy
|
|
34
|
+
# run: make -f .rhiza/rhiza.mk mypy
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
# Components:
|
|
15
15
|
# - 🔍 Run pre-commit checks using reusable action
|
|
16
16
|
|
|
17
|
-
name: "PRE-COMMIT"
|
|
17
|
+
name: "(RHIZA) PRE-COMMIT"
|
|
18
18
|
permissions:
|
|
19
19
|
contents: read
|
|
20
20
|
|
|
@@ -29,7 +29,7 @@ jobs:
|
|
|
29
29
|
runs-on: ubuntu-latest
|
|
30
30
|
|
|
31
31
|
steps:
|
|
32
|
-
- uses: actions/checkout@v6
|
|
32
|
+
- uses: actions/checkout@v6.0.2
|
|
33
33
|
|
|
34
34
|
# Run pre-commit
|
|
35
35
|
- name: Run pre-commit
|