Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
491 changes: 64 additions & 427 deletions .github/actions/buildroot-build/action.yml

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ jobs:
# wrapper Makefile) and runs kconfig -- no toolchain, no package, no
# compile. See docs/ci.md#lint-config.
lint-config:
name: Lint configuration (patch headers, fragment stacks)
name: Lint configuration (patch headers, defconfigs)
needs: gate
if: needs.gate.outputs.build_needed == 'true'
runs-on: ubuntu-26.04
Expand All @@ -162,8 +162,8 @@ jobs:
- name: Lint kernel patch headers (git am-ability, both series)
run: scripts/lint-kernel-patches.sh

- name: Check fragment stacks (regenerate + golden hashes)
run: scripts/check-config-fragments.sh
- name: Check defconfigs (load, canonical, every profile select lands)
run: scripts/check-defconfigs.sh


build:
Expand Down Expand Up @@ -330,7 +330,7 @@ jobs:
rc=0
case "$LINT_RESULT" in
success)
echo "lint-config: patch headers and fragment stacks are clean."
echo "lint-config: patch headers and defconfigs are clean."
;;
skipped)
if [ "$BUILD_NEEDED" = "true" ]; then
Expand Down
713 changes: 78 additions & 635 deletions .github/workflows/release.yml

Large diffs are not rendered by default.

33 changes: 8 additions & 25 deletions .github/workflows/renovate-hash-sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ on:
# The DE10 kernel pin (BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE) lives in
# the board fragment since the 2026-09 fragment split; the kernel-only
# stack shares that same file, so there is no second copy to list.
- "configs/fragments/de10nano.fragment"
- "configs/mister_de10nano_defconfig"
# The RT/beta kernel pin. ADDED 2026-08-17: this file used to be
# deliberately ABSENT here, because while that pin tracked mainline -rc
# its hash could not be auto-refreshed at all (no signed manifest exists
Expand Down Expand Up @@ -520,19 +520,9 @@ jobs:
- name: Rebuild and refresh the azcopy vendored-tarball hash
run: .hash-sync-tools/scripts/hash-sync-azcopy.sh "$GITHUB_WORKSPACE"

# --- 8. Golden config hashes (configs/fragments/golden.sha256) ---------
# NEW 2026-09-02, with the fragment split. A Buildroot bump changes
# Kconfig defaults and so moves every stack's golden resolved-config
# hash; lint-config only WARNS on a version with no golden line, so the
# bump PR still builds, and this case records the new lines in the same
# PR. Runs the TARGET branch's scripts/check-config-fragments.sh
# --update-golden through the target branch's Makefile (the golden
# format is that tree's), after case 6 has written the tarball hash the
# unpack verifies against. Never rewrites lines that already exist for
# the pinned version -- drift is lint-config's to fail, not this case's
# to bless. See the script's header and docs/renovate.md.
- name: Record golden config hashes for a bumped Buildroot
run: .hash-sync-tools/scripts/hash-sync-golden.sh "$GITHUB_WORKSPACE"
# (Case 8, golden config hashes, retired 2026-09-11 with the fragment
# stacks -- ADR 0030: the committed defconfigs are checked by
# scripts/check-defconfigs.sh, which needs no per-version record.)

# Gate the push: ANY pin recorded "failed" (from any of the steps
# above) suppresses the commit/push below. MUST run and be evaluated
Expand All @@ -558,13 +548,13 @@ jobs:
env.RT_PATCH_HASH_CHANGED == '1' ||
env.LZMA_SDK_HASH_CHANGED == '1' || env.SEVENZIP_HASH_CHANGED == '1' ||
env.PAYLOAD_HASH_CHANGED == '1' || env.BUILDROOT_HASH_CHANGED == '1' ||
env.AZCOPY_HASH_CHANGED == '1' || env.GOLDEN_CHANGED == '1') &&
env.AZCOPY_HASH_CHANGED == '1') &&
env.HASH_SYNC_FAILED == '0'
run: |
set -euo pipefail
git config user.name "renovate-hash-sync[bot]"
git config user.email "renovate-hash-sync@users.noreply.github.com"
git add Makefile package/*/*.hash board/mister/de10nano/patches/linux/linux.hash scripts/fetch-sdcard-payload.sh configs/fragments/golden.sha256
git add Makefile package/*/*.hash board/mister/de10nano/patches/linux/linux.hash scripts/fetch-sdcard-payload.sh
git commit -F - <<'COMMITMSG'
renovate-hash-sync: refresh companion hash(es) for this PR

