Skip to content

Commit 9057946

Browse files
authored
promote dev to main (#1)
* the OSV report is read by the repository that scans two ecosystems" * the OSV report is read here, and the repository has its own issue templates * pin aws-sdk-s3 past GHSA-g59m-gf8j-gjf5
1 parent aa5c1c2 commit 9057946

10 files changed

Lines changed: 331 additions & 10 deletions

File tree

‎.github/CODEOWNERS‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Everything, until there is somebody else. A CODEOWNERS file that lists one
2+
# person is not bureaucracy — it is what makes GitHub request a review at all.
3+
* @ctolon
4+
5+
# The parts where a mistake is expensive and a second opinion is cheap.
6+
/SECURITY.md @ctolon
7+
/deny.toml @ctolon
8+
/.github/workflows/ @ctolon
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
name: Bug report
2+
description: Something behaves differently from what the documentation says
3+
labels: ["bug"]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
Thanks for taking the time. The most useful reports are the ones where
9+
somebody else can reproduce the problem without guessing.
10+
11+
- type: textarea
12+
id: what-happened
13+
attributes:
14+
label: What happened
15+
description: And what you expected instead.
16+
placeholder: |
17+
`load()` returned `ErrorKind::Missing` for `pool.max_size`, but the key
18+
is set in `config.toml`.
19+
validations:
20+
required: true
21+
22+
- type: textarea
23+
id: reproduce
24+
attributes:
25+
label: How to reproduce
26+
description: >
27+
The struct with its `#[dynamic_config(..)]` attribute, the config file,
28+
and any environment variables involved. A small standalone `main.rs`
29+
beats a description of one.
30+
render: rust
31+
validations:
32+
required: true
33+
34+
- type: input
35+
id: version
36+
attributes:
37+
label: dynamic-config version
38+
placeholder: "0.1.0"
39+
validations:
40+
required: true
41+
42+
- type: input
43+
id: features
44+
attributes:
45+
label: Enabled features
46+
description: From your `Cargo.toml`.
47+
placeholder: 'json, watch, tokio'
48+
validations:
49+
required: true
50+
51+
- type: input
52+
id: toolchain
53+
attributes:
54+
label: Rust version and platform
55+
description: "`rustc -Vv` output, or just the version and OS."
56+
placeholder: "1.85.0, Linux x86_64"
57+
validations:
58+
required: true
59+
60+
- type: textarea
61+
id: output
62+
attributes:
63+
label: Error message or log output
64+
description: Verbatim, please — the wording carries the provenance.
65+
render: text

‎.github/ISSUE_TEMPLATE/config.yml‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
blank_issues_enabled: true
2+
contact_links:
3+
- name: Security vulnerability
4+
url: https://github.com/dynamic-config-rs/dynamic-config-python/security/advisories/new
5+
about: >
6+
Please report privately rather than in a public issue. See SECURITY.md.
7+
- name: Question about usage
8+
url: https://github.com/dynamic-config-rs/dynamic-config-python/discussions
9+
about: >
10+
For "how do I…", a discussion gets a better answer than an issue — and
11+
stays findable for the next person.
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
name: Feature request
2+
description: Something the crate should be able to do and cannot
3+
labels: ["enhancement"]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
Before opening one, it is worth a look at
9+
[Not planned](../blob/main/README.md#not-planned): several things are
10+
listed there as deliberately refused, each with the reasoning and with
11+
what would reopen it. If you disagree with one, say so here — a refusal
12+
with a bad reason should be revisited.
13+
14+
- type: textarea
15+
id: problem
16+
attributes:
17+
label: The problem
18+
description: >
19+
What are you trying to do, and where does the crate stop you? Describe
20+
the situation rather than the API you have in mind — the best design
21+
often is not the one either of us thought of first.
22+
placeholder: |
23+
Our platform sets `DATABASE_URL` and I cannot rename it, so the prefixed
24+
environment layer cannot reach it.
25+
validations:
26+
required: true
27+
28+
- type: textarea
29+
id: workaround
30+
attributes:
31+
label: What you do today
32+
description: The workaround, if there is one, and why it is not enough.
33+
34+
- type: textarea
35+
id: shape
36+
attributes:
37+
label: What it might look like
38+
description: Optional. A sketch of the API, if you have one in mind.
39+
render: rust
40+
41+
- type: dropdown
42+
id: scope
43+
attributes:
44+
label: Where it belongs
45+
options:
46+
- The core crate
47+
- A companion crate (etcd, Consul, NATS, Vault, Redis, S3, Firestore)
48+
- A new companion crate
49+
- Not sure
50+
validations:
51+
required: true
52+
53+
- type: checkboxes
54+
id: constraints
55+
attributes:
56+
label: Constraints this has to respect
57+
description: >
58+
These are load-bearing for the crate. Tick the ones you have thought
59+
about; leave the rest — it is a prompt, not a barrier.
60+
options:
61+
- label: Reading configuration stays lock-free and allocation-free on the hot path
62+
- label: No new mandatory dependency (an optional feature is fine)
63+
- label: Does not raise the core crate's MSRV of 1.71
64+
- label: Secrets stay out of logs and diagnostics

‎.github/dependabot.yml‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
version: 2
2+
3+
updates:
4+
# Cargo updates are grouped: what a wheel links is reviewed as one tree.
5+
- package-ecosystem: cargo
6+
directory: /
7+
schedule:
8+
interval: weekly
9+
day: monday
10+
open-pull-requests-limit: 5
11+
groups:
12+
patch-and-minor:
13+
update-types: [minor, patch]
14+
ignore:
15+
# PyO3 majors change the binding's whole vocabulary.
16+
- dependency-name: pyo3
17+
update-types: [version-update:semver-major]
18+
# The wheels' Python dependencies are extras rather than requirements, so
19+
# there is no lockfile to bump — `scripts/resolve-python-audit.py` is what
20+
# resolves them, and the OSV job is what watches them.
21+
22+
- package-ecosystem: github-actions
23+
directory: /
24+
schedule:
25+
interval: monthly
26+
# One grouped bump instead of a queue: an action pin is reviewed the same
27+
# way whether one moved or five did.
28+
groups:
29+
actions:
30+
patterns: ["*"]

‎.github/pull_request_template.md‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
## What this changes
2+
3+
<!-- One or two sentences. What is different afterwards, from a user's side? -->
4+
5+
## Why
6+
7+
<!-- The problem, not the patch. If it fixes an issue, link it: Fixes #123 -->
8+
9+
## The decision, if there was one
10+
11+
<!-- Delete if there wasn't. If you chose between two reasonable designs, say
12+
which and why — that reasoning is the part a future reader cannot recover
13+
from the diff. The same goes for anything deliberately *not* done. -->
14+
15+
## Checklist
16+
17+
- [ ] `just check` passes locally (fmt, clippy, tests, docs)
18+
- [ ] New behaviour has a test that would fail without the change
19+
- [ ] Public items have doc comments; a new argument or feature is in `README.md`
20+
- [ ] `CHANGELOG.md` has an entry under `Unreleased`
21+
- [ ] MSRV unchanged, or the change is called out here and in the README table
22+
23+
<!-- For a change to a companion crate, its own README and CHANGELOG too. -->
24+
25+
## Compatibility
26+
27+
- [ ] No public API removed or narrowed
28+
- [ ] No behaviour change a working program would notice
29+
30+
<!-- If either is unchecked, say what breaks and how a user migrates. MSRV
31+
changes count as breaking. -->

‎Cargo.lock‎

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎deny.toml‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@ ignore = [
3636
# vulnerable code path occurs in the SDK's identity-cache usage. Re-add
3737
# entries here if RustSec ships criteria that match.
3838
]
39+
# `aws-sdk-s3` is pinned to 1.112.0 or newer (GHSA-g59m-gf8j-gjf5), which
40+
# regenerating the lockfile undoes: the MSRV-fallback resolver picks 1.96,
41+
# the newest release compatible with the *lowest* floor in the workspace.
42+
# The same trap `time` is in, one crate over. After any `cargo
43+
# generate-lockfile`, re-apply:
44+
#
45+
# cargo update -p aws-sdk-s3 --precise 1.112.0
3946
# `time` is pinned in Cargo.lock to 0.3.47 or newer (RUSTSEC-2026-0009), which
4047
# declares rust-version 1.88. That is fine — it is reached only through the
4148
# companion crates and dev-dependencies, never through the core crate, whose

‎scripts/README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ around the checks. Each one is safe to re-run and says what it did.
55

66
| Script | What it does |
77
|---|---|
8+
| `audit-report.py` | An OSV scan's findings, split into *a fix exists* (fails the job) and *no fix published* (a warning). Exemptions are `osv-scanner.toml`'s and never reach this. |
89
| `ci-local.sh` | The whole CI gate locally, in the order that fails fastest. |
910
| `claude-review-pr.sh` | Reviews a pull request with Claude locally — title, body, diff, and read-only access to the checkout. `--post` comments the review on the PR; without it, nothing leaves the terminal. |
1011
| `dismiss-alert.sh` | Dismisses a Dependabot alert with the reason recorded *on the alert* — GitHub's UI leaves that nowhere a reviewer finds later. `--list` shows what is open. |

0 commit comments

Comments
 (0)