The release-plan.yaml File

September 2, 2026 · View on GitHub

This document explains how to use release-plan.yaml to declare your release intentions.

Purpose

The release-plan.yaml file declares your intent for the next release. It is edited by codeowners on main and validated automatically.

Structure

repository:
  release_track: meta-release
  meta_release: Sync26
  target_release_tag: r4.1
  target_release_type: pre-release-rc

dependencies:
  commonalities_release: r4.2
  identity_consent_management_release: r4.3

apis:
  - api_name: location-verification
    target_api_version: 3.2.0
    target_api_status: rc
    main_contacts:
      - githubUser1

seeded_from:
  repository: QualityOnDemand
  release_tag: r4.1
  apis:
    - api_name: qos-profiles
      seeded_api_version: 1.2.0-rc.3
      last_rc_api_version: 1.2.0-rc.3

Repository-Level Fields

FieldDescription
release_trackindependent (default) or meta-release
meta_releaseMeta-release cycle (e.g., Sync26) — required if track is meta-release
target_release_tagRelease tag (e.g., r4.1)
target_release_typenone (no release planned), pre-release-alpha, pre-release-rc, public-release, maintenance-release

API-Level Fields

FieldDescription
api_nameAPI identifier in kebab-case (e.g., location-verification)
target_api_versionBase semantic version (e.g., 3.2.0) — extensions calculated automatically
target_api_statusdraft, alpha, rc, or public
main_contactsGitHub usernames responsible for this API

Dependencies

dependencies:
  commonalities_release: r4.2
  identity_consent_management_release: r4.3

Use release tags (e.g., r4.2), not documentation versions.

Seeded From (Repository Splits)

When one or more APIs move into a new repository from an existing one (a repo split), the new repository's pre-release version chain continues where the predecessor left off — it does not restart at -rc.1/-alpha.1. Declare this once, by hand, as a pinned fact:

seeded_from:
  repository: QualityOnDemand
  release_tag: r4.1
  apis:
    - api_name: qos-profiles
      seeded_api_version: 1.2.0-rc.3
      last_rc_api_version: 1.2.0-rc.3
FieldDescription
repositoryPredecessor repository name. Provenance only.
release_tagPredecessor repository release_tag the seed was taken from. Provenance only.
apis[].api_nameAPI name, matching an entry in the top-level apis list
apis[].seeded_api_versionThe API's full version at the seed tag. Documentation only — not read by version calculation
apis[].last_rc_api_versionLast published rc version in the predecessor's URL-version namespace. Read by Release Automation to calculate the next rc extension number. Omit if there was no prior rc
apis[].last_alpha_api_versionSame as last_rc_api_version, for the alpha status

This is a one-time, hand-declared fact, not a live lookup against the predecessor repository — after this repository's own first release for an API, its own history takes over and the seed becomes inert. Omit seeded_from entirely for repositories that are not seeded from a split.

Common Mistakes

MistakeCorrect
target_release_tag: 3.2.0target_release_tag: r4.1 (use release tag, not API version)
target_api_version: 3.2.0-rc.2target_api_version: 3.2.0 (no pre-release extension)
commonalities_release: 1.2.0commonalities_release: r4.2 (use release tag)

When to Update

  • Starting a new release cycle
  • Adding a new API
  • Changing release type (alpha → RC → public)
  • After a public release (to unlock APIs for next version)

Note: While a snapshot is active, changes to release-plan.yaml for that release are blocked.

Full Schema Reference (Optional)

For the complete, machine-readable definition of release-plan.yaml, including validation rules and constraints, see the full JSON schema:

release-plan.schema.yaml