Expand Down Expand Up @@ -600,12 +590,6 @@ jobs:
the only way this value can be derived, since no URL serves that
file (see package/azcopy/azcopy.hash's header). LICENSE and
NOTICE.txt were re-hashed from the same tarball
- golden config hashes (configs/fragments/golden.sha256): on a
Buildroot bump only, the target branch's own
scripts/check-config-fragments.sh --update-golden was run
against the freshly unpacked (hash-verified) Buildroot tree and
the new version's lines recorded -- never a rewrite of lines
that already existed (docs/buildroot-config.md section 11)
COMMITMSG
# Shell variable, NOT a workflow-expression interpolation --
# TARGET_BRANCH is attacker-controlled text on a PR (command-injection
Expand Down Expand Up @@ -651,9 +635,8 @@ jobs:
# roster, which must never touch a golang-package) and so has to be
# named here separately, exactly like the four pins before it.
#
# `golden` joined on 2026-09-02 with case 8 (the resolved-config
# golden hashes a Buildroot bump moves; scripts/hash-sync-golden.sh).
all_pins="$HASH_SYNC_PACKAGES kernel kernel-rt lzma-sdk 7zip buildroot azcopy golden PINNED_UPDATE_ALL PINNED_WIFI_SH PINNED_CORES"
# (`golden`, case 8, was retired 2026-09-11 with the fragment stacks.)
all_pins="$HASH_SYNC_PACKAGES kernel kernel-rt lzma-sdk 7zip buildroot azcopy PINNED_UPDATE_ALL PINNED_WIFI_SH PINNED_CORES"

complete_file=$(mktemp)
cp "$outcomes_file" "$complete_file"
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ work/
output*/
dl/
dist/
release-work/
*.img
*.7z
venv/
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ All external sources (kernel, Buildroot, packages, firmware) must be:
KERNEL_VERSION = 6.18.y

# Good: pinned tag (version illustrative -- the live kernel pin is
# BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE in configs/fragments/de10nano.fragment,
# BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE in configs/mister_de10nano_defconfig,
# which is the one place it is written down)
KERNEL_VERSION = 6.18.38

Expand Down
12 changes: 12 additions & 0 deletions Config.in
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
menu "MiSTer external options"

menu "MiSTer profiles (ADR 0030 -- one symbol selects a documented package set)"
# THE ONE DEPARTURE FROM A PLAIN BUILDROOT DEFCONFIG. In a plain project
# every package is a line in configs/<board>_defconfig. Here the shared
# sets are Kconfig profiles that `select` their members, so two boards
# share a userspace by selecting one symbol and cannot drift apart on
# it. "Why is package X in my image?" -> the profile's Config.in, whose
# section headers mirror docs/buildroot-config.md §5.
source "$BR2_EXTERNAL_MISTER_PATH/package/mister-firmware/Config.in"
source "$BR2_EXTERNAL_MISTER_PATH/package/mister-drivers/Config.in"
source "$BR2_EXTERNAL_MISTER_PATH/package/mister-userspace/Config.in"
endmenu

menu "USB WiFi drivers (out-of-tree)"
# MAINLINE-FIRST policy (ADR 0016). The rule is "use the in-kernel driver
# for every chip the kernel can drive; keep an out-of-tree driver ONLY
Expand Down
Loading
Loading