Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
name: Bug report
description: Report a bug or regression with clear repro steps and environment details.
labels:
- bug
- needs-triage
title: "[Bug]: "
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out a bug report!
Please provide as much detail as possible so we can reproduce and fix the issue.

- type: input
id: summary
attributes:
label: Summary
description: Short summary of the bug.
placeholder: A brief description of the problem
validations:
required: true

- type: textarea
id: repro
attributes:
label: Steps to Reproduce
description: Provide step-by-step instructions to reproduce the problem.
placeholder: |
1. ...
2. ...
3. ...
render: shell
validations:
required: true

- type: textarea
id: expected
attributes:
label: Expected Behavior
description: What did you expect to happen?
validations:
required: true

- type: textarea
id: actual
attributes:
label: Actual Behavior
description: What actually happened?
validations:
required: true

- type: textarea
id: logs
attributes:
label: Logs / Output
description: Relevant logs or command output (mask secrets). Attach files if helpful.
render: shell

- type: input
id: python_version
attributes:
label: Python Version
placeholder: e.g., 3.11.9

- type: input
id: os
attributes:
label: Operating System
placeholder: e.g., Ubuntu 22.04, macOS 14.6

- type: input
id: prompt_task_ids
attributes:
label: Related Prompt/Task IDs
description: List any related Spec or Task IDs (e.g., 0002/4.1) or prompt names.
placeholder: e.g., 0002/4.1; manage-tasks

- type: textarea
id: context
attributes:
label: Additional Context
description: Any other context, screenshots, or information that might be relevant.

- type: checkboxes
id: checks
attributes:
label: Pre-Submission Checks
options:
- label: I searched existing issues for duplicates
required: true
- label: I included clear reproduction steps
required: true
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
blank_issues_disabled: true
contact_links:
- name: Documentation
url: https://github.com/liatrio/spec-driven-development-mcp#readme
about: Refer to the README and docs for setup and usage guidance.
58 changes: 58 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Feature request
description: Suggest an idea or enhancement with clear problem and acceptance criteria.
labels:
- enhancement
- needs-triage
title: "[Feature]: "
body:
- type: markdown
attributes:
value: |
Thanks for proposing a feature! Please describe the problem and the desired outcome.

- type: textarea
id: problem
attributes:
label: Problem Statement
description: What problem are you trying to solve? Why is it a problem?
placeholder: Describe the pain point or limitation
validations:
required: true

- type: textarea
id: desired_outcome
attributes:
label: Desired Outcome
description: What should happen when this feature is implemented?
placeholder: Describe the ideal behavior
validations:
required: true

- type: textarea
id: acceptance_criteria
attributes:
label: Acceptance Criteria
description: List concrete, testable criteria for success.
placeholder: |
- [ ] Given ..., when ..., then ...
- [ ] ...

- type: input
id: affected_prompts
attributes:
label: Affected Prompts/Workflows
description: Which prompts/workflows/spec tasks are impacted?
placeholder: e.g., manage-tasks; generate-spec; 0002/4.0

- type: textarea
id: additional_context
attributes:
label: Additional Context

- type: checkboxes
id: checks
attributes:
label: Pre-Submission Checks
options:
- label: I searched existing issues for duplicates
required: true
54 changes: 54 additions & 0 deletions .github/ISSUE_TEMPLATE/question.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Question
description: Ask a question about usage, behavior, or development workflow.
labels:
- question
- needs-triage
title: "[Question]: "
body:
- type: markdown
attributes:
value: |
Thanks for your question! Please include context and what you have tried.

- type: textarea
id: context
attributes:
label: Context
description: Background information, what you are trying to achieve, relevant details.
validations:
required: true

- type: textarea
id: commands
attributes:
label: Commands Run
description: Include exact commands and output where relevant (mask secrets).
render: shell

- type: input
id: spec_task_ids
attributes:
label: Referenced Spec/Task IDs
description: Any related Spec or Task IDs.
placeholder: e.g., 0002/4.3

- type: textarea
id: tried
attributes:
label: What's been tried
description: Steps or approaches attempted so far.
validations:
required: true

- type: textarea
id: additional_context
attributes:
label: Additional Context

