# reusable-lint — eslint + yamllint gate (999_testing "linter testing"). # # A REUSABLE workflow (on: workflow_call). Either linter finding an error makes # the job exit non-zero (the acceptance criterion). Prefers the project's own # pinned eslint (node_modules/.bin) for config/plugin fidelity, falling back to # the foundation-ci image's global eslint; yamllint comes from the image. # # jobs: # lint: # uses: olsitec/foundation/.forgejo/workflows/reusable-lint.yml@master # with: { eslint-paths: ".", yamllint-paths: "." } name: reusable-lint on: workflow_call: inputs: eslint: type: boolean default: true yamllint: type: boolean default: true eslint-paths: type: string default: "." yamllint-paths: type: string default: "." package-manager: description: "bun | npm | none — to install project-local eslint config/plugins" type: string default: bun jobs: lint: runs-on: docker container: image: foundation-ci:latest steps: - uses: actions/checkout@v4 - name: Install dependencies (project-local eslint config/plugins) if: ${{ inputs.eslint }} run: | case "${{ inputs.package-manager }}" in bun) bun install --frozen-lockfile || bun install || true ;; npm) npm ci || npm install || true ;; none) echo "skip install" ;; esac - name: eslint if: ${{ inputs.eslint }} run: | if [ -x node_modules/.bin/eslint ]; then echo "+ project eslint"; node_modules/.bin/eslint ${{ inputs.eslint-paths }} else echo "+ image eslint"; eslint ${{ inputs.eslint-paths }} fi - name: yamllint if: ${{ inputs.yamllint }} run: | echo "+ yamllint ${{ inputs.yamllint-paths }}" yamllint ${{ inputs.yamllint-paths }}