Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
92cdbf2
Remove --no-pager option from lsblk (#129)
r0x0d Dec 18, 2025
eef99ba
Refactor tools and CommandSpec running (#121)
subpop Dec 18, 2025
a50cf67
[RSPEED-2227] Exclude the parent directory from output when listing d…
samdoran Dec 22, 2025
867a3b1
Add MkDocs with Material theme for documentation (#133)
major Jan 5, 2026
ed0a358
Add GitHub Actions workflow for documentation deployment (#135)
major Jan 5, 2026
664bf36
Update GitHub Actions (#137)
samdoran Jan 5, 2026
2f14670
Run deploy only if repo is not a fork (#139)
subpop Jan 5, 2026
97dbd9a
docs: add API reference documentation with mkdocstrings (#136)
major Jan 5, 2026
94926dd
fix(types): add type annotations for **kwargs parameters (#138)
major Jan 5, 2026
457c372
docs: reorganize installation guide into focused pages (#140)
major Jan 5, 2026
260459b
docs: enhance features section with detailed value propositions (#141)
major Jan 5, 2026
1033eea
docs: add Goose GUI wizard instructions for extension setup (#142)
major Jan 5, 2026
e2ca649
docs: Show quick start first in install.md (#143)
major Jan 5, 2026
3603d5c
docs: improve contributing guide and AGENTS.md for developer onboardi…
major Jan 5, 2026
34e28b0
docs: remove non-existent verification command from install docs (#145)
major Jan 5, 2026
6967fed
docs: add mermaid architecture diagram to index page (#146)
major Jan 5, 2026
b059d53
docs: expand macOS and Windows installation instructions (#147)
major Jan 5, 2026
50fc8d8
docs: add getting started guide and cheatsheet (#149)
major Jan 6, 2026
9cbe6a6
docs: update Readme and other installation steps (#151)
alexxa Jan 6, 2026
22dd930
Extract is_empty_output() for command output validation (#158)
major Jan 6, 2026
b3ff802
Improve doc strings for all tool modules (#152)
major Jan 6, 2026
2920366
Add missing `args` in Goose configuration (#161)
r0x0d Jan 6, 2026
fd9891e
Update Host type alias so it is optional (#163)
samdoran Jan 6, 2026
9740ec9
Quiet the rabbit (#165)
samdoran Jan 6, 2026
0fd13e1
Use the simple string descriptions for parameters (#166)
samdoran Jan 6, 2026
166d590
Disable Coderabbit review messages (#167)
samdoran Jan 6, 2026
55e5dd6
Use field validation instead of custom functions (#168)
samdoran Jan 7, 2026
d6923cd
add container lifecycle verification gate to build pipeline
alexxa Dec 18, 2025
fa47391
Add container run wrapper script.
narmaku Dec 15, 2025
684f299
add container wrapper validation to installation QA
alexxa Dec 18, 2025
d714a0a
add mcp protocol audit and stdout hygiene gate
alexxa Dec 18, 2025
930300c
add container integration script to ci triggers
alexxa Jan 5, 2026
09cddc8
chore: separate scripts and set executable bit
alexxa Jan 6, 2026
173d68e
feat: implement containerized QA toolbox and sidecar-based integratio…
alexxa Jan 7, 2026
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
5 changes: 3 additions & 2 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,13 @@ reviews:
collapse_walkthrough: true
poem: false
request_changes_workflow: false
high_level_summary: true
high_level_summary: false
high_level_summary_placeholder: "@coderabbitai summary"
abort_on_close: true
review_status: false

auto_review:
enabled: true
enabled: false
drafts: false
base_branches:
- main
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/build-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5.0.0
uses: actions/checkout@v6.0.1
with:
fetch-depth: 0

Expand All @@ -36,7 +36,7 @@ jobs:
run: python -m build --sdist --wheel

- name: Upload artifacts
uses: actions/upload-artifact@v4.6.2
uses: actions/upload-artifact@v6.0.0
with:
name: artifacts
path: dist
Expand All @@ -57,7 +57,7 @@ jobs:

steps:
- name: Download artifacts
uses: actions/download-artifact@v5.0.0
uses: actions/download-artifact@v7.0.0
with:
name: artifacts
path: dist
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5.0.0
uses: actions/checkout@v6.0.1

- name: Install Python
uses: actions/setup-python@v6.0.0
uses: actions/setup-python@v6.1.0
with:
python-version-file: pyproject.toml

- name: Install uv
uses: astral-sh/setup-uv@v7.1.0
uses: astral-sh/setup-uv@v7.1.6
with:
enable-cache: true
prune-cache: false
Expand Down Expand Up @@ -83,15 +83,15 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v5.0.0
uses: actions/checkout@v6.0.1

- name: Install Python
uses: actions/setup-python@v6.0.0
uses: actions/setup-python@v6.1.0
with:
python-version-file: pyproject.toml

- name: Install uv
uses: astral-sh/setup-uv@v7.1.0
uses: astral-sh/setup-uv@v7.1.6
with:
enable-cache: true
prune-cache: false
Expand All @@ -112,7 +112,7 @@ jobs:
run: uv run --locked pytest --cov-report=xml

- name: Upload coverage report
uses: codecov/codecov-action@v5.5.1
uses: codecov/codecov-action@v5.5.2
with:
env_vars: OS,PYTHON
disable_search: true
Expand Down
20 changes: 15 additions & 5 deletions .github/workflows/ci_installation.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@ on:
paths:
- 'src/linux_mcp_server/**'
- 'scripts/verify_installation.sh'
- 'scripts/verify_container_integration.sh'

pull_request:
branches:
- main
paths:
- 'src/linux_mcp_server/**'
- 'scripts/verify_installation.sh'
- 'scripts/verify_container_integration.sh'

env:
PIP_DISABLE_PIP_VERSION_CHECK: 1
Expand Down Expand Up @@ -41,15 +43,15 @@ jobs:

steps:
- name: Checkout Code
uses: actions/checkout@v5.0.0
uses: actions/checkout@v6.0.1

- name: Install Python ${{ matrix.python-version }}
uses: actions/setup-python@v6.0.0
uses: actions/setup-python@v6.1.0
with:
python-version: ${{ matrix.python-version }}

- name: Install uv
uses: astral-sh/setup-uv@v7.1.0
uses: astral-sh/setup-uv@v7.1.6
with:
enable-cache: true
prune-cache: false
Expand All @@ -60,5 +62,13 @@ jobs:
METHOD: ${{ matrix.method }}
UV_PYTHON: python
run: |
chmod +x scripts/verify_installation.sh
./scripts/verify_installation.sh
bash ./scripts/verify_installation.sh

container_integration_qa:
name: Container Integration - Linux
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6.0.1
- name: Run Container Integration Test
run: |
bash ./scripts/verify_container_integration.sh
63 changes: 63 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: Documentation

on:
push:
branches:
- main
paths:
- "docs/**"
- "src/**"
- "mkdocs.yml"
- "pyproject.toml"
- ".github/workflows/docs.yml"
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
cancel-in-progress: false

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6.0.1

- name: Install Python
uses: actions/setup-python@v6.1.0
with:
python-version-file: pyproject.toml

- name: Install uv
uses: astral-sh/setup-uv@v7.1.6
with:
enable-cache: true
prune-cache: false

- name: Install dependencies
run: uv sync --locked --group docs

- name: Build documentation
run: uv run --locked mkdocs build --strict

- name: Upload artifact
uses: actions/upload-pages-artifact@v4.0.0
with:
path: site

deploy:
if: github.event.repository.fork == false
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4.0.5
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ coverage/
htmlcov/
.tox/

# Documentation build
site/

# IDEs
.vscode/
.idea/
Expand Down
18 changes: 18 additions & 0 deletions .tekton/integration-lifecycle.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
apiVersion: appstudio.redhat.com/v1alpha1
kind: IntegrationTestScenario
metadata:
name: container-lifecycle-test
spec:
application: linux-mcp-server
resolverRef:
resolver: git
params:
- name: url
value: https://github.com/rhel-lightspeed/linux-mcp-server.git
- name: revision
value: main
- name: pathInRepo
value: .tekton/task-verify-container.yaml
params:
- name: qa_image_url
value: "quay.io/redhat-user-workloads/rhel-lightspeed-tenant/linux-mcp-server-test-suite:latest"
18 changes: 18 additions & 0 deletions .tekton/integration-protocol.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
apiVersion: appstudio.redhat.com/v1alpha1
kind: IntegrationTestScenario
metadata:
name: mcp-protocol-audit
spec:
application: linux-mcp-server
resolverRef:
resolver: git
params:
- name: url
value: https://github.com/rhel-lightspeed/linux-mcp-server.git
- name: revision
value: main
- name: pathInRepo
value: .tekton/task-mcp-protocol-audit.yaml
params:
- name: qa_image_url
value: "quay.io/redhat-user-workloads/rhel-lightspeed-tenant/linux-mcp-server-test-suite:latest"
22 changes: 22 additions & 0 deletions .tekton/pipeline-build-multiarch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,28 @@ spec:
taskRef:
name: get-version

- name: build-qa-toolbox
params:
- name: IMAGE
# We use the same output-image param but append a suffix
value: $(params.output-image)-test-suite
- name: DOCKERFILE
value: Containerfile.qa
- name: CONTEXT
value: .
- name: SOURCE_ARTIFACT
value: $(tasks.clone-repository.results.SOURCE_ARTIFACT)
runAfter:
- clone-repository
taskRef:
resolver: bundles
params:
- name: name
value: buildah-remote-oci-ta
- name: bundle
# Using the same bundle version you use for build-images
value: quay.io/konflux-ci/tekton-catalog/task-buildah-remote-oci-ta:0.7@sha256:ee5e01eb59a3f70bb1012950fbc4081bac96d3f3517e6d204314484cd2e0059b

- name: build-images
matrix:
params:
Expand Down
34 changes: 34 additions & 0 deletions .tekton/task-mcp-protocol-audit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: mcp-protocol-audit
spec:
description: Audits the MCP server for protocol compliance, tool discovery, and stdout hygiene.
params:
- name: image_url
type: string
[cite_start]description: The URL of the image to audit. [cite: 4]
- name: qa_image_url
default: "quay.io/redhat-user-workloads/rhel-lightspeed-tenant/linux-mcp-server-test-suite:latest"

sidecars:
- name: mcp-server
[cite_start]image: $(params.image_url) [cite: 1]
command: ["/bin/sh", "-c"]
args:
- |
microdnf install -y socat
socat TCP-LISTEN:8080,reuseaddr,fork EXEC:linux-mcp-server,stderr

steps:
- name: validate-tool-discovery
image: $(params.qa_image_url)
script: |
#!/usr/bin/env bash
/usrl/local/bin/scripts/mcp_protocol_audit.sh [cite: 4]

- name: verify-stdout-hygiene
image: $(params.qa_image_url)
script: |
#!/usr/bin/env bash
/usr/local/bin/scripts/verify_stdout_hygiene.sh [cite: 4]
33 changes: 33 additions & 0 deletions .tekton/task-verify-container.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: verify-container-lifecycle
spec:
[cite_start]description: Verifies MCP server startup, permissions, and handshake via sidecar. [cite: 4]
params:
- name: image_url
type: string
- name: qa_image_url
default: "quay.io/redhat-user-workloads/rhel-lightspeed-tenant/linux-mcp-server-test-suite:latest"

sidecars:
- name: server
image: $(params.image_url)
command: ["/bin/sh", "-c"]
args:
- |
socat TCP-LISTEN:8080,reuseaddr,fork EXEC:linux-mcp-server,stderr

steps:
- name: verify-user-and-startup
image: $(params.qa_image_url)
script: |
#!/usr/bin/env bash
# The QA container probes the sidecar's network port
/usr/local/bin/scripts/verify_container_lifecycle.sh

- name: verify-mcp-handshake
image: $(params.qa_image_url)
script: |
#!/usr/bin/env bash
/usr/local/bin/scripts/verify_mcp_handshake.sh
Loading