polars-yahoo 0.2.0__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 (51) hide show
  1. polars_yahoo-0.2.0/.bandit +19 -0
  2. polars_yahoo-0.2.0/.editorconfig +41 -0
  3. polars_yahoo-0.2.0/.github/CONFIG.md +187 -0
  4. polars_yahoo-0.2.0/.github/PULL_REQUEST_TEMPLATE.md +82 -0
  5. polars_yahoo-0.2.0/.github/dependabot.yml +86 -0
  6. polars_yahoo-0.2.0/.github/release.yml +67 -0
  7. polars_yahoo-0.2.0/.github/rulesets/main-branch-protection.json +47 -0
  8. polars_yahoo-0.2.0/.github/rulesets/tag-protection.json +24 -0
  9. polars_yahoo-0.2.0/.github/secret_scanning.yml +19 -0
  10. polars_yahoo-0.2.0/.github/workflows/rhiza_benchmark.yml +30 -0
  11. polars_yahoo-0.2.0/.github/workflows/rhiza_book.yml +51 -0
  12. polars_yahoo-0.2.0/.github/workflows/rhiza_ci.yml +47 -0
  13. polars_yahoo-0.2.0/.github/workflows/rhiza_codeql.yml +39 -0
  14. polars_yahoo-0.2.0/.github/workflows/rhiza_marimo.yml +38 -0
  15. polars_yahoo-0.2.0/.github/workflows/rhiza_release.yml +1087 -0
  16. polars_yahoo-0.2.0/.github/workflows/rhiza_scorecard.yml +44 -0
  17. polars_yahoo-0.2.0/.github/workflows/rhiza_sync.yml +36 -0
  18. polars_yahoo-0.2.0/.github/workflows/rhiza_weekly.yml +38 -0
  19. polars_yahoo-0.2.0/.gitignore +126 -0
  20. polars_yahoo-0.2.0/.pre-commit-config.yaml +139 -0
  21. polars_yahoo-0.2.0/.python-version +2 -0
  22. polars_yahoo-0.2.0/.rhiza/scripts/release_publish.py +168 -0
  23. polars_yahoo-0.2.0/.rhiza/semgrep.yml +84 -0
  24. polars_yahoo-0.2.0/.rhiza/template.lock +43 -0
  25. polars_yahoo-0.2.0/.rhiza/template.yml +5 -0
  26. polars_yahoo-0.2.0/CHANGELOG.md +41 -0
  27. polars_yahoo-0.2.0/LICENSE +202 -0
  28. polars_yahoo-0.2.0/Makefile +71 -0
  29. polars_yahoo-0.2.0/PKG-INFO +121 -0
  30. polars_yahoo-0.2.0/README.md +96 -0
  31. polars_yahoo-0.2.0/cliff.toml +102 -0
  32. polars_yahoo-0.2.0/docs/development/rhiza.md +23 -0
  33. polars_yahoo-0.2.0/docs/index.md +1 -0
  34. polars_yahoo-0.2.0/docs/mkdocs-base.yml +133 -0
  35. polars_yahoo-0.2.0/mkdocs.yml +6 -0
  36. polars_yahoo-0.2.0/pyproject.toml +73 -0
  37. polars_yahoo-0.2.0/pytest.ini +27 -0
  38. polars_yahoo-0.2.0/renovate.json +6 -0
  39. polars_yahoo-0.2.0/ruff.toml +153 -0
  40. polars_yahoo-0.2.0/src/polars_yahoo/__init__.py +26 -0
  41. polars_yahoo-0.2.0/src/polars_yahoo/_chart.py +195 -0
  42. polars_yahoo-0.2.0/src/polars_yahoo/_download.py +82 -0
  43. polars_yahoo-0.2.0/src/polars_yahoo/_http.py +88 -0
  44. polars_yahoo-0.2.0/src/polars_yahoo/_ticker.py +63 -0
  45. polars_yahoo-0.2.0/src/polars_yahoo/exceptions.py +38 -0
  46. polars_yahoo-0.2.0/src/polars_yahoo/py.typed +0 -0
  47. polars_yahoo-0.2.0/tests/conftest.py +106 -0
  48. polars_yahoo-0.2.0/tests/test_api.py +168 -0
  49. polars_yahoo-0.2.0/tests/test_chart.py +153 -0
  50. polars_yahoo-0.2.0/tests/test_rhiza_packaging.py +99 -0
  51. polars_yahoo-0.2.0/uv.lock +425 -0
