Skip to content

Commit 334e2f7

Browse files
isthatdebbiejclaude
andcommitted
chore: add pre-commit, repolinter, clomonitor configs and GitHub templates
Add developer tooling and LF compliance configs: - .pre-commit-config.yaml (ruff, mypy, SPDX/REUSE, DCO check) - .repolinterrc.yml (LF AI repo structure rules) - .clomonitor.yml (LF project maturity metadata) - GitHub issue templates (bug report, feature request) - Pull request template with DCO/SPDX checklist Note: CI is expected to fail until SDK source code and tests are added in the next commit (empty src/ and tests/ directories). Signed-off-by: deborahjacob-botanu <deborahjacob@botanu.ai> Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 59de279 commit 334e2f7

File tree

7 files changed

+387
-0
lines changed

7 files changed

+387
-0
lines changed

.clomonitor.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# SPDX-FileCopyrightText: 2026 The Botanu Authors
2+
# SPDX-License-Identifier: Apache-2.0
3+
#
4+
# CLOMonitor metadata — used by LF AI & Data Foundation to track
5+
# project maturity and best-practice adoption.
6+
# See: https://clomonitor.io/docs/topics/checks/
7+
8+
# Documentation
9+
documentation:
10+
adopters: "https://github.com/botanu-ai/botanu-sdk-python/blob/main/ADOPTERS.md"
11+
changelog: "https://github.com/botanu-ai/botanu-sdk-python/blob/main/CHANGELOG.md"
12+
code_of_conduct: "https://github.com/botanu-ai/botanu-sdk-python/blob/main/CODE_OF_CONDUCT.md"
13+
contributing: "https://github.com/botanu-ai/botanu-sdk-python/blob/main/CONTRIBUTING.md"
14+
governance: "https://github.com/botanu-ai/botanu-sdk-python/blob/main/GOVERNANCE.md"
15+
maintainers: "https://github.com/botanu-ai/botanu-sdk-python/blob/main/MAINTAINERS.md"
16+
readme: "https://github.com/botanu-ai/botanu-sdk-python/blob/main/README.md"
17+
security: "https://github.com/botanu-ai/botanu-sdk-python/blob/main/SECURITY.md"
18+
19+
# License
20+
license:
21+
approved: true
22+
spdx_id: "Apache-2.0"
23+
24+
# Best practices
25+
best_practices:
26+
dco: true
27+
openssf_badge: false # TODO: apply at https://www.bestpractices.dev/
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# SPDX-FileCopyrightText: 2026 The Botanu Authors
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
name: Bug Report
5+
description: Report a bug in the Botanu SDK
6+
labels: ["bug", "triage"]
7+
body:
8+
- type: markdown
9+
attributes:
10+
value: |
11+
Thanks for taking the time to report a bug.
12+
Please fill in the details below to help us reproduce and fix the issue.
13+
14+
- type: input
15+
id: version
16+
attributes:
17+
label: Botanu SDK version
18+
description: "Output of `python -c 'import botanu; print(botanu.__version__)'`"
19+
placeholder: "0.1.0"
20+
validations:
21+
required: true
22+
23+
- type: input
24+
id: python-version
25+
attributes:
26+
label: Python version
27+
description: "Output of `python --version`"
28+
placeholder: "3.12.1"
29+
validations:
30+
required: true
31+
32+
- type: dropdown
33+
id: init-mode
34+
attributes:
35+
label: Initialization mode
36+
options:
37+
- Standalone (no existing TracerProvider)
38+
- Attach (OTEL-native vendor — Splunk, Honeycomb, etc.)
39+
- Alongside (proprietary agent — Datadog, New Relic, etc.)
40+
- Unknown / not sure
41+
validations:
42+
required: true
43+
44+
- type: textarea
45+
id: description
46+
attributes:
47+
label: Description
48+
description: A clear and concise description of the bug.
49+
validations:
50+
required: true
51+
52+
- type: textarea
53+
id: reproduce
54+
attributes:
55+
label: Steps to reproduce
56+
description: Minimal code or steps to reproduce the issue.
57+
render: python
58+
validations:
59+
required: true
60+
61+
- type: textarea
62+
id: expected
63+
attributes:
64+
label: Expected behavior
65+
description: What you expected to happen.
66+
validations:
67+
required: true
68+
69+
- type: textarea
70+
id: actual
71+
attributes:
72+
label: Actual behavior
73+
description: What actually happened. Include tracebacks if applicable.
74+
render: shell
75+
validations:
76+
required: true
77+
78+
- type: textarea
79+
id: context
80+
attributes:
81+
label: Additional context
82+
description: |
83+
- OS and platform
84+
- OTel SDK / instrumentation versions
85+
- Existing observability vendor (Datadog, Splunk, etc.)
86+
- Collector configuration
87+
validations:
88+
required: false

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# SPDX-FileCopyrightText: 2026 The Botanu Authors
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
blank_issues_enabled: false
5+
contact_links:
6+
- name: Questions & Discussions
7+
url: https://github.com/botanu-ai/botanu-sdk-python/discussions
8+
about: Ask questions and discuss ideas
9+
- name: Security Vulnerabilities
10+
url: https://github.com/botanu-ai/botanu-sdk-python/blob/main/SECURITY.md
11+
about: Report security vulnerabilities privately (do NOT open a public issue)
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# SPDX-FileCopyrightText: 2026 The Botanu Authors
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
name: Feature Request
5+
description: Suggest a new feature or enhancement
6+
labels: ["enhancement"]
7+
body:
8+
- type: markdown
9+
attributes:
10+
value: |
11+
Thanks for suggesting an improvement to Botanu SDK!
12+
13+
- type: textarea
14+
id: problem
15+
attributes:
16+
label: Problem statement
17+
description: What problem does this feature solve? Is this related to a frustration?
18+
validations:
19+
required: true
20+
21+
- type: textarea
22+
id: solution
23+
attributes:
24+
label: Proposed solution
25+
description: Describe the solution you'd like. Include API sketches if possible.
26+
validations:
27+
required: true
28+
29+
- type: textarea
30+
id: alternatives
31+
attributes:
32+
label: Alternatives considered
33+
description: Any alternative approaches you've considered.
34+
validations:
35+
required: false
36+
37+
- type: dropdown
38+
id: scope
39+
attributes:
40+
label: Which component does this affect?
41+
multiple: true
42+
options:
43+
- Core SDK (bootstrap / attach)
44+
- Run context / decorators
45+
- Span processors
46+
- Carrier propagation (SQS, Kafka, Celery)
47+
- LLM / GenAI tracking
48+
- Resource detection
49+
- Collector configuration
50+
- Documentation
51+
- Other
52+
validations:
53+
required: true

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<!-- SPDX-FileCopyrightText: 2026 The Botanu Authors -->
2+
<!-- SPDX-License-Identifier: Apache-2.0 -->
3+
4+
## Summary
5+
6+
<!-- Brief description of what this PR does and why. -->
7+
8+
## Changes
9+
10+
<!-- Bulleted list of changes. -->
11+
12+
-
13+
14+
## Type of change
15+
16+
<!-- Check all that apply. -->
17+
18+
- [ ] Bug fix (non-breaking change that fixes an issue)
19+
- [ ] New feature (non-breaking change that adds functionality)
20+
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
21+
- [ ] Documentation update
22+
- [ ] CI / build / tooling
23+
24+
## Testing
25+
26+
<!-- How was this tested? Include commands, screenshots, or links. -->
27+
28+
- [ ] Unit tests pass (`pytest`)
29+
- [ ] Lint passes (`ruff check`)
30+
- [ ] Type check passes (`mypy`)
31+
32+
## Checklist
33+
34+
- [ ] My code follows the project's coding style
35+
- [ ] I have added SPDX headers to new files
36+
- [ ] I have added tests for my changes
37+
- [ ] I have updated documentation if needed
38+
- [ ] All commits are signed off (`git commit -s`) per the [DCO](../DCO)

