Skip to content

Commit 04dccdd

Browse files
v1.3.0: release pipeline + SKILL drift detection + agent skills positioning
- .github/workflows/validate.yml: lints gemini-extension.json (jq empty) and asserts skills/using-ship/SKILL.md is byte-identical to the canonical https://github.com/shipstatic/ship/blob/main/SKILL.md. Runs on every push and PR. Permanently solves the propagation gap between the two repos. - .github/workflows/release.yml: triggers on v* tag push, verifies the tag matches gemini-extension.json version, creates a GitHub Release with auto-generated notes. Aligns with how 5/6 official Gemini extensions ship. - README: clarifies that the plugin is distributed as a Gemini CLI extension but the underlying SKILL.md uses the open Agent Skills standard (agentskills.io) — same content powers 35+ skills-aware tools including Claude, Claude Code, Cursor, GitHub Copilot, VS Code, and Codex. - SKILL.md: re-synced to current canonical at shipstatic/ship main; future drift will be caught by validate.yml.
1 parent a17ec61 commit 04dccdd

5 files changed

Lines changed: 65 additions & 3 deletions

File tree

.github/workflows/release.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: write
11+
12+
jobs:
13+
release:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: actions/checkout@v4
17+
18+
- name: Verify tag matches gemini-extension.json version
19+
run: |
20+
TAG="${GITHUB_REF_NAME#v}"
21+
MANIFEST=$(jq -r .version gemini-extension.json)
22+
if [ "$TAG" != "$MANIFEST" ]; then
23+
echo "::error title=Version mismatch::Tag $GITHUB_REF_NAME does not match gemini-extension.json version ($MANIFEST)"
24+
exit 1
25+
fi
26+
27+
- name: Create GitHub Release
28+
env:
29+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
30+
run: |
31+
gh release create "$GITHUB_REF_NAME" \
32+
--title "$GITHUB_REF_NAME" \
33+
--generate-notes

.github/workflows/validate.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
name: Validate
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
workflow_dispatch:
9+
10+
jobs:
11+
validate:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v4
15+
16+
- name: Validate gemini-extension.json is well-formed JSON
17+
run: jq empty gemini-extension.json
18+
19+
- name: Detect SKILL.md drift from canonical (npm/ship/SKILL.md)
20+
# The canonical SKILL.md lives next to the @shipstatic/ship CLI it teaches.
21+
# This plugin's copy must stay byte-identical — drift = stale instructions.
22+
run: |
23+
curl -fsSL https://raw.githubusercontent.com/shipstatic/ship/main/SKILL.md \
24+
-o /tmp/canonical-SKILL.md
25+
if ! diff -q /tmp/canonical-SKILL.md skills/using-ship/SKILL.md; then
26+
echo "::error title=SKILL drift detected::skills/using-ship/SKILL.md has drifted from https://github.com/shipstatic/ship/blob/main/SKILL.md. Sync with: cp ../../npm/ship/SKILL.md skills/using-ship/SKILL.md"
27+
diff /tmp/canonical-SKILL.md skills/using-ship/SKILL.md || true
28+
exit 1
29+
fi

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
AI plugin for [ShipStatic](https://shipstatic.com) — deploy static websites, landing pages, and prototypes instantly from your AI assistant.
44

5-
Supports Claude Code, Cursor, and Gemini.
5+
Distributed as a Gemini CLI extension. The underlying SKILL.md uses the open [Agent Skills](https://agentskills.io) standard, so the same instructional content powers any of the [35+ skills-aware tools](https://agentskills.io/clients)Claude, Claude Code, Cursor, GitHub Copilot, VS Code, OpenAI Codex, Goose, and more.
66

77
## Prerequisite
88

gemini-extension.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ship",
3-
"version": "1.2.1",
3+
"version": "1.3.0",
44
"description": "Deploy static sites instantly — no account required",
55
"contextFileName": "skills/using-ship/SKILL.md",
66
"settings": [

skills/using-ship/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ ship ./dist --password "hunter22" # protect deployment
9191
SHIP_PASSWORD="hunter22" ship ./dist # via env var
9292
```
9393

94-
Visitors get an unlock page until they enter the password. Length: 6–128 characters; whitespace is significant. Set per-deployment at upload time — cannot be added or changed later (deploy a new version to rotate). Works on both internal (`*.shipstatic.com`) and custom domains. **Always show the password to the user** if you set one — they need it to view the site.
94+
Visitors get an unlock page until they enter the password. Length: 6–128 characters. Set per-deployment at upload time — cannot be added or changed later (deploy a new version to rotate). Works on both internal (`*.shipstatic.com`) and custom domains.
9595

9696
### SPA routing
9797

0 commit comments

Comments
 (0)