- type: checkboxes
id: checks
attributes:
label: Pre-Submission Checks
options:
- label: I searched existing issues and discussions
required: true
7 changes: 7 additions & 0 deletions .github/chainguard/main-semantic-release.sts.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
issuer: https://token.actions.githubusercontent.com
# subject pattern is defining what repo and branch is allowed to generate a token at the permission level set below
subject_pattern: "repo:liatrio-labs/spec-driven-workflow-mcp:ref:refs/heads/main"

permissions:
contents: write
packages: write
16 changes: 16 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
## Why?

<!-- Summarize the motivation for this change. Reference specs/tasks/issues as needed. -->

## What Changed?

<!-- Call out the key updates in this PR. -->

## Additional Notes

<!-- Optional: document follow-ups, rollout concerns, or reviewer guidance. -->

- [ ] Linked relevant spec/task IDs (e.g., `tasks/0002-spec-open-source-ready.md`)
- [ ] Ran tests: `uv run pytest`
- [ ] Ran linters/hooks: `uv run pre-commit run --all-files`
- [ ] Updated docs or prompts if behavior changed
86 changes: 86 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: Run tests and linting

on:
# Avoid duplicate runs: run on PRs for branches, and on direct pushes to main
# but ignore changes to pyproject.toml, CHANGELOG.md, and uv.lock
# This is to avoid running tests and linting for commits that only relate to releases
push:
branches: ["main"]
paths-ignore:
- "pyproject.toml"
- "CHANGELOG.md"
- "uv.lock"
pull_request:

jobs:
test:
name: Test (uv + pytest)
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python: ["3.12"]
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install uv (with cache)
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
cache-dependency-glob: |
**/pyproject.toml
**/uv.lock

- name: Install Python
run: uv python install ${{ matrix.python }}

- name: Sync dependencies (frozen)
run: uv sync --all-groups --frozen

- name: Run tests with coverage
run: uv run pytest -vv --cov=mcp_server --cov-report=term-missing:skip-covered --cov-report=xml


- name: Upload coverage.xml artifact
uses: actions/upload-artifact@v4
with:
name: coverage-xml-${{ matrix.python }}
path: coverage.xml

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: coverage.xml
flags: unittests
fail_ci_if_error: false

lint:
name: Lint (uv + ruff)
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install uv (with cache)
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
cache-dependency-glob: |
**/pyproject.toml
**/uv.lock

- name: Install Python
run: uv python install 3.12

- name: Sync dependencies (frozen)
run: uv sync --all-groups --frozen

- name: Run ruff lint
run: uv run ruff check .

- name: Format (check)
run: uv run ruff format --check .

- name: Pre-commit (meta checks)
run: uv run pre-commit run --all-files --show-diff-on-failure
56 changes: 56 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Semantic Release

on:
workflow_run:
workflows: ["Run tests and linting"]
branches: [main]
types: [completed]

permissions:
contents: write
issues: write
pull-requests: write

jobs:
semantic-release:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest
concurrency:
group: semantic-release-${{ github.ref }}
cancel-in-progress: false
steps:
- uses: octo-sts/action@6177b4481c00308b3839969c3eca88c96a91775f # v1.0.0
id: octo-sts
with:
scope: ${{ github.repository }}
identity: main-semantic-release
- uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
persist-credentials: false


- name: Get GitHub App User ID
id: get-user-id
run: echo "user-id=$(gh api "/users/octo-sts[bot]" --jq .id)" >> "$GITHUB_OUTPUT"
env:
GH_TOKEN: ${{ steps.octo-sts.outputs.token }}

- name: Configure git author
run: |
set -eox pipefail
git config --global user.name 'octo-sts[bot]'
git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+octo-sts[bot]@users.noreply.github.com'

- name: Use PAT for pushes to origin
run: |
git remote set-url origin \
https://x-access-token:${{ steps.octo-sts.outputs.token }}@github.com/${{ github.repository }}.git
# sanity check
git ls-remote --heads origin >/dev/null

- name: Semantic Release
uses: python-semantic-release/python-semantic-release@v10
with:
github_token: ${{ steps.octo-sts.outputs.token }}
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@ __pycache__

# Misc
temp/
.coverage
coverage.xml
Loading
Loading