Skip to content

docs: add the Codex skill-installer route and a skills.sh page config #11

docs: add the Codex skill-installer route and a skills.sh page config

docs: add the Codex skill-installer route and a skills.sh page config #11

name: Validate skill
on:
push:
pull_request:
permissions:
contents: read
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09
with:
persist-credentials: false
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444
with:
node-version: 22
- name: Validate skills.sh discovery
shell: bash
run: |
set -o pipefail
npx --yes skills@1.5.23 add . --list | tee /tmp/skills-list.txt
perl -pe 's/\e\[[0-9;]*[A-Za-z]//g' /tmp/skills-list.txt > /tmp/skills-list-plain.txt
grep -qE "Found 2 skills?" /tmp/skills-list-plain.txt
grep -q "diagnose-system-performance" /tmp/skills-list-plain.txt
grep -q "brainstorm-performance-problem" /tmp/skills-list-plain.txt
- name: Validate Claude Code plugin manifests
shell: bash
run: |
node --input-type=module -e '
import { readFileSync, existsSync } from "node:fs";
const plugin = JSON.parse(readFileSync(".claude-plugin/plugin.json", "utf8"));
const market = JSON.parse(readFileSync(".claude-plugin/marketplace.json", "utf8"));
const fail = (m) => { console.error(m); process.exitCode = 1; };
if (plugin.name !== "codearqtech") fail(`plugin.json name is ${plugin.name}, expected codearqtech`);
if (market.name !== "codearqtech") fail(`marketplace.json name is ${market.name}, expected codearqtech`);
if (!market.owner?.name) fail("marketplace.json is missing owner.name");
if (!Array.isArray(market.plugins) || market.plugins.length === 0) fail("marketplace.json lists no plugins");
for (const entry of market.plugins ?? []) {
if (!entry.name) fail("a marketplace plugin entry has no name");
if (typeof entry.source !== "string" || !entry.source.startsWith("./")) {
fail(`plugin ${entry.name} has a relative source that does not start with ./`);
}
}
if (!existsSync("skills/diagnose-system-performance/SKILL.md")) fail("plugin skills/ directory is missing a skill");
if (process.exitCode) throw new Error("plugin manifest validation failed");
console.log("plugin manifests ok");
'
- name: Validate installer
shell: bash
run: |
set -euo pipefail
sh -n scripts/install.sh
target_dir=$(mktemp -d)
scripts/install.sh --target agents --scope project --project-dir "$target_dir"
test -f "$target_dir/.agents/skills/codearqtech-diagnose-system-performance/SKILL.md"
grep -q "^name: codearqtech-diagnose-system-performance$" \
"$target_dir/.agents/skills/codearqtech-diagnose-system-performance/SKILL.md"
grep -q "codearqtech-diagnose-system-performance/references/decision-tree.md" \
"$target_dir/.agents/skills/codearqtech-brainstorm-performance-problem/SKILL.md"
plain_dir=$(mktemp -d)
scripts/install.sh --target agents --scope project --project-dir "$plain_dir" --namespace ''
test -f "$plain_dir/.agents/skills/diagnose-system-performance/SKILL.md"
! grep -q "codearqtech-" "$plain_dir/.agents/skills/diagnose-system-performance/SKILL.md"
gemini_dir=$(mktemp -d)
scripts/install.sh --target gemini --scope project --project-dir "$gemini_dir" --gemini-commands
test -f "$gemini_dir/.gemini/commands/codearqtech/diagnose-system-performance.toml"