Skip to content

Commit fe6432e

Browse files
authored
feat: support Claude Code plugin and gh skill install (#2)
* claude plugin * feat: enable gh skill install via auto-release workflow Add a release workflow that reads .claude-plugin/plugin.json#version on main pushes, creates a matching vX.Y.Z tag if missing, and runs `gh skill publish --tag` so `gh skill install daleseo/korean-skills` serves the latest tagged release. Document the gh CLI install paths and the four install routes (gh tagged, gh pinned, npx main HEAD, Claude Code plugin) in both READMEs. * ci: add validate-skills workflow Run two validation jobs on every PR and main push so spec violations are caught before they reach the auto-publish path. The first job runs `skills-ref validate` against each SKILL.md using the official agentskills/agentskills tool. The second runs `gh skill publish --dry-run` to gate publishability. * ci: consolidate validate jobs into ci.yml with consistent naming Merge the two jobs from validate-skills.yml into ci.yml so all PR gates live in one workflow. Rename jobs into two clear groups: validate-spec / validate-publish for static checks, install-local / install-remote for end-to-end install smoke tests. The split file made sense for Apollo's larger marketplace but is overkill for a 3-skill single-plugin repo. * docs: make Korean the default README, refresh AGENTS.md - Swap README files so the default README.md is Korean and English moves to README_EN.md, matching the predominantly Korean audience. Cross-language links updated in both files. - Update AGENTS.md repo structure tree, README split note, and pattern update checklist to reflect the new filenames. - Replace the stale CI/CD section (referenced the old `test` / `test-remote` jobs) with the current four-job setup and the release.yml summary. - Add a Releasing / Versioning section explaining which version field drives the release tag, how individual SKILL.md versions stay independent, and which fields are advisory only. - Delete grammar-checker.skill, a 10KB zip artifact left over from the old single-file distribution format.
1 parent ef2fd1c commit fe6432e

9 files changed

Lines changed: 641 additions & 355 deletions

File tree

.claude-plugin/marketplace.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
"name": "DaleSeo",
55
"url": "https://github.com/DaleSeo"
66
},
7+
"metadata": {
8+
"description": "Korean language skills for AI coding agents: humanizer, grammar-checker, style-guide",
9+
"version": "1.0.0"
10+
},
711
"plugins": [
812
{
913
"name": "korean-skills",

.claude-plugin/plugin.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,16 @@
44
"version": "1.0.0",
55
"author": {
66
"name": "DaleSeo"
7-
}
7+
},
8+
"homepage": "https://github.com/DaleSeo/korean-skills",
9+
"repository": "https://github.com/DaleSeo/korean-skills",
10+
"license": "MIT",
11+
"keywords": [
12+
"korean",
13+
"humanizer",
14+
"grammar-checker",
15+
"style-guide",
16+
"ai-writing",
17+
"natural-language"
18+
]
819
}

.github/workflows/ci.yml

Lines changed: 77 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,82 @@ on:
77
branches: [main]
88

99
jobs:
10-
test:
10+
validate-spec:
11+
runs-on: ubuntu-latest
12+
permissions:
13+
contents: read
14+
15+
steps:
16+
- name: Checkout repository
17+
uses: actions/checkout@v6
18+
19+
- name: Checkout agentskills repository
20+
uses: actions/checkout@v6
21+
with:
22+
repository: agentskills/agentskills
23+
path: agentskills
24+
25+
- name: Set up Python
26+
uses: actions/setup-python@v5
27+
with:
28+
python-version: "3.x"
29+
cache: "pip"
30+
cache-dependency-path: "agentskills/skills-ref/pyproject.toml"
31+
32+
- name: Install skills-ref
33+
run: |
34+
cd agentskills/skills-ref
35+
pip install -e .
36+
37+
- name: Validate all skills
38+
run: |
39+
echo "🔍 Validating all skills..."
40+
41+
find skills -name "SKILL.md" | while read -r skill_file; do
42+
skill_dir=$(dirname "$skill_file")
43+
skill_name=$(basename "$skill_dir")
44+
45+
echo ""
46+
echo "Validating $skill_name..."
47+
48+
if skills-ref validate "$skill_dir"; then
49+
echo "✅ $skill_name is valid"
50+
else
51+
echo "❌ $skill_name validation failed"
52+
exit 1
53+
fi
54+
done
55+
56+
echo ""
57+
echo "✅ All skills validated successfully"
58+
59+
validate-publish:
60+
runs-on: ubuntu-latest
61+
permissions:
62+
contents: read
63+
64+
steps:
65+
- name: Checkout repository
66+
uses: actions/checkout@v6
67+
68+
- name: Ensure gh skill is available
69+
run: |
70+
if ! gh skill --help >/dev/null 2>&1; then
71+
echo "Installing latest gh CLI..."
72+
sudo mkdir -p -m 755 /etc/apt/keyrings
73+
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg >/dev/null
74+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list >/dev/null
75+
sudo apt-get update -qq
76+
sudo apt-get install -y -qq gh
77+
fi
78+
gh --version | head -1
79+
80+
- name: Validate with gh skill
81+
env:
82+
GH_TOKEN: ${{ github.token }}
83+
run: gh skill publish --dry-run
84+
85+
install-local:
1186
runs-on: ubuntu-latest
1287

