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
4 changes: 4 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,7 @@ contact_links:
- name: 🤖 Codex Plugin Guide
url: https://learn.chatgpt.com/docs/build-plugins
about: "Learn how to install and manage Codex plugins"

- name: 📦 pi Package Guide
url: https://pi.dev/packages
about: "Learn how to install and manage pi packages"
13 changes: 7 additions & 6 deletions .github/ISSUE_TEMPLATE/hook_issue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ body:
**Before submitting:**
- Search existing issues to avoid duplicates
- Make sure you're using the latest plugin version
- Confirm you restarted Claude Code or started a new Codex task after installing the plugin
- Confirm you restarted Claude Code, started a new Codex task, or started a new pi session after installing the plugin
- Have clear examples of the hook's behavior

- type: checkboxes
Expand All @@ -23,7 +23,7 @@ body:
required: true
- label: "I am using the latest plugin version"
required: true
- label: "I restarted Claude Code or started a new Codex task after installing/updating the plugin"
- label: "I restarted Claude Code, started a new Codex task, or started a new pi session after installing/updating the plugin"
required: true
- label: "I can provide clear examples showing the problem"
required: true
Expand All @@ -47,6 +47,7 @@ body:
options:
- Claude Code
- Codex
- pi
validations:
required: true

Expand Down Expand Up @@ -244,8 +245,8 @@ body:
label: "Steps to Reproduce"
description: "Provide step-by-step instructions to reproduce the issue"
placeholder: |
1. Install the plugin in Claude Code or Codex
2. Restart Claude Code or start a new Codex task
1. Install the plugin in Claude Code, Codex, or pi
2. Restart Claude Code, start a new Codex task, or start a new pi session
3. In Codex, review and trust the plugin hooks in `/hooks`
4. Ask the coding agent to run [specific command]
5. Observe [incorrect hook behavior]
Expand Down Expand Up @@ -325,7 +326,7 @@ body:
id: plugin-version
attributes:
label: "Plugin Version"
description: "Run `/plugin list` in Claude Code or `codex plugin list` in Codex and paste the version shown"
description: "Run `/plugin list` in Claude Code, `codex plugin list` in Codex, or `pi list` in pi and paste the entry shown"
placeholder: "e.g., github-mcp@3.5.0"
validations:
required: true
Expand All @@ -334,7 +335,7 @@ body:
id: host-version
attributes:
label: "Host Version"
description: "Run `claude --version` or `codex --version` and paste the output"
description: "Run `claude --version`, `codex --version`, or `pi --version` and paste the output"
placeholder: "e.g., 0.1.23"
validations:
required: true
Expand Down
14 changes: 8 additions & 6 deletions .github/ISSUE_TEMPLATE/mcp_issue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ body:
**Before submitting:**
- Search existing issues to avoid duplicates
- Make sure you're using the latest plugin version
- Confirm you restarted Claude Code or started a new Codex task after installing the plugin
- Confirm you restarted Claude Code, started a new Codex task, or started a new pi session after installing the plugin
- Check that dependencies (`gh`, `jq`) are installed and `gh` is authenticated

- type: checkboxes
Expand All @@ -23,7 +23,7 @@ body:
required: true
- label: "I am using the latest plugin version"
required: true
- label: "I restarted Claude Code or started a new Codex task after installing/updating the plugin"
- label: "I restarted Claude Code, started a new Codex task, or started a new pi session after installing/updating the plugin"
required: true
- label: "I have verified `gh` is installed and authenticated (`gh auth status`) and `jq` is installed"
required: true
Expand All @@ -47,6 +47,7 @@ body:
options:
- Claude Code
- Codex
- pi
validations:
required: true

Expand Down Expand Up @@ -182,9 +183,9 @@ body:
label: "Steps to Reproduce"
description: "Provide step-by-step instructions to reproduce the issue"
placeholder: |
1. Install the plugin in Claude Code or Codex
1. Install the plugin in Claude Code, Codex, or pi
2. (Optional) Create `.mcp-gh-tooling.json` with a default `repo`
3. Restart Claude Code or start a new Codex task
3. Restart Claude Code, start a new Codex task, or start a new pi session
4. Ask the coding agent to view a PR / list issues / fetch CI logs
5. Observe [incorrect behavior]
validations:
Expand Down Expand Up @@ -223,6 +224,7 @@ body:
- .mcp-gh-tooling.json (project root)
- .claude/.mcp-gh-tooling.json
- .codex/.mcp-gh-tooling.json
- .pi/.mcp-gh-tooling.json
- MCP_GH_TOOLING_CONFIG env var
- etc.

Expand Down Expand Up @@ -270,7 +272,7 @@ body:
id: plugin-version
attributes:
label: "Plugin Version"
description: "Run `/plugin list` in Claude Code or `codex plugin list` in Codex and paste the version shown"
description: "Run `/plugin list` in Claude Code, `codex plugin list` in Codex, or `pi list` in pi and paste the entry shown"
placeholder: "e.g., github-mcp@3.5.0"
validations:
required: true
Expand All @@ -279,7 +281,7 @@ body:
id: host-version
attributes:
label: "Host Version"
description: "Run `claude --version` or `codex --version` and paste the output"
description: "Run `claude --version`, `codex --version`, or `pi --version` and paste the output"
placeholder: "e.g., 0.1.23"
validations:
required: true
Expand Down
9 changes: 5 additions & 4 deletions .github/ISSUE_TEMPLATE/plugin_component_other.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ body:
options:
- Claude Code
- Codex
- pi
validations:
required: true

