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.
Files changed (128) hide show
  1. {rhiza-0.8.8 → rhiza-0.9.1}/.editorconfig +5 -0
  2. rhiza-0.8.8/.rhiza/agentic/Makefile.agentic → rhiza-0.9.1/.github/agents/agentic.mk +4 -4
  3. {rhiza-0.8.8 → rhiza-0.9.1}/.github/copilot-instructions.md +2 -2
  4. rhiza-0.8.8/.github/Makefile.gh → rhiza-0.9.1/.github/github.mk +1 -1
  5. rhiza-0.9.1/.github/workflows/rhiza_benchmarks.yml +83 -0
  6. {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_book.yml +11 -8
  7. {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_ci.yml +32 -8
  8. {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_codeql.yml +28 -5
  9. {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_deptry.yml +4 -4
  10. {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_marimo.yml +11 -6
  11. rhiza-0.9.1/.github/workflows/rhiza_mypy.yml +34 -0
  12. {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_pre-commit.yml +2 -2
  13. {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_release.yml +38 -39
  14. rhiza-0.9.1/.github/workflows/rhiza_security.yml +44 -0
  15. {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_sync.yml +18 -9
  16. {rhiza-0.8.8 → rhiza-0.9.1}/.github/workflows/rhiza_validate.yml +3 -3
  17. {rhiza-0.8.8 → rhiza-0.9.1}/.gitignore +5 -2
  18. {rhiza-0.8.8 → rhiza-0.9.1}/.pre-commit-config.yaml +16 -9
  19. rhiza-0.9.1/.rhiza/.gitignore +2 -0
  20. rhiza-0.9.1/.rhiza/.rhiza-version +1 -0
  21. {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/docs/CONFIG.md +1 -1
  22. {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/history +22 -18
  23. rhiza-0.9.1/.rhiza/make.d/01-custom-env.mk +9 -0
  24. rhiza-0.9.1/.rhiza/make.d/10-custom-task.mk +12 -0
  25. rhiza-0.9.1/.rhiza/make.d/README.md +82 -0
  26. {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/requirements/docs.txt +1 -0
  27. rhiza-0.9.1/.rhiza/requirements/tests.txt +12 -0
  28. {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/requirements/tools.txt +3 -0
  29. rhiza-0.8.8/Makefile → rhiza-0.9.1/.rhiza/rhiza.mk +124 -48
  30. {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/scripts/release.sh +61 -20
  31. {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/utils/version_matrix.py +41 -6
  32. {rhiza-0.8.8 → rhiza-0.9.1}/CLI.md +22 -11
  33. {rhiza-0.8.8 → rhiza-0.9.1}/CODE_OF_CONDUCT.md +3 -3
  34. rhiza-0.9.1/Makefile +8 -0
  35. {rhiza-0.8.8 → rhiza-0.9.1}/PKG-INFO +46 -26
  36. {rhiza-0.8.8 → rhiza-0.9.1}/README.md +45 -25
  37. {rhiza-0.8.8 → rhiza-0.9.1}/USAGE.md +50 -20
  38. rhiza-0.9.1/book/README.md +67 -0
  39. rhiza-0.9.1/book/book.mk +156 -0
  40. {rhiza-0.8.8 → rhiza-0.9.1}/book/marimo/README.md +2 -2
  41. rhiza-0.9.1/book/marimo/marimo.mk +67 -0
  42. {rhiza-0.8.8/book/marimo → rhiza-0.9.1/book/marimo/notebooks}/rhiza.py +56 -95
  43. rhiza-0.9.1/pr-description.md +83 -0
  44. {rhiza-0.8.8 → rhiza-0.9.1}/presentation/README.md +5 -5
  45. rhiza-0.8.8/presentation/Makefile.presentation → rhiza-0.9.1/presentation/presentation.mk +1 -1
  46. {rhiza-0.8.8 → rhiza-0.9.1}/pyproject.toml +28 -1
  47. {rhiza-0.8.8 → rhiza-0.9.1}/renovate.json +1 -0
  48. {rhiza-0.8.8 → rhiza-0.9.1}/ruff.toml +51 -14
  49. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/__init__.py +4 -4
  50. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/__main__.py +1 -1
  51. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/cli.py +122 -49
  52. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/__init__.py +7 -5
  53. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/init.py +34 -11
  54. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/materialize.py +48 -23
  55. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/migrate.py +1 -1
  56. rhiza-0.9.1/src/rhiza/commands/summarise.py +416 -0
  57. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/uninstall.py +2 -1
  58. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/validate.py +8 -7
  59. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/commands/welcome.py +2 -2
  60. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/models.py +28 -6
  61. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_cli_commands.py +51 -1
  62. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_commands/test_init.py +51 -0
  63. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_commands/test_materialize.py +35 -8
  64. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_commands/test_migrate.py +1 -1
  65. rhiza-0.9.1/tests/test_commands/test_summarise.py +477 -0
  66. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_commands/test_uninstall.py +3 -3
  67. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_models.py +38 -1
  68. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/README.md +1 -1
  69. rhiza-0.9.1/tests/test_rhiza/__init__.py +5 -0
  70. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/benchmarks/analyze_benchmarks.py +2 -2
  71. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/conftest.py +58 -29
  72. rhiza-0.9.1/tests/test_rhiza/test_book.py +68 -0
  73. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_docstrings.py +21 -11
  74. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_makefile.py +137 -44
  75. rhiza-0.9.1/tests/test_rhiza/test_makefile_api.py +267 -0
  76. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_makefile_gh.py +11 -3
  77. rhiza-0.9.1/tests/test_rhiza/test_marimushka_target.py +93 -0
  78. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_notebooks.py +10 -8
  79. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_readme.py +2 -2
  80. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_release_script.py +104 -3
  81. rhiza-0.9.1/tests/test_rhiza/test_rhiza_workflows.py +227 -0
  82. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_structure.py +2 -3
  83. rhiza-0.9.1/tests/test_rhiza/test_version_matrix.py +264 -0
  84. rhiza-0.9.1/tests/tests.mk +104 -0
  85. {rhiza-0.8.8 → rhiza-0.9.1}/uv.lock +247 -229
  86. rhiza-0.8.8/.rhiza/.env +0 -14
  87. rhiza-0.8.8/.rhiza/Makefile.rhiza +0 -38
  88. rhiza-0.8.8/.rhiza/customisations/Makefile.customisations +0 -29
  89. rhiza-0.8.8/.rhiza/customisations/scripts/build-extras.sh +0 -48
  90. rhiza-0.8.8/.rhiza/customisations/scripts/post-release.sh +0 -46
  91. rhiza-0.8.8/.rhiza/requirements/tests.txt +0 -9
  92. rhiza-0.8.8/.rhiza/scripts/book.sh +0 -99
  93. rhiza-0.8.8/.rhiza/scripts/generate-coverage-badge.sh +0 -79
  94. rhiza-0.8.8/.rhiza/scripts/marimushka.sh +0 -77
  95. rhiza-0.8.8/.rhiza/scripts/update-readme-help.sh +0 -110
  96. rhiza-0.8.8/.rhiza.env +0 -11
  97. rhiza-0.8.8/book/Makefile.book +0 -55
  98. rhiza-0.8.8/book/README.md +0 -23
  99. rhiza-0.8.8/book/pdoc-templates/module.html.jinja2 +0 -19
  100. rhiza-0.8.8/tests/Makefile.tests +0 -31
  101. rhiza-0.8.8/tests/test_rhiza/test_coverage_badge.py +0 -94
  102. rhiza-0.8.8/tests/test_rhiza/test_marimushka_script.py +0 -76
  103. rhiza-0.8.8/tests/test_rhiza/test_updatereadme_script.py +0 -98
  104. {rhiza-0.8.8 → rhiza-0.9.1}/.github/ISSUE_TEMPLATE/assign_ui_implementation.md +0 -0
  105. {rhiza-0.8.8 → rhiza-0.9.1}/.github/agents/analyser.md +0 -0
  106. {rhiza-0.8.8 → rhiza-0.9.1}/.github/agents/summarise.md +0 -0
  107. {rhiza-0.8.8 → rhiza-0.9.1}/.python-version +0 -0
  108. {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/.cfg.toml +0 -0
  109. {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/docs/TOKEN_SETUP.md +0 -0
  110. {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/requirements/README.md +0 -0
  111. {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/requirements/marimo.txt +0 -0
  112. {rhiza-0.8.8 → rhiza-0.9.1}/.rhiza/template.yml +0 -0
  113. {rhiza-0.8.8 → rhiza-0.9.1}/CONTRIBUTING.md +0 -0
  114. {rhiza-0.8.8 → rhiza-0.9.1}/GETTING_STARTED.md +0 -0
  115. {rhiza-0.8.8 → rhiza-0.9.1}/LICENSE +0 -0
  116. {rhiza-0.8.8 → rhiza-0.9.1}/book/marimo/.gitkeep +0 -0
  117. {rhiza-0.8.8 → rhiza-0.9.1}/book/minibook-templates/custom.html.jinja2 +0 -0
  118. {rhiza-0.8.8 → rhiza-0.9.1}/pytest.ini +0 -0
  119. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/_templates/basic/__init__.py.jinja2 +0 -0
  120. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/_templates/basic/main.py.jinja2 +0 -0
  121. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/_templates/basic/pyproject.toml.jinja2 +0 -0
  122. {rhiza-0.8.8 → rhiza-0.9.1}/src/rhiza/subprocess_utils.py +0 -0
  123. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_commands/test_validate.py +0 -0
  124. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_package.py +0 -0
  125. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/benchmarks/.gitignore +0 -0
  126. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/benchmarks/README.md +0 -0
  127. {rhiza-0.8.8 → rhiza-0.9.1}/tests/test_rhiza/test_git_repo_fixture.py +0 -0
  128. {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
- ## Makefile.customisations - User-defined scripts and overrides
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 summarize-changes
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
- summarize-changes: install-copilot ## summarize changes since the most recent release/tag
21
- @"$(COPILOT_BIN)" -p "Show me the commits since the last release/tag and summarize them" --allow-tool 'shell(git)' --model "$(DEFAULT_AI_MODEL)" --agent summarise
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 utilizes the `rhiza` framework. Rhiza is a collection of reusable
4
- configuration templates and tooling designed to standardize and streamline modern Python development.
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
 
@@ -1,4 +1,4 @@
1
- ## Makefile.gh - github repo maintenance and helpers
1
+ ## github.mk - github repo maintenance and helpers
2
2
  # This file is included by the main Makefile
3
3
 
4
4
  # Declare phony targets
@@ -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.24"
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 unauthorized publishing
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.24"
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.24"
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
- name: "CodeQL Advanced"
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
- if: ${{ !github.event.repository.private }}
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.24-python3.12-trixie
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 optimized to use the
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
- NOTEBOOK_DIR="book/marimo"
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.24"
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