feat(cli): output formats, GL034-GL041 lint rules, include inputs and cache
Bundles three patch releases (v0.2.16–v0.2.18): v0.2.18 — output formats (--format flag on glint check): - json: stable JSON report (schema_version: 1, findings array, summary) - sarif: SARIF 2.1.0 for GitHub Code Scanning / GitLab SAST - junit: JUnit XML for CI test-report artifacts (artifacts:reports:junit) - github: GitHub Actions ::error:: / ::warning:: annotation lines - Unknown --format value exits 2 with a helpful error message - Summary line routed to stderr in structured formats; context suppressed v0.2.17 — include resolution improvements: - Recursive include depth capped at 100 (matches GitLab's own limit) - project: and component: includes tracked in visited set (cycle detection) - $[[ inputs.KEY ]] / $[[ inputs.KEY | default(…) ]] substituted from with: - --cache-dir: persist fetched remote templates to disk (SHA-256 keyed) - --offline: serve from cache only; defaults to ~/.cache/glint v0.2.16 — new lint rules (GL034–GL041): - GL034: services map form requires name; alias must be valid DNS label - GL035: rules:changes / rules:exists absolute path detection - GL036: timeout format validation (job-level + default.timeout) - GL037: id_tokens entries must have an aud key - GL038: secrets entries must declare a provider (vault / gcp / azure) - GL039: pages: keyword + artifacts.paths consistency - GL040: duplicate stage names in stages: list - GL041: cache.key.files must be exact paths, not globs Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -118,4 +118,29 @@ const (
|
||||
// GL033: every rule in a job's rules: block has when: never, so the job
|
||||
// can never be included in any pipeline run.
|
||||
RuleDeadRules = "GL033"
|
||||
|
||||
// GL034: services: map form is missing 'name', or 'alias' is not a valid DNS label.
|
||||
RuleInvalidService = "GL034"
|
||||
|
||||
// GL035: rules:changes or rules:exists contains an absolute path (starts with /);
|
||||
// GitLab CI paths are relative to the repository root and absolute paths never match.
|
||||
RuleAbsoluteGlobPath = "GL035"
|
||||
|
||||
// GL036: timeout: is not a valid GitLab CI duration string (e.g. '1h 30m', '90 minutes').
|
||||
RuleInvalidTimeout = "GL036"
|
||||
|
||||
// GL037: id_tokens: entry is missing the required 'aud' key.
|
||||
RuleInvalidIDToken = "GL037"
|
||||
|
||||
// GL038: secrets: entry is missing a provider key (vault, gcp_secret_manager, or azure_key_vault).
|
||||
RuleInvalidSecret = "GL038"
|
||||
|
||||
// GL039: a job has the pages: keyword but artifacts.paths does not include the publish directory.
|
||||
RulePagesPublish = "GL039"
|
||||
|
||||
// GL040: a stage name appears more than once in stages:; GitLab silently merges duplicates.
|
||||
RuleDuplicateStage = "GL040"
|
||||
|
||||
// GL041: cache.key.files contains a glob pattern; it must be a list of exact file paths.
|
||||
RuleInvalidCacheKeyFiles = "GL041"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user