Class IkeReleaseCascadeMojo

java.lang.Object
network.ike.plugin.support.AbstractGoalMojo
network.ike.plugin.IkeReleaseCascadeMojo
All Implemented Interfaces:
org.apache.maven.api.plugin.Mojo

@Mojo(name="release-cascade", projectRequired=false, aggregator=true) public class IkeReleaseCascadeMojo extends AbstractGoalMojo
Releases the whole IKE foundation cascade in topological order (IKE-Network/ike-issues#419).

The cascade is decentralized (#420): each foundation repo version-controls its own src/main/cascade/release-cascade.yaml declaring only its own edges. This goal reads the local repo's manifest, walks the edges into the sibling checkouts to assemble the full ordered graph, and runs ike:release-publish on every release-pending member in topological order. Each member's Nexus deploy completes before the next (which ike:release-publish aligns to its upstreams via alignUpstreamProperties, #419-B) begins.

A member is release-pending when either:

  • it has at least one non-release-cadence commit since its latest v* tag (substantive change), OR
  • at least one of its upstream's ${X.version} property pin in the local POM is older than that upstream's latest released tag (stale upstream pin, #468).

The walk is a single full-graph topological sweep, not a single-source downstream walk: from any starting node the assembler reaches every connected member, and every release-pending node releases exactly once even when the graph has multiple heads that converge on a shared terminal (#468). The walker is idempotent — re-running with no release-pending nodes is a no-op — and crash-safe — re-running after a partial cascade re-evaluates the release-pending set and picks up from the first unfinished member.

This is the ike:-tier cascade executor. The foundation repos cannot form a workspace — ike-workspace-maven-plugin lives in ike-platform — so the foundation must release with ike:-tier tooling only.

Repo resolution is local: every cascade member is expected to be checked out as a sibling directory alongside the repo this goal runs in (override the containing directory with -Dike.release.cascade.basedir). A member with no checkout is a hard error — the cascade cannot release what it cannot see.

Usage:

  mvn ike:release-cascade                       # release the cascade
  mvn ike:release-cascade -DpushRelease=false   # local-only dry of each
  mvn ike:release-cascade -Dike.release.cascade.basedir=/path/to/checkouts
  • Constructor Details

    • IkeReleaseCascadeMojo

      public IkeReleaseCascadeMojo()
      Creates this goal instance.
  • Method Details

    • runGoal

      protected GoalReportSpec runGoal() throws org.apache.maven.api.plugin.MojoException
      Specified by:
      runGoal in class AbstractGoalMojo
      Throws:
      org.apache.maven.api.plugin.MojoException