Skip to content

feat(ci): add reusable surface-lint workflow#1

Merged
ben-miru merged 5 commits into
mainfrom
feat/reusable-surface-lint
Apr 15, 2026
Merged

feat(ci): add reusable surface-lint workflow#1
ben-miru merged 5 commits into
mainfrom
feat/reusable-surface-lint

Conversation

@ben-miru

@ben-miru ben-miru commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds a reusable surface-lint workflow callable via workflow_call from any org repo
  • Runs yamllint, shellcheck, and actionlint with SHA-pinned actions
  • Yamllint always scans . using the repo's .yamllint.yml — ignores are configured in that config file via yamllint's native ignore: directive
  • Shellcheck always scans ./scripts — path exclusions via shellcheck-ignore input (shellcheck has no config-level path ignores)
  • Only two inputs: runs-on (default ubuntu-latest) and shellcheck-ignore (default empty)
  • Adds lint configs and a self-linting ci.yml that dogfoods the reusable workflow

Consumer usage

surface-lint:
  uses: mirurobotics/.github/.github/workflows/surface-lint.yml@main
  with:
    runs-on: ubuntu-latest-m          # optional
    shellcheck-ignore: scripts/vendor  # optional, space-separated paths

Test plan

  • yamllint -c .yamllint.yml . passes locally (warnings only, no errors)
  • actionlint passes locally
  • CI self-lint job passes on this PR

🤖 Generated with Claude Code

ben-miru and others added 5 commits April 14, 2026 16:41
Adds yamllint, shellcheck, and actionlint configs so the .github repo
can lint itself and serve as a reference for consumer repos.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Callable via workflow_call from any org repo. Runs yamllint, shellcheck,
and actionlint with SHA-pinned actions. Accepts optional inputs for
runner label, yamllint paths, and shellcheck scan directory.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Calls the reusable surface-lint workflow on itself to dogfood the
linting setup. Shellcheck no-ops cleanly since the repo has no scripts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove yamllint-file-or-dir, yamllint-config-file, and
shellcheck-scandir inputs. Yamllint always scans "." and shellcheck
always scans "./scripts". Add yamllint-ignore and shellcheck-ignore
inputs for callers that need to exclude specific directories.

Switch yamllint from the ibiqlik action to a run step with find+xargs
since yamllint has no CLI ignore support — bash arrays handle the
exclude patterns cleanly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Yamllint ignores belong in each repo's .yamllint.yml config (the
tool's native ignore: directive), not in workflow inputs. Remove the
yamllint-ignore input and the find+xargs shell implementation, restore
the ibiqlik/action-yamllint action with file_or_dir hardcoded to ".".

Only shellcheck-ignore remains as a workflow input since shellcheck's
config format has no path-exclusion mechanism.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@ben-miru ben-miru merged commit 4333ea4 into main Apr 15, 2026
1 check passed
@ben-miru ben-miru deleted the feat/reusable-surface-lint branch April 15, 2026 01:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant