diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 58f299621a8..503e50e1a72 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -63,7 +63,18 @@ repos: entry: \]\(https?:\/\/(192\.168\.[0-9]+\.[0-9]+|10\.[0-9]+\.[0-9]+\.[0-9]+)[^)]*\) language: pygrep types: [text] + - id: check-openness-score-freshness + name: Check openness score comparison table freshness + entry: python3 scripts/check_openness_score_freshness.py + language: system + files: ^docs/variants/.*_openness_chart\.png$|^docs/variants/overview\.md$ + - id: generate-firmware-update-support-table + name: Regenerate firmware update method support table + entry: python3 scripts/generate_firmware_update_support_table.py + language: system + files: ^docs/variants/.*/releases\.md$|^docs/guides/firmware-update-method-support-table\.csv$|^scripts/generate_firmware_update_support_table\.py$ + pass_filenames: false ci: - autoupdate_commit_msg: 'pre-commit: autoupdate hooks' + autoupdate_commit_msg: "pre-commit: autoupdate hooks" autofix_prs: false diff --git a/docs/guides/firmware-update-method-support-table.csv b/docs/guides/firmware-update-method-support-table.csv index 3ec95a4bfe0..6def1776ea3 100644 --- a/docs/guides/firmware-update-method-support-table.csv +++ b/docs/guides/firmware-update-method-support-table.csv @@ -1,10 +1,17 @@ Manufacturer,Device,[Firmware Update Mode][fum],[Capsule Update V1][cup1],[FWUPD][fwupd],[LVFS][lvfs],[Capsule Update V2][cup2] -Hardkernel,Odroid H4+,-,v0.9.1,v0.9.1,v0.9.1,- -MSI,Z690-A PRO,v1.1.2,v1.1.4,v1.1.4,-,v1.1.7 -MSI,Z790-P PRO,v0.9.0,v0.9.2,v0.9.2,-,v0.9.5 -NovaCustom,11th Gen,v1.5.0,v1.6.0,v1.6.0,v1.6.0,- -NovaCustom,12th Gen,v1.7.0,v1.8.0,v1.8.0,v1.8.0,- -NovaCustom,14th Gen iGPU,v0.9.0,v1.0.0,v1.0.0,v1.0.0,- -NovaCustom,14th Gen dGPU,v0.9.1,v1.0.0,v1.0.0,v1.0.0,- -NovaCustom,NUC BOX,v0.9.0,v0.9.0,v0.9.0,v0.9.0,- -Protectli,Vault VP66xx,-,v0.9.3,v0.9.3,v0.9.3,- +ASRock,Rack TURIND8UD-2T/X550,v0.9.0,-,-,-,- +Dell,OptiPlex 7010/9010,v0.1.1,-,-,-,- +Gigabyte,MZ33-AR1,v0.9.0,-,-,-,- +Hardkernel,ODROID H4,-,v0.9.1,v0.9.1,v0.9.1,- +MSI,PRO B850-P WIFI,v0.9.0,v0.9.0,v0.9.0,-,- +MSI,PRO Z690-A (WIFI) (DDR4),v1.1.2,v1.1.4,v1.1.4,-,- +MSI,PRO Z790-P (WIFI) (DDR5),v0.9.0,v0.9.2,v0.9.2,-,- +NovaCustom,NS5x/7x 11th Gen,v1.5.1,v1.6.0,v1.6.0,v1.6.0,- +NovaCustom,NS5x/7x 12th Gen,v1.7.1,v1.8.0,v1.8.0,v1.8.0,- +NovaCustom,NUC BOX 14th Gen,v0.9.0,v0.9.0,v0.9.0,v0.9.0,- +NovaCustom,NV4x 11th Gen,v1.5.1,v1.6.0,v1.6.0,v1.6.0,- +NovaCustom,NV4x 12th Gen,v1.7.1,v1.8.0,v1.8.0,v1.8.0,- +NovaCustom,V540TU,v0.9.0,v1.0.0,v1.0.0,v1.0.0,- +NovaCustom,V54xTNx 14th Gen,v0.9.1,v1.0.0,v1.0.0,v1.0.0,- +NovaCustom,V560TU,v0.9.0,v1.0.0,v1.0.0,v1.0.0,- +NovaCustom,V56xTNx 14th Gen,v0.9.1,v1.0.0,v1.0.0,v1.0.0,- diff --git a/docs/unified/novacustom/firmware-update.md b/docs/unified/novacustom/firmware-update.md index d053ddf5035..ba9a883f0c5 100644 --- a/docs/unified/novacustom/firmware-update.md +++ b/docs/unified/novacustom/firmware-update.md @@ -40,13 +40,11 @@ firmware version is currently installed on your device. ### Firmware Update Mode - Firmware Update Mode is available on the following versions: - - | Generation | Version | Note | - | ---------- | ------------- | ---------------------------------------------------- | - | 11th | > 1.5.0 | | - | 12th | > 1.7.0 | | - | 14th | 0.9.0 - 0.9.1 | On newer versions, please use fwupd directly instead | + To check which firmware versions support Firmware Update Mode, check + the [Firmware Update Method Support + Table](../../guides/firmware-update.md#firmware-update-method-support-table). + On 14th Gen, once your firmware supports fwupd, please use fwupd + directly instead of Firmware Update Mode. To update using Firmware Update Mode, follow the [Generic Firmware Update Documentation](../../guides/firmware-update.md#firmware-update-mode). diff --git a/docs/variants/asrock_turind8ud/releases.md b/docs/variants/asrock_turind8ud/releases.md index 71f1d06eeed..a135b779b5d 100644 --- a/docs/variants/asrock_turind8ud/releases.md +++ b/docs/variants/asrock_turind8ud/releases.md @@ -60,7 +60,7 @@ Test results for this release can be found - [Serial port console redirection](https://docs.dasharo.com/unified-test-documentation/dasharo-compatibility/31G-ec-and-superio/#sio004001-serial-port-in-firmware) - [TPM Measured Boot](https://docs.dasharo.com/unified-test-documentation/dasharo-security/203-measured-boot/) - [SMM BIOS write protection with AMD ROM Armor](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) -- [Firmware update mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) +- [Firmware Update Mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) - [Setup menu password configuration](https://docs.dasharo.com/dasharo-menu-docs/overview/#dasharo-menu-guides) - [USB stack disable option in setup menu](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#usb-configuration) - [Network stack disable option in setup menu](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#networking-options) diff --git a/docs/variants/dell_optiplex/releases.md b/docs/variants/dell_optiplex/releases.md index 3fb7f5b2bdd..d5daaf45632 100644 --- a/docs/variants/dell_optiplex/releases.md +++ b/docs/variants/dell_optiplex/releases.md @@ -44,7 +44,7 @@ Test results for this release can be found - [Custom boot logo](https://docs.dasharo.com/unified-test-documentation/dasharo-compatibility/304-custom-logo/) - [Dasharo setup menu full screen mode support](https://github.com/Dasharo/dasharo-issues/issues/118) - [SMM BIOS write protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) -- [Firmware update mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) +- [Firmware Update Mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) - [Setup menu password configuration](https://docs.dasharo.com/dasharo-menu-docs/overview/#dasharo-menu-guides) - [USB stack disable option in setup menu](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#usb-configuration) - [Network stack disable option in setup menu](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#networking-options) diff --git a/docs/variants/gigabyte_mz33-ar1/releases.md b/docs/variants/gigabyte_mz33-ar1/releases.md index 7fc2965f5c2..c1e5aded77c 100644 --- a/docs/variants/gigabyte_mz33-ar1/releases.md +++ b/docs/variants/gigabyte_mz33-ar1/releases.md @@ -40,7 +40,7 @@ Test results for this release can be found - [Serial port console redirection](https://docs.dasharo.com/unified-test-documentation/dasharo-compatibility/31G-ec-and-superio/#sio004001-serial-port-in-firmware) - [TPM Measured Boot](https://docs.dasharo.com/unified-test-documentation/dasharo-security/203-measured-boot/) - [SMM BIOS write protection with AMD ROM Armor](https://docs.dasharo.com/kb/amd-security-features/#amd-rom-armor) -- [Firmware update mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) +- [Firmware Update Mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) - [Setup menu password configuration](https://docs.dasharo.com/dasharo-menu-docs/overview/#dasharo-menu-guides) - [USB stack disable option in setup menu](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#usb-configuration) - [Network stack disable option in setup menu](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#networking-options) diff --git a/docs/variants/hardkernel_odroid_h4/releases.md b/docs/variants/hardkernel_odroid_h4/releases.md index f3e762fafca..f23b96d289a 100644 --- a/docs/variants/hardkernel_odroid_h4/releases.md +++ b/docs/variants/hardkernel_odroid_h4/releases.md @@ -27,7 +27,9 @@ Test results for this release can be found - Support for the Hardkernel ODROID H4 Ultra device - [Support for Net Card 2 module](https://github.com/Dasharo/dasharo-issues/issues/1281) -- [Capsule Update integration](https://github.com/Dasharo/dasharo-issues/issues/1471) +- [Capsule Update V1](https://github.com/Dasharo/dasharo-issues/issues/1471) +- [FWUPD support](https://docs.dasharo.com/kb/fwupd/) +- [LVFS support](https://github.com/Dasharo/dasharo-issues/issues/1471) - [In-Band ECC option](https://github.com/Dasharo/dasharo-issues/issues/1276) - [Quiet and fast boot option](https://github.com/Dasharo/dasharo-issues/issues/1278) - [ME disable option](https://github.com/Dasharo/dasharo-issues/issues/1279) diff --git a/docs/variants/msi_b850/releases.md b/docs/variants/msi_b850/releases.md index 0c7bd388ace..813ca708c5c 100644 --- a/docs/variants/msi_b850/releases.md +++ b/docs/variants/msi_b850/releases.md @@ -44,13 +44,14 @@ Test results for this release can be found - [AMD fTPM support in coreboot and EDK2 UEFI Payload](https://docs.dasharo.com/unified-test-documentation/dasharo-security/200-tpm-support/) - [TPM Measured Boot](https://docs.dasharo.com/unified-test-documentation/dasharo-security/203-measured-boot/) - [SMM BIOS write protection with AMD ROM Armor 3](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) -- [Firmware update mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) +- [Firmware Update Mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) - [Setup menu password configuration](https://docs.dasharo.com/dasharo-menu-docs/overview/#dasharo-menu-guides) - [USB stack disable option in setup menu](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#usb-configuration) - [Network stack disable option in setup menu](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#networking-options) - TPM PPI support with UEFI variable backend - [SBOM generation for AMD PSP blobs, video and LAN drivers](https://doc.coreboot.org/sbom/sbom.html) -- [UEFI Capsule Update v1 support](https://docs.dasharo.com/unified-test-documentation/dasharo-stability/capsule-update/) +- [Capsule Update V1](https://docs.dasharo.com/unified-test-documentation/dasharo-stability/capsule-update/) +- [FWUPD support](https://docs.dasharo.com/kb/fwupd/) - Rebased coreboot on 25.12 tag - Rebased iPXE on last commit of February 2026 - [Support for firmware flashing via MSI FlashBIOS](https://docs.dasharo.com/unified/msi/recovery/#using-msi-flashbios-button) diff --git a/docs/variants/msi_z690/releases.md b/docs/variants/msi_z690/releases.md index a5c9c9d75f6..d2712df9b09 100644 --- a/docs/variants/msi_z690/releases.md +++ b/docs/variants/msi_z690/releases.md @@ -413,7 +413,8 @@ Test results for this release can be found ### Added -- [Introduce updates via UEFI capsules (from this firmware onward)](https://github.com/Dasharo/dasharo-issues/issues/423) +- [Capsule Update V1](https://github.com/Dasharo/dasharo-issues/issues/423) +- [FWUPD support](https://docs.dasharo.com/kb/fwupd/) - [Preserve user data during a capsule update](https://github.com/Dasharo/dasharo-issues/issues/809) - [CPU configuration menu](https://github.com/Dasharo/dasharo-issues/issues/134) - [Update to a much newer EDKII revision](https://github.com/Dasharo/dasharo-issues/issues/432) @@ -617,7 +618,7 @@ Test results for this release can be found - [MSI ACPI device that triggers automatic driver and utility installation manager](https://www.youtube.com/watch?v=K-v-veV_jvI) - [Support for logo customization](https://docs.dasharo.com../../guides/logo-customization/) - UEFI 2.8 errata C compliance in EDKII fork -- [Firmware Update Mode feature](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) +- [Firmware Update Mode](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) ### Changed diff --git a/docs/variants/msi_z790/releases.md b/docs/variants/msi_z790/releases.md index 372dad967aa..933ee9d20d2 100644 --- a/docs/variants/msi_z790/releases.md +++ b/docs/variants/msi_z790/releases.md @@ -413,7 +413,8 @@ Test results for this release can be found ### Added -- [Introduce updates via UEFI capsules (from this firmware onward)](https://github.com/Dasharo/dasharo-issues/issues/423) +- [Capsule Update V1](https://github.com/Dasharo/dasharo-issues/issues/423) +- [FWUPD support](https://docs.dasharo.com/kb/fwupd/) - [Preserve user data during a capsule update](https://github.com/Dasharo/dasharo-issues/issues/809) - [CPU configuration menu](https://github.com/Dasharo/dasharo-issues/issues/134) - [Update to a much newer EDKII revision](https://github.com/Dasharo/dasharo-issues/issues/432) @@ -613,7 +614,7 @@ Test results for this release can be found - [MSI ACPI device that triggers automatic driver and utility installation manager](https://www.youtube.com/watch?v=K-v-veV_jvI) - [Support for logo customization](https://docs.dasharo.com../../guides/logo-customization/) - UEFI 2.8 errata C compliance in EDKII fork -- [Firmware Update Mode feature](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) +- [Firmware Update Mode](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [This is a Dasharo Pro Package release](https://docs.dasharo.com/dev-proc/versioning/#dasharo-pro-package-releases) - [Use new microcode version, refer to SBOM](https://github.com/coreboot/intel-microcode/commit/390edfb411ba7de8559ad40597c7acb6c6a1ea96) - [Use new ME version, refer to SBOM](https://github.com/Dasharo/dasharo-blobs/tree/main/msi/ms7e06) diff --git a/docs/variants/novacustom_ns5x_adl/releases.md b/docs/variants/novacustom_ns5x_adl/releases.md index 3988df37e1e..c619bc89685 100644 --- a/docs/variants/novacustom_ns5x_adl/releases.md +++ b/docs/variants/novacustom_ns5x_adl/releases.md @@ -16,7 +16,9 @@ Test results for this release can be found ### Added -- [Firmware update via UEFI capsule update interface with LVFS support](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [Capsule Update V1](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [FWUPD support](https://docs.dasharo.com/kb/fwupd/) +- [LVFS support](https://docs.dasharo.com/kb/capsule-updates-overview/) - [Dasharo TrustRoot (Intel Boot Guard) support](https://docs.dasharo.com/glossary/#dasharo-trustroot) - [PCR-0 reconstruction](https://github.com/Dasharo/coreboot/pull/740) - [Human-readable UEFI Secure Boot key management screens](https://docs.dasharo.com/dasharo-menu-docs/device-manager/#secure-boot-configuration) @@ -194,7 +196,7 @@ Test results for this release can be found ### Added -- [Firmware update mode](https://docs.dasharo.com../../guides/firmware-update/#firmware-update-mode) +- [Firmware Update Mode](https://docs.dasharo.com../../guides/firmware-update/#firmware-update-mode) - [BIOS boot medium write-protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [SMM BIOS write protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [Early boot DMA protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) diff --git a/docs/variants/novacustom_ns5x_tgl/releases.md b/docs/variants/novacustom_ns5x_tgl/releases.md index 0c9b973c281..2c85fdf4813 100644 --- a/docs/variants/novacustom_ns5x_tgl/releases.md +++ b/docs/variants/novacustom_ns5x_tgl/releases.md @@ -16,7 +16,9 @@ Test results for this release can be found ### Added -- [Firmware update via UEFI capsule update interface with LVFS support](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [Capsule Update V1](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [FWUPD support](https://docs.dasharo.com/kb/fwupd/) +- [LVFS support](https://docs.dasharo.com/kb/capsule-updates-overview/) - [PCR-0 reconstruction](https://github.com/Dasharo/coreboot/pull/740) - [Quiet boot/Fast boot](https://docs.dasharo.com/dasharo-menu-docs/boot-maintenance-mgr/) - [FTDI controller support](https://github.com/Dasharo/open-source-firmware-validation/blob/develop/docs/novacustom.md) @@ -255,7 +257,7 @@ Test results for this release can be found ### Added -- [Firmware update mode](https://docs.dasharo.com../../guides/firmware-update/#firmware-update-mode) +- [Firmware Update Mode](https://docs.dasharo.com../../guides/firmware-update/#firmware-update-mode) - [BIOS boot medium write-protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [SMM BIOS write protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [Early boot DMA protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) diff --git a/docs/variants/novacustom_nuc_box/releases.md b/docs/variants/novacustom_nuc_box/releases.md index e2f9e803ba3..7337e3f31e2 100644 --- a/docs/variants/novacustom_nuc_box/releases.md +++ b/docs/variants/novacustom_nuc_box/releases.md @@ -200,13 +200,15 @@ Test results for this release can be found ### Added - Support for NovaCustom NUC BOX (Meteor Lake) -- [Introduce updates via UEFI capsules (from this firmware onward)](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [Capsule Update V1](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [FWUPD support](https://docs.dasharo.com/kb/fwupd/) +- [LVFS support](https://docs.dasharo.com/kb/capsule-updates-overview/) - [TPM Measured Boot](https://docs.dasharo.com/unified-test-documentation/dasharo-security/203-measured-boot/) - [Vboot Verified Boot](https://docs.dasharo.com/guides/vboot-signing/) - [Intel ME soft disable](https://docs.dasharo.com/unified-test-documentation/dasharo-security/20F-me-neuter/) - [Vboot recovery notification in UEFI Payload](https://docs.dasharo.com/unified-test-documentation/dasharo-security/201-verified-boot/) - [UEFI Secure Boot](https://docs.dasharo.com/unified-test-documentation/dasharo-security/206-secure-boot/) -- [Firmware update mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) +- [Firmware Update Mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) - [BIOS boot medium write-protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [SMM BIOS write protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [Early Sign of Life display output](https://docs.dasharo.com/unified-test-documentation/dasharo-compatibility/347-sign-of-life/) diff --git a/docs/variants/novacustom_nv4x_adl/releases.md b/docs/variants/novacustom_nv4x_adl/releases.md index 51c71526912..e8af6ad9b3d 100644 --- a/docs/variants/novacustom_nv4x_adl/releases.md +++ b/docs/variants/novacustom_nv4x_adl/releases.md @@ -16,7 +16,9 @@ Test results for this release can be found ### Added -- [Firmware update via UEFI capsule update interface with LVFS support](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [Capsule Update V1](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [FWUPD support](https://docs.dasharo.com/kb/fwupd/) +- [LVFS support](https://docs.dasharo.com/kb/capsule-updates-overview/) - [Dasharo TrustRoot (Intel Boot Guard) support](https://docs.dasharo.com/glossary/#dasharo-trustroot) - [PCR-0 reconstruction](https://github.com/Dasharo/coreboot/pull/740) - [Human-readable UEFI Secure Boot key management screens](https://docs.dasharo.com/dasharo-menu-docs/device-manager/#secure-boot-configuration) @@ -215,7 +217,7 @@ Test results for this release can be found ### Added -- [Firmware update mode](https://docs.dasharo.com../../guides/firmware-update/#firmware-update-mode) +- [Firmware Update Mode](https://docs.dasharo.com../../guides/firmware-update/#firmware-update-mode) - [BIOS boot medium write-protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [SMM BIOS write protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [Early boot DMA protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) diff --git a/docs/variants/novacustom_nv4x_tgl/releases.md b/docs/variants/novacustom_nv4x_tgl/releases.md index dc95344a9a2..04349ee2449 100644 --- a/docs/variants/novacustom_nv4x_tgl/releases.md +++ b/docs/variants/novacustom_nv4x_tgl/releases.md @@ -20,7 +20,9 @@ Test results for this release can be found ### Added -- [Firmware update via UEFI capsule update interface with LVFS support](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [Capsule Update V1](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [FWUPD support](https://docs.dasharo.com/kb/fwupd/) +- [LVFS support](https://docs.dasharo.com/kb/capsule-updates-overview/) - [PCR-0 reconstruction](https://github.com/Dasharo/coreboot/pull/740) - [Quiet boot/Fast boot](https://docs.dasharo.com/dasharo-menu-docs/boot-maintenance-mgr/) - [FTDI controller support](https://github.com/Dasharo/open-source-firmware-validation/blob/develop/docs/novacustom.md) @@ -263,7 +265,7 @@ Test results for this release can be found ### Added -- [Firmware update mode](https://docs.dasharo.com../../guides/firmware-update/#firmware-update-mode) +- [Firmware Update Mode](https://docs.dasharo.com../../guides/firmware-update/#firmware-update-mode) - [BIOS boot medium write-protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [SMM BIOS write protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [Early boot DMA protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) diff --git a/docs/variants/novacustom_v540tnx/releases.md b/docs/variants/novacustom_v540tnx/releases.md index 1fd9d854d61..334c7caf4b8 100644 --- a/docs/variants/novacustom_v540tnx/releases.md +++ b/docs/variants/novacustom_v540tnx/releases.md @@ -33,7 +33,9 @@ Test results for this release can be found - [Sleep type option](https://github.com/Dasharo/coreboot/pull/738/files) - [PCR-0 reconstruction](https://github.com/Dasharo/coreboot/pull/740) - [ACPI driver](https://docs.dasharo.com/unified/novacustom/features/#acpi-driver) -- [UEFI Capsule Update support](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [Capsule Update V1](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [FWUPD support](https://docs.dasharo.com/kb/fwupd/) +- [LVFS support](https://docs.dasharo.com/kb/capsule-updates-overview/) - Fedora support - [Intel Boot Guard OEM Signing Key check in capsule update](https://docs.dasharo.com/guides/capsule-update/#troubleshooting) @@ -145,7 +147,7 @@ Test results for this release can be found - [Vboot recovery notification in UEFI Payload](https://docs.dasharo.com/unified-test-documentation/dasharo-security/201-verified-boot/) - [UEFI Shell](https://docs.dasharo.com/unified-test-documentation/dasharo-compatibility/30P-uefi-shell/) - [UEFI Secure Boot](https://docs.dasharo.com/unified-test-documentation/dasharo-security/206-secure-boot/) -- [Firmware update mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) +- [Firmware Update Mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) - [BIOS boot medium write-protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [SMM BIOS write protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [Current limiting for USB-PD power supplies](https://docs.dasharo.com/unified-test-documentation/dasharo-compatibility/31H-usb-type-c/#utc020001-usb-type-c-pd-current-limiting-ubuntu-2204) diff --git a/docs/variants/novacustom_v540tu/releases.md b/docs/variants/novacustom_v540tu/releases.md index d514a85818b..20ea8c374c2 100644 --- a/docs/variants/novacustom_v540tu/releases.md +++ b/docs/variants/novacustom_v540tu/releases.md @@ -121,7 +121,9 @@ Test results for this release can be found - [Sleep type option](https://github.com/Dasharo/coreboot/pull/738/files) - [PCR-0 reconstruction](https://github.com/Dasharo/coreboot/pull/740) - [ACPI driver](https://docs.dasharo.com/unified/novacustom/features/#acpi-driver) -- [UEFI Capsule Update support](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [Capsule Update V1](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [FWUPD support](https://docs.dasharo.com/kb/fwupd/) +- [LVFS support](https://docs.dasharo.com/kb/capsule-updates-overview/) - Fedora support ### Changed @@ -220,7 +222,7 @@ Test results for this release can be found - [Vboot recovery notification in UEFI Payload](https://docs.dasharo.com/unified-test-documentation/dasharo-security/201-verified-boot/) - [UEFI Shell](https://docs.dasharo.com/unified-test-documentation/dasharo-compatibility/30P-uefi-shell/) - [UEFI Secure Boot](https://docs.dasharo.com/unified-test-documentation/dasharo-security/206-secure-boot/) -- [Firmware update mode](https://docs.dasharo.com../../guides/firmware-update/#firmware-update-mode) +- [Firmware Update Mode](https://docs.dasharo.com../../guides/firmware-update/#firmware-update-mode) - [BIOS boot medium write-protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [SMM BIOS write protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [Early boot DMA protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) diff --git a/docs/variants/novacustom_v560tnx/releases.md b/docs/variants/novacustom_v560tnx/releases.md index edf36887293..eb37c20e3f9 100644 --- a/docs/variants/novacustom_v560tnx/releases.md +++ b/docs/variants/novacustom_v560tnx/releases.md @@ -33,7 +33,9 @@ Test results for this release can be found - [Sleep type option](https://github.com/Dasharo/coreboot/pull/738/files) - [PCR-0 reconstruction](https://github.com/Dasharo/coreboot/pull/740) - [ACPI driver](https://docs.dasharo.com/unified/novacustom/features/#acpi-driver) -- [UEFI Capsule Update support](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [Capsule Update V1](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [FWUPD support](https://docs.dasharo.com/kb/fwupd/) +- [LVFS support](https://docs.dasharo.com/kb/capsule-updates-overview/) - Fedora support - [Intel Boot Guard OEM Signing Key check in capsule update](https://docs.dasharo.com/guides/capsule-update/#troubleshooting) @@ -152,7 +154,7 @@ Test results for this release can be found - [Vboot recovery notification in UEFI Payload](https://docs.dasharo.com/unified-test-documentation/dasharo-security/201-verified-boot/) - [UEFI Shell](https://docs.dasharo.com/unified-test-documentation/dasharo-compatibility/30P-uefi-shell/) - [UEFI Secure Boot](https://docs.dasharo.com/unified-test-documentation/dasharo-security/206-secure-boot/) -- [Firmware update mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) +- [Firmware Update Mode](https://docs.dasharo.com/guides/firmware-update/#firmware-update-mode) - [BIOS boot medium write-protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [SMM BIOS write protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [Current limiting for USB-PD power supplies](https://docs.dasharo.com/unified-test-documentation/dasharo-compatibility/31H-usb-type-c/#utc020001-usb-type-c-pd-current-limiting-ubuntu-2204) diff --git a/docs/variants/novacustom_v560tu/releases.md b/docs/variants/novacustom_v560tu/releases.md index 3760741e562..b9a28b1e8b1 100644 --- a/docs/variants/novacustom_v560tu/releases.md +++ b/docs/variants/novacustom_v560tu/releases.md @@ -121,7 +121,9 @@ Test results for this release can be found - [Sleep type option](https://github.com/Dasharo/coreboot/pull/738/files) - [PCR-0 reconstruction](https://github.com/Dasharo/coreboot/pull/740) - [ACPI driver](https://docs.dasharo.com/unified/novacustom/features/#acpi-driver) -- [UEFI Capsule Update support](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [Capsule Update V1](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [FWUPD support](https://docs.dasharo.com/kb/fwupd/) +- [LVFS support](https://docs.dasharo.com/kb/capsule-updates-overview/) - Fedora support ### Changed @@ -220,7 +222,7 @@ Test results for this release can be found - [Vboot recovery notification in UEFI Payload](https://docs.dasharo.com/unified-test-documentation/dasharo-security/201-verified-boot/) - [UEFI Shell](https://docs.dasharo.com/unified-test-documentation/dasharo-compatibility/30P-uefi-shell/) - [UEFI Secure Boot](https://docs.dasharo.com/unified-test-documentation/dasharo-security/206-secure-boot/) -- [Firmware update mode](https://docs.dasharo.com../../guides/firmware-update/#firmware-update-mode) +- [Firmware Update Mode](https://docs.dasharo.com../../guides/firmware-update/#firmware-update-mode) - [BIOS boot medium write-protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [SMM BIOS write protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [Early boot DMA protection](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) diff --git a/docs/variants/qemu_q35/releases.md b/docs/variants/qemu_q35/releases.md index 4e3e435af20..68910d72c20 100644 --- a/docs/variants/qemu_q35/releases.md +++ b/docs/variants/qemu_q35/releases.md @@ -124,7 +124,7 @@ menus, but have no actual backend hooked up: - [SATA disk password support](https://docs.dasharo.com/dasharo-menu-docs/device-manager/#hdd-security-configuration) - SMM BIOS Write Protection support and enable/disable option - [USB stack and mass storage enable/disable option](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#usb-configuration) -- [Firmware Update Mode feature](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) +- [Firmware Update Mode](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) - [One of the two fan profiles can now be selected in Setup Menu](https://docs.dasharo.com/unified/novacustom/features/) - [Setup menu option for switching between S0ix and S3 suspend mode](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#power-management-options) - [Wi-Fi / Bluetooth module disable option in setup menu](https://docs.dasharo.com/dasharo-menu-docs/dasharo-system-features/#dasharo-security-options) diff --git a/scripts/check_openness_score_freshness.py b/scripts/check_openness_score_freshness.py new file mode 100644 index 00000000000..3d25651c30f --- /dev/null +++ b/scripts/check_openness_score_freshness.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python3 +""" +Fail if a commit adds Dasharo Openness Score chart(s) for a platform/version that +already has a row in docs/variants/overview.md's "Openness comparison" table, +without that row being updated to reference the new version. + +Usage: + check_openness_score_freshness.py [...] + +Changed file paths should be relative to the repo root. +""" + +import re +import sys +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parent.parent +OVERVIEW = REPO_ROOT / "docs/variants/overview.md" +CHART_SUFFIX = "_openness_chart.png" +VERSION_RE = re.compile(r"_v(\d+(?:\.\d+){1,3})(?=[_.]|$)") + + +def parse_version_family(filename): + """Split a ROM/chart filename into (family_key, version_tuple). + + The family key is the filename with its version number replaced by a + placeholder, so e.g. "foo_v1.2.3_heads.rom" and "foo_v1.3.0_heads.rom" + share the family "foo_v{VER}_heads.rom" while "foo_igpu_v1.2.3.rom" is a + distinct family from "foo_v1.2.3.rom". + """ + match = VERSION_RE.search(filename) + if not match: + return None, None + version = tuple(int(x) for x in match.group(1).split(".")) + family = filename[: match.start()] + "_v{VER}" + filename[match.end() :] + return family, version + + +def normalize(a, b): + n = max(len(a), len(b)) + return a + (0,) * (n - len(a)), b + (0,) * (n - len(b)) + + +def latest_version_on_disk(directory, family_key): + best = None + for chart in directory.glob(f"*{CHART_SUFFIX}"): + rom_name = chart.name[: -len(CHART_SUFFIX)] + family, version = parse_version_family(rom_name) + if family != family_key or version is None: + continue + if best is None: + best = version + else: + na, nb = normalize(version, best) + if na > nb: + best = version + return best + + +def parse_overview_rows(): + """Yield (line_no, platform, rom_filename) for each data row of the + "Openness comparison" table in overview.md.""" + if not OVERVIEW.exists(): + return + lines = OVERVIEW.read_text().splitlines() + try: + start = next( + i for i, l in enumerate(lines) if l.strip() == "## Openness comparison" + ) + except StopIteration: + return + in_table = False + for i in range(start, len(lines)): + line = lines[i] + if line.startswith("| Platform "): + in_table = True + continue + if not in_table: + continue + if not line.startswith("|"): + break + if line.startswith("| ---") or line.startswith("|---"): + continue + cols = [c.strip() for c in line.strip("|").split("|")] + if len(cols) < 2: + continue + yield i + 1, cols[0], cols[1] + + +def main(changed_files): + changed_charts = [REPO_ROOT / f for f in changed_files if f.endswith(CHART_SUFFIX)] + if not changed_charts: + return 0 + + changed_dirs_families = set() + for chart in changed_charts: + rom_name = chart.name[: -len(CHART_SUFFIX)] + family, _ = parse_version_family(rom_name) + if family is None: + continue + changed_dirs_families.add((chart.parent, family)) + + failures = [] + for line_no, platform, rom_filename in parse_overview_rows(): + family, row_version = parse_version_family(rom_filename) + if family is None: + continue + + matches = sorted( + REPO_ROOT.glob(f"docs/variants/*/{rom_filename}{CHART_SUFFIX}") + ) + if not matches: + continue + directory = matches[0].parent + + if (directory, family) not in changed_dirs_families: + continue + + latest = latest_version_on_disk(directory, family) + if latest is None: + continue + + row_norm, latest_norm = normalize(row_version, latest) + if row_norm < latest_norm: + failures.append( + f"docs/variants/overview.md:{line_no}: row '{platform}' " + f"references {rom_filename} " + f"(v{'.'.join(map(str, row_version))}), but " + f"{directory.relative_to(REPO_ROOT)} now has an openness " + f"score for v{'.'.join(map(str, latest))}." + ) + + if failures: + print("Openness comparison table (docs/variants/overview.md) is out of date:\n") + for failure in failures: + print(f" - {failure}") + return 1 + return 0 + + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:])) diff --git a/scripts/generate_firmware_update_support_table.py b/scripts/generate_firmware_update_support_table.py new file mode 100644 index 00000000000..5b043cf1eb4 --- /dev/null +++ b/scripts/generate_firmware_update_support_table.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 +""" +Regenerate docs/guides/firmware-update-method-support-table.csv from docs/variants/*/releases.md + +Each releases.md is scanned for bullets, under a "### Added" heading, whose +link text is exactly one of these bullet titles: "Firmware Update Mode", +"Capsule Update V1", "FWUPD support", "LVFS support", "Capsule Update V2". +""" + +import csv +import io +import re +import sys +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parent.parent +VARIANTS_DIR = REPO_ROOT / "docs/variants" +CSV_PATH = REPO_ROOT / "docs/guides/firmware-update-method-support-table.csv" + +# Not real hardware +EXCLUDED_VARIANTS = {"qemu_q35"} + +FEATURES = [ + ("Firmware Update Mode", "[Firmware Update Mode][fum]"), + ("Capsule Update V1", "[Capsule Update V1][cup1]"), + ("FWUPD support", "[FWUPD][fwupd]"), + ("LVFS support", "[LVFS][lvfs]"), + ("Capsule Update V2", "[Capsule Update V2][cup2]"), +] +FEATURE_NAMES = {name for name, _ in FEATURES} +HEADER = ["Manufacturer", "Device"] + [column for _, column in FEATURES] + +VERSION_HEADING_RE = re.compile(r"^##\s+v(\d+(?:\.\d+)*)\b") +SECTION_HEADING_RE = re.compile(r"^###\s+(.+)$") +BULLET_RE = re.compile(r"^-\s*\[([^\]]+)\]") +TITLE_RE = re.compile(r"^#\s+(.+?)\s+Dasharo Release Notes\s*$", re.IGNORECASE) + + +def normalize(a, b): + n = max(len(a), len(b)) + return a + (0,) * (n - len(a)), b + (0,) * (n - len(b)) + + +def parse_manufacturer_device(text): + for line in text.splitlines(): + if not line.startswith("#"): + continue + match = TITLE_RE.match(line.strip()) + if not match: + return None, None + words = match.group(1).split(None, 1) + return (words[0], words[1]) if len(words) == 2 else (words[0], "") + return None, None + + +def parse_feature_versions(text): + """Return {feature_name: version_tuple} for the lowest version + each searched bullet appears under in this file. + """ + best = {} + current_version = None + in_added_section = False + for line in text.splitlines(): + match = VERSION_HEADING_RE.match(line) + if match: + current_version = tuple(int(x) for x in match.group(1).split(".")) + in_added_section = False + continue + match = SECTION_HEADING_RE.match(line) + if match: + in_added_section = match.group(1).strip().lower() == "added" + continue + if not in_added_section or current_version is None: + continue + match = BULLET_RE.match(line.strip()) + if not match or match.group(1).strip() not in FEATURE_NAMES: + continue + title = match.group(1).strip() + previous = best.get(title) + if previous is None: + best[title] = current_version + else: + a, b = normalize(current_version, previous) + if a < b: + best[title] = current_version + return best + + +def format_version(version): + return "v" + ".".join(map(str, version)) + + +def collect_rows(): + rows = [] + for releases_md in sorted(VARIANTS_DIR.glob("*/releases.md")): + if releases_md.parent.name in EXCLUDED_VARIANTS: + continue + text = releases_md.read_text() + manufacturer, device = parse_manufacturer_device(text) + if manufacturer is None: + continue + versions = parse_feature_versions(text) + if not versions: + continue + row = [manufacturer, device] + row.extend( + format_version(versions[name]) if name in versions else "-" + for name, _ in FEATURES + ) + rows.append(row) + rows.sort(key=lambda row: (row[0].lower(), row[1].lower())) + return rows + + +def render_csv(rows): + buf = io.StringIO() + writer = csv.writer(buf, lineterminator="\n") + writer.writerow(HEADER) + writer.writerows(rows) + return buf.getvalue() + + +def main(): + new_content = render_csv(collect_rows()) + old_content = CSV_PATH.read_text() if CSV_PATH.exists() else None + if new_content == old_content: + return 0 + CSV_PATH.write_text(new_content) + print(f"Regenerated {CSV_PATH.relative_to( + REPO_ROOT)} from releases.md changelogs.") + print("Review the change and stage the file, then commit again.") + return 1 + + +if __name__ == "__main__": + sys.exit(main())