Automatically checks Quarkus Platform members for newer releases on Maven Central and creates individual pull requests for each update.
Works like Dependabot, but for platform members defined in platformConfig/members in the platform pom.xml.
The action runs once and processes all configured branches (default branch + maintenance branches). For each branch, and for each tracked member on that branch:
- Queries Maven Central for the latest final release (alphas, betas, milestones, RCs, and snapshots are ignored)
- Compares it to the current version in the platform
pom.xml - If a newer version is available (and matches the configured update policy), creates a branch, updates the version property, runs
./mvnw -Dsync, and opens a pull request
Each branch and member is processed independently: if one fails, the others are still processed.
A GitHub App token is required (instead of GITHUB_TOKEN) so that PRs created by the action trigger CI workflows.
- Go to your organization's Settings > Developer settings > GitHub Apps > New GitHub App
- Fill in:
- Name: e.g.
Quarkus Platform Updater - Homepage URL: the repository URL
- Webhook: uncheck "Active" (not needed)
- Name: e.g.
- Set Repository permissions:
- Contents: Read & write (to push branches)
- Pull requests: Read & write (to create PRs)
- Click Create GitHub App
- Note the App ID displayed on the app's settings page
- Under Private keys, click Generate a private key — a
.pemfile will be downloaded
In the target repository (e.g. quarkusio/quarkus-platform):
- Go to Settings > Secrets and variables > Actions
- Add a secret:
UPDATE_PLATFORM_APP_IDwith the App ID from step 1 - Add a secret:
UPDATE_PLATFORM_APP_PRIVATE_KEYwith the contents of the.pemfile
- Go to your GitHub App's settings page
- Click Install App in the sidebar
- Install it on the target repository (e.g.
quarkusio/quarkus-platform)
Add a workflow to your Quarkus Platform repository:
name: Update Platform Members
on:
schedule:
- cron: '0 6 * * *'
workflow_dispatch:
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@v3
with:
app-id: ${{ secrets.UPDATE_PLATFORM_APP_ID }}
private-key: ${{ secrets.UPDATE_PLATFORM_APP_PRIVATE_KEY }}
- uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ steps.app-token.outputs.token }}
- name: Set up JDK 25
uses: actions/setup-java@v5
with:
java-version: 25
distribution: temurin
cache: maven
- uses: quarkusio/update-quarkus-platform-action@main
with:
github-token: ${{ steps.app-token.outputs.token }}The action runs once and processes all configured branches (main + any branches defined in the config file). fetch-depth: 0 is required so the action can check out maintenance branches. The app token is also passed to actions/checkout so that git push uses it.
Create a .github/update-quarkus-platform.yml file in your repository. Only members explicitly listed in this file are tracked.
members:
- name: Camel
- name: CXF
- name: AmazonServicesMember names must match the <name> element in platformConfig/members in the platform pom.xml.
You can control which versions are accepted using update policies.
| Policy | Meaning | Example (current: 3.17.0) |
|---|---|---|
any (default) |
Any newer final version | 3.17.1, 3.18.0, 4.0.0 |
minor |
Same major version only | 3.17.1, 3.18.0 (not 4.0.0) |
micro |
Same major.minor version only | 3.17.1 (not 3.18.0) |
default-update-policy: micro
members:
- name: Camel
- name: CXFBoth Camel and CXF will only get micro/patch updates.
default-update-policy: micro
members:
- name: Camel
- name: CXF
update-policy: minorCamel inherits default-update-policy (micro), CXF overrides it with minor.
The configuration file is always read from the default branch (e.g. main). Branch-specific configs are defined using the branches map:
# Config for main
members:
- name: Camel
- name: CXF
# Config for maintenance branches
branches:
latest:
default-update-policy: micro
members:
- name: Camel
- name: CXF
3.32:
default-update-policy: micro
members:
- name: CamelThe action processes the following branches in order:
- Default branch (e.g.
main): uses the rootmembersanddefault-update-policy(skipped if no root members) - Each entry in
branches: checked out and processed with its own config latestpseudo-branch: resolved to the newestX.Y-formatted branch in the repository (see below)
If both an exact branch entry and latest resolve to the same branch, the exact entry takes priority.
latest automatically resolves to the newest branch matching the X.Y format (e.g. if branches 3.31, 3.32, 3.33 exist, latest resolves to 3.33). This is useful so you don't have to update the config file every time a new maintenance branch is created.
You can configure GitHub handles to be notified (via /cc in the PR description) when a PR is created for a specific member. This is defined in a top-level notifications section, separate from branch configs, so it only needs to be specified once:
notifications:
- member: Camel
notify: [githubhandle1, githubhandle2]
- member: CXF
notify: [githubhandle3]
members:
- name: Camel
- name: CXF
branches:
latest:
members:
- name: CamelWhen a PR is created for Camel (on any branch), the PR description will include /cc @githubhandle1 @githubhandle2. The notifications section is optional — members without a notification entry will simply not have a /cc line.
- Branch naming:
update-automation/{base-branch}-{member-name}-{version}(e.g.update-automation/main-camel-3.18.0) - Deduplication: if a PR already exists for a given branch name, the action skips that member
- Commit author:
github-actions[bot]
Built with Quarkus GitHub Action and distributed as an uber-jar via GitHub Packages Maven repository, executed at runtime via JBang.
# Build and run tests
./mvnw -B clean verify