Skip to content

Commit ed421ae

Browse files
Merge branch 'main' into dependabot/pip/myst-parser-gte-4.0.1-and-lt-6
2 parents 71cdef1 + daf15a0 commit ed421ae

201 files changed

Lines changed: 17333 additions & 6537 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/settings.json

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"permissions": {
3+
"allow": [
4+
"mcp__claude_ai_Atlassian__getConfluencePage",
5+
"mcp__claude_ai_Atlassian__getVisibleJiraProjects",
6+
"mcp__claude_ai_Atlassian__getAccessibleAtlassianResources",
7+
"mcp__claude_ai_Atlassian__getCompassComponent",
8+
"mcp__claude_ai_Atlassian__getJiraIssue",
9+
"mcp__claude_ai_Atlassian__searchJiraIssuesUsingJql",
10+
"mcp__claude_ai_Atlassian__search",
11+
"mcp__claude_ai_Atlassian__getConfluenceSpaces",
12+
"mcp__claude_ai_Atlassian__getPagesInConfluenceSpace",
13+
"mcp__claude-in-chrome__read_page",
14+
"mcp__claude-in-chrome__get_page_text",
15+
"mcp__claude-in-chrome__tabs_context_mcp",
16+
"Bash(make lint)",
17+
"Bash(make lint_fix)",
18+
"Bash(make test_unit)",
19+
"Bash(make test_integration)",
20+
"Bash(make audit)",
21+
"Bash(gh label list *)",
22+
"Bash(gh search *)"
23+
]
24+
},
25+
"enableAllProjectMcpServers": true,
26+
"enabledMcpjsonServers": [],
27+
"extraKnownMarketplaces": {
28+
"aignostics-claude-plugins": {
29+
"source": {
30+
"source": "github",
31+
"repo": "aignostics/claude-plugins"
32+
},
33+
"autoUpdate": true
34+
}
35+
},
36+
"enabledPlugins": {
37+
"qms@aignostics-claude-plugins": true
38+
}
39+
}

.github/CLAUDE.md

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ This file provides comprehensive guidance for Claude Code and human engineers wo
66

77
The Aignostics Python SDK uses a **sophisticated multi-stage CI/CD pipeline** built on GitHub Actions with:
88