1388
steps:
@@ -34,7 +109,6 @@ jobs:
34109
35110
echo "✅ Skills directory exists: $SKILLS_DIR"
36111
37-
# 설치된 모든 스킬 확인
38112
SKILL_COUNT=0
39113
for skill_dir in "$SKILLS_DIR"/*; do
40114
if [ -d "$skill_dir" ]; then
@@ -55,15 +129,13 @@ jobs:
55129
echo ""
56130
echo "✅ Successfully verified $SKILL_COUNT skills"
57131
58-
# 최소 1개 이상의 스킬이 설치되었는지 확인
59132
if [ $SKILL_COUNT -eq 0 ]; then
60133
echo "❌ No skills were installed"
61134
exit 1
62135
fi
63136
64-
test-remote:
137+
install-remote:
65138
runs-on: ubuntu-latest
66-
# main 브랜치에 merge된 후에만 실행
67139
if: github.ref == 'refs/heads/main'
68140

69141
steps:
@@ -85,7 +157,6 @@ jobs:
85157
86158
echo "✅ Skills directory exists: $SKILLS_DIR"
87159
88-
# 설치된 모든 스킬 확인
89160
SKILL_COUNT=0
90161
for skill_dir in "$SKILLS_DIR"/*; do
91162
if [ -d "$skill_dir" ]; then
@@ -106,7 +177,6 @@ jobs:
106177
echo ""
107178
echo "✅ Successfully verified $SKILL_COUNT skills"
108179
109-
# 최소 1개 이상의 스킬이 설치되었는지 확인
110180
if [ $SKILL_COUNT -eq 0 ]; then
111181
echo "❌ No skills were installed"
112182
exit 1

.github/workflows/release.yml

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
name: Release
2+
3+
on:
4+
workflow_dispatch:
5+
push:
6+
branches:
7+
- main
8+
9+
concurrency:
10+
group: release
11+
cancel-in-progress: false
12+
13+
jobs:
14+
publish:
15+
if: github.ref == 'refs/heads/main'
16+
runs-on: ubuntu-latest
17+
permissions:
18+
contents: write
19+
20+
steps:
21+
- name: Checkout repository
22+
uses: actions/checkout@v6
23+
24+
- name: Ensure gh skill is available
25+
run: |
26+
if ! gh skill --help >/dev/null 2>&1; then
27+
echo "Installing latest gh CLI..."
28+
sudo mkdir -p -m 755 /etc/apt/keyrings
29+
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg >/dev/null
30+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list >/dev/null
31+
sudo apt-get update -qq
32+
sudo apt-get install -y -qq gh
33+
fi
34+
gh --version | head -1
35+
36+
- name: Read plugin version
37+
id: version
38+
run: |
39+
v=$(jq -r .version .claude-plugin/plugin.json)
40+
if [[ ! "$v" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
41+
echo "❌ plugin.json#version is not semver: '$v'"
42+
exit 1
43+
fi
44+
echo "tag=v${v}" >> "$GITHUB_OUTPUT"
45+
echo "Tag will be: v${v}"
46+
47+
- name: Skip if release already exists
48+
id: gate
49+
env:
50+
GH_TOKEN: ${{ github.token }}
51+
run: |
52+
if gh release view "${{ steps.version.outputs.tag }}" >/dev/null 2>&1; then
53+
echo "ℹ️ ${{ steps.version.outputs.tag }} already released, skipping."
54+
echo "skip=true" >> "$GITHUB_OUTPUT"
55+
else
56+
echo "✅ ${{ steps.version.outputs.tag }} is available"
57+
echo "skip=false" >> "$GITHUB_OUTPUT"
58+
fi
59+
60+
- name: Publish skills
61+
if: steps.gate.outputs.skip != 'true'
62+
env:
63+
GH_TOKEN: ${{ github.token }}
64+
run: gh skill publish --tag "${{ steps.version.outputs.tag }}"

AGENTS.md

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ korean-skills/
2323
│ ├── SKILL.md # Main skill documentation (Agent Skills format)
2424
│ ├── references/ # 6 category reference files (tone, terminology, numbering, list, quotation, datetime)
2525
│ └── examples/ # Inconsistent/consistent examples
26-
├── README.md # English documentation
27-
└── README_KO.md # Korean documentation
26+
├── README.md # Korean documentation (default)
27+
└── README_EN.md # English documentation
2828
```
2929

3030
## Skills Architecture
@@ -117,16 +117,33 @@ Each skill follows the Agent Skills specification:
117117

118118
## CI/CD
119119

120-
GitHub Actions workflow (`.github/workflows/ci.yml`) has two jobs:
120+
`.github/workflows/ci.yml` runs on every PR and main push with four jobs:
121121

122-
- **`test`** (all branches): Installs all skills from the local repository (`npx skills add . --yes`) and verifies each skill has `SKILL.md` in `.agents/skills/`
123-
- **`test-remote`** (main branch only): Installs all skills from GitHub (`npx skills add daleseo/korean-skills --yes`) and verifies installation in `.agents/skills/`
122+
- **`validate-spec`**: Validates each `SKILL.md` against the Agent Skills spec using `skills-ref validate` (from `agentskills/agentskills`).
123+
- **`validate-publish`**: Runs `gh skill publish --dry-run` to check publishability before main merges.
124+
- **`install-local`**: Installs all skills from the local working tree via `npx skills add "$GITHUB_WORKSPACE" --yes` and verifies each skill landed in `.agents/skills/`.
125+
- **`install-remote`** (main only): Installs from the public GitHub source (`npx skills add daleseo/korean-skills --yes`) as a post-merge smoke test.
124126

125-
Both jobs check that at least one skill was installed successfully.
127+
`.github/workflows/release.yml` runs on main pushes only. It reads `.claude-plugin/plugin.json#version`, creates a matching `vX.Y.Z` tag if missing, and runs `gh skill publish --tag` so `gh skill install daleseo/korean-skills --pin vX.Y.Z` resolves.
128+
129+
## Releasing / Versioning
130+
131+
Three places carry version numbers, but only one matters operationally.
132+
133+
**`.claude-plugin/plugin.json#version`** — the source of truth. Bump it whenever you touch `skills/`, `.claude-plugin/`, or `.github/workflows/release.yml`. Effects:
134+
135+
- The release workflow tags a matching `vX.Y.Z` on the next main push, which is what `gh skill install daleseo/korean-skills --pin vX.Y.Z` and `claude plugin update` resolve to.
136+
- New installs always pull the latest content regardless.
137+
138+
Use semver: patch for fixes/wording, minor for new skills or pattern additions, major when removing or renaming a skill.
139+
140+
**Individual `SKILL.md#version`** (e.g. humanizer 1.6.0) — independent of the plugin version. Track skill-internal evolution there. The plugin version doesn't have to follow the highest skill version — they're separate trackers, like Apollo's pattern (apollo-skills plugin at 1.2.x while internal skills are at various 1.x).
141+
142+
**`marketplace.json#metadata.version` and `marketplace.json#plugins[0].version`** — keep aligned with `plugin.json#version` for tidiness, but no automation reads them today. CI does not enforce sync.
126143

127144
## Documentation Pattern
128145

129-
**README Split**: README.md (English) and README_KO.md (Korean) are separate files with identical structure:
146+
**README Split**: README.md (Korean, default) and README_EN.md (English) are separate files with identical structure. Korean is the default since most users of this repo are Korean speakers:
130147

131148
- Link to other language at top
132149
- Quick Start with installation commands
@@ -136,7 +153,7 @@ Both jobs check that at least one skill was installed successfully.
136153
**Documentation Hierarchy**:
137154

138155
```
139-
README.md/README_KO.md → SKILL.md → references/*.md
156+
README.md/README_EN.md → SKILL.md → references/*.md
140157
```
141158

142159
## Adding New Patterns
@@ -157,7 +174,7 @@ When adding patterns to humanizer:
157174

158175
3. **Update pattern counts**:
159176
- SKILL.md description and "총 N가지" headings
160-
- README.md and README_KO.md detection categories
177+
- README.md and README_EN.md detection categories
161178
- Reference file headers
162179

163180
4. **Update pattern classification section** in SKILL.md if adding new verification level or severity rationale

0 commit comments

Comments
 (0)