From ab116bd7ed1c3ce0c8d62616ff1478d31ff8d418 Mon Sep 17 00:00:00 2001 From: "very-good-code-bot[bot]" <269805761+very-good-code-bot[bot]@users.noreply.github.com> Date: Fri, 29 May 2026 12:55:46 +0000 Subject: [PATCH 1/6] feat: add dart_skills_lint reusable workflow Closes #449 Co-authored-by: marcossevilla --- .github/workflows/dart_skills_lint.yml | 55 ++++++++++++++++++++ README.md | 3 ++ site/docs/workflows/dart_skills_lint.md | 68 +++++++++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 .github/workflows/dart_skills_lint.yml create mode 100644 site/docs/workflows/dart_skills_lint.md diff --git a/.github/workflows/dart_skills_lint.yml b/.github/workflows/dart_skills_lint.yml new file mode 100644 index 00000000..079e9351 --- /dev/null +++ b/.github/workflows/dart_skills_lint.yml @@ -0,0 +1,55 @@ +name: Dart Skills Lint Workflow + +on: + workflow_call: + inputs: + skills_directories: + required: false + type: string + default: "" + description: "Space-separated list of root directories containing skill sub-folders to validate (passed as --skills-directory flags). If empty, dart_skills_lint falls back to its defaults (.claude/skills and .agents/skills)." + dart_skills_lint_version: + required: false + type: string + default: "" + description: "Version constraint for dart pub global activate dart_skills_lint (e.g., ^0.2.0). If empty, activates the latest version." + dart_sdk: + required: false + type: string + default: "stable" + runs_on: + required: false + type: string + default: "ubuntu-latest" + working_directory: + required: false + type: string + default: "." + +jobs: + build: + defaults: + run: + working-directory: ${{inputs.working_directory}} + + runs-on: ${{inputs.runs_on}} + + steps: + - name: 📚 Git Checkout + uses: actions/checkout@v6 + + - name: 🎯 Setup Dart + uses: dart-lang/setup-dart@v1.7.2 + with: + sdk: ${{inputs.dart_sdk}} + + - name: 📦 Activate dart_skills_lint + run: dart pub global activate dart_skills_lint ${{inputs.dart_skills_lint_version}} + + - name: 🔍 Lint Skills + run: | + FLAGS="" + for dir in ${{inputs.skills_directories}}; do + FLAGS="$FLAGS --skills-directory $dir" + done + dart pub global run dart_skills_lint $FLAGS diff --git a/README.md b/README.md index cf118e7b..6f8c9452 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,9 @@ uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/mason_publish.yml # A reusable workflow to keep track of the rights and restrictions external dependencies might impose on Dart or Flutter projects uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/license_check.yml@v1 + +# A reusable workflow for linting agent skill directories with dart_skills_lint +uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/dart_skills_lint.yml@v1 ``` For configuration details, check out our [official docs][workflows_docs]. diff --git a/site/docs/workflows/dart_skills_lint.md b/site/docs/workflows/dart_skills_lint.md new file mode 100644 index 00000000..2e14e39d --- /dev/null +++ b/site/docs/workflows/dart_skills_lint.md @@ -0,0 +1,68 @@ +--- +sidebar_position: 10 +--- + +# Dart Skills Lint + +We use [`dart_skills_lint`](https://github.com/flutter/skills/tree/main/tool/dart_skills_lint) to validate agent skill directories against the [Agent Skills Specification](https://github.com/flutter/skills/blob/main/tool/dart_skills_lint/documentation/knowledge/SPECIFICATION.md). + +This workflow only validates skill linting — no tests, coverage, formatting, or pana scoring. It serves as a presubmit check to ensure skill definitions (e.g., `SKILL.md` files, YAML frontmatter, directory structure, relative paths) are valid. + +## Steps + +The dart skills lint workflow consists of the following steps: + +1. Git checkout +2. Setup Dart +3. Activate `dart_skills_lint` +4. Lint skills + +## Inputs + +### `skills_directories` + +**Optional** Space-separated list of root directories containing skill sub-folders to validate (passed as `--skills-directory` flags). If empty, `dart_skills_lint` falls back to its defaults (`.claude/skills` and `.agents/skills`). + +**Default** `""` + +### `dart_skills_lint_version` + +**Optional** Version constraint for `dart pub global activate dart_skills_lint` (e.g., `^0.2.0`). If empty, activates the latest version. + +**Default** `""` + +### `dart_sdk` + +**Optional** The Dart SDK version to use. + +**Default** `"stable"` + +### `working_directory` + +**Optional** The path to the root of the project. + +**Default** `"."` + +### `runs_on` + +**Optional** The operating system on which to run the workflow. + +**Default** `"ubuntu-latest"` + +## Example Usage + +```yaml +name: Lint Skills + +on: + pull_request: + paths: + - '.agents/skills/**' + - '.claude/skills/**' + +jobs: + lint-skills: + uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/dart_skills_lint.yml@v1 + with: + skills_directories: ".agents/skills .claude/skills" +``` From f8127110884339d39dacff7421ae8eb84e97e971 Mon Sep 17 00:00:00 2001 From: "very-good-code-bot[bot]" <269805761+very-good-code-bot[bot]@users.noreply.github.com> Date: Wed, 3 Jun 2026 11:14:12 +0000 Subject: [PATCH 2/6] fix: address review feedback on PR #450 Co-authored-by: marcossevilla --- site/docs/workflows/dart_skills_lint.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/docs/workflows/dart_skills_lint.md b/site/docs/workflows/dart_skills_lint.md index 2e14e39d..d2e8b1b0 100644 --- a/site/docs/workflows/dart_skills_lint.md +++ b/site/docs/workflows/dart_skills_lint.md @@ -6,7 +6,7 @@ sidebar_position: 10 We use [`dart_skills_lint`](https://github.com/flutter/skills/tree/main/tool/dart_skills_lint) to validate agent skill directories against the [Agent Skills Specification](https://github.com/flutter/skills/blob/main/tool/dart_skills_lint/documentation/knowledge/SPECIFICATION.md). -This workflow only validates skill linting — no tests, coverage, formatting, or pana scoring. It serves as a presubmit check to ensure skill definitions (e.g., `SKILL.md` files, YAML frontmatter, directory structure, relative paths) are valid. +This workflow only validates skill linting — no tests, coverage, formatting, or pana scoring. It serves as a pre-merge check to ensure skill definitions (e.g., `SKILL.md` files, YAML front matter, directory structure, relative paths) are valid. ## Steps From 411d63fe04cef4e9718de9f4c84222fd906fe17c Mon Sep 17 00:00:00 2001 From: "very-good-code-bot[bot]" <269805761+very-good-code-bot[bot]@users.noreply.github.com> Date: Wed, 3 Jun 2026 11:27:02 +0000 Subject: [PATCH 3/6] fix: address review feedback on PR #450 Co-authored-by: marcossevilla --- site/docs/workflows/dart_skills_lint.md | 2 +- site/package-lock.json | 8 ++++---- site/package.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/site/docs/workflows/dart_skills_lint.md b/site/docs/workflows/dart_skills_lint.md index d2e8b1b0..124633b1 100644 --- a/site/docs/workflows/dart_skills_lint.md +++ b/site/docs/workflows/dart_skills_lint.md @@ -64,5 +64,5 @@ jobs: lint-skills: uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/dart_skills_lint.yml@v1 with: - skills_directories: ".agents/skills .claude/skills" + skills_directories: '.agents/skills .claude/skills' ``` diff --git a/site/package-lock.json b/site/package-lock.json index 8ecff1bf..de4d4f2e 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -27,7 +27,7 @@ "eslint-plugin-jest": "^29.15.0", "globals": "^17.4.0", "jest": "^30.3.0", - "prettier": "^3.8.1", + "prettier": "^3.8.3", "typescript": "~5.9.3" }, "engines": { @@ -19989,9 +19989,9 @@ } }, "node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, "license": "MIT", "bin": { diff --git a/site/package.json b/site/package.json index 08ab485f..404fd026 100644 --- a/site/package.json +++ b/site/package.json @@ -37,7 +37,7 @@ "eslint-plugin-jest": "^29.15.0", "globals": "^17.4.0", "jest": "^30.3.0", - "prettier": "^3.8.1", + "prettier": "^3.8.3", "typescript": "~5.9.3" }, "browserslist": { From cb9bd9de87102f38f6dc49454e5cfd592883a7b3 Mon Sep 17 00:00:00 2001 From: "very-good-code-bot[bot]" <269805761+very-good-code-bot[bot]@users.noreply.github.com> Date: Wed, 3 Jun 2026 11:35:06 +0000 Subject: [PATCH 4/6] fix: address review feedback on PR #450 Co-authored-by: marcossevilla --- .github/workflows/ci.yml | 9 ++++++++- examples/dart_skills_lint/README.md | 9 +++++++++ .../dart_skills_lint/skills/example-skill/SKILL.md | 10 ++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 examples/dart_skills_lint/README.md create mode 100644 examples/dart_skills_lint/skills/example-skill/SKILL.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 624e57d6..df2d27c6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,10 +36,16 @@ jobs: min_score: 95 working_directory: examples/flutter_package + verify-dart-skills-lint: + uses: ./.github/workflows/dart_skills_lint.yml + with: + working_directory: examples/dart_skills_lint + skills_directories: "skills" + verify-semantic-pull-request: uses: ./.github/workflows/semantic_pull_request.yml with: - scopes: "dart_package, deps, flutter_package, pana, semantic_pull_request, spell_check" + scopes: "dart_package, dart_skills_lint, deps, flutter_package, pana, semantic_pull_request, spell_check" verify-spell-check: uses: ./.github/workflows/spell_check.yml @@ -73,6 +79,7 @@ jobs: verify-flutter, verify-pana-dart, verify-pana-flutter, + verify-dart-skills-lint, verify-semantic-pull-request, verify-spell-check, verify-license-check, diff --git a/examples/dart_skills_lint/README.md b/examples/dart_skills_lint/README.md new file mode 100644 index 00000000..2b6fb5db --- /dev/null +++ b/examples/dart_skills_lint/README.md @@ -0,0 +1,9 @@ +# dart_skills_lint + +[![License: MIT][license_badge]][license_link] + +An example skills directory used to verify the `dart_skills_lint` reusable +workflow. + +[license_badge]: https://img.shields.io/badge/license-MIT-blue.svg +[license_link]: https://opensource.org/licenses/MIT diff --git a/examples/dart_skills_lint/skills/example-skill/SKILL.md b/examples/dart_skills_lint/skills/example-skill/SKILL.md new file mode 100644 index 00000000..fc917016 --- /dev/null +++ b/examples/dart_skills_lint/skills/example-skill/SKILL.md @@ -0,0 +1,10 @@ +--- +name: example-skill +description: An example agent skill used to verify the dart_skills_lint reusable workflow. +--- + +# Example Skill + +This skill exists solely as a fixture for the `dart_skills_lint` reusable +workflow. It demonstrates the minimum structure required by the +[Agent Skills Specification](https://github.com/flutter/skills/blob/main/tool/dart_skills_lint/documentation/knowledge/SPECIFICATION.md). From c0cbf227993010c20990987f6df3e70e5a758bab Mon Sep 17 00:00:00 2001 From: "very-good-code-bot[bot]" <269805761+very-good-code-bot[bot]@users.noreply.github.com> Date: Thu, 4 Jun 2026 10:50:16 +0000 Subject: [PATCH 5/6] fix: address review feedback on PR #450 Co-authored-by: marcossevilla --- .github/workflows/dart_skills_lint.yml | 14 +++++++++++--- site/docs/workflows/dart_skills_lint.md | 6 +++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.github/workflows/dart_skills_lint.yml b/.github/workflows/dart_skills_lint.yml index 079e9351..85fb1ad1 100644 --- a/.github/workflows/dart_skills_lint.yml +++ b/.github/workflows/dart_skills_lint.yml @@ -8,11 +8,11 @@ on: type: string default: "" description: "Space-separated list of root directories containing skill sub-folders to validate (passed as --skills-directory flags). If empty, dart_skills_lint falls back to its defaults (.claude/skills and .agents/skills)." - dart_skills_lint_version: + dart_skills_lint_ref: required: false type: string default: "" - description: "Version constraint for dart pub global activate dart_skills_lint (e.g., ^0.2.0). If empty, activates the latest version." + description: "Git ref (branch, tag, or commit SHA) of flutter/skills to activate dart_skills_lint from. If empty, uses the default branch." dart_sdk: required: false type: string @@ -44,7 +44,15 @@ jobs: sdk: ${{inputs.dart_sdk}} - name: 📦 Activate dart_skills_lint - run: dart pub global activate dart_skills_lint ${{inputs.dart_skills_lint_version}} + run: | + REF_FLAG="" + if [ -n "${{inputs.dart_skills_lint_ref}}" ]; then + REF_FLAG="--git-ref ${{inputs.dart_skills_lint_ref}}" + fi + dart pub global activate \ + --source git https://github.com/flutter/skills.git \ + --git-path tool/dart_skills_lint \ + $REF_FLAG - name: 🔍 Lint Skills run: | diff --git a/site/docs/workflows/dart_skills_lint.md b/site/docs/workflows/dart_skills_lint.md index 124633b1..93749889 100644 --- a/site/docs/workflows/dart_skills_lint.md +++ b/site/docs/workflows/dart_skills_lint.md @@ -14,7 +14,7 @@ The dart skills lint workflow consists of the following steps: 1. Git checkout 2. Setup Dart -3. Activate `dart_skills_lint` +3. Activate `dart_skills_lint` from the [`flutter/skills`](https://github.com/flutter/skills) git repository 4. Lint skills ## Inputs @@ -25,9 +25,9 @@ The dart skills lint workflow consists of the following steps: **Default** `""` -### `dart_skills_lint_version` +### `dart_skills_lint_ref` -**Optional** Version constraint for `dart pub global activate dart_skills_lint` (e.g., `^0.2.0`). If empty, activates the latest version. +**Optional** Git ref (branch, tag, or commit SHA) of [`flutter/skills`](https://github.com/flutter/skills) to activate `dart_skills_lint` from. If empty, uses the default branch. **Default** `""` From 7b2ba0dc4e2924a7b814ea106875ff0a9373b16b Mon Sep 17 00:00:00 2001 From: "very-good-code-bot[bot]" <269805761+very-good-code-bot[bot]@users.noreply.github.com> Date: Fri, 19 Jun 2026 10:42:46 +0000 Subject: [PATCH 6/6] fix(ci): address failing checks on PR #450 (attempt 1/3) --- .github/workflows/dart_skills_lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dart_skills_lint.yml b/.github/workflows/dart_skills_lint.yml index 85fb1ad1..7d11c7e5 100644 --- a/.github/workflows/dart_skills_lint.yml +++ b/.github/workflows/dart_skills_lint.yml @@ -60,4 +60,4 @@ jobs: for dir in ${{inputs.skills_directories}}; do FLAGS="$FLAGS --skills-directory $dir" done - dart pub global run dart_skills_lint $FLAGS + dart pub global run dart_skills_lint:cli $FLAGS