.pre-commit-config.yaml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# SPDX-FileCopyrightText: 2026 The Botanu Authors
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
repos:
5+
# General file hygiene
6+
- repo: https://github.com/pre-commit/pre-commit-hooks
7+
rev: v4.6.0
8+
hooks:
9+
- id: trailing-whitespace
10+
- id: end-of-file-fixer
11+
- id: check-yaml
12+
- id: check-toml
13+
- id: check-added-large-files
14+
args: ["--maxkb=500"]
15+
- id: check-merge-conflict
16+
- id: detect-private-key
17+
18+
# Ruff — linter + formatter (replaces flake8, isort, black)
19+
- repo: https://github.com/astral-sh/ruff-pre-commit
20+
rev: v0.4.8
21+
hooks:
22+
- id: ruff
23+
args: [--fix, --exit-non-zero-on-fix]
24+
- id: ruff-format
25+
26+
# Type checking
27+
- repo: https://github.com/pre-commit/mirrors-mypy
28+
rev: v1.10.0
29+
hooks:
30+
- id: mypy
31+
additional_dependencies: ["opentelemetry-api>=1.20.0"]
32+
args: [--ignore-missing-imports]
33+
pass_filenames: false
34+
entry: mypy src/botanu/
35+
36+
# SPDX license header check
37+
- repo: https://github.com/fsfe/reuse-tool
38+
rev: v3.0.2
39+
hooks:
40+
- id: reuse
41+
42+
# DCO sign-off check (local — CI uses dcoapp/app)
43+
- repo: https://github.com/christophebedard/dco-check
44+
rev: v1.1.0
45+
hooks:
46+
- id: dco-check

