diff --git a/.github/workflows/tessl-publish.yml b/.github/workflows/tessl-publish.yml new file mode 100644 index 00000000..a6a9753f --- /dev/null +++ b/.github/workflows/tessl-publish.yml @@ -0,0 +1,50 @@ +name: Tessl Publish + +# Publishes the bun plugin to the Tessl registry as `pleaseai/bun` whenever +# release-please cuts a bun release. release-please tags components as +# `-v` (e.g. `bun-v1.3.0`) using a GitHub App token, so +# the tag push triggers this workflow. The checked-out tag already has the +# bumped version in plugins/bun/.tessl-plugin/plugin.json, so `tessl plugin +# publish` publishes exactly that version. +# +# Requires repository secret TESSL_TOKEN (create via `tessl api-key create`). +# When the secret is absent the job no-ops with a warning instead of failing. +on: + push: + tags: + - 'bun-v*' + +permissions: + id-token: write + contents: read + +jobs: + publish-bun: + name: Publish pleaseai/bun to Tessl + runs-on: ubuntu-latest + steps: + - name: Check TESSL_TOKEN is configured + id: guard + env: + TESSL_TOKEN: ${{ secrets.TESSL_TOKEN }} + run: | + if [ -z "$TESSL_TOKEN" ]; then + echo "::warning::TESSL_TOKEN not configured — skipping Tessl publish" + echo "skip=true" >> "$GITHUB_OUTPUT" + else + echo "skip=false" >> "$GITHUB_OUTPUT" + fi + + - name: Checkout + if: steps.guard.outputs.skip != 'true' + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - name: Set up Tessl CLI + if: steps.guard.outputs.skip != 'true' + uses: tesslio/setup-tessl@25ec223fc0da33b41b8044ff5ab2b85235f4f91e # v2 + with: + token: ${{ secrets.TESSL_TOKEN }} + + - name: Publish plugin + if: steps.guard.outputs.skip != 'true' + run: tessl plugin publish plugins/bun diff --git a/.github/workflows/tessl-skill-review.yml b/.github/workflows/tessl-skill-review.yml new file mode 100644 index 00000000..62096291 --- /dev/null +++ b/.github/workflows/tessl-skill-review.yml @@ -0,0 +1,51 @@ +name: Tessl Skill Review + +# Reviews the use-bun SKILL.md on PRs that touch it using the official +# tesslio/skill-review action, which runs `tessl skill review` on changed +# SKILL.md files and posts the quality scores as a PR comment. +# +# Auth: the skill-review composite runs tesslio/setup-tessl WITHOUT a token, and +# the tessl CLI authenticates from the TESSL_TOKEN env var — so it is provided at +# job level here. When the secret is absent the job no-ops with a warning instead +# of failing the PR. +# +# Pinning: skill-review has no tagged release yet, so it is pinned to a main +# commit SHA. Bump the SHA to adopt upstream changes. +on: + pull_request: + branches: [main] + paths: + - 'plugins/bun/skills/**' + +permissions: + contents: read + pull-requests: write # required for the action to post its review comment + +jobs: + review-use-bun: + name: Review use-bun skill + runs-on: ubuntu-latest + env: + TESSL_TOKEN: ${{ secrets.TESSL_TOKEN }} + steps: + - name: Check TESSL_TOKEN is configured + id: guard + run: | + if [ -z "$TESSL_TOKEN" ]; then + echo "::warning::TESSL_TOKEN not configured — skipping Tessl skill review" + echo "skip=true" >> "$GITHUB_OUTPUT" + else + echo "skip=false" >> "$GITHUB_OUTPUT" + fi + + - name: Checkout + if: steps.guard.outputs.skip != 'true' + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - name: Review changed skills + if: steps.guard.outputs.skip != 'true' + uses: tesslio/skill-review@22e928dd837202b2b1d1397e0114c92e0fae5ead # main (no tagged release) + with: + path: plugins/bun + comment: 'true' + fail-threshold: '0' diff --git a/plugins/bun/.tessl-plugin/plugin.json b/plugins/bun/.tessl-plugin/plugin.json new file mode 100644 index 00000000..db363976 --- /dev/null +++ b/plugins/bun/.tessl-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "pleaseai/bun", + "description": "All-in-one JavaScript/TypeScript toolkit: fast runtime, package manager, test runner, and bundler. Version-aware skill backed by the ask CLI.", + "version": "1.2.0", + "author": { + "name": "Bun", + "url": "https://github.com/oven-sh/bun" + }, + "skills": [ + "skills/use-bun" + ] +} diff --git a/plugins/bun/README.md b/plugins/bun/README.md index a214223c..357a1d30 100644 --- a/plugins/bun/README.md +++ b/plugins/bun/README.md @@ -11,8 +11,9 @@ The `SKILL.md` format is shared by Claude Code, Cursor, Codex CLI, Gemini CLI, G | Claude Code | `.claude-plugin/plugin.json` | `./skills/` | | Codex | `.codex-plugin/plugin.json` | `./skills/` | | Antigravity | `plugin.json` (at plugin root) | `./skills/` | +| Tessl | `.tessl-plugin/plugin.json` | `skills/use-bun` | -All three tools read the same `skills/use-bun/SKILL.md`. Antigravity additionally accepts `mcp_config.json`, `hooks.json`, and `rules/` at plugin root if needed (this plugin uses none of them). +All tools read the same `skills/use-bun/SKILL.md`. Antigravity additionally accepts `mcp_config.json`, `hooks.json`, and `rules/` at plugin root if needed (this plugin uses none of them). Tessl publishes the skill to its registry as `pleaseai/bun` (see [Tessl](#tessl) below). ## Install @@ -52,6 +53,26 @@ cp -R /skills/use-bun ~/.gemini/antigravity/skills/ See the [Antigravity plugins docs](https://antigravity.google/docs/plugins) and the [Authoring Skills](https://codelabs.developers.google.com/getting-started-with-antigravity-skills) codelab for background. +### Tessl + +This plugin ships a [Tessl](https://tessl.io) manifest (`.tessl-plugin/plugin.json`) so the `use-bun` skill can be published to and installed from the Tessl registry as `pleaseai/bun`. + +```bash +# Install from the registry +tessl install pleaseai/bun + +# Validate / publish from this directory (maintainers) +tessl plugin lint plugins/bun +tessl plugin publish # requires `tessl login` or a TESSL_TOKEN +``` + +The manifest `version` is kept in sync with the other manifests by release-please (it is a `$.version` extra-file alongside `.claude-plugin`, `.codex-plugin`, and root `plugin.json`). Tessl caps a skill's `description` at 1024 characters, so `skills/use-bun/SKILL.md` keeps its description within that limit. + +CI automates this (requires a `TESSL_TOKEN` repo secret; both jobs no-op without it): + +- **`.github/workflows/tessl-publish.yml`** — publishes to the registry when release-please tags a release (`bun-v*`). +- **`.github/workflows/tessl-skill-review.yml`** — runs the [`tesslio/skill-review`](https://github.com/tesslio/skill-review) action on PRs that touch `plugins/bun/skills/**`, posting the skill's quality score as a PR comment. + ## Prerequisites - Bun installed (`curl -fsSL https://bun.sh/install | bash`) @@ -64,6 +85,7 @@ plugins/bun/ ├── .claude-plugin/plugin.json # Claude Code manifest ├── .codex-plugin/plugin.json # Codex manifest ├── plugin.json # Antigravity marker file +├── .tessl-plugin/plugin.json # Tessl plugin manifest (pleaseai/bun) ├── README.md # this file └── skills/use-bun/ ├── SKILL.md # entry point — universal across all tools diff --git a/release-please-config.json b/release-please-config.json index 008f4811..69f0d388 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -534,6 +534,11 @@ "type": "json", "path": "plugin.json", "jsonpath": "$.version" + }, + { + "type": "json", + "path": ".tessl-plugin/plugin.json", + "jsonpath": "$.version" } ] },