Skip to content

Manage Garden Linux Releases

This guide shows how to use glrd-manage to create, update, and delete releases in the Garden Linux Release Database (GLRD).

Prerequisites

  • glrd-manage installed. See Run GLRD.
  • AWS credentials with write access to the S3 bucket when you intend to push changes with --s3-update. See AWS authentication.

Safe testing

All examples on this page omit --s3-update. Without that flag, glrd-manage writes output files to the current directory and makes no changes to S3. Add --s3-update only when you are ready to publish.

Test locally

By default, glrd-manage writes release files (for example, releases-minor.json) to the current working directory and does not touch S3. You can inspect the generated files to verify the output before running with --s3-update.

Generate initial release data

GITHUB_TOKEN required

--create-initial-releases fetches release history from the GitHub API via python-gardenlinux-lib. Set the GITHUB_TOKEN environment variable before running this command. The token needs no special scopes for the public Garden Linux repository.

bash
export GITHUB_TOKEN=<your-token>
# Or, if you have the GitHub CLI installed:
export GITHUB_TOKEN=$(gh auth token)

Use --create-initial-releases to fetch the full release history from GitHub and generate all initial release files. Pass the types you want to populate as a comma-separated list:

bash
glrd-manage --create-initial-releases major,minor,nightly --input

This generates releases-major.json, releases-minor.json, releases-nightly.json, and processes any manual lifecycle entries from releases-input.yaml.

Create a major release

When you create a major release, GLRD automatically calculates default extended and eol dates (released + 6 months and + 9 months respectively). See Default major dates for details.

bash
# Use default dates
glrd-manage --create major --version 1312

# Override dates explicitly
glrd-manage --create major --version 1312 \
  --lifecycle-released-isodatetime 2023-11-16T00:00:00 \
  --lifecycle-extended-isodatetime 2024-05-03T00:00:00 \
  --lifecycle-eol-isodatetime 2024-08-03T00:00:00

Create a minor release

When you create a new minor release, glrd-manage automatically sets the eol of the previous minor release to the new release's released date. See Major and minor release dependencies for details.

bash
glrd-manage --create minor --version 1312.7

Create a nightly release

Without additional parameters, glrd-manage uses the current timestamp and the current git commit to create a nightly release. The next available minor version number is chosen automatically:

bash
glrd-manage --create nightly

Update an existing release

Use --update to modify lifecycle dates or the commit hash of an existing release. Specify the release by name and provide at least one modifier flag.

Supported modifiers:

  • --lifecycle-released-isodatetime: Update the release date (all types).
  • --lifecycle-extended-isodatetime: Update the extended maintenance date (major and next only).
  • --lifecycle-eol-isodatetime: Update the end-of-life date (next, major, and minor only).
  • --commit: Update the git commit hash (minor, nightly, and dev only).
bash
# Update the EOL date on a major release
glrd-manage --update major-1592 \
  --lifecycle-eol-isodatetime 2026-02-27T00:00:00 \
  --input-stdin < releases.json

# Update the extended maintenance date on a major release
glrd-manage --update major-1592 \
  --lifecycle-extended-isodatetime 2025-06-15T00:00:00 \
  --input-stdin < releases.json

# Update the commit hash on a minor release
glrd-manage --update minor-1592.6 \
  --commit deadbeef1234567890abcdef1234567890abcdef \
  --input-stdin < releases.json

# Update multiple fields at once
glrd-manage --update major-1592 \
  --lifecycle-eol-isodatetime 2026-02-27T00:00:00 \
  --lifecycle-extended-isodatetime 2025-06-15T00:00:00 \
  --input-stdin < releases.json

INFO

The --update action requires existing release data to be provided via --input-stdin (as in the examples above) or loaded from the default query source. It cannot be combined with --no-query.

Create or update a release from JSON (stdin)

You can provide release data directly from standard input in JSON format. This is useful for scripted workflows or when the release data is generated by another tool:

bash
echo '{
  "releases": [
    {
      "name": "minor-1592.1",
      "type": "minor",
      "version": {
        "major": 1592,
        "minor": 1
      },
      "lifecycle": {
        "released": {
          "isodate": "2024-08-22",
          "timestamp": 1724277600
        },
        "eol": {
          "isodate": "2025-08-12",
          "timestamp": 1754949600
        }
      },
      "git": {
        "commit": "ec945aa995d0f08d64303ff6045b313b40b665fb",
        "commit_short": "ec945aa"
      },
      "github": {
        "release": "https://github.com/gardenlinux/gardenlinux/releases/tag/1592.1"
      },
      "flavors": [
        "ali-gardener_prod",
        "azure-gardener_prod",
        "aws-gardener_prod",
        "gcp-gardener_prod"
      ],
      "attributes": {
        "source_repo": false
      }
    }
  ]
}' | glrd-manage --input-stdin

Create or update a release from a YAML file

Write the release data to a YAML input file and pass it with --input and --input-file:

yaml
# releases-input.yaml
releases:
  - name: minor-1592.1
    type: minor
    version:
      major: 1592
      minor: 1
    lifecycle:
      released:
        isodate: "2024-08-22"
        timestamp: 1724277600
      eol:
        isodate: "2025-08-27"
        timestamp: 1754949600
    git:
      commit: ec945aa995d0f08d64303ff6045b313b40b66fff
      commit_short: ec945aa
    github:
      release: https://github.com/gardenlinux/gardenlinux/releases/tag/1592.1
    flavors:
      - ali-gardener_prod
      - azure-gardener_prod
      - aws-gardener_prod
      - gcp-gardener_prod
    attributes:
      source_repo: false
bash
glrd-manage --input --input-file releases-input.yaml

Run fully offline

To run glrd-manage without any network access, combine --input-type file with --no-flavors:

bash
glrd-manage --create nightly \
  --input-type file \
  --no-flavors \
  --no-query
  • --input-type file reads existing releases from local files instead of the S3 endpoint.
  • --no-flavors skips the Git clone and S3 lookup for flavor resolution.
  • --no-query skips the initial query for existing releases entirely. Use with care — without the existing data, glrd-manage may overwrite releases.

You can also set GLRD_SKIP_FLAVORS=1 in the environment as an alternative to --no-flavors.