From 4603098a56cf28a4a22eeaedc360f54b5abbf557 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Tue, 7 Apr 2026 11:39:18 -0400 Subject: [PATCH] Setup precommit linting, formatting, analyzing --- .../workflows/dart_skills_lint_workflow.yaml | 65 +++++++++++++++++++ tool/dart_skills_lint/analysis_options.yaml | 3 - tool/dart_skills_lint/dart_skills_lint.yaml | 1 + tool/dart_skills_lint/lib/src/validator.dart | 2 - .../test/absolute_paths_test.dart | 4 +- .../test/resolve_rules_test.dart | 8 +-- 6 files changed, 72 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/dart_skills_lint_workflow.yaml diff --git a/.github/workflows/dart_skills_lint_workflow.yaml b/.github/workflows/dart_skills_lint_workflow.yaml new file mode 100644 index 00000000..6eddd30d --- /dev/null +++ b/.github/workflows/dart_skills_lint_workflow.yaml @@ -0,0 +1,65 @@ +name: dart_skills_lint +permissions: read-all + +on: + pull_request: + paths: + - 'skills/**' + - 'tool/dart_skills_lint/**' + - '.github/workflows/dart_skills_lint_workflow.yaml' + push: + branches: [ main ] + paths: + - 'skills/**' + - 'tool/dart_skills_lint/**' + - '.github/workflows/dart_skills_lint_workflow.yaml' + schedule: + - cron: '0 0 * * 0' # weekly + +defaults: + run: + working-directory: tool/dart_skills_lint + +jobs: + analyze_and_test: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v6 + - uses: dart-lang/setup-dart@v1 + with: + sdk: stable + + - run: dart pub get + + - run: dart analyze --fatal-infos + + - run: dart test + + validate_skills: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: dart-lang/setup-dart@v1 + with: + sdk: stable + + - run: dart pub get + + - name: Validate skills + run: dart run dart_skills_lint + + formatting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: dart-lang/setup-dart@v1 + with: + sdk: stable + + - run: dart pub get + + - run: dart format --output=none --set-exit-if-changed . diff --git a/tool/dart_skills_lint/analysis_options.yaml b/tool/dart_skills_lint/analysis_options.yaml index d83ddfd2..f0e4ff4a 100644 --- a/tool/dart_skills_lint/analysis_options.yaml +++ b/tool/dart_skills_lint/analysis_options.yaml @@ -9,9 +9,6 @@ # # - analysis_options.yaml (this file) # - https://github.com/flutter/packages/blob/main/analysis_options.yaml -# -# This file contains the analysis options used for code in the flutter/flutter -# repository. analyzer: language: diff --git a/tool/dart_skills_lint/dart_skills_lint.yaml b/tool/dart_skills_lint/dart_skills_lint.yaml index e17fa927..d4f69395 100644 --- a/tool/dart_skills_lint/dart_skills_lint.yaml +++ b/tool/dart_skills_lint/dart_skills_lint.yaml @@ -1,6 +1,7 @@ dart_skills_lint: rules: check-relative-paths: error + check-absolute-paths: error directories: - path: ".agents/skills" ignore_file: ".agents/skills/ignore.json" diff --git a/tool/dart_skills_lint/lib/src/validator.dart b/tool/dart_skills_lint/lib/src/validator.dart index d34d07a4..eccb0726 100644 --- a/tool/dart_skills_lint/lib/src/validator.dart +++ b/tool/dart_skills_lint/lib/src/validator.dart @@ -55,8 +55,6 @@ class Validator { return _ruleOverrides[rule.name] ?? rule.defaultSeverity; } - - static const _nameField = 'name'; static const _descriptionField = 'description'; static const _licenseField = 'license'; diff --git a/tool/dart_skills_lint/test/absolute_paths_test.dart b/tool/dart_skills_lint/test/absolute_paths_test.dart index 086f55a1..35a6de8b 100644 --- a/tool/dart_skills_lint/test/absolute_paths_test.dart +++ b/tool/dart_skills_lint/test/absolute_paths_test.dart @@ -35,8 +35,8 @@ void main() { final ValidationResult result = await validator.validate(skillDir); expect(result.isValid, isTrue); - expect( - result.warnings, contains(contains('Absolute filepath found in link: /absolute/path.md'))); + expect(result.warnings, + contains(contains('Absolute filepath found in link: /absolute/path.md'))); }); test('flags windows absolute path starting with drive letter as error', () async { diff --git a/tool/dart_skills_lint/test/resolve_rules_test.dart b/tool/dart_skills_lint/test/resolve_rules_test.dart index 61e4f671..a914dbea 100644 --- a/tool/dart_skills_lint/test/resolve_rules_test.dart +++ b/tool/dart_skills_lint/test/resolve_rules_test.dart @@ -23,7 +23,7 @@ void main() { test('returns defaults when no args and empty config', () { final ArgResults results = createParser().parse([]); final config = Configuration(); - + final Map resolved = resolveRules(results, config); expect(resolved[relativePathsCheck.name], relativePathsCheck.defaultSeverity); @@ -41,7 +41,7 @@ void main() { relativePathsCheck.name: AnalysisSeverity.error, absolutePathsCheck.name: AnalysisSeverity.warning, }); - + final Map resolved = resolveRules(results, config); expect(resolved[relativePathsCheck.name], AnalysisSeverity.error); @@ -55,7 +55,7 @@ void main() { final config = Configuration(configuredRules: { relativePathsCheck.name: AnalysisSeverity.error, }); - + final Map resolved = resolveRules(results, config); expect(resolved[relativePathsCheck.name], AnalysisSeverity.warning); @@ -66,7 +66,7 @@ void main() { final config = Configuration(configuredRules: { validYamlMetadataCheck.name: AnalysisSeverity.warning, }); - + final Map resolved = resolveRules(results, config); expect(resolved[validYamlMetadataCheck.name], AnalysisSeverity.disabled);