Skip to content

refactor(plugin-dev): make plugin self-contained and migrate commands to skills #55

refactor(plugin-dev): make plugin self-contained and migrate commands to skills

refactor(plugin-dev): make plugin self-contained and migrate commands to skills #55

name: Tessl Skill Review
# Reviews changed SKILL.md files on PRs using the official tesslio/skill-review
# action, which runs `tessl skill review` and posts the quality scores as a PR
# comment. The action scans the PR diff for changed SKILL.md files (as
# repo-relative paths) under the `path` root, so `path` is the repo root (`.`)
# and every plugin's skills are covered — not just one. (Passing a sub-directory
# as `path` double-prefixes the repo-relative changed paths and fails with
# "SKILL.md not found at plugins/<dir>/plugins/<dir>/...".)
#
# 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/**/skills/**'
permissions:
contents: read
pull-requests: write # required for the action to post its review comment
jobs:
review:
name: Review changed skills
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: '.'
comment: 'true'
fail-threshold: '0'