9-
* **19 workflow files** (8 entry points + 11 reusable workflows)
9+
* **Multiple workflow files**, including both entry-point and reusable workflows
1010
* **Reusable workflow architecture** for modularity and maintainability
1111
* **Environment-based testing** (staging/production with scheduled validation)
1212
* **Multi-category test execution** (unit, integration, e2e, long_running, very_long_running, scheduled)
@@ -21,7 +21,7 @@ The Aignostics Python SDK uses a **sophisticated multi-stage CI/CD pipeline** bu
2121
```text
2222
┌─────────────────────────────────────────────────────────────────────┐
2323
│ ci-cd.yml (Main Orchestrator) │
24-
Triggered on: push to main, PR, release, tag v*.*.*
24+
│ Triggered on: push to main/release/v*, PR, release, tag v*.*.* │
2525
├─────────────────────────────────────────────────────────────────────┤
2626
│ │
2727
│ ┌────────┐ ┌───────┐ ┌────────────────┐ ┌────────┐ │
@@ -56,6 +56,9 @@ The Aignostics Python SDK uses a **sophisticated multi-stage CI/CD pipeline** bu
5656
┌───────────────────────────────────────────────────────────────┐
5757
│ Parallel Entry Points │
5858
├───────────────────────────────────────────────────────────────┤
59+
│ prepare-release.yml → Create release branch │
60+
│ publish-release.yml → Tag + changelog → CI/CD publish │
61+
│ merge-release.yml → Merge branch into main │
5962
│ build-native-only.yml → Native executables (6 platforms) │
6063
│ claude-code-*.yml → PR reviews + interactive sessions │
6164
│ test-scheduled-*.yml → Staging (6h) + Production (24h) │
@@ -70,7 +73,10 @@ The Aignostics Python SDK uses a **sophisticated multi-stage CI/CD pipeline** bu
7073

7174
| Workflow | Triggers | Purpose | Calls |
7275
|----------|----------|---------|-------|
73-
| **ci-cd.yml** | push(main), PR, release, tag | Main CI/CD pipeline | _lint,_audit, _test,_codeql, _ketryx,_package-publish, _docker-publish |
76+
| **ci-cd.yml** | push(main, release/v*), PR, release, tag | Main CI/CD pipeline | _lint,_audit, _test,_codeql, _ketryx,_package-publish, _docker-publish |
77+
| **prepare-release.yml** | workflow_dispatch | Create release branch + bump version ||
78+
| **publish-release.yml** | workflow_dispatch | Generate changelog, tag, push → CI/CD ||
79+
| **merge-release.yml** | workflow_dispatch | Merge release branch into main ||
7480
| **build-native-only.yml** | push, PR, release (if msg contains `build:native:only`) | Native executable builds | _build-native-only |
7581
| **claude-code-interactive.yml** | workflow_dispatch (manual) | Manual Claude sessions | _claude-code (interactive) |
7682
| **claude-code-automation-pr-review.yml** | PR opened/sync (excludes bots) | Automated PR reviews | _claude-code (automation) |
@@ -379,7 +385,6 @@ uv run pytest -m "(scheduled or scheduled_only)" -v
379385
* `build:native:only` - Only build native executables
380386
* `skip:test:long_running` - Skip long-running tests
381387
* `enable:test:very_long_running` - Enable very long running tests
382-
* `Bump version:` - Skip CI (version bump commits)
383388

384389
**Usage**:
385390

@@ -398,6 +403,7 @@ git commit -m "fix: issue skip:test:long_running"
398403
**Triggers**:
399404

400405
* `push` to `main` branch
406+
* `push` to `release/v*` branches (release branch CI)
401407
* `pull_request` to `main` (opened, synchronize, reopened)
402408
* `release` created
403409
* `tags` matching `v*.*.*`
@@ -415,7 +421,6 @@ Cancels in-progress runs when new commits are pushed to same PR/branch.
415421
416422
* Commit message contains `skip:ci`
417423
* Commit message contains `build:native:only`
418-
* Commit starts with `Bump version:`
419424
* PR has label `skip:ci` or `build:native:only`
420425

421426
**Job Dependencies**:
@@ -1006,26 +1011,39 @@ make dist_native
10061011

10071012
### Releasing a Version
10081013

1009-
1. Ensure `main` branch is clean and all tests pass
1010-
2. Run version bump:
1014+
Releases use a four-phase workflow triggered from the developer's machine via `gh workflow run`. This lets Ketryx compliance approvals be collected *before* the tag (and thus before publishing to PyPI).
10111015

1012-
```bash
1013-
make bump patch # or minor, major
1014-
```
1016+
**Phase 1 — Prepare the release branch** (triggers `prepare-release.yml`):
10151017

1016-
3. This creates a commit and git tag
1017-
4. Push with tags:
1018+
```bash
1019+
make prepare-release 1.2.3 # explicit version
1020+
```
1021+
1022+
Creates `release/vX.Y.Z` from `main`, commits version bump + `uv.lock`, pushes. CI runs on the branch automatically.
1023+
1024+
**Phase 2 — Collect Ketryx approvals:**
1025+
1026+
Point the Ketryx release to `release/vX.Y.Z` and collect approvals. Ensure CI is green.
1027+
1028+
**Phase 3 — Publish** (triggers `publish-release.yml`):
1029+
1030+
```bash
1031+
make publish-release # auto-detects release/v* branch
1032+
make publish-release release/v1.2.3 # explicit branch
1033+
```
1034+
1035+
Generates `CHANGELOG.md`, creates annotated `vX.Y.Z` tag, pushes → CI/CD fires on tag → Ketryx check must pass before PyPI publish.
1036+
1037+
**Phase 4 — Merge back to main** (triggers `merge-release.yml`):
1038+
1039+
```bash
1040+
make merge-release # auto-detects release/v* branch
1041+
make merge-release release/v1.2.3 # explicit branch
1042+
```
10181043

1019-
```bash
1020-
git push --follow-tags
1021-
```
1044+
Merges `release/vX.Y.Z` into `main` with `--no-ff`, pushes `main`, deletes the release branch.
10221045

1023-
5. CI detects tag and triggers:
1024-
* Full CI pipeline (lint, audit, test, CodeQL)
1025-
* Package build and publish to PyPI
1026-
* Docker image build and publish
1027-
* GitHub release creation
1028-
* Slack notification to team
1046+
**Note on branch protection**: `release/v*` branches should be protected so that only the GitHub Actions bot (`aignostics-release-bot[bot]`) can push to them. This enforces the server-side workflow. Configure in GitHub Settings → Branches → Branch protection rules.
10291047

10301048
### Manual Testing with Claude
10311049

@@ -1070,6 +1088,9 @@ make dist_native
10701088
| File | Type | Purpose | Duration |
10711089
|------|------|---------|----------|
10721090
| `ci-cd.yml` | Entry | Main pipeline orchestration | ~20 min |
1091+
| `prepare-release.yml` | Entry | Create release branch + bump version | ~2 min |
1092+
| `publish-release.yml` | Entry | Generate changelog, create tag, push | ~2 min |
1093+
| `merge-release.yml` | Entry | Merge release branch into main | ~1 min |
10731094
| `build-native-only.yml` | Entry | Native build trigger | ~60 min (6 platforms) |
10741095
| `claude-code-interactive.yml` | Entry | Manual Claude sessions | varies |
10751096
| `claude-code-automation-pr-review.yml` | Entry | Automated PR reviews | ~10 min |

.github/CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# aignostics code owners
22

3-
* @helmut-hoffer-von-ankershoffen
3+
* @aignostics/be-tada @helmut-hoffer-von-ankershoffen
44

55
# Reference: <https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners>

.github/actions/run-tests/action.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,12 @@ runs:
3030
(!contains(inputs.commit-message, 'skip:test:all')) &&
3131
(!contains(github.event.pull_request.labels.*.name, 'skip:test:all'))
3232
shell: bash
33+
env:
34+
MAKE_TARGET: ${{ inputs.make-target }}
35+
SUMMARY_TITLE: ${{ inputs.summary-title }}
3336
run: |
3437
set +e
35-
make ${{ inputs.make-target }}
38+
make $MAKE_TARGET
3639
EXIT_CODE=$?
3740
# Show test execution in GitHub Job summary
3841
found_files=0
@@ -44,7 +47,7 @@ runs:
4447
fi
4548
done
4649
if [ $found_files -eq 0 ]; then
47-
echo "# ${{ inputs.summary-title }}" >> $GITHUB_STEP_SUMMARY
50+
echo "# $SUMMARY_TITLE" >> $GITHUB_STEP_SUMMARY
4851
echo "" >> $GITHUB_STEP_SUMMARY
4952
fi
5053
# Show test coverage in GitHub Job summary

.github/dependabot.yml

Lines changed: 0 additions & 26 deletions
This file was deleted.

.github/labels.yml

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,76 @@
133133
- name: documentation-drift
134134
description: Documentation out of sync with code
135135
color: "ff6b6b"
136+
137+
# SOP Labels — governance trail on every PR (one mandatory)
138+
- name: sop:pr-sop-01
139+
description: PR-SOP-01 Problem Resolution (bug / anomaly fix)
140+
color: "5319e7"
141+
142+
- name: sop:cc-sop-01
143+
description: CC-SOP-01 Change Control (feature / planned change)
144+
color: "1d76db"
145+
146+
# Type Labels — conventional-commits taxonomy (one per PR)
147+
# Extends the legacy `bug` / `documentation` / `enhancement` labels with
148+
# the rest of the conventional-commit vocabulary. Legacy labels remain
149+
# for backward-compatibility with issue templates and external tooling;
150+
# the `type:*` namespace is the source of truth for PR-level filtering.
151+
- name: type:feature
152+
description: New functionality (conventional feat)
153+
color: "a2eeef"
154+
155+
- name: type:fix
156+
description: Bug fix (conventional fix)
157+
color: "d73a4a"
158+
159+
- name: type:chore
160+
description: Tooling, maintenance, routine task (conventional chore)
161+
color: "c5def5"
162+
163+
- name: type:refactor
164+
description: Refactor without behaviour change
165+
color: "fbca04"
166+
167+
- name: type:docs
168+
description: Documentation-only change
169+
color: "0075ca"
170+
171+
- name: type:test
172+
description: Test-only change
173+
color: "006b75"
174+
175+
- name: type:perf
176+
description: Performance improvement
177+
color: "4b0082"
178+
179+
- name: type:build
180+
description: Build / packaging change
181+
color: "5319e7"
182+
183+
- name: type:ci
184+
description: CI/CD change
185+
color: "000000"
186+
187+
# Security Labels — orthogonal axis (0–2 per PR)
188+
- name: security
189+
description: Addresses a security advisory, CVE, or hardens security posture
190+
color: "b60205"
191+
192+
- name: security:supply-chain
193+
description: Supply-chain (dependency) vulnerability remediation
194+
color: "d93f0b"
195+
196+
# Scope Labels — who the change affects (0–1 per PR)
197+
- name: scope:sdk-consumers
198+
description: Affects downstream SDK consumers (uvx aignostics / uv add aignostics)
199+
color: "0e8a16"
200+
201+
- name: scope:dev-only
202+
description: Affects only our dev/CI env; consumers unaffected
203+
color: "bfdadc"
204+
205+
# Automation Labels
206+
- name: auto-merge
207+
description: Eligible for auto-merge once CI is green
208+
color: "0e8a16"

.github/workflows/_audit.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ jobs:
1313
packages: read
1414
steps:
1515
- name: Checkout
16-
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
16+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
1717
with:
1818
fetch-depth: 0
1919

2020
- name: Install uv
21-
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
21+
uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
2222
with:
2323
version-file: "pyproject.toml"
2424
enable-cache: true
@@ -37,7 +37,7 @@ jobs:
3737
run: make audit
3838

3939
- name: Upload audit results
40-
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
40+
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
4141
if: ${{ always() && (env.GITHUB_WORKFLOW_RUNTIME != 'ACT') }}
4242
with:
4343
name: audit-results

.github/workflows/_build-native-only.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ jobs:
3939

4040
steps:
4141
- name: Checkout
42-
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
42+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
4343
with:
4444
fetch-depth: 0
4545

4646
- name: Install uv
47-
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
47+
uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
4848
with:
4949
version-file: "pyproject.toml"
5050
enable-cache: true
@@ -61,7 +61,7 @@ jobs:
6161
run: make dist_native
6262

6363
- name: Upload dist_native artifacts
64-
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
64+
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
6565
if: ${{ always() && (env.GITHUB_WORKFLOW_RUNTIME != 'ACT') }}
6666
with:
6767
name: dist_native-${{ matrix.runner }}

.github/workflows/_claude-code.yml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@ jobs:
4646
actions: read # Required for Claude to read CI results on PRs
4747
steps:
4848
- name: Checkout repository
49-
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
49+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
5050
with:
5151
fetch-depth: ${{ inputs.mode == 'interactive' && 0 || 1 }}
5252

5353
- name: Install uv
54-
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
54+
uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
5555
with:
5656
version-file: "pyproject.toml"
5757
enable-cache: true
@@ -66,7 +66,7 @@ jobs:
6666
run: uv sync --all-extras --frozen --link-mode=copy
6767

6868
- name: Setup display
69-
uses: pyvista/setup-headless-display-action@7d84ae825e6d9297a8e99bdbbae20d1b919a0b19 # v4.2
69+
uses: pyvista/setup-headless-display-action@5bc8de3bc71fcda7a96439571287a554901541a0 # v4.3
7070

7171
- name: Print development version info
7272
if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
@@ -77,9 +77,8 @@ jobs:
7777
7878
- name: Run Claude Code (Interactive Mode)
7979
if: inputs.mode == 'interactive'
80-
uses: anthropics/claude-code-action@v1
80+
uses: anthropics/claude-code-action@6e2bd52842c65e914eba5c8badd17560bd26b5de # v1.0.89
8181
with:
82-
github_token: ${{ secrets.GITHUB_TOKEN }}
8382
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
8483
track_progress: ${{ inputs.track_progress }}
8584
additional_permissions: |
@@ -93,9 +92,8 @@ jobs:
9392
9493
- name: Run Claude Code (Automation Mode)
9594
if: inputs.mode == 'automation'
96-
uses: anthropics/claude-code-action@v1.0.29
95+
uses: anthropics/claude-code-action@6e2bd52842c65e914eba5c8badd17560bd26b5de # v1.0.89
9796
with:
98-
github_token: ${{ secrets.GITHUB_TOKEN }}
9997
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
10098
track_progress: ${{ inputs.track_progress }}
10199
use_sticky_comment: ${{ inputs.use_sticky_comment }}

0 commit comments

Comments
 (0)