-
Notifications
You must be signed in to change notification settings - Fork 0
83 lines (71 loc) · 2.48 KB
/
Copy pathtest.yml
File metadata and controls
83 lines (71 loc) · 2.48 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
name: Test
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
permissions:
contents: read
jobs:
validate:
name: Validate (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Validate skill package
run: |
python3 - <<'PY'
from pathlib import Path
import re
import sys
root = Path(".")
skill = root / "skills" / "fable5-optimizer" / "SKILL.md"
errors = []
if not skill.is_file():
errors.append("skills/fable5-optimizer/SKILL.md is missing")
else:
text = skill.read_text(encoding="utf-8")
if not text.startswith("---\n"):
errors.append("SKILL.md missing YAML frontmatter")
elif "\n---\n" not in text[4:]:
errors.append("SKILL.md missing closing frontmatter")
if "name: fable5-optimizer" not in text:
errors.append("SKILL.md missing expected name")
if "description:" not in text:
errors.append("SKILL.md missing description")
tracked = [
p for p in root.rglob("*")
if p.is_file() and ".git" not in p.parts
]
blocked = [
re.compile(r"(^|/)research/"),
re.compile(r"(^|/)Docs/"),
re.compile(r"(^|/)transcript\.md$"),
re.compile(r"(^|/)FABLE5_HANDOFF\.md$"),
re.compile(r"(^|/)internal-notes\.md$"),
re.compile(r"(^|/)example-claude\.md$"),
re.compile(r"(^|/)\.claude/"),
re.compile(r"\.(png|jpe?g|webp|gif|mov|mp4)$", re.I),
]
for path in tracked:
rel = path.as_posix()
if any(pattern.search(rel) for pattern in blocked):
errors.append(f"public package contains blocked file: {rel}")
if errors:
for error in errors:
print(error, file=sys.stderr)
sys.exit(1)
print("OK: skill package validated")
PY
- name: Test installer modes
run: tests/install.sh
- name: Check instruction-surface sync anchors
run: tests/sync.sh
- name: Check Codex CLI template flags (skips without codex)
run: tests/codex-smoke.sh