@@ -0,0 +1,19 @@
1
+ # Bandit configuration. This file โ€” not the pre-commit hook's args โ€” is the
2
+ # single source of truth for bandit's scope, because it is the only part any
3
+ # other runner can see. CodeFactor, IDE plugins and a contributor typing
4
+ # `bandit -r .` all read `.bandit` and none of them read our hook args, so
5
+ # scope kept in the args made every external analyser disagree with CI (#1493).
6
+ #
7
+ # Both spellings of each path are listed deliberately. Bandit matches an
8
+ # exclude entry against the path string it is handed, and that string depends on
9
+ # how it was invoked: a recursive `bandit -r .` discovers `./tests/foo.py`,
10
+ # whereas pre-commit passes `tests/foo.py`. So `./tests` alone silently covers
11
+ # only the recursive case and `tests` alone only the pre-commit case โ€” a
12
+ # one-spelling list looks correct and half-works. Verified in
13
+ # tests/security/test_security_patterns.py, which runs bandit both ways.
14
+ #
15
+ # Note these are *added* to bandit's own defaults (.git, __pycache__, .tox,
16
+ # .eggs, โ€ฆ), so those need no repeating here.
17
+ [bandit]
18
+ exclude = tests,./tests,.venv,./.venv
19
+ skips = B101
@@ -0,0 +1,41 @@
1
+ # This file is part of the jebel-quant/rhiza repository
2
+ # (https://github.com/jebel-quant/rhiza).
3
+ #
4
+ root = true
5
+
6
+ # Default settings for all files
7
+ [*]
8
+ end_of_line = lf
9
+ trim_trailing_whitespace = true
10
+ insert_final_newline = true
11
+ charset = utf-8
12
+
13
+ # Python, reStructuredText, and text files
14
+ [*.{py,rst,txt}]
15
+ indent_style = space
16
+ indent_size = 4
17
+
18
+ # YAML, JSON, and other config files
19
+ [*.{yml,yaml,json}]
20
+ indent_style = space
21
+ indent_size = 2
22
+
23
+ # Markdown files
24
+ # [*.{md,markdown}]
25
+ # trim_trailing_whitespace = false
26
+
27
+ # Makefiles require tabs
28
+ [{Makefile,*.mk,*.make}]
29
+ indent_style = tab
30
+ indent_size = 4
31
+
32
+ # Don't apply editorconfig rules to vendor/ resources
33
+ # This is a "defensive" rule for the day we may have
34
+ # the vendor folder
35
+ [vendor/**]
36
+ charset = unset
37
+ end_of_line = unset
38
+ indent_size = unset
39
+ indent_style = unset
40
+ insert_final_newline = unset
41
+ trim_trailing_whitespace = unset
@@ -0,0 +1,187 @@
1
+ # GitHub Actions Configuration
2
+
3
+ This document describes the secrets used by the Rhiza-provided GitHub Actions workflows
4
+ (`.github/workflows/rhiza_*.yml`) and how to configure them.
5
+
6
+ ## PAT_TOKEN
7
+
8
+ Some workflows may need to push changes to files under `.github/workflows/`. The
9
+ automatic `github.token` **cannot** do that โ€” GitHub rejects such pushes unless
10
+ the token carries the `workflow` scope. If you need it, create a Personal Access
11
+ Token (PAT) with the `workflow` scope and store it as a repository secret named
12
+ `PAT_TOKEN`.
13
+
14
+ If `PAT_TOKEN` is not configured, workflows fall back to `github.token`.
15
+
16
+ ### Creating the token
17
+
18
+ **Fine-grained PAT** (recommended):
19
+
20
+ 1. Go to **Settings โ†’ Developer settings โ†’ Fine-grained tokens โ†’ Generate new token**
21
+ (<https://github.com/settings/personal-access-tokens/new>).
22
+ 2. Restrict **Repository access** to the repository (or repositories) using Rhiza.
23
+ 3. Under **Repository permissions**, grant:
24
+ - **Contents**: Read and write
25
+ - **Workflows**: Read and write
26
+ - **Pull requests**: Read and write (needed for the scheduled sync-PR mode)
27
+ 4. Generate the token and copy it.
28
+
29
+ **Classic PAT** (alternative):
30
+
31
+ 1. Go to **Settings โ†’ Developer settings โ†’ Tokens (classic) โ†’ Generate new token**.
32
+ 2. Select the `repo` and `workflow` scopes.
33
+ 3. Generate the token and copy it.
34
+
35
+ ### Storing the secret
36
+
37
+ In the repository that consumes Rhiza:
38
+
39
+ 1. Go to **Settings โ†’ Secrets and variables โ†’ Actions โ†’ New repository secret**.
40
+ 2. Name: `PAT_TOKEN`
41
+ 3. Value: the token created above.
42
+
43
+ Or with the GitHub CLI:
44
+
45
+ ```bash
46
+ gh secret set PAT_TOKEN
47
+ ```
48
+
49
+ A PAT expires; when sync pushes start failing with a `refusing to allow ... workflow` error,
50
+ regenerate the token and update the secret.
51
+
52
+ ## Daily template sync (`rhiza_sync.yml`)
53
+
54
+ Every day at 06:00 UTC the sync workflow compares `ref` in `.rhiza/template.yml` with
55
+ the template repository's latest release. When the ref is behind, the workflow bumps it,
56
+ syncs the template files with the rhiza-claude scripts that `/rhiza:update` also uses,
57
+ and opens a pull request from `rhiza/sync-<tag>`. The PR stages only paths listed in
58
+ `.rhiza/template.lock`. Merge conflicts resolve to the upstream side. A major bump (for
59
+ example `v1.x` โ†’ `v2.0.0`) is never applied automatically; the run warns and you run
60
+ `/rhiza:update` yourself. When the branch for that release already exists, later runs
61
+ skip it, so you get one PR per release.
62
+
63
+ The workflow reads the `GH_PAT` secret. Give the token the permissions listed above
64
+ (Contents, Workflows and Pull requests: read and write, or classic `repo` + `workflow`).
65
+ Without `GH_PAT` the workflow falls back to `github.token`, which has two limits:
66
+
67
+ - it cannot push a sync that changes `.github/workflows/*`, and
68
+ - GitHub does not start CI on a pull request opened with it.
69
+
70
+ To run a check right away: `gh workflow run rhiza_sync.yml`.
71
+
72
+ ## Release workflow secrets (optional)
73
+
74
+ The release workflow (`.github/workflows/rhiza_release.yml`) supports additional secrets, all
75
+ optional depending on which release features you use:
76
+
77
+ | Secret | Purpose |
78
+ | --- | --- |
79
+ | `PYPI_TOKEN` | Publish the built package to PyPI. Not needed when using trusted publishing (OIDC). |
80
+ | `RELEASE_PUBLISH_CREDENTIALS` | Optional credentials input for a repository-owned custom publisher. Not needed when the extension uses OIDC. |
81
+ | `GH_PAT` | Git authentication for installing private dependencies during the release build. |
82
+ | `UV_EXTRA_INDEX_URL` | Extra package index URL (with credentials) for private dependencies. |
83
+
84
+ `GITHUB_TOKEN` is provided automatically by GitHub Actions and needs no configuration.
85
+
86
+ ## Release publisher selection
87
+
88
+ Set the Actions **variable** `RELEASE_PUBLISHER` to choose package deployment:
89
+
90
+ | Value | Behaviour |
91
+ | --- | --- |
92
+ | Unset or `pypi` | Existing PyPI Trusted Publishing. `PYPI_REPOSITORY_URL` (variable) and `PYPI_TOKEN` (secret) still support PyPI-compatible custom endpoints. |
93
+ | `custom` | Run your repository-owned composite action at `.github/actions/release-publish/action.yml` (or `action.yaml`). No fallback to public PyPI. |
94
+ | `none` | Skip package publishing, retaining the other release outputs. |
95
+
96
+ No bundle syncs the custom action path: it remains repository-owned.
97
+ Commit the action before tagging the release;
98
+ it runs from that release revision with the `release` environment, `contents: read` and
99
+ `id-token: write`. It receives `artifacts-dir` (absolute path to the downloaded build
100
+ artifacts), `tag`, `version` (tag without `v`) and the optional `credentials` input.
101
+ It owns provider login, tool setup and upload, and must fail on unsuccessful publication.
102
+ Use the existing distributions rather than rebuilding them; the directory can also
103
+ contain provenance files.
104
+
105
+ For OIDC-capable feeds, obtain and immediately mask short-lived credentials in this
106
+ action. Otherwise, supply the optional `RELEASE_PUBLISH_CREDENTIALS` secret in the
107
+ format your action expects. Only that explicit secret is forwarded to the extension.
108
+ An optional `artifact-url` output supplies a public HTTPS artifact link for release notes;
109
+ omit it for private destinations and never include credentials or signed access tokens.
110
+
111
+ The private-package classifier still suppresses built-in PyPI uploads; `custom`
112
+ explicitly permits private distributions. Invalid modes, missing custom actions and
113
+ missing expected distributions fail closed. Failed required uploads prevent release
114
+ finalization. Conda recipes are generated only after successful public PyPI publication
115
+ with no `PYPI_REPOSITORY_URL` override.
116
+
117
+ This is a GitHub publishing extension, not private dependency-consumption setup or a
118
+ GitLab feature. See the
119
+ [publisher contract](https://jebel-quant.github.io/rhiza/reference/ARCHITECTURE/#repository-owned-publishing-action)
120
+ for details.
121
+
122
+ ## Private dependency secrets in other workflows
123
+
124
+ `GH_PAT` and `UV_EXTRA_INDEX_URL` are read by the CI, benchmark, CodeQL, marimo, book,
125
+ weekly and docker workflows too. The stubs that call those reusable workflows forward each secret by
126
+ name rather than with `secrets: inherit`, because GitHub only honours `inherit` when the
127
+ caller sits in the same organisation or enterprise as `jebel-quant/rhiza` โ€” from any other
128
+ organisation the secrets simply never arrived, and private dependencies failed to install
129
+ with `could not read Password for 'https://***@github.com'` (#1689). A secret that is not
130
+ defined is forwarded empty and the workflow falls back to `github.token`, so nothing is
131
+ required for a project with no private dependencies. Pull requests from forks never receive
132
+ secrets at all, so a fork PR that needs a private dependency fails at install; that is
133
+ GitHub's rule rather than a rhiza setting.
134
+
135
+ The docker workflow is the one place the runner's git configuration cannot reach, because
136
+ `uv sync` runs inside the image build. It passes both secrets to `docker buildx build` as
137
+ BuildKit secrets instead, which exist only for that one instruction and are written into no
138
+ layer; a build argument would be readable with `docker history` (#1691). See
139
+ `docs/development/DOCKER.md` for building such an image locally.
140
+
141
+ ## Private dependency setup (opt-in)
142
+
143
+ Set `RHIZA_SETUP_ENABLED=true` and commit a consumer-owned
144
+ `.github/actions/rhiza-setup/action.yml` (or `action.yaml`). The action receives
145
+ `purpose` and the optional `RHIZA_SETUP_CREDENTIALS` secret as `credentials`.
146
+ Keep provider settings inside that action; no repository variables are forwarded.
147
+ Setup exports through `GITHUB_ENV` survive an unset legacy `UV_EXTRA_INDEX_URL`
148
+ secret. Publication is independent: built-in PyPI remains the default.
149
+
150
+ For Dependabot PRs, also define `RHIZA_SETUP_CREDENTIALS` as a Dependabot secret
151
+ when setup requires it; Actions secrets are not available to those runs. The same
152
+ applies to `BOOK_SETUP_TOKEN` for deprecated book callers.
153
+
154
+ In the shipped workflows, OIDC-based setup works only in the release `build` job,
155
+ which already has `id-token: write` for attestations. CI, book, marimo, benchmark
156
+ and weekly setup support token-based authentication only.
157
+
158
+ Default setup jobs explicitly retain read-only permissions; the book build never
159
+ inherits Pages deployment permissions. A caller-only `id-token: write` grant is
160
+ insufficient for OIDC setup: opt in with a consumer-owned workflow copy granting
161
+ OIDC only to the dependency jobs, plus the matching caller grant. See the setup
162
+ contract below for the procedure. Excluded wrappers no longer receive automatic
163
+ workflow-version updates; bump their references and maintain workflow copies manually.
164
+ Pages deployment and release signing retain their existing separate permissions.
165
+ Fork PRs and `pull_request_target` fail when setup is enabled, before the action runs.
166
+
167
+ For the CodeArtifact example, IAM/OIDC configuration, workflow coverage, book-hook
168
+ migration and deferred container/AWS validation work, see the
169
+ [setup contract](https://jebel-quant.github.io/rhiza/reference/ARCHITECTURE/#consumer-owned-dependency-setup).
170
+ Rename the former book action to `rhiza-setup`, its `token` input to `credentials`,
171
+ and `BOOK_SETUP_TOKEN` to `RHIZA_SETUP_CREDENTIALS`; remove `with.book-setup` and set
172
+ `RHIZA_SETUP_ENABLED=true` instead. The old input and secret remain deprecated aliases
173
+ until the next major release. `book-setup: true` enables setup for the book job and
174
+ emits a warning. The generic action takes precedence; if absent, the old
175
+ `rhiza-book-setup` action runs with its `token` input. `RHIZA_SETUP_CREDENTIALS`
176
+ takes precedence over `BOOK_SETUP_TOKEN`. Only one action runs.
177
+
178
+ ## CI profiles (prototype)
179
+
180
+ Select `lean`, `standard` or `comprehensive` with `[tool.rhiza.ci].profile` in the
181
+ consumer's `pyproject.toml`. The default is `comprehensive`. Lean consolidates
182
+ quality checks and runs the primary Python version on ordinary changes; scheduled
183
+ and full manual runs restore the complete compatibility matrix. Standard moves
184
+ lowest-direct dependency testing to those broader runs.
185
+
186
+ See the [CI profiles guide](https://github.com/Jebel-Quant/rhiza/blob/main/docs/guides/CI_PROFILES.md)
187
+ for scope, migration, branch protection and unreleased-prototype limitations.
@@ -0,0 +1,82 @@
1
+ <!--
2
+ Thanks for contributing!
3
+
4
+ Every section below is optional guidance, not a form to fill in completely.
5
+ Delete what does not apply; keep the checklist.
6
+ -->
7
+
8
+ #### Reference issues/PRs
9
+
10
+ <!--
11
+ Example: Fixes #1234. See also #3456.
12
+
13
+ Use a closing keyword (Fixes, Closes, Resolves) so the linked issue closes
14
+ automatically when this PR is merged:
15
+ https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue
16
+ If no issue exists, open one first or explain the motivation below.
17
+ -->
18
+
19
+ #### What does this implement/fix? Explain your changes.
20
+
21
+ <!--
22
+ A clear and concise description of what you changed and why. If the change is
23
+ a bug fix, say what the observed behaviour was and what it is now.
24
+ -->
25
+
26
+ #### Does your contribution introduce a new dependency? If yes, which one?
27
+
28
+ <!--
29
+ Only relevant if you changed the project manifest (pyproject.toml, Cargo.toml,
30
+ go.mod), a GitHub Actions pin or a pre-commit hook. We try to keep the
31
+ dependency set small; say why the new one is needed and whether it is
32
+ optional.
33
+ -->
34
+
35
+ #### What should a reviewer concentrate their feedback on?
36
+
37
+ <!--
38
+ Particularly useful for a PR that is still in development: point reviewers
39
+ at the parts that are ready for comments. Bullets (* or -) and filled
40
+ checkboxes [x] work well here.
41
+ -->
42
+
43
+ #### Did you add any tests for the change?
44
+
45
+ <!--
46
+ New behaviour should come with a test that fails without the change, so
47
+ later edits cannot reintroduce the same bug. If the change is not testable,
48
+ say why.
49
+ -->
50
+
51
+ #### Any other comments?
52
+
53
+ <!--
54
+ Trade-offs you considered, follow-up work you deliberately left out,
55
+ anything a reviewer would otherwise have to guess.
56
+ -->
57
+
58
+ #### PR checklist
59
+
60
+ <!--
61
+ Go through the list below. Remove points that do not apply.
62
+ -->
63
+
64
+ ##### For all contributions
65
+
66
+ - [ ] The PR title follows [Conventional Commits](https://www.conventionalcommits.org/)
67
+ (`feat:`, `fix:`, `docs:`, `test:`, `ci:`, `chore:`, `refactor:`, ...). It becomes
68
+ the squash-merge commit and the changelog entry.
69
+ - [ ] `make fmt` and `make test` pass locally.
70
+ - [ ] No hand edits to template-owned files. Anything listed in
71
+ `.rhiza/template.lock` is overwritten by the next sync; propose the change
72
+ upstream in [Jebel-Quant/rhiza](https://github.com/Jebel-Quant/rhiza) or add the
73
+ path to `exclude:` in `.rhiza/template.yml`.
74
+
75
+ ##### For user-visible changes
76
+
77
+ - [ ] Documentation (README, docstrings, docs pages) is updated to match.
78
+ - [ ] Breaking changes are marked with `!` in the title or a `BREAKING CHANGE:` footer.
79
+
80
+ <!--
81
+ Thanks again for contributing!
82
+ -->
@@ -0,0 +1,86 @@
1
+ # This file is part of the jebel-quant/rhiza repository
2
+ # (https://github.com/jebel-quant/rhiza).
3
+ #
4
+ # Configuration: Dependabot
5
+ #
6
+ # Purpose: Automate dependency updates for Python packages, GitHub Actions, and Docker images.
7
+ #
8
+ # Documentation: https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
9
+
10
+ version: 2
11
+ updates:
12
+ # Python dependencies using uv
13
+ - package-ecosystem: "uv"
14
+ directory: "/"
15
+ # Bump uv.lock only; leave pyproject.toml ranges alone unless a new version falls
16
+ # outside them. Without this, Dependabot's default ("auto") treats any project it
17
+ # cannot find on PyPI -- private, unpublished, or whose name belongs to another
18
+ # project -- as an application and rewrites every `>=` floor to the latest version,
19
+ # which then fails the lowest-direct-dependency CI job.
20
+ versioning-strategy: "increase-if-necessary"
21
+ schedule:
22
+ interval: "weekly"
23
+ day: "tuesday"
24
+ time: "09:00"
25
+ timezone: "Asia/Dubai"
26
+ ignore:
27
+ - dependency-name: "*"
28
+ update-types: ["version-update:semver-major"]
29
+ open-pull-requests-limit: 10
30
+ labels:
31
+ - "dependencies"
32
+ - "python"
33
+ groups:
34
+ python-dependencies:
35
+ patterns:
36
+ - "*"
37
+ update-types:
38
+ - "patch"
39
+ - "minor"
40
+ commit-message:
41
+ prefix: "chore(deps)"
42
+ prefix-development: "chore(deps-dev)"
43
+ include: "scope"
44
+
45
+ # GitHub Actions
46
+ - package-ecosystem: "github-actions"
47
+ directory: "/"
48
+ schedule:
49
+ interval: "weekly"
50
+ day: "tuesday"
51
+ time: "09:00"
52
+ timezone: "Asia/Dubai"
53
+ ignore:
54
+ - dependency-name: "*"
55
+ update-types: ["version-update:semver-major"]
56
+ open-pull-requests-limit: 10
57
+ labels:
58
+ - "dependencies"
59
+ - "github-actions"
60
+ groups:
61
+ github-actions:
62
+ patterns:
63
+ - "*"
64
+ update-types:
65
+ - "patch"
66
+ - "minor"
67
+
68
+ commit-message:
69
+ prefix: "chore(deps)"
70
+ include: "scope"
71
+
72
+ # Docker
73
+ #- package-ecosystem: "docker"
74
+ # directory: "/docker"
75
+ # schedule:
76
+ # interval: "weekly"
77
+ # day: "tuesday"
78
+ # time: "09:00"
79
+ # timezone: "Asia/Dubai"
80
+ # open-pull-requests-limit: 10
81
+ # labels:
82
+ # - "dependencies"
83
+ # - "docker"
84
+ # commit-message:
85
+ # prefix: "chore(deps)"
86
+ # include: "scope"
@@ -0,0 +1,67 @@
1
+ # GitHub Release Notes Configuration
2
+ # This file configures automatic categorization of pull requests in release notes
3
+ # See: https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes
4
+
5
+ changelog:
6
+ exclude:
7
+ labels:
8
+ - ignore-for-release
9
+ - duplicate
10
+ - question
11
+ - invalid
12
+ - wontfix
13
+ authors:
14
+ - dependabot
15
+ - renovate
16
+
17
+ categories:
18
+ - title: ๐Ÿš€ Features
19
+ labels:
20
+ - feature
21
+ - enhancement
22
+
23
+ - title: ๐Ÿ› Bug Fixes
24
+ labels:
25
+ - bug
26
+ - fix
27
+
28
+ - title: ๐Ÿ“š Documentation
29
+ labels:
30
+ - documentation
31
+ - docs
32
+
33
+ - title: ๐Ÿ”ง Technical Debt
34
+ labels:
35
+ - technical-debt
36
+ - refactor
37
+ - cleanup
38
+
39
+ - title: ๐Ÿ—๏ธ Infrastructure
40
+ labels:
41
+ - ci
42
+ - build
43
+ - infrastructure
44
+
45
+ - title: โšก Performance
46
+ labels:
47
+ - performance
48
+ - optimization
49
+
50
+ - title: ๐Ÿงช Testing
51
+ labels:
52
+ - test
53
+ - testing
54
+
55
+ - title: ๐Ÿ”’ Security
56
+ labels:
57
+ - security
58
+ - vulnerability
59
+
60
+ - title: ๐Ÿ“ฆ Dependencies
61
+ labels:
62
+ - dependencies
63
+ - deps
64
+
65
+ - title: ๐Ÿ”„ Other Changes
66
+ labels:
67
+ - "*"
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "main-branch-protection",
3
+ "target": "branch",
4
+ "enforcement": "active",
5
+ "conditions": {
6
+ "ref_name": {
7
+ "include": ["~DEFAULT_BRANCH"],
8
+ "exclude": []
9
+ }
10
+ },
11
+ "rules": [
12
+ { "type": "deletion" },
13
+ { "type": "non_fast_forward" },
14
+ {
15
+ "type": "pull_request",
16
+ "parameters": {
17
+ "required_approving_review_count": 1,
18
+ "dismiss_stale_reviews_on_push": true,
19
+ "require_code_owner_review": true,
20
+ "require_last_push_approval": true,
21
+ "required_review_thread_resolution": false,
22
+ "allowed_merge_methods": ["squash", "merge", "rebase"]
23
+ }
24
+ },
25
+ {
26
+ "type": "required_status_checks",
27
+ "parameters": {
28
+ "strict_required_status_checks_policy": false,
29
+ "required_status_checks": [
30
+ { "context": "ci / Pre-commit hooks", "integration_id": 15368 },
31
+ { "context": "ci / Check dependencies with deptry", "integration_id": 15368 },
32
+ { "context": "ci / docs-coverage", "integration_id": 15368 },
33
+ { "context": "ci / Security scanning", "integration_id": 15368 },
34
+ { "context": "ci / License compliance scan", "integration_id": 15368 },
35
+ { "context": "ci / CI gate", "integration_id": 15368 }
36
+ ]
37
+ }
38
+ }
39
+ ],
40
+ "bypass_actors": [
41
+ {
42
+ "actor_type": "RepositoryRole",
43
+ "actor_id": 5,
44
+ "bypass_mode": "always"
45
+ }
46
+ ]
47
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "version-tag-protection",
3
+ "target": "tag",
4
+ "enforcement": "active",
5
+ "conditions": {
6
+ "ref_name": {
7
+ "include": ["refs/tags/v*"],
8
+ "exclude": []
9
+ }
10
+ },
11
+ "rules": [
12
+ { "type": "creation" },
13
+ { "type": "update" },
14
+ { "type": "deletion" },
15
+ { "type": "non_fast_forward" }
16
+ ],
17
+ "bypass_actors": [
18
+ {
19
+ "actor_type": "RepositoryRole",
20
+ "actor_id": 5,
21
+ "bypass_mode": "always"
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,19 @@
1
+ # This file is part of the jebel-quant/rhiza repository
2
+ # (https://github.com/jebel-quant/rhiza).
3
+ #
4
+ # Configuration: GitHub Secret Scanning
5
+ #
6
+ # Purpose: Configure GitHub secret scanning to identify and prevent accidental
7
+ # exposure of secrets, credentials, and tokens in the repository.
8
+ #
9
+ # Note: Secret scanning must be enabled in repository Settings >
10
+ # Security > Code security and analysis > Secret scanning.
11
+ #
12
+ # Documentation: https://docs.github.com/en/code-security/secret-scanning/configuring-secret-scanning-for-your-repository
13
+
14
+ paths-ignore:
15
+ # Ignore test fixtures that may contain example/fake secrets
16
+ - "tests/**"
17
+ # Ignore documentation that references example tokens/keys
18
+ - "docs/**/*.md"
19
+ - "book/**"
@@ -0,0 +1,30 @@
1
+ # This file is part of the jebel-quant/rhiza repository
2
+ # (https://github.com/jebel-quant/rhiza).
3
+ #
4
+ # Workflow: Benchmarks
5
+ #
6
+ # Purpose: Run the benchmark suite on pushes to main to create a measurable
7
+ # performance baseline over time.
8
+ #
9
+ # Trigger: This workflow runs on pushes to the main branch.
10
+
11
+ name: "(RHIZA) BENCHMARK"
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ on:
17
+ push:
18
+ branches:
19
+ - main
20
+
21
+ jobs:
22
+ benchmark:
23
+ uses: jebel-quant/rhiza/.github/workflows/rhiza_benchmark.yml@v1.12.0
24
+ # Forwarded explicitly: `secrets: inherit` only reaches a reusable workflow in the
25
+ # caller's own organisation or enterprise (#1689). A secret this repository has not
26
+ # defined arrives empty and the workflow falls back to `github.token`.
27
+ secrets:
28
+ RHIZA_SETUP_CREDENTIALS: ${{ secrets.RHIZA_SETUP_CREDENTIALS }}
29
+ GH_PAT: ${{ secrets.GH_PAT }}
30
+ UV_EXTRA_INDEX_URL: ${{ secrets.UV_EXTRA_INDEX_URL }}
@@ -0,0 +1,51 @@
1
+ # This file is part of the jebel-quant/rhiza repository
2
+ # (https://github.com/jebel-quant/rhiza).
3
+ #
4
+ # Workflow: Book
5
+ # Purpose: This workflow builds and deploys comprehensive documentation for the project.
6
+ # It combines API documentation, test coverage reports, test results, and
7
+ # interactive notebooks into a single GitHub Pages site.
8
+ #
9
+ # Trigger: This workflow runs on every push (any branch), so every commit
10
+ # validates that the book still builds. The reusable workflow deploys
11
+ # to GitHub Pages only from the repository's default branch and never
12
+ # from a fork; other branches build and upload an artifact only.
13
+ #
14
+ # Components:
15
+ # - ๐Ÿ““ Process Marimo notebooks
16
+ # - ๐Ÿ“– Build documentation site via zensical
17
+ # - ๐Ÿงช Run tests and generate coverage reports
18
+ # - ๐Ÿš€ Deploy combined documentation to GitHub Pages
19
+
20
+ name: "(RHIZA) BOOK"
21
+
22
+ on:
23
+ push:
24
+ branches:
25
+ - '**'
26
+
27
+ permissions:
28
+ contents: read
29
+
30
+ jobs:
31
+ book:
32
+ uses: jebel-quant/rhiza/.github/workflows/rhiza_book.yml@v1.12.0
33
+ # Forwarded explicitly: `secrets: inherit` only reaches a reusable workflow in the
34
+ # caller's own organisation or enterprise (#1689). A secret this repository has not
35
+ # defined arrives empty and the workflow falls back to `github.token`.
36
+ secrets:
37
+ BOOK_SETUP_TOKEN: ${{ secrets.BOOK_SETUP_TOKEN }}
38
+ RHIZA_SETUP_CREDENTIALS: ${{ secrets.RHIZA_SETUP_CREDENTIALS }}
39
+ GH_PAT: ${{ secrets.GH_PAT }}
40
+ UV_EXTRA_INDEX_URL: ${{ secrets.UV_EXTRA_INDEX_URL }}
41
+ permissions:
42
+ contents: read
43
+ pages: write
44
+ id-token: write
45
+ # Set `deploy-pages: false` for artifact-only mode -- the reusable workflow
46
+ # still uploads the generic `book` artifact, and a consumer-owned job below
47
+ # can download it and deploy to Cloudflare Pages, Azure Static Web Apps,
48
+ # S3/CloudFront, an internal web server, etc. See docs/guides/BOOK.md for a
49
+ # full Cloudflare Pages example.
50
+ # with:
51
+ # deploy-pages: false