Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
462281b
desktops: restore recursive chown after skel copy
igorpecovnik Apr 10, 2026
8084b95
desktops: restore install manifest for clean uninstall
igorpecovnik Apr 10, 2026
1e78752
desktops/xfce: trim install list and expand uninstall list
igorpecovnik Apr 10, 2026
d9dd5ff
desktops/common: install armbian-plymouth-theme on every desktop
igorpecovnik Apr 10, 2026
ce5eb03
desktops/xfce: don't put xfce4-goodies depends in packages_uninstall
igorpecovnik Apr 10, 2026
a03aaea
appimage: install GL/EGL/GLES runtime alongside FUSE
igorpecovnik Apr 10, 2026
33a1327
desktops/xfce: stop blocking printer-driver-all on noble/plucky
igorpecovnik Apr 10, 2026
5667f67
dialog_ui: drop verbose help text from read-mode menu rendering
igorpecovnik Apr 10, 2026
420b991
desktops/skel: drop system-config-printer.desktop hider stub
igorpecovnik Apr 11, 2026
cd245f7
desktops/branding: drop unused icon assets and gdebi skel stub
igorpecovnik Apr 11, 2026
aa4c09a
desktops/branding: fix three broken filename references in armbian.xml
igorpecovnik Apr 11, 2026
640d57d
desktops/branding: drop unreferenced wallpapers from wallpapers/
igorpecovnik Apr 11, 2026
e23de6d
package: add pkg_clean wrapper, call it after desktop remove
igorpecovnik Apr 11, 2026
dc5a786
desktops: don't install armbian-imager by default
igorpecovnik Apr 11, 2026
1d502d7
desktops: gate armbian-plymouth-theme on Armbian repo presence
igorpecovnik Apr 11, 2026
4d3131b
desktops: sweep stale packages_remove cruft from gnome/cinnamon/mate/…
igorpecovnik Apr 11, 2026
1229c87
desktops/gnome: install Quick Settings backing daemons
igorpecovnik Apr 11, 2026
da0c095
desktops/gnome: install printer-driver-all so the Printers panel works
igorpecovnik Apr 11, 2026
0059436
desktops: stop uninstalling language-selector-gnome (yanks gnome-cont…
igorpecovnik Apr 11, 2026
28eb8bf
desktops/gnome: hide Canonical's gnome-ubuntu-panel.desktop
igorpecovnik Apr 11, 2026
f835bc0
desktops/branding: install armbian-logo.png for GNOME Settings -> About
igorpecovnik Apr 11, 2026
30af0e6
desktops/branding: install armbian-logo.png in the correct size dir
igorpecovnik Apr 11, 2026
5843224
desktops/gnome: revert gnome-ubuntu-panel.desktop hider stub
igorpecovnik Apr 11, 2026
8749cb9
desktops/branding: install armbian-logo under scalable/apps
igorpecovnik Apr 11, 2026
5642c61
desktops/branding: stop installing armbian-logo, leave it to armbian-…
igorpecovnik Apr 11, 2026
e090879
desktops: switch systemd default target on install/remove
igorpecovnik Apr 11, 2026
75dd659
desktops: skel copy: per-file loop instead of cp -r --update=none
igorpecovnik Apr 11, 2026
4286926
desktops/kde-neon: drop dangerous packages_uninstall entries
igorpecovnik Apr 11, 2026
47a10ba
desktops: fail-safe install path + don't clobber gdm3 daemon.conf
igorpecovnik Apr 11, 2026
51c9e6c
desktops: introduce minimal/mid/full tier system in YAML schema
igorpecovnik Apr 11, 2026
77be77d
desktops: wire tier into install/remove + add upgrade/downgrade
igorpecovnik Apr 11, 2026
95714fe
desktops/dialog: pin existing install entries to tier=minimal
igorpecovnik Apr 11, 2026
27cf438
desktops/dialog: add mid and full tier install entries
igorpecovnik Apr 11, 2026
4629be0
desktops: per-arch tier_overrides + per-release browser map
igorpecovnik Apr 11, 2026
db2b6af
desktops: silence status on the not-installed path
igorpecovnik Apr 11, 2026
508de3b
desktops: anchor login-status regex on gdm3 to skip commented sample
igorpecovnik Apr 11, 2026
a459066
desktops: separate `tier` getter from `status` exit-code query
igorpecovnik Apr 11, 2026
e024393
desktops: change-tier dialog UX with at-tier / set-tier helpers
igorpecovnik Apr 11, 2026
b3a2939
tests: pass tier=full to module_desktops install + skip ZFS probe whe…
igorpecovnik Apr 11, 2026
7624843
desktops: fix space-vs-tab indentation flagged by editorconfig
igorpecovnik Apr 11, 2026
cbbebea
desktops/common: strip fonts-ubuntu on Debian releases
igorpecovnik Apr 11, 2026
3abfd15
ci: weekly desktop matrix audit driven by Claude
igorpecovnik Apr 11, 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
187 changes: 187 additions & 0 deletions .github/workflows/maintenance-desktop-audit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
name: "Maintenance: Desktop matrix audit"

# Periodic audit of the desktop YAML matrix against:
# 1. armbian/build's config/distributions/ — flag releases the build
# supports but no DE YAML covers
# 2. packages.debian.org / packages.ubuntu.com — flag DESKTOP_PACKAGES
# entries that don't exist in the upstream archive for the
# requested (release, arch)
#
# When the audit finds work to do, hand the report to Claude (via the
# Anthropic API) and let it propose YAML edits. Then open a PR with
# whatever Claude wrote, using peter-evans/create-pull-request.
#
# The audit_apply.py script short-circuits when there's nothing to do,
# so a "no changes" run never burns API tokens or opens an empty PR.

on:
schedule:
# Mondays at 06:00 UTC. Weekly is enough — release / package
# availability changes slowly.
- cron: "0 6 * * 1"
workflow_dispatch:
inputs:
tier:
description: "Tier to audit (minimal, mid, full, or empty for all)"
required: false
default: ""
release:
description: "Release codename to audit (empty for all)"
required: false
default: ""
dry_run:
description: "Dry run — do not call Claude or open a PR"
required: false
default: "false"
type: choice
options:
- "false"
- "true"

permissions:
contents: write
pull-requests: write

concurrency:
group: desktop-audit
cancel-in-progress: false

jobs:
audit:
name: "Desktop matrix audit"
runs-on: ubuntu-latest
steps:
- name: "Checkout configng"
uses: actions/checkout@v4
with:
path: configng

- name: "Checkout armbian/build"
uses: actions/checkout@v4
with:
repository: armbian/build
path: build
# Only the config/distributions/ directory matters for the
# audit, but a sparse checkout would complicate things —
# the build repo is small enough to clone shallowly.
fetch-depth: 1

- name: "Set up Python"
uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: "Install Python dependencies"
run: |
pip install --quiet pyyaml anthropic

- name: "Run deterministic audit"
id: audit
working-directory: configng
run: |
set -euo pipefail
args=(
--build-repo "${{ github.workspace }}/build"
--configng-repo "${{ github.workspace }}/configng"
--output "${{ github.workspace }}/audit-report.json"
)
if [[ -n "${{ github.event.inputs.tier }}" ]]; then
args+=(--tier "${{ github.event.inputs.tier }}")
fi
if [[ -n "${{ github.event.inputs.release }}" ]]; then
args+=(--release "${{ github.event.inputs.release }}")
fi
python3 tools/desktops/audit.py "${args[@]}"

# Surface a summary in the workflow's job summary so reviewers
# can read it without downloading artifacts.
{
echo "## Desktop matrix audit"
echo
python3 - <<'PY'
import json
r = json.load(open("${{ github.workspace }}/audit-report.json"))
print(f"- **Desktops scanned:** {r['stats']['desktops']}")
print(f"- **(release, arch) combinations in scope:** {r['stats']['scope']}")
print(f"- **Package availability checks:** {r['stats']['package_lookups']}")
print(f"- **Holes found:** {r['stats']['holes']}")
print(f"- **Releases not covered:** {len(r['missing_releases'])}")
print()
if r['missing_releases']:
print("### Missing releases")
print()
print("| release | status | name | architectures |")
print("|---|---|---|---|")
for m in r['missing_releases']:
print(f"| `{m['release']}` | {m['support_status']} | {m['name']} | `{','.join(m['architectures'])}` |")
print()
if r['package_holes']:
print("### Package holes")
print()
print("| de | release | arch | tier | missing |")
print("|---|---|---|---|---|")
for h in r['package_holes']:
pkgs = ", ".join(f"`{p}`" for p in h['missing'])
print(f"| `{h['de']}` | `{h['release']}` | `{h['arch']}` | `{h['tier']}` | {pkgs} |")
PY
} >> "$GITHUB_STEP_SUMMARY"

# Set step output: did we find anything actionable?
python3 - <<'PY' >> "$GITHUB_OUTPUT"
import json
r = json.load(open("${{ github.workspace }}/audit-report.json"))
actionable = bool(r['package_holes'] or r['missing_releases'])
print(f"actionable={'true' if actionable else 'false'}")
PY

- name: "Upload audit report"
if: always()
uses: actions/upload-artifact@v4
with:
name: audit-report
path: ${{ github.workspace }}/audit-report.json
retention-days: 30

- name: "Run Claude apply step"
id: apply
if: steps.audit.outputs.actionable == 'true' && github.event.inputs.dry_run != 'true'
working-directory: configng
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
set -euo pipefail
if [[ -z "${ANTHROPIC_API_KEY:-}" ]]; then
echo "::warning::ANTHROPIC_API_KEY secret not set; skipping Claude apply step"
echo "skipped=true" >> "$GITHUB_OUTPUT"
exit 0
fi
python3 tools/desktops/audit_apply.py \
--report "${{ github.workspace }}/audit-report.json" \
--configng-repo "${{ github.workspace }}/configng" \
--summary-output "${{ github.workspace }}/audit-summary.md"
echo "skipped=false" >> "$GITHUB_OUTPUT"

- name: "Open / update pull request"
if: |
steps.audit.outputs.actionable == 'true' &&
github.event.inputs.dry_run != 'true' &&
steps.apply.outputs.skipped != 'true'
uses: peter-evans/create-pull-request@v6
with:
path: configng
branch: bot/desktop-matrix-audit
delete-branch: true
base: main
commit-message: |
desktops: weekly matrix audit fixes (bot)

Generated by .github/workflows/maintenance-desktop-audit.yml
via Claude API based on the deterministic findings of
tools/desktops/audit.py.
title: "desktops: weekly matrix audit fixes (bot)"
body-path: ${{ github.workspace }}/audit-summary.md
labels: |
bot
desktops
documentation
draft: true
4 changes: 2 additions & 2 deletions tests/BUDG01.conf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ TESTNAME="Budgie desktop"

testcase() {(
set -e
./bin/armbian-config --api module_desktops install de=budgie
./bin/armbian-config --api module_desktops remove de=budgie
./bin/armbian-config --api module_desktops install de=budgie tier=minimal
./bin/armbian-config --api module_desktops remove de=budgie
)}
4 changes: 2 additions & 2 deletions tests/CINM01.conf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ TESTNAME="Cinnamon desktop"

testcase() {(
set -e
./bin/armbian-config --api module_desktops install de=cinnamon
./bin/armbian-config --api module_desktops remove de=cinnamon
./bin/armbian-config --api module_desktops install de=cinnamon tier=full
./bin/armbian-config --api module_desktops remove de=cinnamon
)}
4 changes: 2 additions & 2 deletions tests/DEEP01.conf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ TESTNAME="Deepin desktop"

testcase() {(
set -e
./bin/armbian-config --api module_desktops install de=deepin
./bin/armbian-config --api module_desktops remove de=deepin
./bin/armbian-config --api module_desktops install de=deepin tier=minimal
./bin/armbian-config --api module_desktops remove de=deepin
)}
4 changes: 2 additions & 2 deletions tests/ENLI01.conf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ TESTNAME="enlightenment desktop"

testcase() {(
set -e
./bin/armbian-config --api module_desktops install de=enlightenment
./bin/armbian-config --api module_desktops remove de=enlightenment
./bin/armbian-config --api module_desktops install de=enlightenment tier=full
./bin/armbian-config --api module_desktops remove de=enlightenment
)}
4 changes: 2 additions & 2 deletions tests/GNME01.conf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ TESTNAME="GNOME desktop"

testcase() {(
set -e
./bin/armbian-config --api module_desktops install de=gnome
./bin/armbian-config --api module_desktops remove de=gnome
./bin/armbian-config --api module_desktops install de=gnome tier=full
./bin/armbian-config --api module_desktops remove de=gnome
)}
4 changes: 2 additions & 2 deletions tests/I3WM01.conf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ TESTNAME="i3-wm desktop"

testcase() {(
set -e
./bin/armbian-config --api module_desktops install de=i3-wm
./bin/armbian-config --api module_desktops remove de=i3-wm
./bin/armbian-config --api module_desktops install de=i3-wm tier=full
./bin/armbian-config --api module_desktops remove de=i3-wm
)}
7 changes: 5 additions & 2 deletions tests/KDEN01.conf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ TESTNAME="KDE Neon desktop"

testcase() {(
set -e
./bin/armbian-config --api module_desktops install de=kde-neon
./bin/armbian-config --api module_desktops remove de=kde-neon
# kde-neon is status: unsupported and only declares a minimal
# tier; do not push mid/full common-tier extras (chromium etc.)
# into a desktop that doesn't expect them.
./bin/armbian-config --api module_desktops install de=kde-neon tier=minimal
./bin/armbian-config --api module_desktops remove de=kde-neon
)}
4 changes: 2 additions & 2 deletions tests/KDEP01.conf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ TESTNAME="KDE Plasma desktop"

testcase() {(
set -e
./bin/armbian-config --api module_desktops install de=kde-plasma
./bin/armbian-config --api module_desktops remove de=kde-plasma
./bin/armbian-config --api module_desktops install de=kde-plasma tier=full
./bin/armbian-config --api module_desktops remove de=kde-plasma
)}
4 changes: 2 additions & 2 deletions tests/MATE01.conf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ TESTNAME="Mate desktop"

testcase() {(
set -e
./bin/armbian-config --api module_desktops install de=mate
./bin/armbian-config --api module_desktops remove de=mate
./bin/armbian-config --api module_desktops install de=mate tier=full
./bin/armbian-config --api module_desktops remove de=mate
)}
4 changes: 2 additions & 2 deletions tests/XFCE01.conf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ TESTNAME="XFCE desktop"

testcase() {(
set -e
./bin/armbian-config --api module_desktops install de=xfce
./bin/armbian-config --api module_desktops remove de=xfce
./bin/armbian-config --api module_desktops install de=xfce tier=full
./bin/armbian-config --api module_desktops remove de=xfce
)}
4 changes: 2 additions & 2 deletions tests/XMON01.conf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ TESTNAME="xmonad desktop"

testcase() {(
set -e
./bin/armbian-config --api module_desktops install de=xmonad
./bin/armbian-config --api module_desktops remove de=xmonad
./bin/armbian-config --api module_desktops install de=xmonad tier=full
./bin/armbian-config --api module_desktops remove de=xmonad
)}
Loading
Loading