From 5c7bf673ee128c186fbb7c1fbf6e2ae262a6b0da Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 20 Jul 2026 05:47:16 +0000 Subject: [PATCH 1/7] Update KiCad symbols and footprints lists [no ci] --- public/kicad/footprints.txt | 16 +++++++++++++++- public/kicad/symbols.txt | 10 ++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/public/kicad/footprints.txt b/public/kicad/footprints.txt index f45c74c8..a9e0df15 100644 --- a/public/kicad/footprints.txt +++ b/public/kicad/footprints.txt @@ -1,4 +1,4 @@ -# Generated on Mon Jul 13 05:43:59 UTC 2026 +# Generated on Mon Jul 20 05:45:44 UTC 2026 # This file contains all footprints available in the offical KiCAD library Audio_Module:Reverb_BTDR-1H Audio_Module:Reverb_BTDR-1V @@ -7732,6 +7732,15 @@ Connector_TE-Connectivity:TE_Micro-MaTch_2-215079-0_2x10_P1.27mm_Vertical Connector_TE-Connectivity:TE_Micro-MaTch_215079-4_2x02_P1.27mm_Vertical Connector_TE-Connectivity:TE_Micro-MaTch_215079-6_2x03_P1.27mm_Vertical Connector_TE-Connectivity:TE_Micro-MaTch_215079-8_2x04_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_7-188275-4_2x02_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_7-188275-6_2x03_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_7-188275-8_2x04_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_8-188275-0_2x05_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_8-188275-2_2x06_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_8-188275-4_2x07_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_8-188275-6_2x08_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_8-188275-8_2x09_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_9-188275-0_2x10_P1.27mm_Vertical Connector_TE-Connectivity:TE_T4041037031-000_M8_03_Socket_Straight Connector_TE-Connectivity:TE_T4041037041-000_M8_04_Socket_Straight Connector_USB:USB3_A_Molex_48393-001 @@ -9150,6 +9159,7 @@ Inductor_SMD:L_APV_APH1770 Inductor_SMD:L_APV_APH2213 Inductor_SMD:L_AVX_LMLP07A7 Inductor_SMD:L_Abracon_ASPI-0425 +Inductor_SMD:L_Abracon_ASPI-0628 Inductor_SMD:L_Abracon_ASPI-0630LR Inductor_SMD:L_Abracon_ASPI-3012S Inductor_SMD:L_Abracon_ASPI-4030S @@ -12565,6 +12575,8 @@ Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.46x2.31mm Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.46x2.31mm_ThermalVias Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.66x2.46mm Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.66x2.46mm_ThermalVias +Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.78x3.37mm +Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.78x3.37mm_ThermalVias Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask3x3mm_ThermalVias Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3x3mm Package_SO:HTSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP2.74x3.86mm @@ -12919,6 +12931,8 @@ Package_SO:Texas_DYY0016A_TSOT-23-16_2x4.2mm_P0.5mm Package_SO:Texas_HSOP-8-1EP_3.9x4.9mm_P1.27mm Package_SO:Texas_HSOP-8-1EP_3.9x4.9mm_P1.27mm_ThermalVias Package_SO:Texas_HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalVias +Package_SO:Texas_HTSSOP-14-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.94x3.34mm +Package_SO:Texas_HTSSOP-14-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.94x3.34mm_ThermalVias Package_SO:Texas_HTSSOP-14-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask3.155x3.255mm Package_SO:Texas_HTSSOP-14-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask3.155x3.255mm_ThermalVias Package_SO:Texas_PW0020A_TSSOP-20_4.4x6.5mm_P0.65mm diff --git a/public/kicad/symbols.txt b/public/kicad/symbols.txt index 48605b79..40f51b0e 100644 --- a/public/kicad/symbols.txt +++ b/public/kicad/symbols.txt @@ -1,4 +1,4 @@ -# Generated on Mon Jul 13 05:44:30 UTC 2026 +# Generated on Mon Jul 20 05:46:23 UTC 2026 # This file contains all symbols available in the offical KiCAD library 4xxx:14528 4xxx:14529 @@ -951,6 +951,8 @@ Amplifier_Current:INA201D Amplifier_Current:INA201DGK Amplifier_Current:INA202D Amplifier_Current:INA202DGK +Amplifier_Current:INA2180AxxDGK +Amplifier_Current:INA2180AxxDSG Amplifier_Current:INA225 Amplifier_Current:INA240A1D Amplifier_Current:INA240A1PW @@ -7680,6 +7682,7 @@ Driver_LED:IS31FL3218-GR Driver_LED:IS31FL3218-QF Driver_LED:IS31FL3236-TQ Driver_LED:IS31FL3236A-TQ +Driver_LED:IS31FL3242 Driver_LED:IS31FL3731-QF Driver_LED:IS31FL3731-SA Driver_LED:IS31FL3733-QF @@ -8271,6 +8274,10 @@ Filter:MAX7422xUA Filter:MAX7423xUA Filter:MAX7424xUA Filter:MAX7425xUA +Filter:MAX7426xPA +Filter:MAX7426xUA +Filter:MAX7427xPA +Filter:MAX7427xUA Filter:MAX7480xPA Filter:MAX7480xSA Filter:P300PL104M275xC222 @@ -9659,7 +9666,6 @@ Logic_Programmable:PAL20L10xxNS Logic_Programmable:PAL20L8 Logic_Programmable:PAL20R8xx-P Logic_Programmable:PAL20RS10 -Logic_Programmable:PAL24 Logic_Programmable:PALCE16V8 Logic_Programmable:PEEL22CV10AP Logic_Programmable:PEEL22CV10AS From 39982489050c3618c93ad177afd569e383de909d Mon Sep 17 00:00:00 2001 From: Sebastian Almberg <83243306+Sebbeben@users.noreply.github.com> Date: Mon, 20 Jul 2026 20:52:01 +0200 Subject: [PATCH 2/7] Import: document EDA/KiCad columns, test both column forms, fix eda_invisible inversion (#1436) - Document the eda_* import columns in docs/usage/import_export.md: the flat form and its short aliases, and the nested eda_info.* form used by the CSV/JSON export and the shipped part_import_example.csv. - Add EntityImporterTest coverage locking in that BOTH the nested eda_info.* form and the flat form import the EDA fields correctly (the nested form already worked via the serializer but was untested, so an export -> re-import round-trip could silently regress). - Fix the eda_invisible alias: it was a plain key-rename to eda_visibility, so eda_invisible=1 stored visibility=true (made the part visible - the opposite of the name). It is now handled explicitly and inverted. --- docs/usage/import_export.md | 15 ++++ src/Serializer/PartNormalizer.php | 7 +- .../ImportExportSystem/EntityImporterTest.php | 78 +++++++++++++++++++ 3 files changed, 99 insertions(+), 1 deletion(-) diff --git a/docs/usage/import_export.md b/docs/usage/import_export.md index f4d8d91c..9f1525c2 100644 --- a/docs/usage/import_export.md +++ b/docs/usage/import_export.md @@ -109,6 +109,21 @@ supplier is not specified, the price and supplier product number fields will be * **`supplier_product_number`** or **`supplier_part_number`** or * **`spn`**: The supplier product number of the part. * **`price`**: The price of the part in the base currency of the database (by default euro). +The following fields set the EDA / KiCad metadata of the part (see [EDA / KiCad integration](eda_integration.md)). +These can be given either as the flat column names below, or in the nested `eda_info.*` form used by the +CSV/JSON export and the [example file](#example-data) (e.g. `eda_info.kicad_symbol`), so a file exported from +Part-DB can be re-imported without renaming its headers: + +* **`eda_kicad_symbol`** or **`kicad_symbol`**: The KiCad symbol of the part, e.g. `Device:R`. +* **`eda_kicad_footprint`** or **`kicad_footprint`**: The KiCad footprint, e.g. `Resistor_SMD:R_0805_2012Metric`. +* **`eda_reference_prefix`** or **`kicad_reference`**: The schematic reference prefix, e.g. `R`, `C`, `L`. +* **`eda_value`** or **`kicad_value`**: The value shown in the EDA tool, e.g. `10k`. +* **`eda_exclude_from_bom`** (or **`eda_exclude_bom`**), **`eda_exclude_from_board`** (or **`eda_exclude_board`**), + **`eda_exclude_from_sim`** (or **`eda_exclude_sim`**): Booleans (`1`/`0`) to exclude the part from the BOM, board + or simulation. +* **`eda_visibility`**: Boolean (`1`/`0`) controlling whether the part is exposed to the EDA tool. The inverse + convenience alias **`eda_invisible`** is also accepted (so `eda_invisible=1` hides the part). + #### Example data Here you can find some example data for the import of parts, you can use it as a template for your own import ( diff --git a/src/Serializer/PartNormalizer.php b/src/Serializer/PartNormalizer.php index 8486a634..50f76132 100644 --- a/src/Serializer/PartNormalizer.php +++ b/src/Serializer/PartNormalizer.php @@ -63,7 +63,9 @@ class PartNormalizer implements NormalizerInterface, DenormalizerInterface, Norm 'eda_exclude_bom' => 'eda_exclude_from_bom', 'eda_exclude_board' => 'eda_exclude_from_board', 'eda_exclude_sim' => 'eda_exclude_from_sim', - 'eda_invisible' => 'eda_visibility', + //NOTE: "eda_invisible" is intentionally NOT mapped here: it is the *inverse* of + //"eda_visibility", so a plain key rename would store the wrong value. It is handled + //(and inverted) explicitly in applyEdaFields(). ]; public function __construct( @@ -235,6 +237,9 @@ class PartNormalizer implements NormalizerInterface, DenormalizerInterface, Norm } if (isset($data['eda_visibility']) && $data['eda_visibility'] !== '') { $edaInfo->setVisibility(filter_var($data['eda_visibility'], FILTER_VALIDATE_BOOLEAN)); + } elseif (isset($data['eda_invisible']) && $data['eda_invisible'] !== '') { + //"eda_invisible" is the inverse convenience alias of "eda_visibility" + $edaInfo->setVisibility(!filter_var($data['eda_invisible'], FILTER_VALIDATE_BOOLEAN)); } } diff --git a/tests/Services/ImportExportSystem/EntityImporterTest.php b/tests/Services/ImportExportSystem/EntityImporterTest.php index b0044dda..29804dc6 100644 --- a/tests/Services/ImportExportSystem/EntityImporterTest.php +++ b/tests/Services/ImportExportSystem/EntityImporterTest.php @@ -350,6 +350,84 @@ EOT; $this->assertSame('test,test2', $results[0]->getTags()); } + public function testImportAcceptsNestedEdaInfoColumns(): void + { + //The API / JSON export writes EDA columns as "eda_info.kicad_symbol"; re-importing such a + //file must fill the EDA fields (previously these columns were silently dropped). + $input = "name;eda_info.kicad_symbol;eda_info.kicad_footprint;eda_info.reference_prefix;eda_info.value\n" + ."Nested EDA part;Device:L;Inductor_THT:L_Axial_0307;L;100uH"; + + $category = new Category(); + $category->setName('Test EDA category'); + + $errors = []; + $results = $this->service->importString($input, [ + 'class' => Part::class, + 'format' => 'csv', + 'csv_delimiter' => ';', + 'create_unknown_datastructures' => true, + 'part_category' => $category, + ], $errors); + + $this->assertCount(1, $results); + $this->assertEmpty($errors); + $eda = $results[0]->getEdaInfo(); + $this->assertSame('Device:L', $eda->getKicadSymbol()); + $this->assertSame('Inductor_THT:L_Axial_0307', $eda->getKicadFootprint()); + $this->assertSame('L', $eda->getReferencePrefix()); + $this->assertSame('100uH', $eda->getValue()); + } + + public function testImportAcceptsFlatEdaColumns(): void + { + //The documented flat form (and its short aliases) must keep working. + $input = "name;eda_kicad_symbol;kicad_footprint;kicad_reference\n" + ."Flat EDA part;Device:R;Resistor_SMD:R_0805_2012Metric;R"; + + $category = new Category(); + $category->setName('Test EDA category'); + + $errors = []; + $results = $this->service->importString($input, [ + 'class' => Part::class, + 'format' => 'csv', + 'csv_delimiter' => ';', + 'create_unknown_datastructures' => true, + 'part_category' => $category, + ], $errors); + + $this->assertCount(1, $results); + $this->assertEmpty($errors); + $eda = $results[0]->getEdaInfo(); + $this->assertSame('Device:R', $eda->getKicadSymbol()); + $this->assertSame('Resistor_SMD:R_0805_2012Metric', $eda->getKicadFootprint()); + $this->assertSame('R', $eda->getReferencePrefix()); + } + + public function testImportInvisibleAliasInvertsVisibility(): void + { + //"eda_invisible" is the inverse convenience alias of "eda_visibility": eda_invisible=1 + //must make the part NOT visible to the EDA tool (visibility=false), not visible. + $input = "name;eda_invisible\n" + ."Hidden EDA part;1"; + + $category = new Category(); + $category->setName('Test EDA category'); + + $errors = []; + $results = $this->service->importString($input, [ + 'class' => Part::class, + 'format' => 'csv', + 'csv_delimiter' => ';', + 'create_unknown_datastructures' => true, + 'part_category' => $category, + ], $errors); + + $this->assertCount(1, $results); + $this->assertEmpty($errors); + $this->assertFalse($results[0]->getEdaInfo()->getVisibility()); + } + public function testImportExcelFileProjects(): void { $spreadsheet = new Spreadsheet(); From bca82912298fad2252fea7a2ad2c097feaa5130b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 20 Jul 2026 20:56:13 +0200 Subject: [PATCH 3/7] Update KiCad symbols and footprints lists [no ci] (#1452) Co-authored-by: github-actions[bot] --- public/kicad/footprints.txt | 16 +++++++++++++++- public/kicad/symbols.txt | 10 ++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/public/kicad/footprints.txt b/public/kicad/footprints.txt index f45c74c8..a9e0df15 100644 --- a/public/kicad/footprints.txt +++ b/public/kicad/footprints.txt @@ -1,4 +1,4 @@ -# Generated on Mon Jul 13 05:43:59 UTC 2026 +# Generated on Mon Jul 20 05:45:44 UTC 2026 # This file contains all footprints available in the offical KiCAD library Audio_Module:Reverb_BTDR-1H Audio_Module:Reverb_BTDR-1V @@ -7732,6 +7732,15 @@ Connector_TE-Connectivity:TE_Micro-MaTch_2-215079-0_2x10_P1.27mm_Vertical Connector_TE-Connectivity:TE_Micro-MaTch_215079-4_2x02_P1.27mm_Vertical Connector_TE-Connectivity:TE_Micro-MaTch_215079-6_2x03_P1.27mm_Vertical Connector_TE-Connectivity:TE_Micro-MaTch_215079-8_2x04_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_7-188275-4_2x02_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_7-188275-6_2x03_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_7-188275-8_2x04_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_8-188275-0_2x05_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_8-188275-2_2x06_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_8-188275-4_2x07_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_8-188275-6_2x08_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_8-188275-8_2x09_P1.27mm_Vertical +Connector_TE-Connectivity:TE_Micro-MaTch_9-188275-0_2x10_P1.27mm_Vertical Connector_TE-Connectivity:TE_T4041037031-000_M8_03_Socket_Straight Connector_TE-Connectivity:TE_T4041037041-000_M8_04_Socket_Straight Connector_USB:USB3_A_Molex_48393-001 @@ -9150,6 +9159,7 @@ Inductor_SMD:L_APV_APH1770 Inductor_SMD:L_APV_APH2213 Inductor_SMD:L_AVX_LMLP07A7 Inductor_SMD:L_Abracon_ASPI-0425 +Inductor_SMD:L_Abracon_ASPI-0628 Inductor_SMD:L_Abracon_ASPI-0630LR Inductor_SMD:L_Abracon_ASPI-3012S Inductor_SMD:L_Abracon_ASPI-4030S @@ -12565,6 +12575,8 @@ Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.46x2.31mm Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.46x2.31mm_ThermalVias Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.66x2.46mm Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.66x2.46mm_ThermalVias +Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.78x3.37mm +Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.78x3.37mm_ThermalVias Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask3x3mm_ThermalVias Package_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3x3mm Package_SO:HTSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP2.74x3.86mm @@ -12919,6 +12931,8 @@ Package_SO:Texas_DYY0016A_TSOT-23-16_2x4.2mm_P0.5mm Package_SO:Texas_HSOP-8-1EP_3.9x4.9mm_P1.27mm Package_SO:Texas_HSOP-8-1EP_3.9x4.9mm_P1.27mm_ThermalVias Package_SO:Texas_HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalVias +Package_SO:Texas_HTSSOP-14-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.94x3.34mm +Package_SO:Texas_HTSSOP-14-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.94x3.34mm_ThermalVias Package_SO:Texas_HTSSOP-14-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask3.155x3.255mm Package_SO:Texas_HTSSOP-14-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask3.155x3.255mm_ThermalVias Package_SO:Texas_PW0020A_TSSOP-20_4.4x6.5mm_P0.65mm diff --git a/public/kicad/symbols.txt b/public/kicad/symbols.txt index 48605b79..40f51b0e 100644 --- a/public/kicad/symbols.txt +++ b/public/kicad/symbols.txt @@ -1,4 +1,4 @@ -# Generated on Mon Jul 13 05:44:30 UTC 2026 +# Generated on Mon Jul 20 05:46:23 UTC 2026 # This file contains all symbols available in the offical KiCAD library 4xxx:14528 4xxx:14529 @@ -951,6 +951,8 @@ Amplifier_Current:INA201D Amplifier_Current:INA201DGK Amplifier_Current:INA202D Amplifier_Current:INA202DGK +Amplifier_Current:INA2180AxxDGK +Amplifier_Current:INA2180AxxDSG Amplifier_Current:INA225 Amplifier_Current:INA240A1D Amplifier_Current:INA240A1PW @@ -7680,6 +7682,7 @@ Driver_LED:IS31FL3218-GR Driver_LED:IS31FL3218-QF Driver_LED:IS31FL3236-TQ Driver_LED:IS31FL3236A-TQ +Driver_LED:IS31FL3242 Driver_LED:IS31FL3731-QF Driver_LED:IS31FL3731-SA Driver_LED:IS31FL3733-QF @@ -8271,6 +8274,10 @@ Filter:MAX7422xUA Filter:MAX7423xUA Filter:MAX7424xUA Filter:MAX7425xUA +Filter:MAX7426xPA +Filter:MAX7426xUA +Filter:MAX7427xPA +Filter:MAX7427xUA Filter:MAX7480xPA Filter:MAX7480xSA Filter:P300PL104M275xC222 @@ -9659,7 +9666,6 @@ Logic_Programmable:PAL20L10xxNS Logic_Programmable:PAL20L8 Logic_Programmable:PAL20R8xx-P Logic_Programmable:PAL20RS10 -Logic_Programmable:PAL24 Logic_Programmable:PALCE16V8 Logic_Programmable:PEEL22CV10AP Logic_Programmable:PEEL22CV10AS From 9d438d7d9771dce10a547d75cfdfeefcf6ebbf87 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2026 20:56:31 +0200 Subject: [PATCH 4/7] Bump actions/setup-node from 6 to 7 (#1455) Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/assets_artifact_build.yml | 2 +- .github/workflows/tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/assets_artifact_build.yml b/.github/workflows/assets_artifact_build.yml index de493498..c92f6ec5 100644 --- a/.github/workflows/assets_artifact_build.yml +++ b/.github/workflows/assets_artifact_build.yml @@ -65,7 +65,7 @@ jobs: ${{ runner.os }}-yarn- - name: Setup node - uses: actions/setup-node@v6 + uses: actions/setup-node@v7 with: node-version: '22' diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 927a2a02..c2c9e93a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -104,7 +104,7 @@ jobs: run: composer install --prefer-dist --no-progress - name: Setup node - uses: actions/setup-node@v6 + uses: actions/setup-node@v7 with: node-version: '22' From 3de2c91d93d5ae8bceb47ea0ab495698e2c898f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Wed, 22 Jul 2026 00:29:09 +0200 Subject: [PATCH 5/7] Mention in docs and messages, that the env in docker-compose must not be quoted Fixed issue #1453 --- .env | 1 + docs/configuration.md | 8 +++++++- docs/installation/installation_docker.md | 5 ++++- docs/installation/reverse-proxy.md | 8 +++++++- .../TwigBundle/Exception/error400.html.twig | 16 ++++++++++------ templates/homepage.html.twig | 9 ++++++--- translations/messages.de.xlf | 14 +++++++++++++- translations/messages.en.xlf | 14 +++++++++++++- 8 files changed, 61 insertions(+), 14 deletions(-) diff --git a/.env b/.env index 557ed6e8..c175012b 100644 --- a/.env +++ b/.env @@ -8,6 +8,7 @@ APP_SECRET=a03498528f5a5fc089273ec9ae5b2849 # Change this and uncomment the following line to set the trusted hosts for your Part-DB installation, aka under which # domain names it is reachable. This is makes things more secure, because it can prevent certain header attacks. # You have to escape dots in the domain name with a backslash +# IMPORTANT: In .env files (like this one), the value must be wrapped in single quotes as shown below. #TRUSTED_HOSTS='^(your-domain\.invalid)$' # You can also allow multiple domain names, e.g. for testing or development purposes, with an | between the domain names. diff --git a/docs/configuration.md b/docs/configuration.md index 6bf59529..d6309351 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -265,10 +265,16 @@ See the [information providers]({% link usage/information_provider_system.md %}) should be accessible. If accessed via a hostname not matching the regex, an error page will be shown instead. By default this is empty, meaning Part-DB accepts requests for any host name, which is not recommended for production use. - For example, if Part-DB should only be reachable under `part-db.example.invalid`, set: + For example, if Part-DB should only be reachable under `part-db.example.invalid`, set the following in your + `.env.local` file (the value must be wrapped in single quotes here): ``` TRUSTED_HOSTS='^(part-db\.example\.invalid)$' ``` + If you set `TRUSTED_HOSTS` as an environment variable in your `docker-compose.yaml` instead, the value must + **not** be quoted: + ``` + TRUSTED_HOSTS=^(part-db\.example\.invalid)$ + ``` You can specify multiple host names separated by `|`, e.g. `^(localhost|part-db\.example\.invalid)$`. Part-DB displays a warning on the homepage (visible to administrators only) as long as this value is not set. * `DEMO_MODE` (env only): Set Part-DB into demo mode, which forbids users to change their passwords and settings. Used for the demo diff --git a/docs/installation/installation_docker.md b/docs/installation/installation_docker.md index 0d5f8a8b..1331f2a3 100644 --- a/docs/installation/installation_docker.md +++ b/docs/installation/installation_docker.md @@ -87,6 +87,7 @@ services: # To prevent HTTP Host header attacks, set this to a regex matching all host names Part-DB should be reachable under. # By default (unset) Part-DB accepts requests for any host name, which is not recommended for production use. + # IMPORTANT: Unlike in .env files, the value here must NOT be wrapped in quotes. # - TRUSTED_HOSTS=^(part-db\.example\.invalid)$ # If you need to install additional composer packages (e.g., for specific mailer transports), you can specify them here: @@ -101,7 +102,8 @@ services: openssl rand -hex 32 ``` 6. Uncomment and set the `TRUSTED_HOSTS` variable to a regex matching the host name(s) Part-DB should be reachable under - (e.g. `^(part-db\.example\.invalid)$`), to prevent HTTP Host header attacks. See [Configuration]({% link configuration.md %}) + (e.g. `^(part-db\.example\.invalid)$`), to prevent HTTP Host header attacks. Note that, unlike in `.env` files, the + value must **not** be quoted in `docker-compose.yaml`. See [Configuration]({% link configuration.md %}) for more information. 7. Inside the folder, run @@ -181,6 +183,7 @@ services: # To prevent HTTP Host header attacks, set this to a regex matching all host names Part-DB should be reachable under. # By default (unset) Part-DB accepts requests for any host name, which is not recommended for production use. + # IMPORTANT: Unlike in .env files, the value here must NOT be wrapped in quotes. # - TRUSTED_HOSTS=^(part-db\.example\.invalid)$ # If you need to install additional composer packages (e.g., for specific mailer transports), you can specify them here: diff --git a/docs/installation/reverse-proxy.md b/docs/installation/reverse-proxy.md index 24d502b4..30c74223 100644 --- a/docs/installation/reverse-proxy.md +++ b/docs/installation/reverse-proxy.md @@ -24,12 +24,18 @@ the reverse proxy). You should also set the `TRUSTED_HOSTS` environment variable to a regex matching the host name(s) Part-DB is reachable under via the reverse proxy, to prevent `HTTP Host header attacks`. For example, if Part-DB is reachable via -`part-db.example.invalid`, set: +`part-db.example.invalid`, set the following in your `.env.local` file (the value must be wrapped in single quotes here): ``` TRUSTED_HOSTS='^(part-db\.example\.invalid)$' ``` +If you set `TRUSTED_HOSTS` in your `docker-compose.yaml` instead, the value must **not** be quoted: + +``` +TRUSTED_HOSTS=^(part-db\.example\.invalid)$ +``` + See the [configuration options](../configuration.md) page for more information about `TRUSTED_HOSTS`. ## Part-DB in a subpath via reverse proxy diff --git a/templates/bundles/TwigBundle/Exception/error400.html.twig b/templates/bundles/TwigBundle/Exception/error400.html.twig index f5ed56b9..2ad31626 100644 --- a/templates/bundles/TwigBundle/Exception/error400.html.twig +++ b/templates/bundles/TwigBundle/Exception/error400.html.twig @@ -23,12 +23,16 @@

