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-manageinstalled. 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.
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:
glrd-manage --create-initial-releases major,minor,nightly --inputThis 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.
# 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:00Create 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.
glrd-manage --create minor --version 1312.7Create 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:
glrd-manage --create nightlyUpdate 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 (majorandnextonly).--lifecycle-eol-isodatetime: Update the end-of-life date (next,major, andminoronly).--commit: Update the git commit hash (minor,nightly, anddevonly).
# 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.jsonINFO
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:
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-stdinCreate 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:
# 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: falseglrd-manage --input --input-file releases-input.yamlRun fully offline
To run glrd-manage without any network access, combine --input-type file with --no-flavors:
glrd-manage --create nightly \
--input-type file \
--no-flavors \
--no-query--input-type filereads existing releases from local files instead of the S3 endpoint.--no-flavorsskips the Git clone and S3 lookup for flavor resolution.--no-queryskips the initial query for existing releases entirely. Use with care — without the existing data,glrd-managemay overwrite releases.
You can also set GLRD_SKIP_FLAVORS=1 in the environment as an alternative to --no-flavors.