Repository navigation
128 lines (119 loc) · 4.22 KB
/
Copy pathci.yml
File metadata and controls
128 lines (119 loc) · 4.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
name: CI
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
check:
name: Repo consistency
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version: 22
- run: node scripts/check.mjs
shell:
name: ShellCheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- run: shellcheck setup.sh scripts/*.sh plugins/po-skills/skills/brainstorming/scripts/*.sh
powershell:
name: PowerShell lint
runs-on: windows-latest
steps:
- uses: actions/checkout@v7
- name: Parse setup.ps1
shell: pwsh
run: |
$errors = $null
[System.Management.Automation.Language.Parser]::ParseFile("$PWD\setup.ps1", [ref]$null, [ref]$errors) | Out-Null
if ($errors) { $errors | ForEach-Object { Write-Error $_ }; exit 1 }
- name: PSScriptAnalyzer
shell: pwsh
run: |
Install-Module PSScriptAnalyzer -Force -Scope CurrentUser
$issues = Invoke-ScriptAnalyzer -Path setup.ps1 -Severity Error
$issues | Format-Table -AutoSize
if ($issues) { exit 1 }
plugins:
name: Validate and test plugins
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version: 22
- run: npm install -g @anthropic-ai/claude-code
- name: Validate marketplace and plugins
run: |
claude plugin validate .
for p in plugins/*/; do claude plugin validate "$p"; done
- name: Test mods
run: |
for p in plugins/*/; do
if [ -d "$p/tests" ]; then echo "::group::$p"; claude plugin test "$p"; echo "::endgroup::"; fi
done
skills-portable:
name: Skills install for other agents
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version: 22
- name: Install every skill for Codex and Gemini CLI
run: |
expected=$(find plugins/*/skills -mindepth 2 -maxdepth 2 -name SKILL.md | wc -l)
work=$(mktemp -d)
(cd "$work" && git init -q && npx -y skills add "$GITHUB_WORKSPACE" -a codex -a gemini-cli --skill '*' --copy -y)
got=$(find "$work" -name SKILL.md | sort -u | xargs -n1 dirname | xargs -n1 basename | sort -u | wc -l)
echo "expected $expected skills, installed $got"
test "$expected" -eq "$got"
install-smoke:
name: Install (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version: 22
- run: npm install -g @anthropic-ai/claude-code
- name: setup.sh --agents codex
if: runner.os != 'Windows'
run: ./setup.sh --agents codex
- name: setup.ps1 -Agents codex
if: runner.os == 'Windows'
shell: pwsh
run: .\setup.ps1 -Agents codex
- name: Every lippstack plugin is installed for Claude Code
shell: bash
run: |
claude plugin list > installed.txt
node -e '
const fs = require("fs")
const list = fs.readFileSync("installed.txt", "utf8")
// Listed in the marketplace but left out of the installers on purpose.
const optional = ["video-editor-skills"]
const names = JSON.parse(fs.readFileSync(".claude-plugin/marketplace.json", "utf8")).plugins.map(p => p.name).filter(n => !optional.includes(n))
const missing = names.filter(n => !list.includes(`${n}@lippstack`))
if (missing.length) { console.error("not installed:", missing.join(", ")); process.exit(1) }
console.log(`all ${names.length} lippstack plugins installed`)
'
- name: Skills were installed for Codex
shell: bash
run: |
n=$(find "$HOME/.agents/skills" -name SKILL.md | wc -l)
echo "$n skills in ~/.agents/skills"
test "$n" -ge 30