Expand Down Expand Up @@ -148,8 +149,8 @@ body:
label: "Steps to Reproduce"
description: "Provide step-by-step instructions to reproduce the issue"
placeholder: |
1. Install the plugin in Claude Code or Codex
2. Restart Claude Code or start a new Codex task (if required)
1. Install the plugin in Claude Code, Codex, or pi
2. Restart Claude Code, start a new Codex task, or start a new pi session (if required)
3. Observe [error/unexpected behavior]
4. Expected [correct behavior]
validations:
Expand Down Expand Up @@ -208,7 +209,7 @@ body:
id: plugin-version
attributes:
label: "Plugin Version"
description: "Run `/plugin list` in Claude Code or `codex plugin list` in Codex and paste the version shown"
description: "Run `/plugin list` in Claude Code, `codex plugin list` in Codex, or `pi list` in pi and paste the entry shown"
placeholder: "e.g., github-mcp@3.5.0"
validations:
required: true
Expand All @@ -217,7 +218,7 @@ body:
id: host-version
attributes:
label: "Host Version"
description: "Run `claude --version` or `codex --version` and paste the output"
description: "Run `claude --version`, `codex --version`, or `pi --version` and paste the output"
placeholder: "e.g., 0.1.23"
validations:
required: true
Expand Down
2 changes: 1 addition & 1 deletion .github/scripts/setup-bats.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
BATS_DIR="${REPO_ROOT}/.bats"

BATS_VERSION="1.13.0"
BATS_VERSION="1.14.0"
BATS_SUPPORT_VERSION="0.3.0"
BATS_ASSERT_VERSION="2.2.4"

Expand Down
33 changes: 31 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,28 @@ on:
- 'plugin-tests/**'
- '.mcp-sdk.lock'
- '.shellcheckrc'
- '.gitignore'
- '.github/workflows/ci.yml'
- '.github/scripts/**'
- 'package.json'
- 'package-lock.json'
- 'tsconfig.json'
- 'eslint.config.mjs'
- '.github/workflows/npm-publish.yml'
pull_request:
paths:
- 'plugins/**'
- 'plugin-tests/**'
- '.mcp-sdk.lock'
- '.shellcheckrc'
- '.gitignore'
- '.github/workflows/ci.yml'
- '.github/scripts/**'
- 'package.json'
- 'package-lock.json'
- 'tsconfig.json'
- 'eslint.config.mjs'
- '.github/workflows/npm-publish.yml'

jobs:
bash:
Expand All @@ -26,7 +38,24 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 24

- name: Install npm dependencies
run: npm ci

- name: Type-check
run: npx tsc --noEmit -p .

- name: Lint
run: npx eslint . --max-warnings 0

- name: Node unit tests
run: node --test 'plugin-tests/github-mcp/pi/*.test.ts'

- name: Install jq
run: sudo apt-get update && sudo apt-get install -y jq
Expand All @@ -52,7 +81,7 @@ jobs:
- name: Setup BATS
uses: bats-core/bats-action@77d6fb60505b4d0d1d73e48bd035b55074bbfb43 # 4.0.0
with:
bats-version: 1.13.0
bats-version: 1.14.0
support-install: true
assert-install: true
assert-version: 2.2.4
Expand Down
74 changes: 74 additions & 0 deletions .github/workflows/npm-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: npm Publish

on:
push:
tags:
- 'v*'

jobs:
publish:
name: Publish to npm
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write

steps:
- name: Checkout repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 24
registry-url: https://registry.npmjs.org

# Trusted publishing needs npm 11.5.1 or later.
- name: Update npm
run: npm install -g npm@11.21.0

- name: Install jq
run: sudo apt-get update && sudo apt-get install -y jq

- name: Setup BATS
uses: bats-core/bats-action@77d6fb60505b4d0d1d73e48bd035b55074bbfb43 # 4.0.0
with:
bats-version: 1.14.0
support-install: true
assert-install: true
assert-version: 2.2.4
detik-install: false
file-install: false
support-path: ${{ github.workspace }}/.bats/bats-support
assert-path: ${{ github.workspace }}/.bats/bats-assert

- name: Install npm dependencies
run: npm ci

- name: Type-check
run: npx tsc --noEmit -p .

- name: Lint
run: npx eslint . --max-warnings 0

- name: Node unit tests
run: node --test 'plugin-tests/github-mcp/pi/*.test.ts'

- name: BATS
run: |
echo "Running BATS tests with timing..."
bats --timing -r plugin-tests/

- name: Verify tag matches package and plugin manifest versions
run: |
TAG_VERSION="${GITHUB_REF_NAME#v}"
PACKAGE_VERSION=$(jq -r '.version' package.json)
CLAUDE_VERSION=$(jq -r '.version' plugins/github-mcp/.claude-plugin/plugin.json)
CODEX_VERSION=$(jq -r '.version' plugins/github-mcp/.codex-plugin/plugin.json)
if ! { [[ "${TAG_VERSION}" == "${PACKAGE_VERSION}" ]] && [[ "${TAG_VERSION}" == "${CLAUDE_VERSION}" ]] && [[ "${TAG_VERSION}" == "${CODEX_VERSION}" ]]; }; then
echo "Version mismatch: tag=${TAG_VERSION} package.json=${PACKAGE_VERSION} claude-plugin=${CLAUDE_VERSION} codex-plugin=${CODEX_VERSION}" >&2
exit 1
fi

- name: Publish to npm
run: npm publish
2 changes: 1 addition & 1 deletion .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y jq
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,6 @@ AGENTS.local.md

# BATS testing framework (installed locally via .github/scripts/setup-bats.sh)
.bats/

# Node (pi package development install)
node_modules/
Loading
Loading