Skip to content

Commit da556fa

Browse files
chore: add release-please, CI workflows, and changelog
- release-please config (simple type, v1.0.0) - CI workflow validating skill frontmatter and JSON configs - CodeQL weekly security scan - CHANGELOG.md with initial v1.0.0 entry - Updated .gitignore to match elnora-cli/mcp-server Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 0a2be9a commit da556fa

7 files changed

Lines changed: 170 additions & 2 deletions

File tree

.github/workflows/ci.yml

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
permissions:
10+
contents: read
11+
12+
concurrency:
13+
group: ci-${{ github.ref }}
14+
cancel-in-progress: true
15+
16+
jobs:
17+
validate:
18+
name: Validate Skills
19+
runs-on: ubuntu-latest
20+
steps:
21+
- uses: actions/checkout@v4
22+
23+
- name: Check marketplace.json is valid JSON
24+
run: python3 -c "import json; json.load(open('.claude-plugin/marketplace.json'))"
25+
26+
- name: Check plugin.json is valid JSON
27+
run: python3 -c "import json; json.load(open('elnora/.claude-plugin/plugin.json'))"
28+
29+
- name: Validate SKILL.md files exist and have frontmatter
30+
run: |
31+
errors=0
32+
for skill_dir in elnora/skills/*/; do
33+
skill_name=$(basename "$skill_dir")
34+
skill_file="$skill_dir/SKILL.md"
35+
if [ ! -f "$skill_file" ]; then
36+
echo "ERROR: Missing $skill_file"
37+
errors=$((errors + 1))
38+
continue
39+
fi
40+
# Check frontmatter exists
41+
if ! head -1 "$skill_file" | grep -q '^---$'; then
42+
echo "ERROR: $skill_file missing frontmatter"
43+
errors=$((errors + 1))
44+
fi
45+
# Check name matches directory
46+
name=$(sed -n 's/^name: *//p' "$skill_file" | head -1)
47+
if [ "$name" != "$skill_name" ]; then
48+
echo "ERROR: $skill_file name '$name' does not match directory '$skill_name'"
49+
errors=$((errors + 1))
50+
fi
51+
done
52+
if [ $errors -gt 0 ]; then
53+
echo "$errors validation error(s) found"
54+
exit 1
55+
fi
56+
echo "All skills validated successfully"
57+
58+
- name: Check skill line counts (warn if over 500)
59+
run: |
60+
for skill_file in elnora/skills/*/SKILL.md; do
61+
lines=$(wc -l < "$skill_file")
62+
if [ "$lines" -gt 500 ]; then
63+
echo "WARNING: $skill_file has $lines lines (recommended: < 500)"
64+
fi
65+
done

.github/workflows/codeql.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: CodeQL Security Analysis
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
schedule:
9+
- cron: '0 3 * * 0'
10+
workflow_dispatch:
11+
12+
concurrency:
13+
group: codeql-${{ github.ref }}
14+
cancel-in-progress: true
15+
16+
jobs:
17+
analyze:
18+
name: Analyze
19+
if: ${{ github.repository_visibility == 'public' }}
20+
runs-on: ubuntu-latest
21+
permissions:
22+
actions: read
23+
contents: read
24+
security-events: write
25+
steps:
26+
- uses: actions/checkout@v4
27+
- uses: github/codeql-action/init@v3
28+
with:
29+
languages: javascript-typescript
30+
queries: security-extended
31+
- uses: github/codeql-action/autobuild@v3
32+
- uses: github/codeql-action/analyze@v3
33+
with:
34+
category: "/language:javascript-typescript"
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
name: Release Please
2+
3+
on:
4+
push:
5+
branches: [main]
6+
7+
permissions:
8+
contents: write
9+
pull-requests: write
10+
11+
jobs:
12+
release-please:
13+
name: Release Please
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: googleapis/release-please-action@v4
17+
id: release
18+
with:
19+
token: ${{ secrets.RELEASE_TOKEN }}

.gitignore

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,25 @@
1+
# Dependencies
12
node_modules/
3+
4+
# Environment files
25
.env
3-
.env.*
4-
!.env.template
6+
.env.local
7+
.env.*.local
8+
9+
# OS files
510
.DS_Store
11+
Thumbs.db
12+
13+
# IDE
14+
.vscode/
15+
.idea/
16+
17+
# Coverage
18+
coverage/
19+
20+
# Logs
21+
*.log
22+
23+
# Claude Code local config
624
*.local.md
725
.claude/settings.local.json

.release-please-manifest.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
".": "1.0.0"
3+
}

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Changelog
2+
3+
## [1.0.0](https://github.com/Elnora-AI/elnora-plugins/releases/tag/v1.0.0) (2026-03-06)
4+
5+
### Features
6+
7+
* Initial release of the Elnora plugins marketplace
8+
* **elnora plugin**: 8 Agent Skills for bioprotocol generation and lab workflow management
9+
* `elnora-platform` — router skill with progressive disclosure
10+
* `elnora-tasks` — task management and protocol generation
11+
* `elnora-files` — file browsing, versioning, upload/download
12+
* `elnora-projects` — project CRUD and member management
13+
* `elnora-search` — cross-project full-text search
14+
* `elnora-orgs` — organization management, billing, shared library
15+
* `elnora-folders` — project folder hierarchy
16+
* `elnora-admin` — health checks, API keys, audit logs
17+
* **`/elnora:protocol` command** — one-shot bioprotocol generation
18+
* MCP server integration at `mcp.elnora.ai/mcp` (OAuth 2.1 + API key auth)
19+
* Universal compatibility: Claude Code, Cursor, Codex, VS Code Copilot, Gemini CLI, and more

release-please-config.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"packages": {
3+
".": {
4+
"release-type": "simple",
5+
"package-name": "elnora-plugins",
6+
"changelog-path": "CHANGELOG.md",
7+
"bump-minor-pre-major": true
8+
}
9+
}
10+
}

0 commit comments

Comments
 (0)