v1.8.0
Minor release. 12 PRs since v1.7.0, headlined by 10 new plugins (5 collectors, 4 policies, 1 cataloger). All additive — no breaking changes.
New Collectors
- istio (experimental) — Istio service-mesh collector. Parses Istio custom resources committed to the repo (PeerAuthentication, AuthorizationPolicy, RequestAuthentication, VirtualService, DestinationRule, Gateway, ServiceEntry, Sidecar, EnvoyFilter, Telemetry, IstioOperator) plus namespace/workload sidecar-injection settings, validates offline with
istioctl analyze, and writes a normalized.meshview. Acicdsub-collector recordsistioctlcommands run in CI. Skip-safe on non-mesh repos. (#245) - argocd (beta) — parses and kubeconform-validates argoproj CRDs (Application / ApplicationSet / AppProject) into a normalized
.cd.gitopsview. (#218) - argocd-deployment-tracking (experimental) — correlates each ArgoCD Application to the service it deploys and records that service's deployment posture out-of-band (post-merge system of record). (#218)
- argocd-deployment-gate (experimental) — pulls a service's deployment posture back from the GitOps component for PR-time enforcement; mapping defaults to a cataloger-set meta annotation, with Backstage
catalog-infoopt-in. Push and pull are mutually exclusive per service. (#218) - kotlin (beta) — Kotlin language collector. Detects Gradle (Kotlin/Groovy DSL) + Maven, parses Kotlin/Gradle versions, target (jvm/android/multiplatform), dependencies (incl. version-catalog resolution and
gradle.lockfiletransitives),kotlincCI commands, and Kover test coverage into.lang.kotlin. (#242)
New Policies
- istio (experimental) — seven checks over
.mesh:valid,mtls-strict,authorization-policies-defined,no-permissive-authz,gateway-tls,sidecar-injection,no-envoy-filter. Uniform pend-then-skip gating: PENDING while collectors run, terminal SKIP on non-mesh components. (#245) - gitops (beta) — tool-agnostic checks over the normalized GitOps deployment posture, independent of the underlying GitOps engine. (#218)
- argocd (beta) — ArgoCD-specific checks: argoproj CRD validation and AppProject hygiene. (#218)
- kotlin (beta) — seven checks:
build-tool-manifest-exists,kotlin-version-pinned,min-kotlin-version(configurable, default 1.8),build-tool-wrapper-exists(skips Maven-only),dependencies-locked,test-directory-exists,linter-configured(detekt or ktlint). (#242)
New Catalogers
- backstage-catalog-info-monorepo (beta) — discovers every
catalog-info.yamlin a repository (including subdirectories) via one recursive Git Trees API call and creates one Lunar component per file, keyed to the file's directory (monorepo subcomponents). Configurableexclude_paths(defaults to excluding the root file, which thebackstage-catalog-infoaugment cataloger owns),ignore_components(platform hard-control), and gatedlunar.io/ignoreannotation support (dev-team opt-out). Pairs withbackstage-catalog-infoandgithub-orgfor mixed monorepo + polyrepo fleets. (#243)
Improvements
- backstage cataloger: new AWS SigV4 auth mode (
auth_mode=sigv4). Resolves AWS credentials at runtime from the standard chain (IRSA / EKS Pod Identity → ECS task role → EC2 IMDSv2 → staticLUNAR_SECRET_AWS_*keys) and re-resolves each run, so short-lived IAM-role creds self-refresh with nothing to rotate. Signs with curl's native--aws-sigv4; zero new dependencies. (#232) - backstage cataloger: switched to the
/catalog/entities/by-queryendpoint with cursor pagination, paging through large catalogs instead of a single unpaginated request. (#240) - backstage policy:
required-annotationsnow validates annotation values, not just presence. A backward-compatible YAML-list form lets each annotation declare atype(string/integer/number/boolean) plusmin/max,min_length/max_length,pattern(regex), andenum; malformed constraint specs error instead of silently passing. The legacy comma-separated (presence-only) form is unchanged. (#244) - backstage-catalog-info cataloger: new
meta_annotationsinput maps selectedcatalog-info.yamlannotations onto the Lunar componentmetafield (defaults topagerduty.com/service-id, so thepagerdutycollector and the oncall guardrails behind it resolve a component's service with no per-component config). Also addsignore_components(platform hard-control) and gatedlunar.io/ignoreannotation support. (#224, #243) - trivy + grype collectors: opt-in point-in-time scan history. Each rescan snapshots the current
.scainto a bounded.sca.history[](with acollected_attimestamp) before overwriting, and tracks a monotonic.sca.rescan_count. Two inputs —scan_history_sizeandmax_rescans, both default 0, preserving today's overwrite-only behavior. The SCA policy is unchanged. (#247)
Fixes
- Collector inputs are now read from
LUNAR_VAR_<NAME>— the variable the hub actually exposes — instead ofLUNAR_INPUT_<NAME>, which was silently ignored, so inputs always fell back to their defaults. Fixed inshell(find_command and shellcheck severity),rust(clippy args),trivy/grype(container-rescan image), andgrype(db auto-update). Also cleared pre-existing shellcheck findings in the touched files. (#248)
Other
- backstage cataloger: wired the offline test into CI (
earthly +test) and added multi-page cursor-pagination coverage — the fixture no longer matched the by-query response shape, and nothing had exercised paging (follow-up to #240). (#246) - Changelog housekeeping: reconstructed the
[1.6.0]section, added[1.7.0], fixed compare links, and caught up[Unreleased]. (#241)
Consumers pin this release with @v1.8.0 in lunar-config.yml. 27 plugin images (base + 24 collectors + 1 cataloger + 1 policy) published to Docker Hub under the *-v1.8.0 tag.
Full diff: v1.7.0...v1.8.0