Try following things:

  • Ensure that you are using the correct URL to access Part-DB.
  • -
  • Set the TRUSTED_HOSTS environment variable in your .env.local file (or your docker-compose environment) to a regular expression matching all host names Part-DB should be reachable under, e.g. - {% if seen_host %} - TRUSTED_HOSTS='^({{ seen_host|replace({'.': '\\.'}) }})$' (if {{ seen_host }} is a host name you trust) - {% else %} - TRUSTED_HOSTS='^(localhost|example\.com)$' - {% endif %} +
  • Set the TRUSTED_HOSTS environment variable to a regular expression matching all host names Part-DB should be reachable under. Note that the required quoting differs depending on where you set it: +
      + {% if seen_host %} +
    • In your .env.local file, the value must be wrapped in single quotes: TRUSTED_HOSTS='^({{ seen_host|replace({'.': '\\.'}) }})$' (if {{ seen_host }} is a host name you trust)
    • +
    • In docker-compose.yaml, the value must NOT be quoted: TRUSTED_HOSTS=^({{ seen_host|replace({'.': '\\.'}) }})$ (if {{ seen_host }} is a host name you trust)
    • + {% else %} +
    • In your .env.local file, the value must be wrapped in single quotes: TRUSTED_HOSTS='^(localhost|example\.com)$'
    • +
    • In docker-compose.yaml, the value must NOT be quoted: TRUSTED_HOSTS=^(localhost|example\.com)$
    • + {% endif %} +
  • If Part-DB is running behind a reverse proxy, also make sure that TRUSTED_PROXIES is configured correctly, so the original host name is forwarded properly.
  • Run php bin/console cache:clear after changing the configuration.
  • diff --git a/templates/homepage.html.twig b/templates/homepage.html.twig index 7b000e9d..b05c20b3 100644 --- a/templates/homepage.html.twig +++ b/templates/homepage.html.twig @@ -98,9 +98,12 @@ {% if trusted_hosts_unconfigured and is_granted('@system.server_infos') %} {% endif %} diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index 15801601..9b9b583b 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -13710,7 +13710,19 @@ Buerklin-API-Authentication-Server: system.trusted_hosts.unconfigured.suggestion - Legen Sie einen regulären Ausdruck fest, der alle Hostnamen abdeckt, unter denen Part-DB erreichbar sein soll, z. B. basierend auf dem Hostnamen, den Sie für den Zugriff auf diese Seite verwendet haben. Dies ist möglich in Ihrer Datei <code>.env.local</code> oder <code>docker-compose.yaml</code>: + Legen Sie einen regulären Ausdruck fest, der alle Hostnamen abdeckt, unter denen Part-DB erreichbar sein soll, z. B. basierend auf dem Hostnamen, den Sie für den Zugriff auf diese Seite verwendet haben. Beachten Sie, dass die erforderliche Anführungszeichen-Schreibweise davon abhängt, wo Sie den Wert setzen: + + + + + system.trusted_hosts.unconfigured.env_example + In Ihrer Datei <code>.env.local</code> muss der Wert in einfache Anführungszeichen eingeschlossen werden: + + + + + system.trusted_hosts.unconfigured.docker_example + In <code>docker-compose.yaml</code> darf der Wert NICHT in Anführungszeichen stehen: diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index d4d40359..d2fae4ee 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -13712,7 +13712,19 @@ Buerklin-API Authentication server: system.trusted_hosts.unconfigured.suggestion - Set it to a regular expression matching all host names Part-DB should be reachable under in your <code>.env.local</code> or <code>docker-compose.yaml</code> file, e.g. based on the host name you used to access this page: + Set it to a regular expression matching all host names Part-DB should be reachable under, e.g. based on the host name you used to access this page. Note that the required quoting differs depending on where you set it: + + + + + system.trusted_hosts.unconfigured.env_example + In your <code>.env.local</code> file, the value must be wrapped in single quotes: + + + + + system.trusted_hosts.unconfigured.docker_example + In <code>docker-compose.yaml</code>, the value must NOT be quoted: From a0435a56bd04a7591d83d547d7230dc895c86510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Wed, 22 Jul 2026 00:37:26 +0200 Subject: [PATCH 6/7] Bumped version to 2.13.4 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index a1a4224d..965a689e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.13.3 +2.13.4 From 0095cbdc05b747bca5fb473973b92694094770e7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 27 Jul 2026 05:57:37 +0000 Subject: [PATCH 7/7] Update KiCad symbols and footprints lists [no ci] --- public/kicad/footprints.txt | 2 +- public/kicad/symbols.txt | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/public/kicad/footprints.txt b/public/kicad/footprints.txt index a9e0df15..538984c2 100644 --- a/public/kicad/footprints.txt +++ b/public/kicad/footprints.txt @@ -1,4 +1,4 @@ -# Generated on Mon Jul 20 05:45:44 UTC 2026 +# Generated on Mon Jul 27 05:55:56 UTC 2026 # This file contains all footprints available in the offical KiCAD library Audio_Module:Reverb_BTDR-1H Audio_Module:Reverb_BTDR-1V diff --git a/public/kicad/symbols.txt b/public/kicad/symbols.txt index 40f51b0e..2c0e2558 100644 --- a/public/kicad/symbols.txt +++ b/public/kicad/symbols.txt @@ -1,4 +1,4 @@ -# Generated on Mon Jul 20 05:46:23 UTC 2026 +# Generated on Mon Jul 27 05:56:38 UTC 2026 # This file contains all symbols available in the offical KiCAD library 4xxx:14528 4xxx:14529 @@ -5358,6 +5358,18 @@ Converter_DCDC_Isolated:THN10-7215UIR Converter_DCDC_Isolated:THN10-7221UIR Converter_DCDC_Isolated:THN10-7222UIR Converter_DCDC_Isolated:THN10-7223UIR +Converter_DCDC_Isolated:THN15-3611UIR +Converter_DCDC_Isolated:THN15-3612UIR +Converter_DCDC_Isolated:THN15-3613UIR +Converter_DCDC_Isolated:THN15-3615UIR +Converter_DCDC_Isolated:THN15-3622UIR +Converter_DCDC_Isolated:THN15-3623UIR +Converter_DCDC_Isolated:THN15-7211UIR +Converter_DCDC_Isolated:THN15-7212UIR +Converter_DCDC_Isolated:THN15-7213UIR +Converter_DCDC_Isolated:THN15-7215UIR +Converter_DCDC_Isolated:THN15-7222UIR +Converter_DCDC_Isolated:THN15-7223UIR Converter_DCDC_Isolated:THR40-7211WI Converter_DCDC_Isolated:THR40-7212WI Converter_DCDC_Isolated:THR40-7213WI @@ -5496,6 +5508,24 @@ Converter_DCDC_Isolated:TMR4-4813WI Converter_DCDC_Isolated:TMR4-4815WI Converter_DCDC_Isolated:TMR4-4822WI Converter_DCDC_Isolated:TMR4-4823WI +Converter_DCDC_Isolated:TMR8-1211WI +Converter_DCDC_Isolated:TMR8-1212WI +Converter_DCDC_Isolated:TMR8-1213WI +Converter_DCDC_Isolated:TMR8-1215WI +Converter_DCDC_Isolated:TMR8-1222WI +Converter_DCDC_Isolated:TMR8-1223WI +Converter_DCDC_Isolated:TMR8-2411WI +Converter_DCDC_Isolated:TMR8-2412WI +Converter_DCDC_Isolated:TMR8-2413WI +Converter_DCDC_Isolated:TMR8-2415WI +Converter_DCDC_Isolated:TMR8-2422WI +Converter_DCDC_Isolated:TMR8-2423WI +Converter_DCDC_Isolated:TMR8-4811WI +Converter_DCDC_Isolated:TMR8-4812WI +Converter_DCDC_Isolated:TMR8-4813WI +Converter_DCDC_Isolated:TMR8-4815WI +Converter_DCDC_Isolated:TMR8-4822WI +Converter_DCDC_Isolated:TMR8-4823WI Converter_DCDC_Isolated:TMR_1-0511 Converter_DCDC_Isolated:TMR_1-0511SM Converter_DCDC_Isolated:TMR_1-0512 @@ -9666,7 +9696,9 @@ Logic_Programmable:PAL20L10xxNS Logic_Programmable:PAL20L8 Logic_Programmable:PAL20R8xx-P Logic_Programmable:PAL20RS10 +Logic_Programmable:PAL22V10-xxP Logic_Programmable:PALCE16V8 +Logic_Programmable:PALCE22V10x-xxP Logic_Programmable:PEEL22CV10AP Logic_Programmable:PEEL22CV10AS MCU_AnalogDevices:ADUC816BSZ