groundcrew 0.1.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.
- groundcrew-0.1.0/.aider.conf.yml +18 -0
- groundcrew-0.1.0/.claude/commands/domain.md +11 -0
- groundcrew-0.1.0/.claude/commands/pr-prep.md +18 -0
- groundcrew-0.1.0/.claude/commands/release.md +21 -0
- groundcrew-0.1.0/.claude/commands/test.md +14 -0
- groundcrew-0.1.0/.coderabbit.yaml +17 -0
- groundcrew-0.1.0/.continue/config.json +29 -0
- groundcrew-0.1.0/.cursor/rules/project.mdc +32 -0
- groundcrew-0.1.0/.editorconfig +24 -0
- groundcrew-0.1.0/.github/CODEOWNERS +1 -0
- groundcrew-0.1.0/.github/FUNDING.yml +1 -0
- groundcrew-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +42 -0
- groundcrew-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +28 -0
- groundcrew-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +31 -0
- groundcrew-0.1.0/.github/copilot-instructions.md +34 -0
- groundcrew-0.1.0/.github/dependabot.yml +15 -0
- groundcrew-0.1.0/.github/labels.yml +98 -0
- groundcrew-0.1.0/.github/release-drafter.yml +58 -0
- groundcrew-0.1.0/.github/workflows/ci.yml +81 -0
- groundcrew-0.1.0/.github/workflows/codeql.yml +32 -0
- groundcrew-0.1.0/.github/workflows/docs.yml +53 -0
- groundcrew-0.1.0/.github/workflows/release-drafter.yml +24 -0
- groundcrew-0.1.0/.github/workflows/release.yml +75 -0
- groundcrew-0.1.0/.github/workflows/stale.yml +25 -0
- groundcrew-0.1.0/.gitignore +27 -0
- groundcrew-0.1.0/.pre-commit-config.yaml +25 -0
- groundcrew-0.1.0/.windsurfrules +21 -0
- groundcrew-0.1.0/AGENTS.md +30 -0
- groundcrew-0.1.0/ARCHITECTURE.md +136 -0
- groundcrew-0.1.0/CHANGELOG.md +24 -0
- groundcrew-0.1.0/CITATION.cff +20 -0
- groundcrew-0.1.0/CLAUDE.md +20 -0
- groundcrew-0.1.0/CODEX.md +41 -0
- groundcrew-0.1.0/CODE_OF_CONDUCT.md +40 -0
- groundcrew-0.1.0/CONTRIBUTING.md +80 -0
- groundcrew-0.1.0/LICENSE +21 -0
- groundcrew-0.1.0/Makefile +39 -0
- groundcrew-0.1.0/PKG-INFO +327 -0
- groundcrew-0.1.0/README.md +267 -0
- groundcrew-0.1.0/SECURITY.md +19 -0
- groundcrew-0.1.0/action.yml +26 -0
- groundcrew-0.1.0/assets/demo.tape +19 -0
- groundcrew-0.1.0/assets/hero.png +0 -0
- groundcrew-0.1.0/assets/logo.png +0 -0
- groundcrew-0.1.0/codecov.yml +19 -0
- groundcrew-0.1.0/docs/api-reference.md +16 -0
- groundcrew-0.1.0/docs/architecture.md +18 -0
- groundcrew-0.1.0/docs/changelog.md +3 -0
- groundcrew-0.1.0/docs/cli-reference.md +18 -0
- groundcrew-0.1.0/docs/contributing.md +30 -0
- groundcrew-0.1.0/docs/github-action.md +21 -0
- groundcrew-0.1.0/docs/how-it-works.md +17 -0
- groundcrew-0.1.0/docs/index.md +36 -0
- groundcrew-0.1.0/docs/mcp.md +38 -0
- groundcrew-0.1.0/docs/openai.md +27 -0
- groundcrew-0.1.0/docs/quickstart.md +23 -0
- groundcrew-0.1.0/examples/demo.py +81 -0
- groundcrew-0.1.0/mkdocs.yml +93 -0
- groundcrew-0.1.0/openapi.yaml +38 -0
- groundcrew-0.1.0/pyproject.toml +105 -0
- groundcrew-0.1.0/smoke_test.py +602 -0
- groundcrew-0.1.0/src/groundcrew/__init__.py +22 -0
- groundcrew-0.1.0/src/groundcrew/api.py +110 -0
- groundcrew-0.1.0/src/groundcrew/cli.py +113 -0
- groundcrew-0.1.0/src/groundcrew/codec.py +85 -0
- groundcrew-0.1.0/src/groundcrew/mcp_server.py +154 -0
- groundcrew-0.1.0/src/groundcrew/oracle.py +92 -0
- groundcrew-0.1.0/src/groundcrew/py.typed +0 -0
- groundcrew-0.1.0/src/groundcrew/report.py +67 -0
- groundcrew-0.1.0/src/groundcrew/snapshot.py +131 -0
- groundcrew-0.1.0/tests/__init__.py +0 -0
- groundcrew-0.1.0/tests/conftest.py +1 -0
- groundcrew-0.1.0/tests/test_api.py +94 -0
- groundcrew-0.1.0/tests/test_cli.py +26 -0
- groundcrew-0.1.0/tests/test_cli_runner.py +106 -0
- groundcrew-0.1.0/tests/test_codec.py +74 -0
- groundcrew-0.1.0/tests/test_mcp.py +72 -0
- groundcrew-0.1.0/tests/test_oracle.py +126 -0
- groundcrew-0.1.0/tests/test_report.py +125 -0
- groundcrew-0.1.0/tests/test_snapshot.py +161 -0
- groundcrew-0.1.0/tools/openai-tools.json +21 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# aider configuration for groundcrew
|
|
2
|
+
# https://aider.chat/docs/config/aider_conf.html
|
|
3
|
+
|
|
4
|
+
read:
|
|
5
|
+
- ARCHITECTURE.md
|
|
6
|
+
- CLAUDE.md
|
|
7
|
+
- src/groundcrew/__init__.py
|
|
8
|
+
|
|
9
|
+
lint: true
|
|
10
|
+
lint-cmd: "ruff check {files} && ruff format --check {files}"
|
|
11
|
+
|
|
12
|
+
auto-test: false
|
|
13
|
+
test-cmd: "pytest tests/ -x -q"
|
|
14
|
+
|
|
15
|
+
model: claude-sonnet-4-5
|
|
16
|
+
|
|
17
|
+
attribute-author: false
|
|
18
|
+
attribute-co-author: true
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Domain-specific slash commands for groundcrew.
|
|
2
|
+
|
|
3
|
+
Replace this file with commands that match the tool's core operations.
|
|
4
|
+
See agentdelta's .claude/commands/ for reference examples:
|
|
5
|
+
- diff.md — runs the primary comparison operation
|
|
6
|
+
- inspect.md — inspects a single artifact
|
|
7
|
+
- record.md — generates recording boilerplate
|
|
8
|
+
- add-adapter.md — scaffolds a new framework adapter
|
|
9
|
+
|
|
10
|
+
Naming convention: /project:<verb> where verb describes what it does,
|
|
11
|
+
not what it is. "diff" not "agentdelta", "record" not "trace".
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Run the full pre-PR checklist and report what's ready and what needs fixing.
|
|
2
|
+
|
|
3
|
+
Steps:
|
|
4
|
+
1. Run lint: `make lint` (ruff check + ruff format --check)
|
|
5
|
+
2. Run type check: `make typecheck` (mypy)
|
|
6
|
+
3. Run tests: `make test` (pytest with coverage)
|
|
7
|
+
4. Check CHANGELOG.md has an entry under [Unreleased] for this change
|
|
8
|
+
5. Check that no debug print() statements or TODO comments were left in modified files
|
|
9
|
+
|
|
10
|
+
Report in this format:
|
|
11
|
+
✅ Lint — clean
|
|
12
|
+
✅ Types — clean
|
|
13
|
+
✅ Tests — 43 passed, 87% coverage
|
|
14
|
+
⚠️ CHANGELOG — no [Unreleased] entry found
|
|
15
|
+
✅ No debug artifacts
|
|
16
|
+
|
|
17
|
+
If anything fails, show the exact error and the file:line to fix.
|
|
18
|
+
Do not mark the PR ready until all 5 checks pass.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
Prepare a release: bump version, finalize CHANGELOG, and show the git tag command.
|
|
2
|
+
|
|
3
|
+
Usage: /project:release <version> (e.g. /project:release 0.2.0)
|
|
4
|
+
|
|
5
|
+
Steps:
|
|
6
|
+
1. Verify all checks pass: lint, typecheck, tests (run make all)
|
|
7
|
+
2. In CHANGELOG.md:
|
|
8
|
+
- Rename [Unreleased] to [<version>] - <today's date in YYYY-MM-DD>
|
|
9
|
+
- Add a new empty [Unreleased] section at the top
|
|
10
|
+
- Update the comparison links at the bottom
|
|
11
|
+
3. In pyproject.toml: set version = "<version>"
|
|
12
|
+
4. Show the git commands needed (do NOT run them):
|
|
13
|
+
```
|
|
14
|
+
git add CHANGELOG.md pyproject.toml
|
|
15
|
+
git commit -m "chore: release v<version>"
|
|
16
|
+
git tag v<version>
|
|
17
|
+
git push origin main --tags
|
|
18
|
+
```
|
|
19
|
+
5. Note: the GitHub Actions release.yml will auto-publish to PyPI on tag push.
|
|
20
|
+
|
|
21
|
+
Do NOT push or tag without explicit user confirmation.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Run the full test suite with coverage and report results.
|
|
2
|
+
|
|
3
|
+
Steps:
|
|
4
|
+
1. Run: `make test`
|
|
5
|
+
(equivalent to: `pytest tests/ --cov=<name> --cov-report=term-missing`)
|
|
6
|
+
2. Report:
|
|
7
|
+
- Total tests, passed, failed, skipped
|
|
8
|
+
- Coverage percentage — flag if below 85%
|
|
9
|
+
- Any failing tests: show the test name, error message, and the relevant source line
|
|
10
|
+
3. If any tests fail, diagnose the root cause before suggesting a fix:
|
|
11
|
+
- Is it a logic error in the implementation?
|
|
12
|
+
- Is it a test that needs updating due to an intentional behavior change?
|
|
13
|
+
- Is it a missing edge case?
|
|
14
|
+
4. Do NOT suggest disabling or skipping tests to make the suite pass.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
language: en
|
|
2
|
+
early_access: false
|
|
3
|
+
reviews:
|
|
4
|
+
profile: chill
|
|
5
|
+
request_changes_workflow: false
|
|
6
|
+
high_level_summary: true
|
|
7
|
+
poem: false
|
|
8
|
+
review_status: true
|
|
9
|
+
collapse_walkthrough: false
|
|
10
|
+
auto_review:
|
|
11
|
+
enabled: true
|
|
12
|
+
drafts: false
|
|
13
|
+
path_filters:
|
|
14
|
+
- "!assets/**"
|
|
15
|
+
- "!*.md"
|
|
16
|
+
chat:
|
|
17
|
+
auto_reply: true
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "groundcrew",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"schema": "v1",
|
|
5
|
+
"context": [
|
|
6
|
+
{"provider": "file", "params": {"nRetrieve": 20, "nFinal": 5}},
|
|
7
|
+
{"provider": "code"}
|
|
8
|
+
],
|
|
9
|
+
"docs": [
|
|
10
|
+
{
|
|
11
|
+
"title": "groundcrew Architecture",
|
|
12
|
+
"startUrl": "file://./ARCHITECTURE.md",
|
|
13
|
+
"faviconUrl": ""
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"customCommands": [
|
|
17
|
+
{
|
|
18
|
+
"name": "explain",
|
|
19
|
+
"prompt": "Explain how this part of groundcrew works: {input}. Use the module map in AGENTS.md as context.",
|
|
20
|
+
"description": "Explain a part of the codebase"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"rules": [
|
|
24
|
+
"This is groundcrew — Deterministic state oracle and semantic action codec for computer-use agents.",
|
|
25
|
+
"Library code must not use print() — use rich.console.Console.",
|
|
26
|
+
"All public API must have type annotations and docstrings.",
|
|
27
|
+
"Tests use pytest. CLI tests use click.testing.CliRunner."
|
|
28
|
+
]
|
|
29
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: groundcrew coding rules and architecture context
|
|
3
|
+
globs: ["src/**/*.py", "tests/**/*.py"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# groundcrew — Cursor Rules
|
|
8
|
+
|
|
9
|
+
## What this project does
|
|
10
|
+
Deterministic state oracle and semantic action codec for computer-use agents
|
|
11
|
+
|
|
12
|
+
## Module map
|
|
13
|
+
```
|
|
14
|
+
src/groundcrew/
|
|
15
|
+
├── # TODO: fill in after implementation
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Invariants — never break these
|
|
19
|
+
- TODO: list invariants
|
|
20
|
+
|
|
21
|
+
## Code style
|
|
22
|
+
- Python 3.10+, fully type-annotated, mypy strict mode
|
|
23
|
+
- Ruff lint rules: E W F I UP B S N SIM RUF PT
|
|
24
|
+
- No print() in library code — use rich.console.Console
|
|
25
|
+
- All public functions and classes must have docstrings
|
|
26
|
+
- Tests: pytest, CliRunner for CLI tests
|
|
27
|
+
|
|
28
|
+
## When adding a new feature
|
|
29
|
+
1. Implement in the appropriate module
|
|
30
|
+
2. Export from __init__.py, add to __all__ alphabetically
|
|
31
|
+
3. Add tests in tests/test_<module>.py
|
|
32
|
+
4. Update CHANGELOG.md under [Unreleased]
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
root = true
|
|
2
|
+
|
|
3
|
+
[*]
|
|
4
|
+
indent_style = space
|
|
5
|
+
indent_size = 4
|
|
6
|
+
end_of_line = lf
|
|
7
|
+
charset = utf-8
|
|
8
|
+
trim_trailing_whitespace = true
|
|
9
|
+
insert_final_newline = true
|
|
10
|
+
|
|
11
|
+
[*.yml]
|
|
12
|
+
indent_size = 2
|
|
13
|
+
|
|
14
|
+
[*.yaml]
|
|
15
|
+
indent_size = 2
|
|
16
|
+
|
|
17
|
+
[*.toml]
|
|
18
|
+
indent_size = 4
|
|
19
|
+
|
|
20
|
+
[*.md]
|
|
21
|
+
trim_trailing_whitespace = false
|
|
22
|
+
|
|
23
|
+
[Makefile]
|
|
24
|
+
indent_style = tab
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* @sandeep-alluru
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
github: sandeep-alluru
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: Bug Report
|
|
2
|
+
description: Something is broken
|
|
3
|
+
labels: ["bug"]
|
|
4
|
+
body:
|
|
5
|
+
- type: input
|
|
6
|
+
id: version
|
|
7
|
+
attributes:
|
|
8
|
+
label: groundcrew version
|
|
9
|
+
placeholder: "0.1.0"
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
|
|
13
|
+
- type: input
|
|
14
|
+
id: python
|
|
15
|
+
attributes:
|
|
16
|
+
label: Python version
|
|
17
|
+
placeholder: "3.11.5"
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
|
|
21
|
+
- type: textarea
|
|
22
|
+
id: command
|
|
23
|
+
attributes:
|
|
24
|
+
label: Command / code that triggered the bug
|
|
25
|
+
render: bash
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
28
|
+
|
|
29
|
+
- type: textarea
|
|
30
|
+
id: expected
|
|
31
|
+
attributes:
|
|
32
|
+
label: Expected behavior
|
|
33
|
+
validations:
|
|
34
|
+
required: true
|
|
35
|
+
|
|
36
|
+
- type: textarea
|
|
37
|
+
id: actual
|
|
38
|
+
attributes:
|
|
39
|
+
label: Actual behavior (include full traceback)
|
|
40
|
+
render: text
|
|
41
|
+
validations:
|
|
42
|
+
required: true
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Feature Request
|
|
2
|
+
description: Propose a new feature
|
|
3
|
+
labels: ["enhancement"]
|
|
4
|
+
body:
|
|
5
|
+
- type: textarea
|
|
6
|
+
id: problem
|
|
7
|
+
attributes:
|
|
8
|
+
label: Problem
|
|
9
|
+
validations:
|
|
10
|
+
required: true
|
|
11
|
+
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: solution
|
|
14
|
+
attributes:
|
|
15
|
+
label: Proposed solution
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
|
|
19
|
+
- type: dropdown
|
|
20
|
+
id: contribution
|
|
21
|
+
attributes:
|
|
22
|
+
label: Are you willing to implement this?
|
|
23
|
+
options:
|
|
24
|
+
- "Yes — I'll open a PR"
|
|
25
|
+
- "Maybe — if someone helps"
|
|
26
|
+
- "No — just requesting"
|
|
27
|
+
validations:
|
|
28
|
+
required: true
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
## What changed
|
|
2
|
+
|
|
3
|
+
<!-- One paragraph summary -->
|
|
4
|
+
|
|
5
|
+
## Why
|
|
6
|
+
|
|
7
|
+
Closes #
|
|
8
|
+
|
|
9
|
+
## Type of change
|
|
10
|
+
|
|
11
|
+
- [ ] `fix:` Bug fix
|
|
12
|
+
- [ ] `feat:` New feature
|
|
13
|
+
- [ ] `refactor:` No behavior change
|
|
14
|
+
- [ ] `docs:` Documentation only
|
|
15
|
+
- [ ] `test:` Tests only
|
|
16
|
+
- [ ] `chore:` Deps, CI, tooling
|
|
17
|
+
- [ ] `perf:` Performance
|
|
18
|
+
|
|
19
|
+
## Testing done
|
|
20
|
+
|
|
21
|
+
- [ ] `make test` passes
|
|
22
|
+
- [ ] `make lint` passes
|
|
23
|
+
- [ ] `make typecheck` passes
|
|
24
|
+
- [ ] New tests added
|
|
25
|
+
|
|
26
|
+
## Checklist
|
|
27
|
+
|
|
28
|
+
- [ ] `CHANGELOG.md` updated under `[Unreleased]`
|
|
29
|
+
- [ ] Public API changes have docstrings
|
|
30
|
+
- [ ] No secrets committed
|
|
31
|
+
- [ ] README updated if CLI/behavior changed
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# GitHub Copilot Instructions — groundcrew
|
|
2
|
+
|
|
3
|
+
groundcrew: Deterministic state oracle and semantic action codec for computer-use agents
|
|
4
|
+
|
|
5
|
+
## Module map
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
src/groundcrew/
|
|
9
|
+
├── # TODO: fill in after implementation
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Key invariants
|
|
13
|
+
|
|
14
|
+
- TODO: document invariants
|
|
15
|
+
|
|
16
|
+
## Code style
|
|
17
|
+
|
|
18
|
+
- Python 3.10+, type-annotated, mypy strict mode
|
|
19
|
+
- Ruff lint rules: E W F I UP B S N SIM RUF PT; ignore S101 (assert in tests), N806
|
|
20
|
+
- No `print()` in library code — use `rich.console.Console`
|
|
21
|
+
- All public classes and functions must have docstrings
|
|
22
|
+
- Tests use `pytest`; CLI tests use `click.testing.CliRunner`
|
|
23
|
+
|
|
24
|
+
## Adding a new output format
|
|
25
|
+
|
|
26
|
+
1. Add `to_<format>(result) -> str` in `report.py`
|
|
27
|
+
2. Add format name to `--format` choices in `cli.py`
|
|
28
|
+
3. Add tests
|
|
29
|
+
|
|
30
|
+
## Adding a new adapter / integration
|
|
31
|
+
|
|
32
|
+
1. Create `src/groundcrew/instrument_<framework>.py`
|
|
33
|
+
2. Export from `__init__.py`, add to `__all__` alphabetically
|
|
34
|
+
3. Add tests
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: pip
|
|
4
|
+
directory: /
|
|
5
|
+
schedule:
|
|
6
|
+
interval: weekly
|
|
7
|
+
open-pull-requests-limit: 5
|
|
8
|
+
labels: [dependencies]
|
|
9
|
+
|
|
10
|
+
- package-ecosystem: github-actions
|
|
11
|
+
directory: /
|
|
12
|
+
schedule:
|
|
13
|
+
interval: weekly
|
|
14
|
+
open-pull-requests-limit: 5
|
|
15
|
+
labels: [dependencies, ci]
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Bug reports
|
|
2
|
+
- name: bug
|
|
3
|
+
color: "d73a4a"
|
|
4
|
+
description: "Something isn't working"
|
|
5
|
+
|
|
6
|
+
- name: fix
|
|
7
|
+
color: "d73a4a"
|
|
8
|
+
description: "A bug fix"
|
|
9
|
+
|
|
10
|
+
# Features
|
|
11
|
+
- name: enhancement
|
|
12
|
+
color: "a2eeef"
|
|
13
|
+
description: "New feature or request"
|
|
14
|
+
|
|
15
|
+
- name: feature
|
|
16
|
+
color: "a2eeef"
|
|
17
|
+
description: "New feature"
|
|
18
|
+
|
|
19
|
+
- name: feat
|
|
20
|
+
color: "a2eeef"
|
|
21
|
+
description: "New feature (conventional commit)"
|
|
22
|
+
|
|
23
|
+
# Documentation
|
|
24
|
+
- name: documentation
|
|
25
|
+
color: "0075ca"
|
|
26
|
+
description: "Improvements or additions to documentation"
|
|
27
|
+
|
|
28
|
+
- name: docs
|
|
29
|
+
color: "0075ca"
|
|
30
|
+
description: "Documentation update"
|
|
31
|
+
|
|
32
|
+
# Maintenance
|
|
33
|
+
- name: chore
|
|
34
|
+
color: "e4e669"
|
|
35
|
+
description: "Build process, dependencies, or tooling"
|
|
36
|
+
|
|
37
|
+
- name: dependencies
|
|
38
|
+
color: "0366d6"
|
|
39
|
+
description: "Pull requests that update a dependency"
|
|
40
|
+
|
|
41
|
+
- name: ci
|
|
42
|
+
color: "e4e669"
|
|
43
|
+
description: "CI/CD changes"
|
|
44
|
+
|
|
45
|
+
- name: refactor
|
|
46
|
+
color: "fef2c0"
|
|
47
|
+
description: "Code refactoring without behavior change"
|
|
48
|
+
|
|
49
|
+
# Tests
|
|
50
|
+
- name: test
|
|
51
|
+
color: "bfd4f2"
|
|
52
|
+
description: "Adding missing tests or correcting existing tests"
|
|
53
|
+
|
|
54
|
+
# Version bumps
|
|
55
|
+
- name: major
|
|
56
|
+
color: "ee0701"
|
|
57
|
+
description: "Breaking change — bumps major version"
|
|
58
|
+
|
|
59
|
+
- name: minor
|
|
60
|
+
color: "fbca04"
|
|
61
|
+
description: "Non-breaking new feature — bumps minor version"
|
|
62
|
+
|
|
63
|
+
- name: patch
|
|
64
|
+
color: "0075ca"
|
|
65
|
+
description: "Backwards compatible bug fix — bumps patch version"
|
|
66
|
+
|
|
67
|
+
# Meta
|
|
68
|
+
- name: good first issue
|
|
69
|
+
color: "7057ff"
|
|
70
|
+
description: "Good for newcomers"
|
|
71
|
+
|
|
72
|
+
- name: help wanted
|
|
73
|
+
color: "008672"
|
|
74
|
+
description: "Extra attention is needed"
|
|
75
|
+
|
|
76
|
+
- name: security
|
|
77
|
+
color: "ee0701"
|
|
78
|
+
description: "Security vulnerability"
|
|
79
|
+
|
|
80
|
+
- name: pinned
|
|
81
|
+
color: "e11d48"
|
|
82
|
+
description: "Pinned issue — do not close"
|
|
83
|
+
|
|
84
|
+
- name: duplicate
|
|
85
|
+
color: "cfd3d7"
|
|
86
|
+
description: "This issue or pull request already exists"
|
|
87
|
+
|
|
88
|
+
- name: invalid
|
|
89
|
+
color: "e4e4e7"
|
|
90
|
+
description: "This doesn't seem right"
|
|
91
|
+
|
|
92
|
+
- name: wontfix
|
|
93
|
+
color: "e4e4e7"
|
|
94
|
+
description: "This will not be worked on"
|
|
95
|
+
|
|
96
|
+
- name: question
|
|
97
|
+
color: "d876e3"
|
|
98
|
+
description: "Further information is requested"
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
name-template: "v$RESOLVED_VERSION"
|
|
2
|
+
tag-template: "v$RESOLVED_VERSION"
|
|
3
|
+
categories:
|
|
4
|
+
- title: "🚀 New Features"
|
|
5
|
+
labels:
|
|
6
|
+
- "feature"
|
|
7
|
+
- "enhancement"
|
|
8
|
+
- "feat"
|
|
9
|
+
- title: "🐛 Bug Fixes"
|
|
10
|
+
labels:
|
|
11
|
+
- "fix"
|
|
12
|
+
- "bugfix"
|
|
13
|
+
- "bug"
|
|
14
|
+
- title: "🧰 Maintenance"
|
|
15
|
+
labels:
|
|
16
|
+
- "chore"
|
|
17
|
+
- "dependencies"
|
|
18
|
+
- "ci"
|
|
19
|
+
- "refactor"
|
|
20
|
+
- title: "📖 Documentation"
|
|
21
|
+
labels:
|
|
22
|
+
- "documentation"
|
|
23
|
+
- "docs"
|
|
24
|
+
- title: "🧪 Tests"
|
|
25
|
+
labels:
|
|
26
|
+
- "test"
|
|
27
|
+
- "tests"
|
|
28
|
+
change-template: "- $TITLE @$AUTHOR (#$NUMBER)"
|
|
29
|
+
change-prefix: ""
|
|
30
|
+
no-changes-template: "No changes."
|
|
31
|
+
version-resolver:
|
|
32
|
+
major:
|
|
33
|
+
labels:
|
|
34
|
+
- "major"
|
|
35
|
+
- "breaking"
|
|
36
|
+
minor:
|
|
37
|
+
labels:
|
|
38
|
+
- "minor"
|
|
39
|
+
- "feature"
|
|
40
|
+
- "enhancement"
|
|
41
|
+
- "feat"
|
|
42
|
+
patch:
|
|
43
|
+
labels:
|
|
44
|
+
- "patch"
|
|
45
|
+
- "fix"
|
|
46
|
+
- "bugfix"
|
|
47
|
+
- "documentation"
|
|
48
|
+
- "chore"
|
|
49
|
+
- "dependencies"
|
|
50
|
+
- "ci"
|
|
51
|
+
- "refactor"
|
|
52
|
+
default: patch
|
|
53
|
+
template: |
|
|
54
|
+
## What's Changed
|
|
55
|
+
|
|
56
|
+
$CHANGES
|
|
57
|
+
|
|
58
|
+
**Full Changelog**: https://github.com/sandeep-alluru/groundcrew/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
name: Test (${{ matrix.os }} / Python ${{ matrix.python-version }})
|
|
12
|
+
runs-on: ${{ matrix.os }}
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
os: [ubuntu-latest, macos-latest]
|
|
17
|
+
python-version: ["3.10", "3.11", "3.12"]
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
|
|
22
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
23
|
+
uses: actions/setup-python@v5
|
|
24
|
+
with:
|
|
25
|
+
python-version: ${{ matrix.python-version }}
|
|
26
|
+
|
|
27
|
+
- name: Cache pip
|
|
28
|
+
uses: actions/cache@v4
|
|
29
|
+
with:
|
|
30
|
+
path: ~/.cache/pip
|
|
31
|
+
key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }}
|
|
32
|
+
restore-keys: ${{ runner.os }}-pip-${{ matrix.python-version }}-
|
|
33
|
+
|
|
34
|
+
- name: Install dependencies
|
|
35
|
+
run: pip install -e ".[dev]"
|
|
36
|
+
|
|
37
|
+
- name: Lint
|
|
38
|
+
run: ruff check src/ tests/
|
|
39
|
+
|
|
40
|
+
- name: Format check
|
|
41
|
+
run: ruff format --check src/ tests/
|
|
42
|
+
|
|
43
|
+
- name: Type check
|
|
44
|
+
run: mypy src/groundcrew/ --ignore-missing-imports
|
|
45
|
+
|
|
46
|
+
- name: Test
|
|
47
|
+
run: pytest tests/ -v --tb=short
|
|
48
|
+
|
|
49
|
+
- name: Upload coverage
|
|
50
|
+
if: matrix.python-version == '3.11' && matrix.os == 'ubuntu-latest'
|
|
51
|
+
uses: codecov/codecov-action@v5
|
|
52
|
+
with:
|
|
53
|
+
files: coverage.xml
|
|
54
|
+
fail_ci_if_error: false
|
|
55
|
+
|
|
56
|
+
receipt-audit:
|
|
57
|
+
name: Receipt Audit
|
|
58
|
+
runs-on: ubuntu-latest
|
|
59
|
+
if: github.event_name == 'pull_request'
|
|
60
|
+
needs: test
|
|
61
|
+
steps:
|
|
62
|
+
- uses: actions/checkout@v4
|
|
63
|
+
- uses: actions/setup-python@v5
|
|
64
|
+
with:
|
|
65
|
+
python-version: "3.11"
|
|
66
|
+
- name: Cache pip
|
|
67
|
+
uses: actions/cache@v4
|
|
68
|
+
with:
|
|
69
|
+
path: ~/.cache/pip
|
|
70
|
+
key: ${{ runner.os }}-pip-3.11-${{ hashFiles('pyproject.toml') }}
|
|
71
|
+
- name: Install groundcrew
|
|
72
|
+
run: pip install -e .
|
|
73
|
+
- name: Audit receipt store (if DB exists)
|
|
74
|
+
run: |
|
|
75
|
+
if [ -f .groundcrew/receipts.db ]; then
|
|
76
|
+
groundcrew log
|
|
77
|
+
groundcrew status
|
|
78
|
+
else
|
|
79
|
+
echo "No receipt store — skipping audit."
|
|
80
|
+
fi
|
|
81
|
+
continue-on-error: true
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: CodeQL Security Scan
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: "0 18 * * 5" # every Friday at 18:00 UTC
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
analyze:
|
|
13
|
+
name: Analyze (Python)
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
permissions:
|
|
16
|
+
actions: read
|
|
17
|
+
contents: read
|
|
18
|
+
security-events: write
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
|
|
23
|
+
- name: Initialize CodeQL
|
|
24
|
+
uses: github/codeql-action/init@v3
|
|
25
|
+
with:
|
|
26
|
+
languages: python
|
|
27
|
+
queries: security-extended
|
|
28
|
+
|
|
29
|
+
- name: Perform CodeQL Analysis
|
|
30
|
+
uses: github/codeql-action/analyze@v3
|
|
31
|
+
with:
|
|
32
|
+
category: "/language:python"
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
name: Docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- "docs/**"
|
|
8
|
+
- "mkdocs.yml"
|
|
9
|
+
- "src/**"
|
|
10
|
+
- "ARCHITECTURE.md"
|
|
11
|
+
- "CHANGELOG.md"
|
|
12
|
+
- "CONTRIBUTING.md"
|
|
13
|
+
workflow_dispatch:
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
pages: write
|
|
18
|
+
id-token: write
|
|
19
|
+
|
|
20
|
+
concurrency:
|
|
21
|
+
group: pages
|
|
22
|
+
cancel-in-progress: true
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
build:
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v4
|
|
29
|
+
|
|
30
|
+
- uses: actions/setup-python@v5
|
|
31
|
+
with:
|
|
32
|
+
python-version: "3.11"
|
|
33
|
+
cache: pip
|
|
34
|
+
|
|
35
|
+
- name: Install docs dependencies
|
|
36
|
+
run: pip install -e ".[docs]"
|
|
37
|
+
|
|
38
|
+
- name: Build docs
|
|
39
|
+
run: mkdocs build --strict
|
|
40
|
+
|
|
41
|
+
- uses: actions/upload-pages-artifact@v3
|
|
42
|
+
with:
|
|
43
|
+
path: site/
|
|
44
|
+
|
|
45
|
+
deploy:
|
|
46
|
+
needs: build
|
|
47
|
+
runs-on: ubuntu-latest
|
|
48
|
+
environment:
|
|
49
|
+
name: github-pages
|
|
50
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
51
|
+
steps:
|
|
52
|
+
- uses: actions/deploy-pages@v4
|
|
53
|
+
id: deployment
|