Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
dc3f78e
[pull] lts from main (#1100)
pull[bot] Feb 16, 2026
f4357b1
feat: migrate changelog generation to external action (#1125)
hanthor Feb 20, 2026
8594120
chore(deps): update cgr.dev/chainguard/wolfi-base:latest docker diges…
ubot-7274[bot] Feb 21, 2026
38f3151
chore(deps): update ghcr.io/projectbluefin/common:latest docker diges…
ubot-7274[bot] Feb 21, 2026
58f470c
chore(deps): update ghcr.io/ublue-os/brew:latest docker digest to 3ef…
ubot-7274[bot] Feb 22, 2026
0beace5
Merge branch 'lts' into main
castrojo Feb 23, 2026
9eb3e64
chore(deps): update extractions/setup-just digest to f8a3cce (#1128)
ubot-7274[bot] Feb 24, 2026
4f951b4
chore(deps): update cgr.dev/chainguard/wolfi-base:latest docker diges…
ubot-7274[bot] Feb 24, 2026
3033874
Revert "Merge branch 'lts' into main"
castrojo Mar 1, 2026
e239a19
chore(deps): update github artifact actions (major) (#1134)
ubot-7274[bot] Mar 1, 2026
f7e94f5
chore(deps): update ghcr.io/projectbluefin/common:latest docker diges…
ubot-7274[bot] Mar 1, 2026
0ba1ede
chore(deps): update anchore/sbom-action digest to 17ae174 (#1132)
ubot-7274[bot] Mar 1, 2026
b228dab
chore(deps): update quay.io/centos-bootc/centos-bootc:c10s docker dig…
ubot-7274[bot] Mar 1, 2026
16aa2b3
fix(ci): restrict SBOM generation to lts branch only (#1140)
castrojo Mar 2, 2026
fcfbbec
revert: restore SBOM generation on main branch (#1141)
castrojo Mar 2, 2026
c4c9427
fix(ci): restrict SBOM generation to lts branch only (#1142)
castrojo Mar 2, 2026
a3e9a6a
feat: switch lts builds to cron-only schedule (#1138)
castrojo Mar 2, 2026
64cb487
[pull] lts from main (#1137)
pull[bot] Mar 2, 2026
d34e80a
chore(deps): update quay.io/centos-bootc/centos-bootc:c10s docker dig…
ubot-7274[bot] Mar 2, 2026
d91a54e
chore(deps): update ghcr.io/ublue-os/brew:latest docker digest to ca9…
ubot-7274[bot] Mar 2, 2026
ffa30fe
Merge branch 'lts' into main
castrojo Mar 2, 2026
ed26f96
chore(deps): update quay.io/centos-bootc/centos-bootc:c10s docker dig…
ubot-7274[bot] Mar 2, 2026
943d949
chore(deps): update ghcr.io/projectbluefin/common:latest docker diges…
ubot-7274[bot] Mar 2, 2026
8ed6d20
fix(ci): prevent accidental LTS tag publishing from pull bot PRs (#1147)
castrojo Mar 2, 2026
0b6baa9
fix(ci): prevent branch pollution by replacing pull app with manual w…
castrojo Mar 3, 2026
aa2af52
chore(deps): update cgr.dev/chainguard/wolfi-base:latest docker diges…
ubot-7274[bot] Mar 3, 2026
39cc90c
chore(deps): update system_files/usr/share/gnome-shell/extensions/tmp…
ubot-7274[bot] Mar 3, 2026
550e8de
fix(ci): prevent production LTS tag pollution from main branch merges…
castrojo Mar 3, 2026
6bb5b77
Delete docs/plans directory
castrojo Mar 3, 2026
6ec7dd5
fix(ci): fix LTS promotion workflow failures (#1157)
castrojo Mar 3, 2026
270f925
fix: fetch raw instead of blob for zram config (#1170)
jumpyvi Mar 8, 2026
0b0caf0
chore(deps): update system_files/usr/share/gnome-shell/extensions/das…
ubot-7274[bot] Mar 8, 2026
489e19d
chore(renovate): fix automerge rules and reschedule lts cron (#1171)
castrojo Mar 8, 2026
6cd6a55
fix: turn off bazaar.service for now (#1172)
renner0e Mar 8, 2026
020b8b2
chore(deps): update ghcr.io/ublue-os/brew:latest docker digest to 2ec…
ubot-7274[bot] Mar 8, 2026
d3d39e9
chore(deps): update system_files/usr/share/gnome-shell/extensions/gsc…
ubot-7274[bot] Mar 8, 2026
348707b
chore(deps): update docker/metadata-action action to v6 (#1167)
ubot-7274[bot] Mar 8, 2026
30a4d2d
chore(deps): update system_files/usr/share/gnome-shell/extensions/tmp…
ubot-7274[bot] Mar 8, 2026
a1f5552
chore(deps): update ghcr.io/projectbluefin/common:latest docker diges…
ubot-7274[bot] Mar 8, 2026
65a6c9f
chore(deps): update quay.io/centos-bootc/centos-bootc:c10s docker dig…
ubot-7274[bot] Mar 8, 2026
5875348
chore(deps): update actions/setup-node digest to 53b8394 (#1163)
ubot-7274[bot] Mar 8, 2026
60e4aef
chore(deps): update quay.io/centos-bootc/centos-bootc:c10s docker dig…
ubot-7274[bot] Mar 9, 2026
314318e
chore(deps): update anchore/sbom-action digest to 57aae52 (#1175)
ubot-7274[bot] Mar 9, 2026
4386c39
chore(deps): update quay.io/centos-bootc/centos-bootc:c10s docker dig…
ubot-7274[bot] Mar 10, 2026
a527168
chore(deps): update quay.io/centos-bootc/centos-bootc:c10s docker dig…
ubot-7274[bot] Mar 10, 2026
ff85922
fix(ci): replace PR promotion with squash push in promote-to-lts (#1177)
castrojo Mar 10, 2026
7316e19
chore(deps): update cgr.dev/chainguard/wolfi-base:latest docker diges…
ubot-7274[bot] Mar 10, 2026
13f9b46
chore(deps): update quay.io/centos-bootc/centos-bootc:c10s docker dig…
ubot-7274[bot] Mar 11, 2026
b23f809
chore(deps): update actions/download-artifact digest to 3e5f45b (#1183)
ubot-7274[bot] Mar 11, 2026
90132e8
chore(deps): update cgr.dev/chainguard/wolfi-base:latest docker diges…
ubot-7274[bot] Mar 12, 2026
8e1c75f
chore(deps): update ghcr.io/projectbluefin/common:latest docker diges…
ubot-7274[bot] Mar 12, 2026
6a0ad87
chore(deps): update cgr.dev/chainguard/wolfi-base:latest docker diges…
ubot-7274[bot] Mar 12, 2026
4e13431
chore(deps): update ghcr.io/projectbluefin/common:latest docker diges…
ubot-7274[bot] Mar 13, 2026
1339bc4
chore(deps): update cgr.dev/chainguard/wolfi-base:latest docker diges…
ubot-7274[bot] Mar 15, 2026
914432d
chore(deps): update ghcr.io/ublue-os/brew:latest docker digest to fef…
ubot-7274[bot] Mar 15, 2026
bc65f2a
chore(deps): update system_files/usr/share/gnome-shell/extensions/sea…
ubot-7274[bot] Mar 15, 2026
24765e4
feat(GNOME) : gnome 49 backport (#1187)
hanthor Mar 15, 2026
18bb989
chore(deps): update quay.io/centos-bootc/centos-bootc:c10s docker dig…
ubot-7274[bot] Mar 16, 2026
1ff0c7e
Revert "feat(GNOME) : gnome 49 backport" (#1192)
hanthor Mar 16, 2026
aa14da4
chore(deps): update quay.io/centos-bootc/centos-bootc:c10s docker dig…
ubot-7274[bot] Mar 16, 2026
1658526
chore(deps): update system_files/usr/share/gnome-shell/extensions/sea…
ubot-7274[bot] Mar 17, 2026
dd4152f
chore(deps): update quay.io/centos-bootc/centos-bootc:c10s docker dig…
ubot-7274[bot] Mar 17, 2026
6462f99
ci(promote): replace push-based promotion with PR gate (#1195)
castrojo Mar 17, 2026
a764cfc
fix(ci): use tree-hash anchor for accurate promotion commit list (#1197)
castrojo Mar 17, 2026
d151470
chore(deps): update quay.io/centos-bootc/centos-bootc:c10s docker dig…
ubot-7274[bot] Mar 18, 2026
120a359
fix(ci): use regular merge for promotion PRs instead of squash (#1201)
castrojo Mar 18, 2026
3f031ba
chore(deps): update system_files/usr/share/gnome-shell/extensions/tmp…
ubot-7274[bot] Mar 18, 2026
f93db5a
chore(deps): update cgr.dev/chainguard/wolfi-base:latest docker diges…
ubot-7274[bot] Mar 18, 2026
f662cb5
chore(deps): update quay.io/centos-bootc/centos-bootc:c10s docker dig…
ubot-7274[bot] Mar 19, 2026
789460b
chore(deps): update system_files/usr/share/gnome-shell/extensions/app…
ubot-7274[bot] Mar 19, 2026
28a7701
chore(deps): update cgr.dev/chainguard/wolfi-base:latest docker diges…
ubot-7274[bot] Mar 19, 2026
3e3235e
feat: switch from GNOME 48 to GNOME 49
Mar 20, 2026
96d99f5
chore(deps): update system_files/usr/share/gnome-shell/extensions/das…
ubot-7274[bot] Mar 20, 2026
a2d8b5c
Merge branch 'main' into feat/gnome-49
hanthor Mar 20, 2026
ac893be
Merge pull request #1207 from hanthor/feat/gnome-49
hanthor Mar 21, 2026
cb21bb1
feat: add GNOME 50 testing builds (lts-testing-50, lts-hwe-testing-50)
Mar 20, 2026
a4e75cf
fix(ci): wire up tag-suffix input in reusable-build-image.yml
Mar 20, 2026
e05a4fb
fix(ci): restrict GNOME 50 builds to main branch only
Mar 20, 2026
45ee934
Merge pull request #1209 from hanthor/feat/gnome-50
hanthor Mar 21, 2026
8087aea
feat: rebase GNOME 49 as default, layer GNOME 50 on top
Mar 21, 2026
3b665f1
fix(ci): add bluefin-dx GNOME 50 variants to build matrix
Mar 21, 2026
6d70966
Merge pull request #1212 from hanthor/feat/gnome-50-layered
hanthor Mar 21, 2026
157138a
fix: copy upgrade script to /usr/local/bin, not /tmp (tmpfs mount wip…
Mar 21, 2026
3a4943c
fix: drop tmpfs mounts in Containerfile.gnome50
Mar 21, 2026
8d58621
Merge pull request #1213 from hanthor/feat/gnome-50-layered
hanthor Mar 21, 2026
1b6aeed
feat: add GNOME_VERSION build arg to select GNOME 49 or 50
Mar 21, 2026
c5ca712
fix: use c10s-gnome-50-fresh COPR (fully populated with all packages)
Mar 21, 2026
98817fd
fix: copy image to rootless storage when rechunk is disabled
Mar 21, 2026
ad5efb0
fix: use rechunk on main branch pushes (mirrors main build pattern)
Mar 21, 2026
8791cad
refactor: replace layered gnome50 with full build pipeline (GNOME_VER…
Mar 21, 2026
761f3fb
fix: disambiguate artifact names to avoid conflict when hwe and non-h…
Mar 21, 2026
f6e1e4b
feat: add bluefin-dx GNOME 50 build variants (lts-testing-50, lts-hwe…
Mar 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 0 additions & 16 deletions .github/pull.yml

This file was deleted.

22 changes: 8 additions & 14 deletions .github/renovate.json5
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
// Enable GitHub's native automerge; merging is handled by GitHub and remains subject to branch protection/bypass settings
"platformAutomerge": true,

// Only target main branch - lts is production and only updated via promotion
"baseBranchPatterns": ["main"],

"extends": [
"config:best-practices",
],
Expand All @@ -29,24 +32,15 @@

"packageRules": [
{
// Auto-merge all digest/pin updates across all managers (dockerfile, github-actions, regex/Justfile)
"automerge": true,
"matchUpdateTypes": ["pin", "pinDigest"]
},
{
"automerge": true,
"matchManagers": ["dockerfile"],
"matchUpdateTypes": ["digest"]
"matchUpdateTypes": ["digest", "pin", "pinDigest"]
},
{
// Auto-merge minor/patch version bumps for GitHub Actions (e.g. cosign-installer v3.8 → v3.9)
"automerge": true,
"matchUpdateTypes": ["digest"],
"matchDepNames": [
"quay.io/centos-bootc/centos-bootc",
"quay.io/centos-bootc/bootc-image-builder",
"ghcr.io/projectbluefin/common",
"ghcr.io/ublue-os/akmods-zfs",
"ghcr.io/ublue-os/brew"
]
"matchManagers": ["github-actions"],
"matchUpdateTypes": ["minor", "patch"]
}
]
}
4 changes: 1 addition & 3 deletions .github/workflows/build-dx-hwe.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ on:
pull_request:
branches:
- main
- lts
push:
branches:
- main
Expand All @@ -34,6 +33,5 @@ jobs:
flavor: dx
kernel-pin: 6.17.12-200.fc42
rechunk: ${{ github.event_name != 'pull_request' }}
sbom: ${{ github.event_name != 'pull_request' }}
publish: ${{ github.event_name != 'pull_request' }}
publish: ${{ (github.event_name == 'workflow_dispatch' && (github.ref == 'refs/heads/lts' || github.ref == 'refs/heads/main')) || (github.event_name == 'push' && github.ref == 'refs/heads/main') }}
hwe: true
4 changes: 1 addition & 3 deletions .github/workflows/build-dx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ on:
pull_request:
branches:
- main
- lts
push:
branches:
- main
Expand All @@ -29,5 +28,4 @@ jobs:
image-name: bluefin-dx
flavor: dx
rechunk: ${{ github.event_name != 'pull_request' }}
sbom: ${{ github.event_name != 'pull_request' }}
publish: ${{ github.event_name != 'pull_request' }}
publish: ${{ (github.event_name == 'workflow_dispatch' && (github.ref == 'refs/heads/lts' || github.ref == 'refs/heads/main')) || (github.event_name == 'push' && github.ref == 'refs/heads/main') }}
4 changes: 1 addition & 3 deletions .github/workflows/build-gdx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ on:
pull_request:
branches:
- main
- lts
push:
branches:
- main
Expand All @@ -30,5 +29,4 @@ jobs:
flavor: gdx
kernel-pin: 6.17.12-200.fc42
rechunk: ${{ github.event_name != 'pull_request' }}
sbom: ${{ github.event_name != 'pull_request' }}
publish: ${{ github.event_name != 'pull_request' }}
publish: ${{ (github.event_name == 'workflow_dispatch' && (github.ref == 'refs/heads/lts' || github.ref == 'refs/heads/main')) || (github.event_name == 'push' && github.ref == 'refs/heads/main') }}
68 changes: 68 additions & 0 deletions .github/workflows/build-gnome50.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Build Bluefin GNOME 50 (testing)

# Builds bluefin and bluefin-dx lts-testing-50 / lts-hwe-testing-50 using
# the same full build pipeline as GNOME 49, selecting GNOME 50 packages
# via the gnome-version input. Only runs on main branch pushes.

permissions:
contents: read
packages: write
id-token: write

on:
push:
branches:
- main
pull_request:
branches:
- main
merge_group:

concurrency:
group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
cancel-in-progress: true

jobs:
build:
uses: ./.github/workflows/reusable-build-image.yml
secrets: inherit
with:
image-name: bluefin
tag-suffix: "50"
gnome-version: "50"
rechunk: ${{ github.event_name != 'pull_request' }}
publish: ${{ github.event_name != 'pull_request' && github.ref == 'refs/heads/main' }}

build-hwe:
uses: ./.github/workflows/reusable-build-image.yml
secrets: inherit
with:
image-name: bluefin
tag-suffix: "50"
gnome-version: "50"
hwe: true
rechunk: ${{ github.event_name != 'pull_request' }}
publish: ${{ github.event_name != 'pull_request' && github.ref == 'refs/heads/main' }}

build-dx:
uses: ./.github/workflows/reusable-build-image.yml
secrets: inherit
with:
image-name: bluefin-dx
flavor: dx
tag-suffix: "50"
gnome-version: "50"
rechunk: ${{ github.event_name != 'pull_request' }}
publish: ${{ github.event_name != 'pull_request' && github.ref == 'refs/heads/main' }}

build-dx-hwe:
uses: ./.github/workflows/reusable-build-image.yml
secrets: inherit
with:
image-name: bluefin-dx
flavor: dx
tag-suffix: "50"
gnome-version: "50"
hwe: true
rechunk: ${{ github.event_name != 'pull_request' }}
publish: ${{ github.event_name != 'pull_request' && github.ref == 'refs/heads/main' }}
4 changes: 1 addition & 3 deletions .github/workflows/build-regular-hwe.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ on:
pull_request:
branches:
- main
- lts
push:
branches:
- main
Expand All @@ -33,7 +32,6 @@ jobs:
image-name: bluefin
kernel-pin: 6.17.12-200.fc42
rechunk: ${{ github.event_name != 'pull_request' }}
sbom: ${{ github.event_name != 'pull_request' }}
publish: ${{ github.event_name != 'pull_request' }}
publish: ${{ (github.event_name == 'workflow_dispatch' && (github.ref == 'refs/heads/lts' || github.ref == 'refs/heads/main')) || (github.event_name == 'push' && github.ref == 'refs/heads/main') }}
hwe: true

4 changes: 1 addition & 3 deletions .github/workflows/build-regular.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ on:
pull_request:
branches:
- main
- lts
push:
branches:
- main
Expand All @@ -28,5 +27,4 @@ jobs:
with:
image-name: bluefin
rechunk: ${{ github.event_name != 'pull_request' }}
sbom: ${{ github.event_name != 'pull_request' }}
publish: ${{ github.event_name != 'pull_request' }}
publish: ${{ (github.event_name == 'workflow_dispatch' && (github.ref == 'refs/heads/lts' || github.ref == 'refs/heads/main')) || (github.event_name == 'push' && github.ref == 'refs/heads/main') }}
90 changes: 90 additions & 0 deletions .github/workflows/create-lts-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
name: Create LTS Promotion PR

on:
push:
branches: [main]
workflow_dispatch:

concurrency:
group: create-lts-pr
cancel-in-progress: true

permissions:
contents: read
pull-requests: write

jobs:
create-pr:
runs-on: ubuntu-latest
steps:
- name: Checkout main
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
ref: main
fetch-depth: 0

- name: Fetch lts
run: git fetch origin lts

- name: Check content diff
id: diff
run: |
if git diff --quiet origin/lts origin/main; then
echo "No content difference between lts and main. Nothing to promote."
echo "has_diff=false" >> "$GITHUB_OUTPUT"
elif [ -z "$(git log origin/lts..origin/main --oneline)" ]; then
echo "lts is ahead of or diverged from main with no commits to promote. Nothing to promote."
echo "has_diff=false" >> "$GITHUB_OUTPUT"
else
echo "has_diff=true" >> "$GITHUB_OUTPUT"
fi

- name: Build commit list
if: steps.diff.outputs.has_diff == 'true'
id: commits
run: |
# Show commits on main that are not reachable from lts.
# With regular-merge promotions the merge base advances automatically,
# so this list contains only genuinely new commits.
LIST=$(git log origin/lts..origin/main --oneline)

if [ -z "$LIST" ]; then
# Fallback when the commit graph can't resolve (e.g., first ever promotion).
LIST=$(git diff --name-status origin/lts origin/main)
fi

{
echo "list<<EOF"
echo "$LIST"
echo "EOF"
} >> "$GITHUB_OUTPUT"

- name: Create or update promote PR
if: steps.diff.outputs.has_diff == 'true'
env:
GH_TOKEN: ${{ github.token }}
COMMIT_LIST: ${{ steps.commits.outputs.list }}
run: |
# Build body with printf so commit messages containing quotes are safe
BODY=$(printf '## Commits pending promotion to `lts`\n\n%s\n\n---\n_**Merge this PR** (Create a merge commit) to promote. Do NOT squash — squash-merge breaks the merge base and causes PR bloat. The PR body updates automatically as `main` advances._\n' "${COMMIT_LIST}")

EXISTING=$(gh pr list \
--base lts \
--head main \
--state open \
--json number \
--jq '.[0].number' \
2>/dev/null || echo "")

if [ -n "$EXISTING" ]; then
echo "Updating existing promote PR #${EXISTING}"
printf '%s\n' "${BODY}" | gh pr edit "$EXISTING" --body-file -
else
echo "Creating new draft promote PR"
printf '%s\n' "${BODY}" | gh pr create \
--draft \
--base lts \
--head main \
--title "promote: main → lts" \
--body-file -
fi
19 changes: 13 additions & 6 deletions .github/workflows/generate-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,15 @@ on:
jobs:
generate-release:
runs-on: ubuntu-latest
# Only run if the workflow was successful and on lts branch
# Only run if the workflow was successful, on lts branch, and triggered by
# workflow_dispatch (meaning scheduled-lts-release.yml fired it — images were published).
# Push-to-lts validation builds complete successfully too but publish nothing,
# so we must not create a release for those.
if: |
github.event_name == 'workflow_dispatch' ||
(github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.head_branch == 'lts')
(github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.head_branch == 'lts' &&
github.event.workflow_run.event == 'workflow_dispatch')

steps:
- name: Checkout repository
Expand Down Expand Up @@ -63,8 +67,11 @@ jobs:
fi

- name: Generate changelog
run: |
python3 .github/changelogs.py ${{ steps.target.outputs.target }} --ci
uses: hanthor/changelog-action@2d212cd35f65cfe33954dd79013887e7bee76580 # master
with:
stream: ${{ steps.target.outputs.target }}
family: bluefin-lts
output-env: ./output.env

- name: Read changelog outputs
id: changelog
Expand Down Expand Up @@ -98,7 +105,7 @@ jobs:
--target lts

- name: Upload changelog artifact
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
with:
name: changelog
path: |
Expand Down
Loading
Loading