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..2269ce5a632 100644 --- a/docs/guides/firmware-update-method-support-table.csv +++ b/docs/guides/firmware-update-method-support-table.csv @@ -1,10 +1,14 @@ 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,- +Hardkernel,ODROID H4,-,v0.9.1,-,-,- +MSI,PRO B850-P WIFI,v0.9.0,v0.9.0,-,-,- +MSI,PRO Z690-A (WIFI) (DDR4),v1.1.2,v1.1.4,-,-,- +MSI,PRO Z790-P (WIFI) (DDR5),v0.9.0,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,-,-,- +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,-,-,- +NovaCustom,V54xTNx 14th Gen,v0.9.1,v1.0.0,-,-,- +NovaCustom,V560TU,v0.9.0,v1.0.0,-,-,- +NovaCustom,V56xTNx 14th Gen,v0.9.1,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/hardkernel_odroid_h4/releases.md b/docs/variants/hardkernel_odroid_h4/releases.md index f3e762fafca..2f149097ffe 100644 --- a/docs/variants/hardkernel_odroid_h4/releases.md +++ b/docs/variants/hardkernel_odroid_h4/releases.md @@ -27,7 +27,7 @@ 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) - [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..3ccf3f739d1 100644 --- a/docs/variants/msi_b850/releases.md +++ b/docs/variants/msi_b850/releases.md @@ -44,13 +44,13 @@ 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/) - 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..5d28519ba70 100644 --- a/docs/variants/msi_z690/releases.md +++ b/docs/variants/msi_z690/releases.md @@ -413,7 +413,7 @@ 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) - [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 +617,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..e62f534d90d 100644 --- a/docs/variants/msi_z790/releases.md +++ b/docs/variants/msi_z790/releases.md @@ -413,7 +413,7 @@ 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) - [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 +613,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..c83f608b615 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](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [LVFS](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..f15a8ab7d0d 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](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [LVFS](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..e8d3d8004c7 100644 --- a/docs/variants/novacustom_nuc_box/releases.md +++ b/docs/variants/novacustom_nuc_box/releases.md @@ -200,13 +200,13 @@ 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/) - [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..8aa5bc6dbe6 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](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [LVFS](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..eee9c3667cd 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](https://docs.dasharo.com/kb/capsule-updates-overview/) +- [LVFS](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..bdbe6bb1c66 100644 --- a/docs/variants/novacustom_v540tnx/releases.md +++ b/docs/variants/novacustom_v540tnx/releases.md @@ -33,7 +33,7 @@ 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/) - Fedora support - [Intel Boot Guard OEM Signing Key check in capsule update](https://docs.dasharo.com/guides/capsule-update/#troubleshooting) @@ -145,7 +145,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..d001fdf9144 100644 --- a/docs/variants/novacustom_v540tu/releases.md +++ b/docs/variants/novacustom_v540tu/releases.md @@ -121,7 +121,7 @@ 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/) - Fedora support ### Changed @@ -220,7 +220,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..1d11f12adb8 100644 --- a/docs/variants/novacustom_v560tnx/releases.md +++ b/docs/variants/novacustom_v560tnx/releases.md @@ -33,7 +33,7 @@ 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/) - Fedora support - [Intel Boot Guard OEM Signing Key check in capsule update](https://docs.dasharo.com/guides/capsule-update/#troubleshooting) @@ -152,7 +152,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..ffd1dacac83 100644 --- a/docs/variants/novacustom_v560tu/releases.md +++ b/docs/variants/novacustom_v560tu/releases.md @@ -121,7 +121,7 @@ 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/) - Fedora support ### Changed @@ -220,7 +220,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/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..123c54567b9 --- /dev/null +++ b/scripts/generate_firmware_update_support_table.py @@ -0,0 +1,132 @@ +#!/usr/bin/env python3 +""" +Regenerate docs/guides/firmware-update-method-support-table.csv from the +standardized "Added" bullets in docs/variants/*/releases.md. + +Each releases.md is scanned for bullets, under a "### Added" heading, whose +link text is exactly one of these ("Firmware +Update Mode", "Capsule Update V1", "FWUPD", "LVFS", "Capsule Update V2"). The +lowest version a feature is found under is recorded as the version it's +"supported starting from". +""" + +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" + +FEATURES = [ + ("Firmware Update Mode", "[Firmware Update Mode][fum]"), + ("Capsule Update V1", "[Capsule Update V1][cup1]"), + ("FWUPD", "[FWUPD][fwupd]"), + ("LVFS", "[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 + standardized feature 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")): + 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())