.repolinterrc.yml

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
# SPDX-FileCopyrightText: 2026 The Botanu Authors
2+
# SPDX-License-Identifier: Apache-2.0
3+
#
4+
# Repolinter configuration for LF AI & Data Foundation compliance.
5+
# See: https://github.com/todogroup/repolinter
6+
7+
version: 2
8+
axioms:
9+
linguist: language
10+
licensee: license
11+
packagers: packager
12+
13+
rules:
14+
# ---- License ----
15+
license-file-exists:
16+
level: error
17+
rule:
18+
type: file-existence
19+
options:
20+
globsAny:
21+
- LICENSE*
22+
- COPYING*
23+
24+
# ---- README ----
25+
readme-file-exists:
26+
level: error
27+
rule:
28+
type: file-existence
29+
options:
30+
globsAny:
31+
- README*
32+
33+
# ---- CONTRIBUTING ----
34+
contributing-file-exists:
35+
level: error
36+
rule:
37+
type: file-existence
38+
options:
39+
globsAny:
40+
- CONTRIBUTING*
41+
- .github/CONTRIBUTING*
42+
43+
# ---- Code of Conduct ----
44+
code-of-conduct-file-exists:
45+
level: error
46+
rule:
47+
type: file-existence
48+
options:
49+
globsAny:
50+
- CODE_OF_CONDUCT*
51+
- .github/CODE_OF_CONDUCT*
52+
53+
# ---- SECURITY ----
54+
security-file-exists:
55+
level: warning
56+
rule:
57+
type: file-existence
58+
options:
59+
globsAny:
60+
- SECURITY*
61+
- .github/SECURITY*
62+
63+
# ---- NOTICE / attribution ----
64+
notice-file-exists:
65+
level: warning
66+
rule:
67+
type: file-existence
68+
options:
69+
globsAny:
70+
- NOTICE*
71+
72+
# ---- DCO ----
73+
dco-file-exists:
74+
level: warning
75+
rule:
76+
type: file-existence
77+
options:
78+
globsAny:
79+
- DCO*
80+
81+
# ---- CHANGELOG ----
82+
changelog-file-exists:
83+
level: warning
84+
rule:
85+
type: file-existence
86+
options:
87+
globsAny:
88+
- CHANGELOG*
89+
- HISTORY*
90+
91+
# ---- No binaries ----
92+
binaries-not-present:
93+
level: error
94+
rule:
95+
type: file-type-exclusion
96+
options:
97+
type:
98+
- "**/*.exe"
99+
- "**/*.dll"
100+
- "**/*.so"
101+
- "**/*.dylib"
102+
- "**/*.pyc"
103+
- "**/*.pyo"
104+
105+
# ---- Source files have SPDX headers ----
106+
source-license-headers-exist:
107+
level: warning
108+
rule:
109+
type: file-contents
110+
options:
111+
globsAll:
112+
- "src/**/*.py"
113+
content: "SPDX-License-Identifier"
114+
fail-on-non-existent: false
115+
116+
# ---- No test credentials ----
117+
test-directory-exists:
118+
level: warning
119+
rule:
120+
type: file-existence
121+
options:
122+
globsAny:
123+
- tests/*
124+
- test/*

0 commit comments

Comments
 (0)