-
Notifications
You must be signed in to change notification settings - Fork 65
Version Updates
This guide covers the process of updating Backstage target and minimum versions for your plugins in the overlay repository.
The version of Backstage that the target platform is built on. Defined in versions.json:
{
"backstage": "1.45.3",
"node": "22.19.0",
"cli": "1.9.1",
"cliPackage": "@red-hat-developer-hub/cli"
}The Backstage version your plugin is compatible with:
spec:
backstage:
supportedVersions: 1.42.5 # Plugin was built/tested against this versionThe Backstage version the source repository uses:
{
"repo-backstage-version": "1.45.0"
}Your plugin's source Backstage version should be less than or equal to the target:
source repo-backstage-version β€ versions.json backstage
1.45.0 β€ 1.45.3 β
The automation performs best-effort version matching:
| Scenario | Result |
|---|---|
| Exact match available | β Used directly |
| Older version available | |
| Newer only available | β Blocked |
Warning: Best-effort matches require additional testing. A bot comment will appear on PRs with version mismatches.
Rather than following a fixed calendar cadence, update when concrete signals indicate it is needed:
- The Backstage Compatibility Report shows your workspace as incompatible
- A new platform release branch is being created and your plugin blocks it
- Automated discovery PRs fail the compatibility check for your workspace
- Upstream has released a version built against the current target Backstage version
- Security advisories affect your plugin's dependencies
When any of these signals appear:
-
Check the target Backstage version in
versions.json - Find a compatible plugin release
-
Update
source.json:repo-refandrepo-backstage-version -
Update
metadata/*.yaml:spec.versionandspec.backstage.supportedVersions -
Test with
/publishand/smoketest
cat versions.json | jq '.backstage'
# "1.45.3"# For community-plugins, list available versions
git ls-remote --tags https://github.com/backstage/community-plugins \
| grep "@backstage-community/plugin-your-plugin@" \
| tail -10For Backstage core plugins, check the Backstage releases.
# Check what Backstage version the plugin release uses
curl -s "https://raw.githubusercontent.com/backstage/community-plugins/@backstage-community/plugin-your-plugin@1.2.3/workspaces/your-workspace/backstage.json" | jq '.version'{
"repo": "https://github.com/backstage/community-plugins",
"repo-ref": "@backstage-community/plugin-your-plugin@1.2.3",
"repo-flat": false,
"repo-backstage-version": "1.45.0"
}For each file in metadata/*.yaml:
spec:
version: 1.2.3 # Match new plugin version
backstage:
supportedVersions: 1.45.0 # Match source Backstage version# Create PR and trigger build
git checkout -b update-your-plugin-version
git add .
git commit -m "chore: update your-plugin to 1.2.3 (Backstage 1.45.0)"
git push origin update-your-plugin-version
# Open PR, then comment:
# /publish
# /smoketest
# or: /smoketest pr-4929-90eff067/smoketest <tag> resolves to quay.io/rhdh-community/rhdh:<tag> for the smoke-test run.
Allowed tags include pr-4907, pr-4929-90eff067, next, next-1.10-244a2755, and next-8a0d43e7.
When the target Backstage version introduces breaking changes that affect your plugin:
- Check if upstream has already released a compatible version of your plugin
- If a compatible version exists, update
source.json:repo-refto that version - If no compatible version exists yet:
- Request or contribute a fix upstream
- As a temporary measure, create a patch to restore compatibility (see 06 - Patch Management)
-
Test with
/publishand/smoketestbefore merging - Document any migration notes or known limitations in the PR description
When a workspace's source Backstage version (source.json:repo-backstage-version) differs from the target version (versions.json:backstage), you can use the /override-backstage PR command instead of manually creating files.
The command atomically:
- Creates (or updates)
backstage.jsonin the workspace with the target Backstage version - Rewrites all
metadata/*.yamlOCI tags frombs_<old>__tobs_<target>__ - Commits both changes to the PR branch
Comment on your workspace PR:
/override-backstage
- After the daily automation creates a PR with a plugin whose source Backstage version is older than the target
- After manually adding a workspace with a version mismatch
- When
/publishfails with metadata validation errors about OCI tag mismatches
| Before | After |
|---|---|
No backstage.json
|
backstage.json with {"version": "1.49.4"}
|
dynamicArtifact: oci://...:bs_1.48.3__7.0.1!... |
dynamicArtifact: oci://...:bs_1.49.4__7.0.1!... |
Note: Metadata files with local paths (e.g.,
./dynamic-plugins/dist/...) are left unchanged.
{
"backstage": "1.45.3", // Target Backstage version for all plugins
"node": "22.19.0", // Node.js version for builds
"cli": "1.9.1", // CLI tool version
"cliPackage": "@red-hat-developer-hub/cli" // CLI package name
}{
"repo": "https://github.com/backstage/community-plugins",
"repo-ref": "@backstage-community/plugin-x@1.2.3", // Exact version tag
"repo-flat": false,
"repo-backstage-version": "1.45.0" // Backstage version at this ref
}spec:
version: 1.2.3 # Plugin version (must match source)
backstage:
role: backend-plugin # Plugin role
supportedVersions: 1.45.0 # Backstage version compatibilityThe update-plugins-repo-refs.yaml workflow runs daily on the main branch only and:
- Enumerates plugin package names from all existing workspaces in the overlay repository (by scanning each workspace's source repo tree)
- Queries npm (
npm view) for published versions of each discovered package - Checks Backstage version compatibility against the target version
- Additionally runs
npm searchto discover new plugins under auto-discovery scopes - Creates/updates PRs with version bumps
This means all existing workspaces are updated regardless of their npm scope β including third-party plugins like @immobiliarelabs/, @pagerduty/, or @dynatrace/. What the overlay-first approach avoids is the regexp-based npm search step for package name discovery; actual version data still comes from npm.
Note: Release branches (
release-x.y) do not have a scheduled automatic update. Updates to release branches must be triggered manually (see below).
To update a specific existing workspace (works for any scope β preferred for updates):
gh workflow run update-plugins-repo-refs.yaml \
-f workspace-path="workspaces/your-workspace" \
-f single-branch="main"To add a new workspace via npm discovery (see Trigger Workflow Manually for details on quoting):
gh workflow run update-plugins-repo-refs.yaml \
-f regexps="'@backstage-community/plugin-your-plugin'" \
-f single-branch="main" \
-f allow-workspace-addition=trueThe repository displays a compatibility badge:
This badge shows whether mandatory plugins are compatible with the target version.
- Some mandatory plugins are incompatible
- Release branch creation is blocked
- Requires version updates or patches
Cause: Plugin requires newer Backstage than the target platform supports
Solutions:
- Find an older plugin version compatible with target
- Wait for the target platform to update its Backstage version
- Create a patch to backport compatibility (advanced)
Cause: Plugin hasn't released a version for target Backstage
Solutions:
- Request upstream release for target Backstage version
- Use commit SHA instead of tag (less preferred)
- Create a fork with backported changes (last resort)
Cause: Exact Backstage version match not available
Action:
- Review the version gap
- Test thoroughly for compatibility issues
- Document any known limitations
- PR will have a bot comment explaining risks
- Tracks the next platform release
- Can accept new workspaces
- Should use latest compatible plugin versions
- Track specific platform releases
- Only accept updates to existing workspaces
- Must maintain compatibility with that release's Backstage version
- No scheduled automatic updates β must be triggered manually
Use the workflow with workspace-path and single-branch to update a specific workspace on a release branch:
gh workflow run update-plugins-repo-refs.yaml \
-f workspace-path="workspaces/your-workspace" \
-f single-branch="release-1.6"This will find the latest compatible version and create/update a PR against that release branch.
For cases where you need full control over the version (e.g., pinning to a specific commit):
# Checkout release branch
git checkout release-1.6
# Update plugin version (use version compatible with release-1.6's Backstage)
# Edit source.json and metadata files
# Create PR against release branch
git checkout -b backport-plugin-update-1.6
git commit -m "chore: backport plugin-x update to release-1.6"
git push origin backport-plugin-update-1.6## Version Update Checklist - [Plugin Name] - [Date]
### Pre-Update
- [ ] Identified target Backstage version from versions.json
- [ ] Found compatible plugin release
- [ ] Verified plugin's Backstage version is β€ target
### Updates
- [ ] Updated source.json:repo-ref
- [ ] Updated source.json:repo-backstage-version
- [ ] Updated all metadata/*.yaml:spec.version
- [ ] Updated all metadata/*.yaml:spec.backstage.supportedVersions
- [ ] Verified patches still apply (if any exist)
### Validation
- [ ] Created PR
- [ ] /publish completed successfully
- [ ] /smoketest passed
- [ ] Manual testing completed (if best-effort match)
- [ ] PR approved and merged- 06 - Patch Management β When version updates require patches
- 03 - Plugin Owner Responsibilities β Full ownership guide
- 64 workspaces
- 11 with patches