From ebe43a6f7db203feb0cbb37d510e8f818c151240 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Wed, 12 Oct 2022 13:20:23 -0300 Subject: [PATCH 01/81] [DOCs] Marked the README as v1.4.0 --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 4a97c9614..e9f176db7 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,9 @@ [![PyPI version](https://img.shields.io/pypi/v/kibot?style=plastic)](https://pypi.org/project/kibot/) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg?style=plastic)](https://www.paypal.com/donate/?hosted_button_id=K2T86GDTTMRPL) +# **This is the documentation for KiBot v1.4.0 for the current development read [here](https://github.com/INTI-CMNB/KiBot/tree/dev).** + + **Important for CI/CD**: - We are now uploading docker images to GitHub, the new tags are much more simple. Consult: [Usage for CI/CD](#usage-for-cicd) From f9d70b857aa43112088eba6a11117105cd253113 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Fri, 14 Oct 2022 06:48:11 -0300 Subject: [PATCH 02/81] [DOCs] Documented the new GHA `additional_args` option. - Also documented `install3D` option --- docs/README.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/README.in b/docs/README.in index 236f90789..80212f18d 100644 --- a/docs/README.in +++ b/docs/README.in @@ -1435,9 +1435,11 @@ Another example, but using variants can be found [here](https://github.com/INTI- The available options are: +- **additional_args**: Additional text to add to the KiBot invocation. This is experimental and only intended for advanced use. - **config**: The KiBot config file to use. The first file that matches `*.kibot.yaml` is used when omitted. - **dir**: Output directory for the generated files. The current directory is used when omitted. - **board**: Name of the PCB file. The first file that matches `*.kicad_pcb` is used when omitted. +- **install3D**: When `YES` installs the KiCad 3D models. Note that this will download more than 360 MiB and install more than 5 GiB of files. - **quickstart**: When `YES` ignores all the other options and runs in `--quick-start` mode. No configuration needed. - **schema**: Name of the schematic file. The first file that matches `*.*sch` is used when omitted. - **skip**: Skip preflights, comma separated or *all*. Nothing is skipped when omitted. From 3617d5f16a60cca67e6ebfdcd75d0c467c070e5a Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Fri, 14 Oct 2022 06:51:03 -0300 Subject: [PATCH 03/81] [DOCs] Updated the generated doc --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e9f176db7..8ba7be794 100644 --- a/README.md +++ b/README.md @@ -3927,9 +3927,11 @@ Another example, but using variants can be found [here](https://github.com/INTI- The available options are: +- **additional_args**: Additional text to add to the KiBot invocation. This is experimental and only intended for advanced use. - **config**: The KiBot config file to use. The first file that matches `*.kibot.yaml` is used when omitted. - **dir**: Output directory for the generated files. The current directory is used when omitted. - **board**: Name of the PCB file. The first file that matches `*.kicad_pcb` is used when omitted. +- **install3D**: When `YES` installs the KiCad 3D models. Note that this will download more than 360 MiB and install more than 5 GiB of files. - **quickstart**: When `YES` ignores all the other options and runs in `--quick-start` mode. No configuration needed. - **schema**: Name of the schematic file. The first file that matches `*.*sch` is used when omitted. - **skip**: Skip preflights, comma separated or *all*. Nothing is skipped when omitted. From 10281f74b85df631867e88a76c0171afa3fe09c8 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Fri, 16 Dec 2022 08:33:48 -0300 Subject: [PATCH 04/81] [CI/CD][Fix] Avoid mixing `master` and `dev` - The `dev` images must be created from `dev` - Coverage information should be from `dev` --- .github/workflows/pythonapp.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml index 586b9b5d8..81e6a59c4 100644 --- a/.github/workflows/pythonapp.yml +++ b/.github/workflows/pythonapp.yml @@ -91,6 +91,8 @@ jobs: # Important! empty directories are skipped!!!! path: output - name: Upload Coverage + # Don't mix stable coverage with development coverage + if: github.ref == 'refs/heads/dev' env: COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} COVERALLS_FLAG_NAME: ${{ matrix.ki_release }}_${{ matrix.w_tests }} @@ -109,6 +111,8 @@ jobs: runs-on: ubuntu-latest container: setsoft/kicad_auto_test:ki6 needs: test + # Don't mix stable coverage with development coverage + if: github.ref == 'refs/heads/dev' steps: - uses: actions/checkout@v2 @@ -167,6 +171,8 @@ jobs: permissions: packages: write contents: read + # Don't create `dev` images using the `master` + if: github.ref == 'refs/heads/dev' steps: - name: Check out the repo @@ -211,6 +217,8 @@ jobs: permissions: packages: write contents: read + # Don't create `dev` images using the `master` + if: github.ref == 'refs/heads/dev' steps: - name: Check out the repo @@ -255,6 +263,8 @@ jobs: name: Finish Coveralls needs: test runs-on: ubuntu-latest + # Don't mix stable coverage with development coverage + if: github.ref == 'refs/heads/dev' steps: - name: Finished env: From 5abffa8a552f0381ad9a6e7942e06781c28de332 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Fri, 16 Dec 2022 12:49:26 -0300 Subject: [PATCH 05/81] [DOCs] Updated version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4ca8a68c1..cc9629b72 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![PyPI version](https://img.shields.io/pypi/v/kibot?style=plastic)](https://pypi.org/project/kibot/) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg?style=plastic)](https://www.paypal.com/donate/?hosted_button_id=K2T86GDTTMRPL) -# **This is the documentation for KiBot v1.5.0 for the current development read [here](https://github.com/INTI-CMNB/KiBot/tree/dev).** +# **This is the documentation for KiBot v1.5.1 for the current development read [here](https://github.com/INTI-CMNB/KiBot/tree/dev).** **Important for CI/CD**: From 7fbbf5dcd8e6aee8c3397c9cf2151692333a2d49 Mon Sep 17 00:00:00 2001 From: Robin Modisch Date: Fri, 27 Jan 2023 23:03:01 +0100 Subject: [PATCH 06/81] fix typo --- kibot/PcbDraw/plot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kibot/PcbDraw/plot.py b/kibot/PcbDraw/plot.py index 9a0151b3b..6a0606b8f 100644 --- a/kibot/PcbDraw/plot.py +++ b/kibot/PcbDraw/plot.py @@ -800,7 +800,7 @@ def _append_component(self, lib: str, name: str, ref: str, value: str, ret = self._create_component(lib, name, ref, value) if ret is None: if name[-5:] != '.back' or not self.no_warn_back: - self._plotter.yield_warning("component", f"Component {lib}:{name} has not footprint.") + self._plotter.yield_warning("component", f"Component {lib}:{name} has no footprint.") return component_element, component_info = ret self._used_components[unique_name] = component_info @@ -839,7 +839,7 @@ def _create_component(self, lib: str, name: str, ref: str, value: str) \ origin_x, origin_y = element_position(origin, root=component_element) origin.getparent().remove(origin) else: - self._plotter.yield_warning("origin", f"component: Component {lib}:{name} has not origin") + self._plotter.yield_warning("origin", f"component: Component {lib}:{name} has no origin") svg_scale_x, svg_scale_y, svg_offset_x, svg_offset_y = self._component_to_board_scale_and_offset(svg_tree) component_info = PlacedComponentInfo( id=xml_id, From a8e19af5b0a5586acbdd9c1a082f1211df1355e7 Mon Sep 17 00:00:00 2001 From: crides Date: Sun, 29 Jan 2023 12:09:51 -0600 Subject: [PATCH 07/81] don't show warning if footprint has attribute "not in schematics" --- kibot/kiplot.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kibot/kiplot.py b/kibot/kiplot.py index cceff4f46..00257dfff 100644 --- a/kibot/kiplot.py +++ b/kibot/kiplot.py @@ -300,8 +300,10 @@ def get_board_comps_data(comps): comps_hash[c.ref] = cur_list for m in GS.get_modules(): ref = m.GetReference() + attrs = m.GetAttributes() if ref not in comps_hash: - logger.warning(W_PCBNOSCH + '`{}` component in board, but not in schematic'.format(ref)) + if not (attrs & MOD_BOARD_ONLY): + logger.warning(W_PCBNOSCH + '`{}` component in board, but not in schematic'.format(ref)) continue for c in comps_hash[ref]: c.bottom = m.IsFlipped() @@ -311,7 +313,6 @@ def get_board_comps_data(comps): c.footprint_y = center.y (c.footprint_w, c.footprint_h) = GS.get_fp_size(m) c.has_pcb_info = True - attrs = m.GetAttributes() if GS.ki5: # KiCad 5 if attrs == UI_SMD: From a9b90568d4792c1aa34211efb1d5e47a65d9762c Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 6 Feb 2023 09:15:08 -0300 Subject: [PATCH 08/81] Bumped version in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 45a01e40c..bfe64a85c 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![PyPI version](https://img.shields.io/pypi/v/kibot?style=plastic)](https://pypi.org/project/kibot/) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg?style=plastic)](https://www.paypal.com/donate/?hosted_button_id=K2T86GDTTMRPL) -# **This is the documentation for KiBot v1.5.1 for the current development read [here](https://github.com/INTI-CMNB/KiBot/tree/dev).** +# **This is the documentation for KiBot v1.6.0 for the current development read [here](https://github.com/INTI-CMNB/KiBot/tree/dev).** **Important for CI/CD**: From 460b1a2dc3acf5f2205300e0135da67a124ce3fa Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 6 Feb 2023 10:56:34 -0300 Subject: [PATCH 09/81] [Tests] Trying to figure out git issues --- g1.sh | 4 +++- g2.sh | 4 ++-- g3.sh | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/g1.sh b/g1.sh index ad9deebc7..bfa583807 100755 --- a/g1.sh +++ b/g1.sh @@ -1,3 +1,5 @@ #!/bin/sh # Fast tests -pytest-3 -v --durations=0 -m "not slow" -n 2 --test_dir=output +cat ~/.gitconfig +ls -la /__w/KiBot/KiBot +pytest-3 -v --durations=0 -m "not slow" -n 2 --test_dir=output -k test_sch_replace_1 diff --git a/g2.sh b/g2.sh index 0087cd958..deb5c82c0 100755 --- a/g2.sh +++ b/g2.sh @@ -1,6 +1,6 @@ #!/bin/sh set -e # Eeschema tests -pytest-3 -v --durations=0 -m "eeschema" --test_dir=output +#pytest-3 -v --durations=0 -m "eeschema" --test_dir=output # KiCad2Step tests and others -pytest-3 -v --durations=0 -m "slow and (not (pcbnew or eeschema))" --log-cli-level debug --test_dir=output +#pytest-3 -v --durations=0 -m "slow and (not (pcbnew or eeschema))" --log-cli-level debug --test_dir=output diff --git a/g3.sh b/g3.sh index 226cb23a9..2b42aad0d 100755 --- a/g3.sh +++ b/g3.sh @@ -1,3 +1,3 @@ #!/bin/sh # PCBnew tests -pytest-3 -v --durations=0 -m "pcbnew" --test_dir=output +#pytest-3 -v --durations=0 -m "pcbnew" --test_dir=output From 1e6189f637508c3196875467ca72ec19ffb70583 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 6 Feb 2023 11:01:10 -0300 Subject: [PATCH 10/81] [Tests] Copying root options to global --- g1.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/g1.sh b/g1.sh index bfa583807..1924f8d3f 100755 --- a/g1.sh +++ b/g1.sh @@ -1,5 +1,7 @@ #!/bin/sh # Fast tests cat ~/.gitconfig +cp /root/.gitconfig /etc/gitconfig +cat /root/.gitconfig ls -la /__w/KiBot/KiBot pytest-3 -v --durations=0 -m "not slow" -n 2 --test_dir=output -k test_sch_replace_1 From 7062228998a5318567c3dd606c79ec0a745c8846 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 6 Feb 2023 11:06:45 -0300 Subject: [PATCH 11/81] [Tests] More tests about git --- g1.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/g1.sh b/g1.sh index 1924f8d3f..15951f246 100755 --- a/g1.sh +++ b/g1.sh @@ -3,5 +3,7 @@ cat ~/.gitconfig cp /root/.gitconfig /etc/gitconfig cat /root/.gitconfig +echo "[safe]" >> /etc/gitconfig +echo " directory = *" >> /etc/gitconfig ls -la /__w/KiBot/KiBot pytest-3 -v --durations=0 -m "not slow" -n 2 --test_dir=output -k test_sch_replace_1 From cc2272e7028e43a2f880d06fc7c6467bfd7869fb Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 6 Feb 2023 11:21:52 -0300 Subject: [PATCH 12/81] [Tests] Enabling all tests, git should work now --- g1.sh | 8 +------- g2.sh | 4 ++-- g3.sh | 2 +- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/g1.sh b/g1.sh index 15951f246..ad9deebc7 100755 --- a/g1.sh +++ b/g1.sh @@ -1,9 +1,3 @@ #!/bin/sh # Fast tests -cat ~/.gitconfig -cp /root/.gitconfig /etc/gitconfig -cat /root/.gitconfig -echo "[safe]" >> /etc/gitconfig -echo " directory = *" >> /etc/gitconfig -ls -la /__w/KiBot/KiBot -pytest-3 -v --durations=0 -m "not slow" -n 2 --test_dir=output -k test_sch_replace_1 +pytest-3 -v --durations=0 -m "not slow" -n 2 --test_dir=output diff --git a/g2.sh b/g2.sh index deb5c82c0..0087cd958 100755 --- a/g2.sh +++ b/g2.sh @@ -1,6 +1,6 @@ #!/bin/sh set -e # Eeschema tests -#pytest-3 -v --durations=0 -m "eeschema" --test_dir=output +pytest-3 -v --durations=0 -m "eeschema" --test_dir=output # KiCad2Step tests and others -#pytest-3 -v --durations=0 -m "slow and (not (pcbnew or eeschema))" --log-cli-level debug --test_dir=output +pytest-3 -v --durations=0 -m "slow and (not (pcbnew or eeschema))" --log-cli-level debug --test_dir=output diff --git a/g3.sh b/g3.sh index 2b42aad0d..226cb23a9 100755 --- a/g3.sh +++ b/g3.sh @@ -1,3 +1,3 @@ #!/bin/sh # PCBnew tests -#pytest-3 -v --durations=0 -m "pcbnew" --test_dir=output +pytest-3 -v --durations=0 -m "pcbnew" --test_dir=output From afd45becb3195f09ac121211c828120e6e818803 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Thu, 16 Mar 2023 13:08:49 -0300 Subject: [PATCH 13/81] [DOCs] Updated the README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cbce0006b..844517fab 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![PyPI version](https://img.shields.io/pypi/v/kibot?style=plastic)](https://pypi.org/project/kibot/) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg?style=plastic)](https://www.paypal.com/donate/?hosted_button_id=K2T86GDTTMRPL) -# **This is the documentation for KiBot v1.6.0 for the current development read [here](https://github.com/INTI-CMNB/KiBot/tree/dev).** +# **This is the documentation for KiBot v1.6.1 for the current development read [here](https://github.com/INTI-CMNB/KiBot/tree/dev).** **Important for CI/CD**: From 8b3d90d3be0cb37c5de443f630f21295102ad09b Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Thu, 16 Mar 2023 13:10:09 -0300 Subject: [PATCH 14/81] [CI/CD] Updating Github Action v2 for KiCad 5 latest --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index fc9b85b4e..c788dbb0b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM ghcr.io/inti-cmnb/kicad5_auto:1.4.0-8_k5.1.9_d11.5 +FROM ghcr.io/inti-cmnb/kicad5_auto_full:latest LABEL AUTHOR Salvador E. Tropea -LABEL Description="Export various files from KiCad projects (KiCad 6)" +LABEL Description="Export various files from KiCad projects (KiCad 5)" COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh From 9cf702185ae6d641717fc0223284c3884954ee14 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Thu, 16 Mar 2023 13:10:13 -0300 Subject: [PATCH 15/81] [CI/CD] Updating Github Action v2 for KiCad 5 development --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index c788dbb0b..ab38262bb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM ghcr.io/inti-cmnb/kicad5_auto_full:latest +FROM ghcr.io/inti-cmnb/kicad5_auto_full:dev LABEL AUTHOR Salvador E. Tropea -LABEL Description="Export various files from KiCad projects (KiCad 5)" +LABEL Description="Export various files from KiCad projects (KiCad 5 + development)" COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh From 994645b1d98df79fc38acb40f83bfc6a167a34e4 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Thu, 16 Mar 2023 13:10:16 -0300 Subject: [PATCH 16/81] [CI/CD] Updating Github Action v2 for KiCad 6 development --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index ab38262bb..dbfeb59a7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM ghcr.io/inti-cmnb/kicad5_auto_full:dev +FROM ghcr.io/inti-cmnb/kicad6_auto_full:dev LABEL AUTHOR Salvador E. Tropea -LABEL Description="Export various files from KiCad projects (KiCad 5 + development)" +LABEL Description="Export various files from KiCad projects (KiCad 6 + development)" COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh From f6ac71921eb8e7ac1e19bfe07539072f451d3446 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Thu, 16 Mar 2023 13:10:20 -0300 Subject: [PATCH 17/81] [CI/CD] Updating Github Action v2 for KiCad 6 latest --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index dbfeb59a7..b084ba767 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM ghcr.io/inti-cmnb/kicad6_auto_full:dev +FROM ghcr.io/inti-cmnb/kicad6_auto_full:latest LABEL AUTHOR Salvador E. Tropea -LABEL Description="Export various files from KiCad projects (KiCad 6 + development)" +LABEL Description="Export various files from KiCad projects (KiCad 6)" COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh From 138988e726fce5adfbfb407516236de1a3d5f4b0 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Thu, 16 Mar 2023 13:10:23 -0300 Subject: [PATCH 18/81] [CI/CD] Updating Github Action v2 for KiCad 7 development --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index b084ba767..76363f1f7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM ghcr.io/inti-cmnb/kicad6_auto_full:latest +FROM ghcr.io/inti-cmnb/kicad7_auto_full:dev LABEL AUTHOR Salvador E. Tropea -LABEL Description="Export various files from KiCad projects (KiCad 6)" +LABEL Description="Export various files from KiCad projects (KiCad 7 + development)" COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh From 466f778303dbd7a846bc36009e52df8aba4ae742 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Thu, 16 Mar 2023 13:10:26 -0300 Subject: [PATCH 19/81] [CI/CD] Updating Github Action v2 for KiCad 7 latest --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 76363f1f7..0deabfd62 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM ghcr.io/inti-cmnb/kicad7_auto_full:dev +FROM ghcr.io/inti-cmnb/kicad7_auto_full:latest LABEL AUTHOR Salvador E. Tropea -LABEL Description="Export various files from KiCad projects (KiCad 7 + development)" +LABEL Description="Export various files from KiCad projects (KiCad 7)" COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh From abe7cfc95003f3f35451369944eec1adda386ef0 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Sun, 19 Mar 2023 12:42:24 -0300 Subject: [PATCH 20/81] [Debian] 1.6.1-2 to accept KiCad nightly as KiCad replacement --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index e9ca4986c..c029758b1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +kibot (1.6.1-2) stable; urgency=medium + + * Also accept KiCad nightly as dependency + + -- Salvador Eduardo Tropea Sun, 19 Mar 2023 12:41:04 -0300 + kibot (1.6.1-1) stable; urgency=medium * KiCad 7.0.1 support From f17c2c98eb4244e225fd9f3a58d945822ad9769c Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Wed, 29 Mar 2023 09:49:16 -0300 Subject: [PATCH 21/81] [CI/CD] Added trigger to refresh the docker images --- .github/workflows/refresh_images.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/refresh_images.yml diff --git a/.github/workflows/refresh_images.yml b/.github/workflows/refresh_images.yml new file mode 100644 index 000000000..487240945 --- /dev/null +++ b/.github/workflows/refresh_images.yml @@ -0,0 +1,19 @@ +name: Docker images refresh + +on: + repository_dispatch: + types: [refresh_images] + +jobs: + release: + needs: build + runs-on: ubuntu-latest + steps: + - name: Trigger kicad_auto image build + run: | + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k5"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k6"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k7"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k5"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k6"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k7"}' From 3b592cc24686ba5de077b20fa1d1187a2594a27d Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Wed, 29 Mar 2023 09:50:57 -0300 Subject: [PATCH 22/81] [CI/CD] Fixed refresh workflow --- .github/workflows/refresh_images.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/refresh_images.yml b/.github/workflows/refresh_images.yml index 487240945..e838d4a12 100644 --- a/.github/workflows/refresh_images.yml +++ b/.github/workflows/refresh_images.yml @@ -6,7 +6,6 @@ on: jobs: release: - needs: build runs-on: ubuntu-latest steps: - name: Trigger kicad_auto image build From 2cad7562214258ecd72d4a7f181febc90842c1f9 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Thu, 30 Mar 2023 13:39:11 -0300 Subject: [PATCH 23/81] [CI/CD] Added workflow to refresh images with patches --- .github/workflows/refresh_images_pre.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/workflows/refresh_images_pre.yml diff --git a/.github/workflows/refresh_images_pre.yml b/.github/workflows/refresh_images_pre.yml new file mode 100644 index 000000000..5eb87f9d0 --- /dev/null +++ b/.github/workflows/refresh_images_pre.yml @@ -0,0 +1,18 @@ +name: Docker images refresh w/pre + +on: + repository_dispatch: + types: [refresh_images_pre] + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Trigger kicad_auto image build + run: | + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k5p"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k6p"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k7p"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k5p"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k6p"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k7p"}' From 88b8909061e892c6a302111730b8969b559d9fd2 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Fri, 31 Mar 2023 18:19:34 -0300 Subject: [PATCH 24/81] [Fixed][Distribution] Missing Blender script --- kibot/blender_scripts/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 kibot/blender_scripts/__init__.py diff --git a/kibot/blender_scripts/__init__.py b/kibot/blender_scripts/__init__.py new file mode 100644 index 000000000..e69de29bb From 3015149a1279be0e4964f4b7138b0e98c1c883bb Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Fri, 31 Mar 2023 18:22:44 -0300 Subject: [PATCH 25/81] Bumped Debian version to 1.6.1-3 --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index c029758b1..bec4a290e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +kibot (1.6.1-3) stable; urgency=medium + + * Included missing Blender script + + -- Salvador Eduardo Tropea Fri, 31 Mar 2023 18:20:44 -0300 + kibot (1.6.1-2) stable; urgency=medium * Also accept KiCad nightly as dependency From 9e99d18bce1e0ace34433b84c15fd87622f03eda Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Sun, 2 Apr 2023 14:59:21 -0300 Subject: [PATCH 26/81] [GHA] Fixed description --- action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yml b/action.yml index fc3431ee9..f0353fc2d 100644 --- a/action.yml +++ b/action.yml @@ -1,5 +1,5 @@ name: 'KiBot GitHub action' -description: 'auto generate documentatio, fabrication, etc. files for any KiCad project.' +description: 'automatically generates documentation, fabrication, etc. files for any KiCad project.' author: 'Salvador E. Tropea' inputs: config: From 2bb8d652aff41aeb31310225f841d61792434895 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 27 Mar 2023 09:20:03 -0300 Subject: [PATCH 27/81] [Dependency Downloader][Fixed] Problems with Ghostscript 10 release - No Linux binaries are currently available --- kibot/dep_downloader.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kibot/dep_downloader.py b/kibot/dep_downloader.py index c0f8a4614..5a3460088 100644 --- a/kibot/dep_downloader.py +++ b/kibot/dep_downloader.py @@ -496,7 +496,9 @@ def gs_downloader(dep, system, plat): logger.debug('- No binary for this system') return None, None # Get the download page - url = 'https://api.github.com/repos/ArtifexSoftware/ghostpdl-downloads/releases/latest' + # url = 'https://api.github.com/repos/ArtifexSoftware/ghostpdl-downloads/releases/latest' + # 2023-03-27: 10.x doesn't contain Linux binaries (yet?) + url = 'https://api.github.com/repos/ArtifexSoftware/ghostpdl-downloads/releases/tags/gs9561' r = get_request(url) if r.status_code != 200: logger.debug('- Failed to download `{}`'.format(dep.url_down)) From 8186ca1ba5d04116bb401737a189d07f40468a34 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Sun, 2 Apr 2023 15:31:14 -0300 Subject: [PATCH 28/81] [DOCs][GHA] Added GHA shortcut --- docs/README.in | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/README.in b/docs/README.in index 64f589902..ee9e07ace 100644 --- a/docs/README.in +++ b/docs/README.in @@ -11,6 +11,7 @@ **Important for CI/CD**: - The GitHub actions now use the full/test docker images. So now they include PanDoc and also Blender. +- If you are looking for the GitHub Actions documentation, and you already know how to use KiBot, or want a quick start, read: [GitHub Actions](#usage-of-github-actions) **New on v1.6.1** - KiCad 7.0.1 support @@ -1613,7 +1614,9 @@ For more information about the docker images visit [kicad_debian](https://github ### Usage of GitHub Actions -Note: You can also use --quick-start functionality with GitHub actions, and example is this [workflow](https://github.com/INTI-CMNB/kibot_variants_arduprog/blob/master/.github/workflows/kibot_action_quick_start.yml) +Note: You can also use --quick-start functionality with GitHub actions, an example is this +[workflow](https://github.com/INTI-CMNB/kibot_variants_arduprog/blob/master/.github/workflows/kibot_action_quick_start.yml). +This is the fastest way to test KiBot functionality. You need to put a [config.kibot.yaml](#configuration) file into the KiCad project folder. From 6ace82e20e1800bee53e98967fdbe897d3e1aef8 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Sun, 2 Apr 2023 15:31:48 -0300 Subject: [PATCH 29/81] [DOCs] Updated --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d1e13ad25..5404e26bf 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ **Important for CI/CD**: - The GitHub actions now use the full/test docker images. So now they include PanDoc and also Blender. +- If you are looking for the GitHub Actions documentation, and you already know how to use KiBot, or want a quick start, read: [GitHub Actions](#usage-of-github-actions) **New on v1.6.1** - KiCad 7.0.1 support @@ -5498,7 +5499,9 @@ For more information about the docker images visit [kicad_debian](https://github ### Usage of GitHub Actions -Note: You can also use --quick-start functionality with GitHub actions, and example is this [workflow](https://github.com/INTI-CMNB/kibot_variants_arduprog/blob/master/.github/workflows/kibot_action_quick_start.yml) +Note: You can also use --quick-start functionality with GitHub actions, an example is this +[workflow](https://github.com/INTI-CMNB/kibot_variants_arduprog/blob/master/.github/workflows/kibot_action_quick_start.yml). +This is the fastest way to test KiBot functionality. You need to put a [config.kibot.yaml](#configuration) file into the KiCad project folder. From b8d40e477de72442769fb15fec9c90b3d832a524 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 18 Apr 2023 10:22:49 -0300 Subject: [PATCH 30/81] [Test][Added] Workflow for nightly --- .github/workflows/test_nightly.yml | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .github/workflows/test_nightly.yml diff --git a/.github/workflows/test_nightly.yml b/.github/workflows/test_nightly.yml new file mode 100644 index 000000000..8fc199098 --- /dev/null +++ b/.github/workflows/test_nightly.yml @@ -0,0 +1,42 @@ +name: Nightly regression tests + +on: + repository_dispatch: + types: [run_tests_nightly] + +jobs: + test: + strategy: + fail-fast: false + matrix: + ki_release: [nightly] + w_tests: [g1, g2, g3] + + runs-on: ubuntu-latest + container: ghcr.io/inti-cmnb/kicad_auto_test:${{ matrix.ki_release }} + + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Test ${{ matrix.ki_release }} + env: + KI_RELEASE: ${{ matrix.ki_release }} + run: | + rm -rf output + rm -f tests/.local + # Ensure we start a fresh coverage meassurement + python3-coverage erase + # Create the caches with macros + python3-coverage run src/kibot --help-outputs > /dev/null + # Run the 90% faster tests (under 3 s) together + # Do it in parallel + ./${{ matrix.w_tests }}.sh + - name: Store results + if: ${{ always() }} + uses: actions/upload-artifact@v3 + with: + name: Test_Output_${{ matrix.ki_release }}_${{ matrix.w_tests }} + # Important! empty directories are skipped!!!! + path: output + From b30afdd3b3252d5be81c5b515a92142f536cdd23 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 18 Apr 2023 10:27:34 -0300 Subject: [PATCH 31/81] [Tests] Changed nightly workflow to use workflow_dispatch --- .github/workflows/test_nightly.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test_nightly.yml b/.github/workflows/test_nightly.yml index 8fc199098..06370ba01 100644 --- a/.github/workflows/test_nightly.yml +++ b/.github/workflows/test_nightly.yml @@ -1,8 +1,7 @@ name: Nightly regression tests on: - repository_dispatch: - types: [run_tests_nightly] + workflow_dispatch jobs: test: From f1aaa7789ef6cf6f83d7831452793d95c325dcf4 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 24 Apr 2023 13:00:36 -0300 Subject: [PATCH 32/81] [DOCs] Updated version in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aebcf4c19..7f6ee0f66 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![PyPI version](https://img.shields.io/pypi/v/kibot?style=plastic)](https://pypi.org/project/kibot/) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg?style=plastic)](https://www.paypal.com/donate/?hosted_button_id=K2T86GDTTMRPL) -# **This is the documentation for KiBot v1.6.1 for the current development read [here](https://github.com/INTI-CMNB/KiBot/tree/dev).** +# **This is the documentation for KiBot v1.6.2 for the current development read [here](https://github.com/INTI-CMNB/KiBot/tree/dev).** **Important for CI/CD**: From 376915b293e6aab39cd3c3933e1ce1a779cbf351 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 24 Apr 2023 13:06:42 -0300 Subject: [PATCH 33/81] [Debian] Added python3-lark as Lark provider --- debian/py3dist-overrides | 1 + 1 file changed, 1 insertion(+) create mode 100644 debian/py3dist-overrides diff --git a/debian/py3dist-overrides b/debian/py3dist-overrides new file mode 100644 index 000000000..cbe613105 --- /dev/null +++ b/debian/py3dist-overrides @@ -0,0 +1 @@ +lark python3-lark \ No newline at end of file From eb6c2140f218f88222cfc5878f322c3a00e8115a Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Fri, 19 May 2023 09:21:43 -0300 Subject: [PATCH 34/81] [CI/CD][Added] Workflow to test stable nightlies --- .github/workflows/test_stable_nightly.yml | 41 +++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/workflows/test_stable_nightly.yml diff --git a/.github/workflows/test_stable_nightly.yml b/.github/workflows/test_stable_nightly.yml new file mode 100644 index 000000000..b0a4fece2 --- /dev/null +++ b/.github/workflows/test_stable_nightly.yml @@ -0,0 +1,41 @@ +name: Stable nightly regression tests + +on: + workflow_dispatch + +jobs: + test: + strategy: + fail-fast: false + matrix: + ki_release: [stable_nightly] + w_tests: [g1, g2, g3] + + runs-on: ubuntu-latest + container: ghcr.io/inti-cmnb/kicad_auto_test:${{ matrix.ki_release }} + + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Test ${{ matrix.ki_release }} + env: + KI_RELEASE: ${{ matrix.ki_release }} + run: | + rm -rf output + rm -f tests/.local + # Ensure we start a fresh coverage meassurement + python3-coverage erase + # Create the caches with macros + python3-coverage run src/kibot --help-outputs > /dev/null + # Run the 90% faster tests (under 3 s) together + # Do it in parallel + ./${{ matrix.w_tests }}.sh + - name: Store results + if: ${{ always() }} + uses: actions/upload-artifact@v3 + with: + name: Test_Output_${{ matrix.ki_release }}_${{ matrix.w_tests }} + # Important! empty directories are skipped!!!! + path: output + From 3f7ba1f8b475df711716f975cb7c6cea886de907 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 26 Jun 2023 10:53:08 -0300 Subject: [PATCH 35/81] [DOCs] Updated for release --- CHANGELOG.md | 2 +- README.md | 9 ++--- debian/changelog | 89 +++++++++++++++++++++++++++++++++++++++++++++--- docs/README.in | 7 ++-- 4 files changed, 94 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd2af2186..69b113a51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [1.6.3] - UNRELEASED +## [1.6.3] - 2023-06-26 ### Added - General: - OS environment expansion in ${VAR} diff --git a/README.md b/README.md index f9d800777..a40708b02 100644 --- a/README.md +++ b/README.md @@ -7,16 +7,17 @@ [![PyPI version](https://img.shields.io/pypi/v/kibot?style=plastic)](https://pypi.org/project/kibot/) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg?style=plastic)](https://www.paypal.com/donate/?hosted_button_id=K2T86GDTTMRPL) -# **This is the documentation for KiBot v1.6.2 for the current development read [here](https://github.com/INTI-CMNB/KiBot/tree/dev).** +# **This is the documentation for KiBot v1.6.3 for the current development read [here](https://github.com/INTI-CMNB/KiBot/tree/dev).** **Important for CI/CD**: - The GitHub actions now use the full/test docker images. So now they include PanDoc and also Blender. - If you are looking for the GitHub Actions documentation, and you already know how to use KiBot, or want a quick start, read: [GitHub Actions](#usage-of-github-actions) -**New on v1.6.2** -- KiCad 7.0.2 support -- Colored 3D THT resistors +**New on v1.6.3** +- Parametrizable imports +- `value_split` and `spec_to_field` filters + ## Index diff --git a/debian/changelog b/debian/changelog index 4e487aeea..9276a10f8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,87 @@ -kibot (1.6.3-1) UNRELEASED; urgency=medium - - * Next release - - -- Salvador Eduardo Tropea Mon, 24 Apr 2023 13:30:30 -0300 +kibot (1.6.3-1) stable; urgency=medium + + * Added OS environment expansion in ${VAR} + * Now outputs can request to be added to one or more groups + * PCB text variables cached in the PCB are now reset when the config + uses `set_text_variables`. This is a complex dilemma of KiCad 6/7 + policy implementation. + * Added default values for @TAGS@ + * Added parametrizable imports + * Added `--list-variants` List all available variants + * Added `--only-names` to make `--list` list only output names + * Added `--only-pre` to list only the preflights + * Added `--only-groups` to list only the groups + * Added `--output-name-first` to list outputs by name, no description + * Added Global options: + - `use_os_env_for_expand` to disable OS environment expansion + - `environment`.`extra_os` to define environment variables + - `field_voltage` Name/s of the field/s used for the voltage raiting + - `field_package` Name/s of the field/s used for the package, not footprint + - `field_temp_coef` Name/s of the field/s used for the temperature + coefficient + - `field_power` Name/s of the field/s used for the power raiting + - `invalidate_pcb_text_cache` controls if we reset the text variables cached + in the PCB file. + - `git_diff_strategy` selects how we preserve the current repo state. + * New filter `value_split` to extract information from the Value field and + put it in separated fields. I.e. tolerance, voltage, etc. + * New filter `spec_to_field` to extract information from the distributors + specs and put in fields. I.e. RoHS status. + * New `generic` filter options `exclude_not_in_bom` and `exclude_not_on_board` + to use KiCad 6+ flags. + * New Internal templates JLCPCB_with_THT and JLCPCB_stencil_with_THT: adding + THT components. + * New internal filters: + - `_value_split` splits the Value field but the field remains and the extra + data is not visible + - `_value_split_replace` splits the Value field and replaces it + * New Internal templates: + - CheckZoneFill: Used to check if a zone fill operation makes the PCB quite + different + - Versions with stencil for Elecrow, FusionPCB, P-Ban and PCBWay. + - PanelDemo_4x4: Demo for a 4x4 panel. + * New Render_3D options: + - `realistic`: can be used to disable the realistic colors and get the + GUI ones + - `show_board_body`: can be used to make the PCB core transparent (see inner) + - `show_comments`: to see the content of the User.Comments layer. + - `show_eco`: to see the content of the Eco1.User/Eco2.User layers. + - `show_adhesive`: to see the content of the *.Adhesive layers. + * New option for Navigate_Results and Compress: `skip_not_run`: used to skip + outputs not generated in default runs. + * New Position option `quote_all`: forces quotes to all values in the CSV output. + * Now `--list` also lists groups + * KiCad v6/7 schematic: When saving an schematic the hierarchy is expanded + only if needed, i.e. value of an instance changed + * When listing actions: Now you must explicitly ask to configure outputs. + Otherwise isn't needed. As a result you no longer need to have an SCH/PCB. + Use `--config-outs` to get the old behavior. + * Git diff link file name: Now we default to using worktrees instead of stash + push/pop. As a side effect the names of the git points are chnaged. This is + because main/master only applies to the main worktree. So the names now refer + to the closest tag. + * JLCPCB_stencil: Is now just like JLCPCB. The only difference is the added + layers. + * Fixed in the KiCad v6/7 schematic format: + - Net Class Flags not saved in variants or annotated schematics + - Repeated UUIDs saved in variants + - Bitmap scale not saved in variants or annotated schematics + - `lib_name` attribute not saved in variants or annotated schematics + * Fixed in Position: Components marked as "Exclude from position files" not + excluded when only SMD components are selected. + * Fixed in Diff: + - KIBOT_TAG with n > 0 skipped n commits, not n tags + - Details related to the project not applied during a diff involving a + variant (project not copied) + * Fixed in Copy files: + - PCB not loaded if the only action was to copy the 3D models + - Problems for STEP models when copying models + * Fixed in Gerber: Problems trying to compress gerbers for a board with inner + layers when using legacy file extensions + * Fixed in Electro-grammar: Problems with floating point tolerances (i.e. 0.1%) + * Fixed the KiCad user template directory autodetection for KiCad 7+ + + -- Salvador E. Tropea Mon, 26 Jun 2023 10:31:46 -0300 kibot (1.6.2-1) stable; urgency=medium diff --git a/docs/README.in b/docs/README.in index 1b8fec867..eb5aec91f 100644 --- a/docs/README.in +++ b/docs/README.in @@ -13,9 +13,10 @@ - The GitHub actions now use the full/test docker images. So now they include PanDoc and also Blender. - If you are looking for the GitHub Actions documentation, and you already know how to use KiBot, or want a quick start, read: [GitHub Actions](#usage-of-github-actions) -**New on v1.6.2** -- KiCad 7.0.2 support -- Colored 3D THT resistors +**New on v1.6.3** +- Parametrizable imports +- `value_split` and `spec_to_field` filters + ## Index From 8234d87c913d11ef63c08e930c1c36047060baba Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 26 Jun 2023 13:20:26 -0300 Subject: [PATCH 36/81] [DOCs][Added] New GitHub Actions tags for 1.6.2 --- docs/README.in | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/docs/README.in b/docs/README.in index eb5aec91f..45fa1d31c 100644 --- a/docs/README.in +++ b/docs/README.in @@ -1781,26 +1781,29 @@ The available options are: There are several tags you can choose: -| Tag | API | KiBot | KiCad | -| :---------- | --- | ------------ | ----: | -| v1 | 1 | 1.2.0 | 5.1.9 | -| v1_k6 | 1 | 1.2.0 | 6.0.5 | -| v2_1_2_0 | 2 | 1.2.0 | 5.1.9 | -| v2_k6_1_2_0 | 2 | 1.2.0 | 6.0.5 | -| v2_1_3_0 | 2 | 1.3.0 | 5.1.9 | -| v2_k6_1_3_0 | 2 | 1.3.0 | 6.0.7 | -| v2_1_4_0 | 2 | 1.4.0 | 5.1.9 | -| v2_k6_1_4_0 | 2 | 1.4.0 | 6.0.9 | -| v2_1_5_1 | 2 | 1.5.1 | 5.1.9 | -| v2_k6_1_5_1 | 2 | 1.5.1 | 6.0.9 | -| v2_1_6_0 | 2 | 1.6.0 | 5.1.9 | -| v2_k6_1_6_0 | 2 | 1.6.0 | 6.0.9 | -| v2 | 2 | last release | 5.1.9 | -| v2_k6 | 2 | last release | 6.x | -| v2_k7 | 2 | last release | 7.x | -| v2_d | 2 | git code | 5.1.9 | -| v2_dk6 | 2 | git code | 6.x | -| v2_dk7 | 2 | git code | 7.x | +| Tag | API | KiBot | KiCad | +| :---------- | --- | ------------ | -----: | +| v1 | 1 | 1.2.0 | 5.1.9 | +| v1_k6 | 1 | 1.2.0 | 6.0.5 | +| v2_1_2_0 | 2 | 1.2.0 | 5.1.9 | +| v2_k6_1_2_0 | 2 | 1.2.0 | 6.0.5 | +| v2_1_3_0 | 2 | 1.3.0 | 5.1.9 | +| v2_k6_1_3_0 | 2 | 1.3.0 | 6.0.7 | +| v2_1_4_0 | 2 | 1.4.0 | 5.1.9 | +| v2_k6_1_4_0 | 2 | 1.4.0 | 6.0.9 | +| v2_1_5_1 | 2 | 1.5.1 | 5.1.9 | +| v2_k6_1_5_1 | 2 | 1.5.1 | 6.0.9 | +| v2_1_6_0 | 2 | 1.6.0 | 5.1.9 | +| v2_k6_1_6_0 | 2 | 1.6.0 | 6.0.9 | +| v2_1_6_2 | 2 | 1.6.2 | 5.1.9 | +| v2_k6_1_6_2 | 2 | 1.6.2 | 6.0.11 | +| v2_k7_1_6_2 | 2 | 1.6.2 | 7.0.5.1| +| v2 | 2 | last release | 5.1.9 | +| v2_k6 | 2 | last release | 6.x | +| v2_k7 | 2 | last release | 7.x | +| v2_d | 2 | git code | 5.1.9 | +| v2_dk6 | 2 | git code | 6.x | +| v2_dk7 | 2 | git code | 7.x | The main differences between API 1 and 2 are: From 5e6430aa167e40ca149a402aa6e47bab469a9af1 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 26 Jun 2023 13:25:11 -0300 Subject: [PATCH 37/81] [DOCs] Updated GHA tags --- README.md | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index a40708b02..76131bdcd 100644 --- a/README.md +++ b/README.md @@ -5985,26 +5985,29 @@ The available options are: There are several tags you can choose: -| Tag | API | KiBot | KiCad | -| :---------- | --- | ------------ | ----: | -| v1 | 1 | 1.2.0 | 5.1.9 | -| v1_k6 | 1 | 1.2.0 | 6.0.5 | -| v2_1_2_0 | 2 | 1.2.0 | 5.1.9 | -| v2_k6_1_2_0 | 2 | 1.2.0 | 6.0.5 | -| v2_1_3_0 | 2 | 1.3.0 | 5.1.9 | -| v2_k6_1_3_0 | 2 | 1.3.0 | 6.0.7 | -| v2_1_4_0 | 2 | 1.4.0 | 5.1.9 | -| v2_k6_1_4_0 | 2 | 1.4.0 | 6.0.9 | -| v2_1_5_1 | 2 | 1.5.1 | 5.1.9 | -| v2_k6_1_5_1 | 2 | 1.5.1 | 6.0.9 | -| v2_1_6_0 | 2 | 1.6.0 | 5.1.9 | -| v2_k6_1_6_0 | 2 | 1.6.0 | 6.0.9 | -| v2 | 2 | last release | 5.1.9 | -| v2_k6 | 2 | last release | 6.x | -| v2_k7 | 2 | last release | 7.x | -| v2_d | 2 | git code | 5.1.9 | -| v2_dk6 | 2 | git code | 6.x | -| v2_dk7 | 2 | git code | 7.x | +| Tag | API | KiBot | KiCad | +| :---------- | --- | ------------ | -----: | +| v1 | 1 | 1.2.0 | 5.1.9 | +| v1_k6 | 1 | 1.2.0 | 6.0.5 | +| v2_1_2_0 | 2 | 1.2.0 | 5.1.9 | +| v2_k6_1_2_0 | 2 | 1.2.0 | 6.0.5 | +| v2_1_3_0 | 2 | 1.3.0 | 5.1.9 | +| v2_k6_1_3_0 | 2 | 1.3.0 | 6.0.7 | +| v2_1_4_0 | 2 | 1.4.0 | 5.1.9 | +| v2_k6_1_4_0 | 2 | 1.4.0 | 6.0.9 | +| v2_1_5_1 | 2 | 1.5.1 | 5.1.9 | +| v2_k6_1_5_1 | 2 | 1.5.1 | 6.0.9 | +| v2_1_6_0 | 2 | 1.6.0 | 5.1.9 | +| v2_k6_1_6_0 | 2 | 1.6.0 | 6.0.9 | +| v2_1_6_2 | 2 | 1.6.2 | 5.1.9 | +| v2_k6_1_6_2 | 2 | 1.6.2 | 6.0.11 | +| v2_k7_1_6_2 | 2 | 1.6.2 | 7.0.5.1| +| v2 | 2 | last release | 5.1.9 | +| v2_k6 | 2 | last release | 6.x | +| v2_k7 | 2 | last release | 7.x | +| v2_d | 2 | git code | 5.1.9 | +| v2_dk6 | 2 | git code | 6.x | +| v2_dk7 | 2 | git code | 7.x | The main differences between API 1 and 2 are: From 84753265544db85c7fe17c15caad1236883ad0d6 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Wed, 28 Jun 2023 06:31:09 -0300 Subject: [PATCH 38/81] [Debian][Fixed] python3-lark dependency - 0.8.1 can't load the current definition, 0.10.0 can. Closes #459 --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index 7417d3575..c2e665dda 100644 --- a/debian/control +++ b/debian/control @@ -10,7 +10,7 @@ X-Python3-Version: >= 3.6 Package: kibot Architecture: all Multi-Arch: foreign -Depends: ${misc:Depends}, ${python3:Depends}, python3-yaml, kicad (>= 5.1.6) | kicad-nightly, python3-wxgtk4.0, python3-xvfbwrapper, python3-lark +Depends: ${misc:Depends}, ${python3:Depends}, python3-yaml, kicad (>= 5.1.6) | kicad-nightly, python3-wxgtk4.0, python3-xvfbwrapper, python3-lark (>= 0.10.0) Recommends: kibom.inti-cmnb (>= 1.8.0), kicost (>= 1.1.8), interactivehtmlbom.inti-cmnb (>= 2.4.1), imagemagick, librsvg2-bin, python3-xlsxwriter, rar, ghostscript, python3-lxml, python3-mistune, kikit, python3-markdown2 Suggests: pandoc, texlive-latex-base, texlive-latex-recommended, git, poppler-utils, kidiff, python3-numpy Description: KiCad Bot From 864eb9584f3285343e1a77b3bc1df3b4e087a3f9 Mon Sep 17 00:00:00 2001 From: taotieren Date: Mon, 24 Jul 2023 17:50:26 +0800 Subject: [PATCH 39/81] Update AUR --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 76131bdcd..e8933f95a 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ * [Installation](#installation) * [Dependencies](#dependencies) * [Installation on Ubuntu or Debian](#installation-on-ubuntu-or-debian) + * [Installation on Arch Linux](#installation-on-arch-linux) * [Installation using pip](#installation-using-pip) * [Notes about virtualenv](#notes-about-virtualenv) * [Installation on other targets](#installation-on-other-targets) @@ -261,6 +262,15 @@ sudo apt install ./python3-mcpy_2.0.2-1_all.deb ./kibot_0.6.0-1_all.deb **Important note**: The [KiCad Automation Scripts](https://github.com/INTI-CMNB/kicad-automation-scripts/) packages are a mandatory dependency. The [KiBoM](https://github.com/INTI-CMNB/KiBoM), [InteractiveHtmlBom](https://github.com/INTI-CMNB/InteractiveHtmlBom) and [PcbDraw](https://github.com/INTI-CMNB/PcbDraw) are recommended. + +### Installation on Arch Linux + +AUR repository for [kibot](https://aur.archlinux.org/packages/kibot) + +```shell +yay -S kibot +``` + ### Installation using pip ```shell From f0c63dbf78da12350f373d52395a522b2fa984d4 Mon Sep 17 00:00:00 2001 From: zedudi <61047687+zedudi@users.noreply.github.com> Date: Tue, 25 Jul 2023 16:36:31 +0200 Subject: [PATCH 40/81] aggregated csv export error fix --- kibot/out_bom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kibot/out_bom.py b/kibot/out_bom.py index 0eff9e211..bbcb6d393 100644 --- a/kibot/out_bom.py +++ b/kibot/out_bom.py @@ -838,7 +838,7 @@ def load_csv(self, fname, project, delimiter): elif n == fp_index: c.footprint = str(f) number = 2 - elif ds_index: + elif n == ds_index: c.datasheet = str(f) number = 3 elif n == pn_index: From 166bfec74d79ed9cb3c5e734feac759a46c09ea7 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 1 Aug 2023 10:18:11 -0300 Subject: [PATCH 41/81] [Tests] Adapted to iBoM 2.7.0 --- tests/test_plot/test_ibom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_plot/test_ibom.py b/tests/test_plot/test_ibom.py index 44af3e6c9..29c5cc2ad 100644 --- a/tests/test_plot/test_ibom.py +++ b/tests/test_plot/test_ibom.py @@ -78,7 +78,7 @@ def test_ibom_all_ops(test_dir): r'"show_pads": false', r'"show_fabrication": true', r'"show_silkscreen": false', - r'"highlight_pin1": true', + r'"highlight_pin1": "all"', r'"redraw_on_drag": false', r'"board_rotation": 18.0', # 90/5 r'"offset_back_rotation": true', From caad9ed862cdd9b6c650d6d4669652e15ced087b Mon Sep 17 00:00:00 2001 From: Simon Date: Fri, 25 Aug 2023 01:43:27 -0700 Subject: [PATCH 42/81] Add dimensions config to kikit panelize post: --- README.md | 1 + docs/samples/generic_plot.kibot.yaml | 2 ++ kibot/out_panelize.py | 2 ++ 3 files changed, 5 insertions(+) diff --git a/README.md b/README.md index e8933f95a..f64a53baa 100644 --- a/README.md +++ b/README.md @@ -3436,6 +3436,7 @@ Notes: - *script_arg*: Alias for scriptarg. - `scriptarg`: [string=''] An arbitrary string passed to the user post-processing script specified in script. - `type`: [string='auto'] [auto] Currently fixed. + - `dimensions`: [boolean=false] Draw dimensions with the panel size. - `source`: [dict] Used to adjust details of which part of the PCB is panelized. * Valid keys: - **`type`**: [string='auto'] [auto,rectangle,annotation] How we select the area of the PCB tu used for the panelization. diff --git a/docs/samples/generic_plot.kibot.yaml b/docs/samples/generic_plot.kibot.yaml index 1ed502ee3..08ccf9505 100644 --- a/docs/samples/generic_plot.kibot.yaml +++ b/docs/samples/generic_plot.kibot.yaml @@ -1853,6 +1853,8 @@ outputs: scriptarg: '' # [string='auto'] [auto] Currently fixed type: 'auto' + # [boolean=false] Draw dimensions with the panel size. + dimensions: false # [dict] Used to adjust details of which part of the PCB is panelized source: # [number|string] Bottom right X coordinate of the rectangle used. Used for *rectangle* diff --git a/kibot/out_panelize.py b/kibot/out_panelize.py index 01f1325d4..3ce7a48f7 100644 --- a/kibot/out_panelize.py +++ b/kibot/out_panelize.py @@ -430,6 +430,8 @@ def __init__(self): """ [tl,tr,bl,br,mt,mb,ml,mr,c] Specify if the auxiliary origin an grid origin should be placed. Can be one of tl, tr, bl, br (corners), mt, mb, ml, mr (middle of sides), c (center). Empty string does not changes the origin """ + self.dimensions = False + """ Draw dimensions with the panel size. """ super().__init__() def config(self, parent): From 9f70faa4744e6632181bb991f8ffb1a2cfaa4838 Mon Sep 17 00:00:00 2001 From: ac Date: Sun, 5 Nov 2023 12:10:43 +1000 Subject: [PATCH 43/81] Unit name handler added for v6_sch module. --- kibot/kicad/v6_sch.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kibot/kicad/v6_sch.py b/kibot/kicad/v6_sch.py index e1e5221f1..d204c9b3f 100644 --- a/kibot/kicad/v6_sch.py +++ b/kibot/kicad/v6_sch.py @@ -744,6 +744,7 @@ def __init__(self): self.on_board = True self.is_power = False self.unit = 0 + self.unit_name = None self.draw = [] self.fields = [] self.dfields = {} @@ -787,6 +788,7 @@ def load(c, project, parent=None): # noqa: C901 if parent is None: logger.warning(W_NOLIB + "Component `{}` with more than one `:`".format(comp.name)) comp.units = [] + comp.unit_name = '' comp.pins = [] comp.all_pins = [] comp.unit_count = 1 @@ -865,6 +867,12 @@ def load(c, project, parent=None): # noqa: C901 raise SchError('Malformed unit id `{}`'.format(vis_obj.lib_id)) unit = int(m.group(2)) comp.unit_count = max(unit, comp.unit_count) + # UNIT_NAMES... + elif i_type == 'unit_name': + # Units can have custom labels + # The format is not documented but as of V7 is: + # (unit_name "") + comp.unit_name = i[1] else: raise SchError('Unknown symbol attribute `{}`'.format(i)) if vis_obj: From aa11e95b0bdfbc8807afedc41770b820730fe0f6 Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Mon, 25 Dec 2023 12:33:08 +0100 Subject: [PATCH 44/81] kiplot: Allow output dir to exist When running kibot with `--out-dir /my_path/reports`, contrary to other means of running kibot, we check if a path exists. However, this seems to fail with for example symlinks, resulting in the following error. Using SCH file: 1.kicad_sch - 'Records information about the current run.' (info) [info] Traceback (most recent call last): File "/usr/bin/kibot", line 33, in sys.exit(load_entry_point('kibot==1.6.3', 'console_scripts', 'kibot')()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/kibot/__main__.py", line 520, in main generate_outputs(outputs, args.target, args.invert_sel, args.skip_pre, args.cli_order, args.no_priority, File "/usr/lib/python3/dist-packages/kibot/kiplot.py", line 527, in generate_outputs _generate_outputs(outputs, targets, invert, skip_pre, cli_order, no_priority, dont_stop) File "/usr/lib/python3/dist-packages/kibot/kiplot.py", line 517, in _generate_outputs run_output(out, dont_stop) File "/usr/lib/python3/dist-packages/kibot/kiplot.py", line 418, in run_output out.run(get_output_dir(out.dir, out)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/kibot/kiplot.py", line 366, in get_output_dir os.makedirs(outdir) File "", line 225, in makedirs FileExistsError: [Errno 17] File exists: '/my_path/reports' Instead of manually determining things, lets just use os.makedirs to handle this with the `exists_ok` argument, as we do elsewhere. Signed-off-by: Olliver Schinagl --- kibot/kiplot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kibot/kiplot.py b/kibot/kiplot.py index 3a711eef3..4781d170e 100644 --- a/kibot/kiplot.py +++ b/kibot/kiplot.py @@ -362,8 +362,8 @@ def get_output_dir(o_dir, obj, dry=False): outdir = os.path.abspath(obj.expand_dirname(os.path.join(GS.out_dir, o_dir))) # Create directory if needed logger.debug("Output destination: {}".format(outdir)) - if not dry and not os.path.exists(outdir): - os.makedirs(outdir) + if not dry: + os.makedirs(outdir, exist_ok=True) return outdir From d8a6014cbf98d477dedd9f6762bbfd26dacb4bbf Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Fri, 2 Feb 2024 12:32:51 -0300 Subject: [PATCH 45/81] [DOCs][Example][Fixed] Where dimensions help is for panelize --- docs/samples/generic_plot.kibot.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/samples/generic_plot.kibot.yaml b/docs/samples/generic_plot.kibot.yaml index 5268f9c26..289f2c7b8 100644 --- a/docs/samples/generic_plot.kibot.yaml +++ b/docs/samples/generic_plot.kibot.yaml @@ -2015,8 +2015,6 @@ outputs: scriptarg: '' # [string='auto'] [auto] Currently fixed type: 'auto' - # [boolean=false] Draw dimensions with the panel size. - dimensions: false # [dict] Used to adjust details of which part of the PCB is panelized source: # [number|string] Bottom right X coordinate of the rectangle used. Used for *rectangle* From 4bba402a61bc691d8ddb299ce11806a72135505f Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Fri, 2 Feb 2024 13:23:14 -0300 Subject: [PATCH 46/81] [Fixed][V6 SCH] Merge error --- kibot/kicad/v6_sch.py | 1 - 1 file changed, 1 deletion(-) diff --git a/kibot/kicad/v6_sch.py b/kibot/kicad/v6_sch.py index d3d546cc7..88d50531a 100644 --- a/kibot/kicad/v6_sch.py +++ b/kibot/kicad/v6_sch.py @@ -788,7 +788,6 @@ def load(c, project, parent=None): # noqa: C901 if parent is None: logger.warning(W_NOLIB + "Component `{}` with more than one `:`".format(comp.name)) comp.units = [] - comp.unit_name = '' comp.pins = [] comp.all_pins = [] comp.unit_count = 1 From 68260c0b82bc23541282e6819fd4b68a11034766 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Fri, 2 Feb 2024 14:07:17 -0300 Subject: [PATCH 47/81] [DOCs] Updated the new stuff summary --- docs/source/index.rst | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index a3adab6f5..ea18b6391 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -14,10 +14,12 @@ KiBot (formerly KiPlot) - If you are looking for the GitHub Actions documentation, and you already know how to use KiBot, or want a quick start, read: :ref:`usage-of-github-actions` -**New on v1.6.3** +**New on v1.6.4** -- Parametrizable imports -- ``value_split`` and ``spec_to_field`` filters +- KiRi (interactive diff) and KiCanvas (on-line schematic/PCB browser) new outputs +- New Internal templates: 3DRender_top, 3DRender_top_straight, 3DRender_bottom and + 3DRender_bottom_straight: to generate simple and quick 3D renders. +- Various fixes and new command line options .. toctree:: From 8770087dd24b8df815bdef134b9f229c05f4c23f Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Sat, 3 Feb 2024 21:11:04 -0300 Subject: [PATCH 48/81] [DOCs][Fixed] README link to docs I had to move stable to master in RTD Fixes #577 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9d739ef80..5f50dd7a0 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ documentation files for your KiCad projects easily, repeatable, and most of all, scriptably. This means you can use a Makefile to export your KiCad PCBs just as needed, or do it in a CI/CD environment. -For more information consult the [documentation](https://kibot.readthedocs.io/en/stable/) (hosted by Read the Docs) +For more information consult the [documentation](https://kibot.readthedocs.io/en/master/) (hosted by Read the Docs) If you are looking for the last features and fixes visit the [dev branch](https://github.com/INTI-CMNB/KiBot/tree/dev) From e86f6c55fc4827d8131f900a960b357291be1104 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 6 Feb 2024 08:03:27 -0300 Subject: [PATCH 49/81] [DOCs][CI/CD] Updated release tags --- docs/source/usage_with_ci_cd.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/source/usage_with_ci_cd.rst b/docs/source/usage_with_ci_cd.rst index 5b9e4ab94..18d507a5f 100644 --- a/docs/source/usage_with_ci_cd.rst +++ b/docs/source/usage_with_ci_cd.rst @@ -77,6 +77,9 @@ ghcr.io/inti-cmnb/kicad7_auto:latest last release 7.x ghcr.io/inti-cmnb/kicad5_auto_full:dev git code 5.1.9 ghcr.io/inti-cmnb/kicad6_auto_full:dev git code 6.0.11 ghcr.io/inti-cmnb/kicad7_auto_full:dev git code 7.x +ghcr.io/inti-cmnb/kicad5_auto_full:1.6.3 1.6.3 5.1.9 +ghcr.io/inti-cmnb/kicad6_auto_full:1.6.3 1.6.3 6.0.11 +ghcr.io/inti-cmnb/kicad7_auto_full:1.6.3 1.6.3 7.0.10 ghcr.io/inti-cmnb/kicad5_auto_full:1.6.2 1.6.2 5.1.9 ghcr.io/inti-cmnb/kicad6_auto_full:1.6.2 1.6.2 6.0.11 ghcr.io/inti-cmnb/kicad7_auto_full:1.6.2 1.6.2 7.0.5.1 @@ -229,6 +232,9 @@ v2_k6_1_6_0 2 1.6.0 6.0.9 v2_1_6_2 2 1.6.2 5.1.9 v2_k6_1_6_2 2 1.6.2 6.0.11 v2_k7_1_6_2 2 1.6.2 7.0.5.1 +v2_1_6_3 2 1.6.3 5.1.9 +v2_k6_1_6_3 2 1.6.3 6.0.11 +v2_k7_1_6_3 2 1.6.3 7.0.10 v2 2 last release 5.1.9 v2_k6 2 last release 6.0.11 v2_k7 2 last release 7.x From a88846be70ad6fa6809a437e14d8832952fe85c8 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Fri, 22 Mar 2024 08:39:57 -0300 Subject: [PATCH 50/81] [DOCs][Fixed] JLCPCB rotation examples We need to mirror the bottom (because KiCad does it) See #591 --- docs/source/notes_position.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/source/notes_position.rst b/docs/source/notes_position.rst index 30dc1b231..b48ee452d 100644 --- a/docs/source/notes_position.rst +++ b/docs/source/notes_position.rst @@ -158,7 +158,7 @@ use of the rotation filter: comment: 'Adjust rotation for JLC' type: rot_footprint negative_bottom: false - mirror_bottom: false + mirror_bottom: true outputs: - name: 'position' @@ -215,7 +215,7 @@ As you can see we now create a filter named ``fix_rotation`` of type comment: 'Adjust rotation for JLC' type: rot_footprint negative_bottom: false - mirror_bottom: false + mirror_bottom: true Using it, instead of the internal filter named ``_rot_footprint_jlcpcb``, is the same here. But you can then customize the filter. @@ -231,7 +231,7 @@ rotate them just 90 degrees. The filter will look like this: comment: 'Adjust rotation for JLC' type: rot_footprint negative_bottom: false - mirror_bottom: false + mirror_bottom: true rotations: - ["^QFN-", 90.0] @@ -253,7 +253,7 @@ example: comment: 'Adjust rotation for JLC' type: rot_footprint negative_bottom: false - mirror_bottom: false + mirror_bottom: true rotations: - ["^QFN-", 90.0] @@ -280,7 +280,7 @@ You just need to add new offsets to the ``offsets`` option, like in the followin comment: 'Adjust rotation for JLC' type: rot_footprint negative_bottom: false - mirror_bottom: false + mirror_bottom: true offsets: - ["^QFN-20", "1,0.5"] @@ -329,7 +329,7 @@ will adjust U103 rotation by 180 degrees: comment: 'Adjust rotation for JLC' type: rot_footprint negative_bottom: false - mirror_bottom: false + mirror_bottom: true rotations_and_offsets: - field: Reference regex: U103 From 62235ad0ebf2f689c3df78e840e6ea2f8a5b0455 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Sun, 31 Mar 2024 11:44:11 -0300 Subject: [PATCH 51/81] [CI/CD][Try] Upload coverage for master --- .github/workflows/pythonapp.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml index 03057d123..2af2370c4 100644 --- a/.github/workflows/pythonapp.yml +++ b/.github/workflows/pythonapp.yml @@ -97,7 +97,8 @@ jobs: path: output - name: Upload Coverage # Don't mix stable coverage with development coverage - if: ${{ (github.ref == 'refs/heads/dev') && (matrix.ki_release != 'ki8') }} + # if: ${{ (github.ref == 'refs/heads/dev') && (matrix.ki_release != 'ki8') }} + if: ${{ (matrix.ki_release != 'ki8') }} env: COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} COVERALLS_FLAG_NAME: ${{ matrix.ki_release }}_${{ matrix.w_tests }} @@ -159,7 +160,7 @@ jobs: path: output - name: Upload Coverage # Don't mix stable coverage with development coverage - if: github.ref == 'refs/heads/dev' + # if: github.ref == 'refs/heads/dev' env: COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} COVERALLS_FLAG_NAME: independent @@ -189,7 +190,7 @@ jobs: container: setsoft/kicad_auto_test:ki7 needs: [test, test_indep] # Don't mix stable coverage with development coverage - if: github.ref == 'refs/heads/dev' + #if: github.ref == 'refs/heads/dev' steps: - uses: actions/checkout@v4 @@ -250,7 +251,7 @@ jobs: needs: [test, test_indep] runs-on: ubuntu-latest # Don't mix stable coverage with development coverage - if: github.ref == 'refs/heads/dev' + #if: github.ref == 'refs/heads/dev' steps: - name: Finished env: From fd530e2149e6481673b937154c2782de8ecabc8f Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Sun, 31 Mar 2024 12:29:04 -0300 Subject: [PATCH 52/81] [CI/CD][Added][KiCad 8] Missing triggers --- .github/workflows/refresh_images.yml | 2 ++ .github/workflows/refresh_images_pre.yml | 2 ++ .github/workflows/release.yml | 2 ++ 3 files changed, 6 insertions(+) diff --git a/.github/workflows/refresh_images.yml b/.github/workflows/refresh_images.yml index e838d4a12..535154c14 100644 --- a/.github/workflows/refresh_images.yml +++ b/.github/workflows/refresh_images.yml @@ -13,6 +13,8 @@ jobs: curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k5"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k6"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k7"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k8"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k5"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k6"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k7"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k8"}' diff --git a/.github/workflows/refresh_images_pre.yml b/.github/workflows/refresh_images_pre.yml index 5eb87f9d0..29d19738b 100644 --- a/.github/workflows/refresh_images_pre.yml +++ b/.github/workflows/refresh_images_pre.yml @@ -13,6 +13,8 @@ jobs: curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k5p"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k6p"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k7p"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k8p"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k5p"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k6p"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k7p"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k8p"}' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0e46dc947..687fbcf00 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -89,6 +89,8 @@ jobs: curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k5"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k6"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k7"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k8"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k5"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k6"}' curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k7"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k8"}' From 2fd0d2d1338bd08ebce03d3d681ff8904f7d257f Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 23 Apr 2024 13:14:28 -0300 Subject: [PATCH 53/81] [DOCs] Updated for release --- docs/source/index.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index db525d375..4c025f968 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -14,10 +14,13 @@ KiBot (formerly KiPlot) - If you are looking for the GitHub Actions documentation, and you already know how to use KiBot, or want a quick start, read: :ref:`usage-of-github-actions` -**New on v1.6.5** - -- KiCad 8 support +**New on v1.7.0** +- New preflights: erc, drc, update_footprint, draw_stackup, update_pcb_characteristics and update_stackup +- New global variables: str_yes/str_no +- New internal template: ExportProject +- Now the *var_rename* and *var_rename_kicost* filters can be used to change footprints using variants. +- Better KiCad 8 support .. toctree:: :maxdepth: 3 From 6021e2c4b47e3d55a3a3facd696c1912d2dbc9ce Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 23 Apr 2024 13:44:16 -0300 Subject: [PATCH 54/81] [DOCs] Updated docker image versions --- docs/source/usage_with_ci_cd.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/source/usage_with_ci_cd.rst b/docs/source/usage_with_ci_cd.rst index 81fd2fffa..5197e8d49 100644 --- a/docs/source/usage_with_ci_cd.rst +++ b/docs/source/usage_with_ci_cd.rst @@ -84,6 +84,10 @@ ghcr.io/inti-cmnb/kicad5_auto_full:dev git code 5.1.9 ghcr.io/inti-cmnb/kicad6_auto_full:dev git code 6.0.11 ghcr.io/inti-cmnb/kicad7_auto_full:dev git code 7.0.11 ghcr.io/inti-cmnb/kicad8_auto_full:dev git code 8.x +ghcr.io/inti-cmnb/kicad5_auto_full:1.6.5 1.6.5 5.1.9 +ghcr.io/inti-cmnb/kicad6_auto_full:1.6.5 1.6.5 6.0.11 +ghcr.io/inti-cmnb/kicad7_auto_full:1.6.5 1.6.5 7.0.11 +ghcr.io/inti-cmnb/kicad8_auto_full:1.6.5 1.6.5 8.0.1 ghcr.io/inti-cmnb/kicad5_auto_full:1.6.4 1.6.4 5.1.9 ghcr.io/inti-cmnb/kicad6_auto_full:1.6.4 1.6.4 6.0.11 ghcr.io/inti-cmnb/kicad7_auto_full:1.6.4 1.6.4 7.0.11 @@ -249,6 +253,10 @@ v2_k7_1_6_3 2 1.6.3 7.0.10 v2_1_6_4 2 1.6.4 5.1.9 v2_k6_1_6_4 2 1.6.4 6.0.11 v2_k7_1_6_4 2 1.6.4 7.0.11 +v2_1_6_5 2 1.6.5 5.1.9 +v2_k6_1_6_5 2 1.6.5 6.0.11 +v2_k7_1_6_5 2 1.6.5 7.0.11 +v2_k8_1_6_5 2 1.6.5 8.0.1 v2 2 last release 5.1.9 v2_k6 2 last release 6.0.11 v2_k7 2 last release 7.0.11 From 77d6d02ac5398d7e77b36616d597bad1545a5b5d Mon Sep 17 00:00:00 2001 From: Henning Kleen Date: Wed, 15 May 2024 15:51:41 +0200 Subject: [PATCH 55/81] [BoM][Fixed] Generate color ref for xlsx output Color reference included if col_colors isn't set, but row_colors is --- kibot/bom/xlsx_writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kibot/bom/xlsx_writer.py b/kibot/bom/xlsx_writer.py index e0e51c78c..4db5e524f 100644 --- a/kibot/bom/xlsx_writer.py +++ b/kibot/bom/xlsx_writer.py @@ -248,7 +248,7 @@ def insert_logo(worksheet, image_data, scale): def create_color_ref(workbook, col_colors, hl_empty, fmt_cols, do_kicost, kicost_colors, row_colors): - if not (col_colors or do_kicost): + if not (col_colors or row_colors or do_kicost): return row = 0 worksheet = workbook.add_worksheet('Colors') From 6f848c86c42d0b3c61737dd27df81c71c2d64db0 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Wed, 18 Sep 2024 09:28:41 -0300 Subject: [PATCH 56/81] Bumped version to 1.8.1 --- CHANGELOG.md | 5 +++ debian/changelog | 6 ++++ docs/source/Changelog.rst | 68 ++++++++++++++++++++++----------------- kibot/__init__.py | 2 +- 4 files changed, 51 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e512e8bb..057cfbec0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.8.1] - UNRELEASED +### Added +- Experimental GUI + + ## [1.8.0] - 2024-09-17 ### Added - Experimental Altium PCB conversion (#625) diff --git a/debian/changelog b/debian/changelog index 2acdde0fd..e2bd8ac73 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +kibot (1.8.1-1) UNRELEASED; urgency=medium + + * Next release + + -- Salvador Eduardo Tropea Wed, 18 Sep 2024 09:21:46 -0300 + kibot (1.8.0-1) stable; urgency=medium * Added experimental Altium PCB conversion diff --git a/docs/source/Changelog.rst b/docs/source/Changelog.rst index ea91d6df2..d7e5d8c9b 100644 --- a/docs/source/Changelog.rst +++ b/docs/source/Changelog.rst @@ -13,9 +13,19 @@ Changelog `__, and this project adheres to `Semantic Versioning `__. +[1.8.1] - UNRELEASED +-------------------- + +Added +~~~~~ + +- Experimental GUI + [1.8.0] - 2024-09-17 -------------------- +.. _added-1: + Added ~~~~~ @@ -159,7 +169,7 @@ Changed: [1.7.0] - 2024-04-23 -------------------- -.. _added-1: +.. _added-2: Added ~~~~~ @@ -264,7 +274,7 @@ Changed [1.6.5] - 2024-03-31 -------------------- -.. _added-2: +.. _added-3: Added ~~~~~ @@ -324,7 +334,7 @@ Fixed [1.6.4] - 2024-02-02 -------------------- -.. _added-3: +.. _added-4: Added ~~~~~ @@ -605,7 +615,7 @@ Fixed [1.6.3] - 2023-06-26 -------------------- -.. _added-4: +.. _added-5: Added ~~~~~ @@ -775,7 +785,7 @@ Fixed [1.6.2] - 2023-04-24 -------------------- -.. _added-5: +.. _added-6: Added ~~~~~ @@ -893,7 +903,7 @@ Changed: [1.6.1] - 2023-03-16 -------------------- -.. _added-6: +.. _added-7: Added ~~~~~ @@ -942,7 +952,7 @@ Fixed [1.6.0] - 2023-02-06 -------------------- -.. _added-7: +.. _added-8: Added ~~~~~ @@ -1073,7 +1083,7 @@ Fixed [1.5.0] - 2022-12-16 -------------------- -.. _added-8: +.. _added-9: Added ~~~~~ @@ -1187,7 +1197,7 @@ Fixed [1.4.0] - 2022-10-12 -------------------- -.. _added-9: +.. _added-10: Added ~~~~~ @@ -1305,7 +1315,7 @@ Changed [1.3.0] - 2022-09-08 -------------------- -.. _added-10: +.. _added-11: Added ~~~~~ @@ -1405,7 +1415,7 @@ Changed [1.2.0] - 2022-06-15 -------------------- -.. _added-11: +.. _added-12: Added ~~~~~ @@ -1464,7 +1474,7 @@ Changed [1.1.0] - 2022-05-24 -------------------- -.. _added-12: +.. _added-13: Added ~~~~~ @@ -1495,7 +1505,7 @@ Fixed [1.0.0] - 2022-05-10 -------------------- -.. _added-13: +.. _added-14: Added ~~~~~ @@ -1673,7 +1683,7 @@ Fixed [0.11.0] - 2021-04-25 --------------------- -.. _added-14: +.. _added-15: Added ~~~~~ @@ -1729,7 +1739,7 @@ Fixed [0.10.1] - 2021-02-22 --------------------- -.. _added-15: +.. _added-16: Added ~~~~~ @@ -1778,7 +1788,7 @@ Fixed [0.10.0] - 2021-02-12 --------------------- -.. _added-16: +.. _added-17: Added ~~~~~ @@ -1841,7 +1851,7 @@ Fixed [0.9.0] - 2021-01-04 -------------------- -.. _added-17: +.. _added-18: Added ~~~~~ @@ -1879,7 +1889,7 @@ Fixed [0.8.1] - 2020-12-09 -------------------- -.. _added-18: +.. _added-19: Added ~~~~~ @@ -1900,7 +1910,7 @@ Fixed [0.8.0] - 2020-11-06 -------------------- -.. _added-19: +.. _added-20: Added ~~~~~ @@ -1931,7 +1941,7 @@ Fixed [0.7.0] - 2020-09-11 -------------------- -.. _added-20: +.. _added-21: Added ~~~~~ @@ -1995,7 +2005,7 @@ Fixed [0.6.1] - 2020-08-20 -------------------- -.. _added-21: +.. _added-22: Added ~~~~~ @@ -2022,7 +2032,7 @@ Fixed [0.6.0] - 2020-08-18 -------------------- -.. _added-22: +.. _added-23: Added ~~~~~ @@ -2090,7 +2100,7 @@ Changed - Now we test the PCB and/or SCH only when we are doing something that needs them. -.. _added-23: +.. _added-24: Added ~~~~~ @@ -2159,7 +2169,7 @@ Fixed [0.4.0] - 2020-06-17 -------------------- -.. _added-24: +.. _added-25: Added ~~~~~ @@ -2172,7 +2182,7 @@ Added [0.3.0] - 2020-06-14 -------------------- -.. _added-25: +.. _added-26: Added ~~~~~ @@ -2201,7 +2211,7 @@ Fixed [0.2.5] - 2020-06-11 -------------------- -.. _added-26: +.. _added-27: Added ~~~~~ @@ -2242,7 +2252,7 @@ Fixed [0.2.3] - 2020-04-23 -------------------- -.. _added-27: +.. _added-28: Added ~~~~~ @@ -2280,7 +2290,7 @@ Fixed [0.2.0] - 2020-03-28 -------------------- -.. _added-28: +.. _added-29: Added ~~~~~ @@ -2310,7 +2320,7 @@ Fixed [0.1.1] - 2020-03-13 -------------------- -.. _added-29: +.. _added-30: Added ~~~~~ diff --git a/kibot/__init__.py b/kibot/__init__.py index 36e215c60..dd63b0e57 100644 --- a/kibot/__init__.py +++ b/kibot/__init__.py @@ -5,5 +5,5 @@ __email__ = 'stropea@inti.gob.ar' __url__ = 'https://github.com/INTI-CMNB/KiBot/' __status__ = 'stable' -__version__ = '1.8.0' +__version__ = '1.8.1' __pypi_deps__ = ['kiauto', 'pyyaml', 'xlsxwriter', 'colorama', 'requests', 'qrcodegen', 'markdown2', 'lark'] From 2a7cb13c3b4475612c770eb95aa3a4f7778a051e Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 23 Sep 2024 13:27:07 -0300 Subject: [PATCH 57/81] [Blender Export][Fixed] Log messages about what is being generated When generating the PCB3D file --- kibot/kiplot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kibot/kiplot.py b/kibot/kiplot.py index 9bf7d97bd..fca957dc1 100644 --- a/kibot/kiplot.py +++ b/kibot/kiplot.py @@ -583,8 +583,9 @@ def configure_and_run(tree, out_dir, msg): out = RegOutput.get_class_for(tree['type'])() out.set_tree(tree) config_output(out) - logger.debug(' - Creating the PCB3D ...') + logger.debug(msg) out.run(out_dir) + return out def look_for_output(name, op_name, parent, valids): From ca48dd31e216937e9c9dce0a26028f960dedb442 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 23 Sep 2024 13:37:15 -0300 Subject: [PATCH 58/81] [Blender Export][Fixed] Stacked boards When using an automatically generated PCB3D --- CHANGELOG.md | 3 ++ docs/source/Changelog.rst | 70 +++++++++++++++++++++---------------- kibot/out_blender_export.py | 52 ++++++++++++--------------- 3 files changed, 65 insertions(+), 60 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 057cfbec0..a2b324f7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Experimental GUI +### Fixed +- Blender Export: stacked boards when using an automatically generated PCB3D. + ## [1.8.0] - 2024-09-17 ### Added diff --git a/docs/source/Changelog.rst b/docs/source/Changelog.rst index d7e5d8c9b..de5082cbc 100644 --- a/docs/source/Changelog.rst +++ b/docs/source/Changelog.rst @@ -21,6 +21,12 @@ Added - Experimental GUI +Fixed +~~~~~ + +- Blender Export: stacked boards when using an automatically generated + PCB3D. + [1.8.0] - 2024-09-17 -------------------- @@ -82,6 +88,8 @@ Added - Support for panels repeating the same component (See #656) +.. _fixed-1: + Fixed: ~~~~~~ @@ -232,7 +240,7 @@ Added - Added options to control Eco1/Eco2/Drawings individually on KiCad 8 (#614) -.. _fixed-1: +.. _fixed-2: Fixed ~~~~~ @@ -302,7 +310,7 @@ Changed - BoardView: Skip footprints with no pads (not just REF**) (whitequark/kicad-boardview#14) -.. _fixed-2: +.. _fixed-3: Fixed ~~~~~ @@ -522,7 +530,7 @@ Changed - When *check_zone_fills* is enabled now we do a refill for the boards -.. _fixed-3: +.. _fixed-4: Fixed ~~~~~ @@ -740,7 +748,7 @@ Changed - JLCPCB_stencil: Is now just like JLCPCB. The only difference is the added layers. -.. _fixed-4: +.. _fixed-5: Fixed ~~~~~ @@ -850,7 +858,7 @@ Added - Option to use the auxiliary origin as reference. (#420) -.. _fixed-5: +.. _fixed-6: Fixed ~~~~~ @@ -937,7 +945,7 @@ Added - ``cross_using_kicad`` global option to use KiCad to cross DNP components in the schematic. Enabled by default. -.. _fixed-6: +.. _fixed-7: Fixed ~~~~~ @@ -1071,7 +1079,7 @@ Added [1.5.1] - 2022-12-16 -------------------- -.. _fixed-7: +.. _fixed-8: Fixed ~~~~~ @@ -1158,7 +1166,7 @@ Changed - loss tangent decimals, added one more. -.. _fixed-8: +.. _fixed-9: Fixed ~~~~~ @@ -1268,7 +1276,7 @@ Added - Position: option to set the resolution for floating values (#314) -.. _fixed-9: +.. _fixed-10: Fixed ~~~~~ @@ -1358,7 +1366,7 @@ Added - Installation checker: option to show the tool paths. -.. _fixed-10: +.. _fixed-11: Fixed ~~~~~ @@ -1442,7 +1450,7 @@ Added - GitHub discussions are now enabled. Comment about your KiBot experience `here `__ -.. _fixed-11: +.. _fixed-12: Fixed ~~~~~ @@ -1490,7 +1498,7 @@ Added - Pattern and text variables expansion in the title (#198) - Customizable extra info after the title (#199) -.. _fixed-12: +.. _fixed-13: Fixed ~~~~~ @@ -1638,7 +1646,7 @@ Changed - The default output pattern now includes the ``output_id`` (%I) - The ``source`` path for ``compress`` now has pattern expansion (#152) -.. _fixed-13: +.. _fixed-14: Fixed ~~~~~ @@ -1720,7 +1728,7 @@ Changed - Reference ranges of two elements no longer represented as ranges. Examples: “R1-R2” is now “R1 R2”, “R1-R3” remains unchanged. -.. _fixed-14: +.. _fixed-15: Fixed ~~~~~ @@ -1752,7 +1760,7 @@ Added [0.10.0-4] - 2021-02-16 ----------------------- -.. _fixed-15: +.. _fixed-16: Fixed ~~~~~ @@ -1764,7 +1772,7 @@ Fixed [0.10.0-3] - 2021-02-16 ----------------------- -.. _fixed-16: +.. _fixed-17: Fixed ~~~~~ @@ -1776,7 +1784,7 @@ Fixed [0.10.0-2] - 2021-02-12 ----------------------- -.. _fixed-17: +.. _fixed-18: Fixed ~~~~~ @@ -1834,7 +1842,7 @@ Changed and error messages still use stderr. - Now InteractiveHtmlBom can be installed just as a plugin. -.. _fixed-18: +.. _fixed-19: Fixed ~~~~~ @@ -1875,7 +1883,7 @@ Changed - Position files in CSV format quotes only the columns that could contain an space. Just like KiCad does. -.. _fixed-19: +.. _fixed-20: Fixed ~~~~~ @@ -1897,7 +1905,7 @@ Added - Internal BoM HTML: highlight cell when hover. - Internal BoM HTML: allow to jump to REF of row number using anchors. -.. _fixed-20: +.. _fixed-21: Fixed ~~~~~ @@ -1923,7 +1931,7 @@ Added - Columns in position files can be selected, renamed and sorted as you like. -.. _fixed-21: +.. _fixed-22: Fixed ~~~~~ @@ -1966,7 +1974,7 @@ Added - Default output file name format and default variant can be specified from the command line. -.. _fixed-22: +.. _fixed-23: Fixed ~~~~~ @@ -1988,7 +1996,7 @@ Changed creating the internal BoM. They are usually mistakes that prevents grouping components. -.. _fixed-23: +.. _fixed-24: Fixed ~~~~~ @@ -2019,7 +2027,7 @@ Changed - Incorporated mcpy, no longer a dependency. -.. _fixed-24: +.. _fixed-25: Fixed ~~~~~ @@ -2155,7 +2163,7 @@ Added - variants_blacklist - dnp_field -.. _fixed-25: +.. _fixed-26: Fixed ~~~~~ @@ -2199,7 +2207,7 @@ Changed missing or corrupted. - The ‘check_zone_fills’ option is now independent of ‘run_drc’ -.. _fixed-26: +.. _fixed-27: Fixed ~~~~~ @@ -2219,7 +2227,7 @@ Added - Tolerate config files without outputs - Mechanism to filter ERC/DRC errors -.. _fixed-27: +.. _fixed-28: Fixed ~~~~~ @@ -2239,7 +2247,7 @@ Changed - Now kicad-automation-scripts 1.3.1 or newer is needed. -.. _fixed-28: +.. _fixed-29: Fixed ~~~~~ @@ -2264,7 +2272,7 @@ Added [0.2.2] - 2020-04-20 -------------------- -.. _fixed-29: +.. _fixed-30: Fixed ~~~~~ @@ -2277,7 +2285,7 @@ Fixed [0.2.1] - 2020-04-18 -------------------- -.. _fixed-30: +.. _fixed-31: Fixed ~~~~~ @@ -2308,7 +2316,7 @@ Added - Progress information - –version option -.. _fixed-31: +.. _fixed-32: Fixed ~~~~~ diff --git a/kibot/out_blender_export.py b/kibot/out_blender_export.py index 80268a552..04a1f0682 100644 --- a/kibot/out_blender_export.py +++ b/kibot/out_blender_export.py @@ -422,7 +422,7 @@ def get_targets(self, out_dir): order += 1 return files - def create_vrml(self, dest_dir): + def create_vrml(self, dest_dir, outputs): tree = {'name': '_temporal_vrml_for_pcb3d', 'type': 'vrml', 'comment': 'Internally created for the PCB3D', @@ -437,8 +437,10 @@ def create_vrml(self, dest_dir): out.options.copy_options(self.pcb3d) logger.debug(' - Creating VRML ...') out.options.run(os.path.join(dest_dir, 'pcb.wrl')) + RegOutput.add_output(out) + outputs.append(out) - def create_layers(self, dest_dir): + def create_layers(self, dest_dir, outputs): out_dir = os.path.join(dest_dir, 'layers') tree = {'name': '_temporal_svgs_layers', 'type': 'svg', @@ -452,9 +454,11 @@ def create_layers(self, dest_dir): 'layers': ['F.Cu', 'B.Cu', 'F.Paste', 'B.Paste', 'F.Mask', 'B.Mask', {'layer': 'F.SilkS', 'suffix': 'F_SilkS'}, {'layer': 'B.SilkS', 'suffix': 'B_SilkS'}]} - configure_and_run(tree, out_dir, ' - Creating SVG for layers ...') + out = configure_and_run(tree, out_dir, ' - Creating SVG for layers ...') + RegOutput.add_output(out) + outputs.append(out) - def create_pads(self, dest_dir): + def create_pads(self, dest_dir, outputs): options = {'stackup_create': False} if self.pcb3d.version == '2.1_haschtl': options['stackup_create'] = True @@ -473,38 +477,27 @@ def create_pads(self, dest_dir): if not self.pcb3d._show_all_components: sc = 'none' if not self.pcb3d.show_components else self.pcb3d._show_components_raw tree['options']['show_components'] = sc - configure_and_run(tree, dest_dir, ' - Creating Pads and boundary ...') + out = configure_and_run(tree, dest_dir, ' - Creating Pads and boundary ...') + RegOutput.add_output(out) + outputs.append(out) - def create_pcb3d(self, data_dir): + def create_pcb3d(self, data_dir, outputs): out_dir = self._parent.output_dir # Compute the name for the PCB3D out_name = self.pcb3d.get_output_name(out_dir) + files = [{'from_output': o.name, 'from_output_dir': True, 'dest': 'layers' if o.type == 'svg' else ''} + for o in outputs] tree = {'name': '_temporal_compress_pcb3d', 'type': 'compress', 'comment': 'Internally created for the PCB3D', 'dir': out_dir, 'options': {'output': out_name, 'format': 'ZIP', - 'files': [{'source': os.path.join(data_dir, 'boards'), - 'dest': '/'}, - {'source': os.path.join(data_dir, 'boards/*'), - 'dest': 'boards'}, - {'source': os.path.join(data_dir, 'components'), - 'dest': '/'}, - {'source': os.path.join(data_dir, 'components/*'), - 'dest': 'components'}, - {'source': os.path.join(data_dir, 'layers'), - 'dest': '/'}, - {'source': os.path.join(data_dir, 'layers/*'), - 'dest': 'layers'}, - {'source': os.path.join(data_dir, 'pads'), - 'dest': '/'}, - {'source': os.path.join(data_dir, 'pads/*'), - 'dest': 'pads'}, - {'source': os.path.join(data_dir, 'pcb.wrl'), - 'dest': '/'}, - ]}} + 'files': files}} configure_and_run(tree, out_dir, ' - Creating the PCB3D ...') + # Remove the temporal outputs + for o in outputs: + RegOutput.remove_output(o) return out_name def solve_pcb3d(self): @@ -523,14 +516,15 @@ def solve_pcb3d(self): else: # We create it with TemporaryDirectory() as tmp_dir: + outputs = [] # VRML - self.create_vrml(tmp_dir) + self.create_vrml(tmp_dir, outputs) # SVG layers - self.create_layers(tmp_dir) + self.create_layers(tmp_dir, outputs) # Pads and bounds - self.create_pads(tmp_dir) + self.create_pads(tmp_dir, outputs) # Compress the files - pcb3d_file = self.create_pcb3d(tmp_dir) + pcb3d_file = self.create_pcb3d(tmp_dir, outputs) self._pcb3d = self.pcb3d # Needed by ensure tool self.type = self._parent.type From b4683ac9b4adbe6aca361372c264b7aa1ea4dc6e Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 24 Sep 2024 08:54:09 -0300 Subject: [PATCH 59/81] [Var Rename][Fixed] Flipped components replacement We need to flip every single element, not just the layer for the footprint. Fixes #664 --- CHANGELOG.md | 2 + docs/source/Changelog.rst | 2 + kibot/kicad/pcb.py | 26 +- .../kicad_8/var_rename_footprint.kicad_pcb | 239 +++++++++++++++++- ...ename_footprint-assembly_page_02_(DEV).png | Bin 0 -> 30919 bytes ...name_footprint-assembly_page_02_(PROD).png | Bin 0 -> 31362 bytes tests/test_plot/test_print_pcb.py | 4 + .../var_rename_footprint.kibot.yaml | 3 + 8 files changed, 267 insertions(+), 9 deletions(-) create mode 100644 tests/reference/8_0_0/var_rename_footprint-assembly_page_02_(DEV).png create mode 100644 tests/reference/8_0_0/var_rename_footprint-assembly_page_02_(PROD).png diff --git a/CHANGELOG.md b/CHANGELOG.md index a2b324f7e..7249225c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Blender Export: stacked boards when using an automatically generated PCB3D. +- Footprint variant: flipped components didn't get flipped after replacement + (#664) ## [1.8.0] - 2024-09-17 diff --git a/docs/source/Changelog.rst b/docs/source/Changelog.rst index de5082cbc..e9153624a 100644 --- a/docs/source/Changelog.rst +++ b/docs/source/Changelog.rst @@ -26,6 +26,8 @@ Fixed - Blender Export: stacked boards when using an automatically generated PCB3D. +- Footprint variant: flipped components didn’t get flipped after + replacement (#664) [1.8.0] - 2024-09-17 -------------------- diff --git a/kibot/kicad/pcb.py b/kibot/kicad/pcb.py index 678a6ef72..7b6d1f80c 100644 --- a/kibot/kicad/pcb.py +++ b/kibot/kicad/pcb.py @@ -10,7 +10,7 @@ import os from .config import KiConf from ..error import KiPlotConfigurationError -from ..misc import W_NOLIB +from ..misc import W_NOLIB, W_MISSFPINFO from ..gs import GS from .sexpdata import load, dumps, SExpData, sexp_iter, Symbol from .sexp_helpers import _check_relaxed, _get_symbol_name, make_separated, load_sexp_file @@ -106,6 +106,19 @@ def keep_attr(names, sexp): return not isinstance(sexp, list) or len(sexp) < 2 or not isinstance(sexp[0], Symbol) or sexp[0].value() in names +def flip_sexp(sexp): + if not isinstance(sexp, list) or len(sexp) < 2 or not isinstance(sexp[0], Symbol): + return + if sexp[0].value().startswith('layer'): # layer/layers + for n in range(1, len(sexp)): + side = sexp[n][0] + if side in 'BF': + sexp[n] = ('B' if side == 'F' else 'F') + sexp[n][1:] + else: + for s in sexp[1:]: + flip_sexp(s) + + def update_footprint(ref, name, s, aliases, logger): """ Change footprint 'ref' using 'name' lib footprint """ logger.debug(f'Replacing {ref} using {name}') @@ -128,6 +141,17 @@ def update_footprint(ref, name, s, aliases, logger): keep = list(filter(lambda s: keep_attr(attrs, s), s)) # Get the other attributes from the lib version from_lib = list(filter(lambda s: not keep_attr(attrs, s), c[0])) + # Check if the component is flipped + try: + lib_side = next(filter(lambda s: isinstance(s, list) and s[0].value() == "layer", c[0]))[1] + cur_side = next(filter(lambda s: isinstance(s, list) and s[0].value() == "layer", keep))[1] + if cur_side != lib_side: + # Flipped, flip every layer reference + logger.debug('- Flipping {ref}') + for sexp in from_lib: + flip_sexp(sexp) + except StopIteration: + logger.warning(W_MISSFPINFO+f'Missing footprint layer {ref}') # Replace the footprint using the combination s[:] = keep+from_lib return True diff --git a/tests/board_samples/kicad_8/var_rename_footprint.kicad_pcb b/tests/board_samples/kicad_8/var_rename_footprint.kicad_pcb index f6e300f86..8b93ff867 100644 --- a/tests/board_samples/kicad_8/var_rename_footprint.kicad_pcb +++ b/tests/board_samples/kicad_8/var_rename_footprint.kicad_pcb @@ -112,37 +112,37 @@ ) (property "Footprint" "" (at 0 0 0) - (unlocked yes) (layer "F.Fab") (hide yes) - (uuid "0128bc0b-9e11-4552-bdd0-cbc977292627") + (uuid "5a1261a6-cab3-4922-a14e-dc6da2e0a485") (effects (font (size 1.27 1.27) + (thickness 0.15) ) ) ) (property "Datasheet" "" (at 0 0 0) - (unlocked yes) (layer "F.Fab") (hide yes) - (uuid "3d9a8a80-f4bf-474b-8d70-6310f1c3e409") + (uuid "3b488677-9db1-4651-b680-ecf8b8704b62") (effects (font (size 1.27 1.27) + (thickness 0.15) ) ) ) (property "Description" "Resistor" (at 0 0 0) - (unlocked yes) (layer "F.Fab") (hide yes) - (uuid "5c285d88-41b5-451e-9068-f5a7ace47a6a") + (uuid "f6f519a6-be4a-4599-a175-fa1af9b0e817") (effects (font (size 1.27 1.27) + (thickness 0.15) ) ) ) @@ -150,7 +150,7 @@ (at 0 0 0) (layer "F.Fab") (hide yes) - (uuid "e10ca47b-acb4-4e3f-a497-5facd89f7e8f") + (uuid "28eeb17e-09a0-44cd-87f4-45c0440e5d2c") (effects (font (size 1 1) @@ -302,4 +302,227 @@ ) ) ) -) \ No newline at end of file + (footprint "Resistor_SMD:R_0805_2012Metric" + (layer "B.Cu") + (uuid "57ceb2c9-d3ab-478b-8546-62441801dffe") + (at 144 62 180) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor") + (property "Reference" "R2" + (at 0 1.65 0) + (layer "B.SilkS") + (uuid "e16c1dbd-a495-4830-817c-2725759cd066") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "R" + (at 0 -1.65 0) + (layer "B.Fab") + (uuid "1e984d2b-26fb-4a47-b4b6-4533053e573b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "5a1261a6-cab3-4922-a14e-dc6da2e0a485") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "3b488677-9db1-4651-b680-ecf8b8704b62") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Resistor" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "f6f519a6-be4a-4599-a175-fa1af9b0e817") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "v1:Footprint" "Diode_SMD:D_0805_2012Metric" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "28eeb17e-09a0-44cd-87f4-45c0440e5d2c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (attr smd) + (fp_line + (start 0.227064 0.735) + (end -0.227064 0.735) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "82858dae-0e65-4e68-a3a0-04ee4a0ab930") + ) + (fp_line + (start 0.227064 -0.735) + (end -0.227064 -0.735) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "7ef1df46-3e92-4d49-b01d-b1cdb049315a") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "84b09293-30de-423c-819e-c7c254c4156a") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "94754e01-7cec-4b74-aca5-e338a3ed877c") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "05da5ea3-e945-49e2-8ab5-35146bd9c378") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "280fd937-3800-4cc5-9aa5-6107c441bfc2") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "fa55ef71-2ee6-4394-aa01-55de0e8d980c") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "23a01054-2767-4e72-9b8f-33505873c7b7") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "bb958ece-c122-42c2-bb04-aad8f3bee870") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "5b7991fe-3c2c-435b-ae35-95a8d61f8af3") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "1a74e2d1-fa42-49a9-b737-189e2bdef060") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -0.9125 0 180) + (size 1.025 1.4) + (layers "B.Cu" "B.Paste" "B.Mask") + (roundrect_rratio 0.243902) + (pintype "passive") + (uuid "8c84639c-e573-49b5-8364-8334090cc784") + ) + (pad "2" smd roundrect + (at 0.9125 0 180) + (size 1.025 1.4) + (layers "B.Cu" "B.Paste" "B.Mask") + (roundrect_rratio 0.243902) + (pintype "passive") + (uuid "f1305a5b-58a2-44f4-b15a-473343d432c4") + ) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) +) diff --git a/tests/reference/8_0_0/var_rename_footprint-assembly_page_02_(DEV).png b/tests/reference/8_0_0/var_rename_footprint-assembly_page_02_(DEV).png new file mode 100644 index 0000000000000000000000000000000000000000..61d75c89175932d2af22a18c1c0e93a6ed4054a7 GIT binary patch literal 30919 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
uw@%^DtCIS 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 Y$SHuom17D%;9AHvJ>$zoI(HxbA9>(jLI3~& literal 0 HcmV?d00001 diff --git a/tests/reference/8_0_0/var_rename_footprint-assembly_page_02_(PROD).png b/tests/reference/8_0_0/var_rename_footprint-assembly_page_02_(PROD).png new file mode 100644 index 0000000000000000000000000000000000000000..4a396508a22a3c98267512fce23a3ebbc24bc0bb GIT binary patch literal 31362 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 literal 0 HcmV?d00001 diff --git a/tests/test_plot/test_print_pcb.py b/tests/test_plot/test_print_pcb.py index 76081dfc0..209f06dc2 100644 --- a/tests/test_plot/test_print_pcb.py +++ b/tests/test_plot/test_print_pcb.py @@ -177,8 +177,12 @@ def test_var_rename_footprint_1(test_dir): ctx = context.TestContext(test_dir, prj, prj, 'PNG') ctx.run(extra=['-g', 'variant=production']) ctx.compare_image(prj+'-assembly_page_01_(PROD).png', tol=DIFF_TOL, sub=True) + if context.ki8(): + ctx.compare_image(prj+'-assembly_page_02_(PROD).png', tol=DIFF_TOL, sub=True) ctx.run(extra=['-g', 'variant=development']) ctx.compare_image(prj+'-assembly_page_01_(DEV).png', tol=DIFF_TOL, sub=True) + if context.ki8(): + ctx.compare_image(prj+'-assembly_page_02_(DEV).png', tol=DIFF_TOL, sub=True) ctx.clean_up() diff --git a/tests/yaml_samples/var_rename_footprint.kibot.yaml b/tests/yaml_samples/var_rename_footprint.kibot.yaml index 198bbe480..ac624db43 100644 --- a/tests/yaml_samples/var_rename_footprint.kibot.yaml +++ b/tests/yaml_samples/var_rename_footprint.kibot.yaml @@ -47,3 +47,6 @@ outputs: - layers: - layer: F.Cu - layer: F.SilkS + - layers: + - layer: B.Cu + - layer: B.SilkS From 2cc7fc94642d51e39e44739f049601acdf33c083 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 24 Sep 2024 09:10:48 -0300 Subject: [PATCH 60/81] [PCB Print][Fixed] errors when printing a fully empty layer --- CHANGELOG.md | 1 + docs/source/Changelog.rst | 1 + kibot/out_pcb_print.py | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7249225c2..e1133ded3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Blender Export: stacked boards when using an automatically generated PCB3D. - Footprint variant: flipped components didn't get flipped after replacement (#664) +- PCB print: errors when printing a fully empty layer ## [1.8.0] - 2024-09-17 diff --git a/docs/source/Changelog.rst b/docs/source/Changelog.rst index e9153624a..d3e380f89 100644 --- a/docs/source/Changelog.rst +++ b/docs/source/Changelog.rst @@ -28,6 +28,7 @@ Fixed PCB3D. - Footprint variant: flipped components didn’t get flipped after replacement (#664) +- PCB print: errors when printing a fully empty layer [1.8.0] - 2024-09-17 -------------------- diff --git a/kibot/out_pcb_print.py b/kibot/out_pcb_print.py index 271805a73..52812a8c9 100644 --- a/kibot/out_pcb_print.py +++ b/kibot/out_pcb_print.py @@ -1025,8 +1025,8 @@ def set_scaling(self, po, scaling): bbox = GS.board.GetBoundingBox() # KiCad 7 workaround, doing GS.board.GetBoundingBox().GetSize() fails sz = bbox.GetSize() - scale_x = FromMM(self.paper_w-self.autoscale_margin_x*2)/sz.x - scale_y = FromMM(self.paper_h-self.autoscale_margin_y*2)/sz.y + scale_x = FromMM(self.paper_w-self.autoscale_margin_x*2)/sz.x if sz.x else 1 + scale_y = FromMM(self.paper_h-self.autoscale_margin_y*2)/sz.y if sz.y else 1 scale = min(scale_x, scale_y) po.SetScale(scale) logger.debug('- Autoscale: {}'.format(scale)) From 8228bdd8cbe019b3b0ca6dbcdc3a5d92972e9b23 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 24 Sep 2024 09:23:06 -0300 Subject: [PATCH 61/81] [Var Rename][Fixed] PCB name not always restored Made the drill generation fail Fixes #663 --- CHANGELOG.md | 5 +++-- docs/source/Changelog.rst | 7 +++++-- kibot/kicad/pcb.py | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e1133ded3..754867163 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,8 +11,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Blender Export: stacked boards when using an automatically generated PCB3D. -- Footprint variant: flipped components didn't get flipped after replacement - (#664) +- Footprint variant (created by Var Replace filter): + - Flipped components didn't get flipped after replacement (#664) + - Problems generating drill outputs (#663) - PCB print: errors when printing a fully empty layer diff --git a/docs/source/Changelog.rst b/docs/source/Changelog.rst index d3e380f89..479e1caa6 100644 --- a/docs/source/Changelog.rst +++ b/docs/source/Changelog.rst @@ -26,8 +26,11 @@ Fixed - Blender Export: stacked boards when using an automatically generated PCB3D. -- Footprint variant: flipped components didn’t get flipped after - replacement (#664) +- Footprint variant (created by Var Replace filter): + + - Flipped components didn’t get flipped after replacement (#664) + - Problems generating drill outputs (#663) + - PCB print: errors when printing a fully empty layer [1.8.0] - 2024-09-17 diff --git a/kibot/kicad/pcb.py b/kibot/kicad/pcb.py index 7b6d1f80c..dc3136f31 100644 --- a/kibot/kicad/pcb.py +++ b/kibot/kicad/pcb.py @@ -99,7 +99,8 @@ def save_pcb_from_sexp(pcb, logger, replace_pcb=True): logger.debug('- Replacing the old PCB') GS.save_pcb() # After saving the file the name isn't changed, we must force it!!! - GS.board.SetFileName(GS.pcb_file) + # Keep the original name, not the temporal one + GS.board.SetFileName(GS.pcb_file) def keep_attr(names, sexp): From 54897305763a224cac2c5f3172a9d65fff7e95b7 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Wed, 25 Sep 2024 07:01:13 -0300 Subject: [PATCH 62/81] [Blender Export][Fixed] Point of view When using the human names instead of the axis names. --- CHANGELOG.md | 4 +++- docs/source/Changelog.rst | 8 ++++++-- kibot/blender_scripts/blender_export.py | 12 ++++++------ kibot/out_blender_export.py | 4 ++-- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 754867163..edfc2780d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Experimental GUI ### Fixed -- Blender Export: stacked boards when using an automatically generated PCB3D. +- Blender Export: + - Stacked boards when using an automatically generated PCB3D. + - Point of view when using the human names instead of the axis names. - Footprint variant (created by Var Replace filter): - Flipped components didn't get flipped after replacement (#664) - Problems generating drill outputs (#663) diff --git a/docs/source/Changelog.rst b/docs/source/Changelog.rst index 479e1caa6..cd786664c 100644 --- a/docs/source/Changelog.rst +++ b/docs/source/Changelog.rst @@ -24,8 +24,12 @@ Added Fixed ~~~~~ -- Blender Export: stacked boards when using an automatically generated - PCB3D. +- Blender Export: + + - Stacked boards when using an automatically generated PCB3D. + - Point of view when using the human names instead of the axis + names. + - Footprint variant (created by Var Replace filter): - Flipped components didn’t get flipped after replacement (#664) diff --git a/kibot/blender_scripts/blender_export.py b/kibot/blender_scripts/blender_export.py index c46f9deea..64f1a5186 100644 --- a/kibot/blender_scripts/blender_export.py +++ b/kibot/blender_scripts/blender_export.py @@ -81,17 +81,17 @@ def do_rotate(rots): def do_point_of_view(scene, name): view = scene.get(name) - if view is None or view == 'z': + if view is None or view == 'z' or view == 'top': return (0, 0, 0) - if view == 'Z': + if view == 'Z' or view == 'bottom': return (0, 180, 0) - if view == 'y': + if view == 'y' or view == 'front': return (-90, 0, 0) - if view == 'Y': + if view == 'Y' or view == 'rear': return (90, 0, 180) - if view == 'x': + if view == 'x' or view == 'right': return (0, 90, 90) - if view == 'X': + if view == 'X' or view == 'left': return (0, -90, -90) print(f'Unknown view `{view}`') return (0, 0, 0) diff --git a/kibot/out_blender_export.py b/kibot/out_blender_export.py index 04a1f0682..9509233fa 100644 --- a/kibot/out_blender_export.py +++ b/kibot/out_blender_export.py @@ -589,12 +589,12 @@ def run(self, output): povs.append({'rotate_x': -last_pov.rotate_x, 'rotate_y': -last_pov.rotate_y, 'rotate_z': -last_pov.rotate_z, - 'view': pov.view}) + 'view': pov._view}) else: povs.append({'rotate_x': -pov.rotate_x, 'rotate_y': -pov.rotate_y, 'rotate_z': -pov.rotate_z, - 'view': pov.view}) + 'view': pov._view}) last_pov = pov scene['point_of_view'] = povs text = json.dumps(scene, sort_keys=True, indent=2) From 09fa19471c65049a3a13f5f66a1f9fdb0f9e0d53 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Wed, 25 Sep 2024 08:03:52 -0300 Subject: [PATCH 63/81] [CI/CD][Release] Changes to avoid deprecation warnings --- .github/workflows/release.yml | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8dc8439ea..5eb858814 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -28,17 +28,17 @@ jobs: echo $StatusCode if [[ "$StatusCode" == 200 ]]; then echo "This is tagged release!" - echo "::set-output name=is_tag::no" + echo "IS_TAG=no" >> $GITHUB_OUTPUT else echo "This is a tag not release!" - echo "::set-output name=is_tag::yes" + echo "IS_TAG=yes" >> $GITHUB_OUTPUT fi build: runs-on: ubuntu-latest container: setsoft/kicad_pybuild:latest needs: check - if: ${{ needs.check.outputs.is_tag == 'yes' }} + if: ${{ needs.check.outputs.IS_TAG == 'yes' }} outputs: deb_name: ${{ steps.mdeb.outputs.deb_name }} @@ -51,7 +51,7 @@ jobs: run: | make deb mv ../*.deb . - echo "::set-output name=deb_name::"`ls *.deb` + echo "DEB_NAME="`ls *.deb` >> $GITHUB_OUTPUT mkdir output mv *.deb output @@ -82,15 +82,16 @@ jobs: CHANGELOG_FILE: "CHANGELOG.md" with: args: | - package/${{needs.build.outputs.deb_name}} + package/${{needs.build.outputs.DEB_NAME}} - - name: Trigger kicad_auto image build - run: | - curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k5"}' - curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k6"}' - curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k7"}' - curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k8"}' - curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k5"}' - curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k6"}' - curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k7"}' - curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k8"}' +# Temporarily disabled while testing the new GITHUB_OUTPUT mechanism and download-artifact@v4 +# - name: Trigger kicad_auto image build +# run: | +# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k5"}' +# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k6"}' +# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k7"}' +# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k8"}' +# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k5"}' +# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k6"}' +# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k7"}' +# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k8"}' From 143d5179e7bc37059b625421f6c1f59090e331fa Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Wed, 25 Sep 2024 08:19:17 -0300 Subject: [PATCH 64/81] [DOCs][Changelog] Adjusted to master branch --- CHANGELOG.md | 3 -- docs/source/Changelog.rst | 65 +++++++++++++++++---------------------- 2 files changed, 29 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index edfc2780d..ba1591735 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [1.8.1] - UNRELEASED -### Added -- Experimental GUI - ### Fixed - Blender Export: - Stacked boards when using an automatically generated PCB3D. diff --git a/docs/source/Changelog.rst b/docs/source/Changelog.rst index cd786664c..28a2bf06d 100644 --- a/docs/source/Changelog.rst +++ b/docs/source/Changelog.rst @@ -16,11 +16,6 @@ Versioning `__. [1.8.1] - UNRELEASED -------------------- -Added -~~~~~ - -- Experimental GUI - Fixed ~~~~~ @@ -40,8 +35,6 @@ Fixed [1.8.0] - 2024-09-17 -------------------- -.. _added-1: - Added ~~~~~ @@ -187,7 +180,7 @@ Changed: [1.7.0] - 2024-04-23 -------------------- -.. _added-2: +.. _added-1: Added ~~~~~ @@ -292,7 +285,7 @@ Changed [1.6.5] - 2024-03-31 -------------------- -.. _added-3: +.. _added-2: Added ~~~~~ @@ -352,7 +345,7 @@ Fixed [1.6.4] - 2024-02-02 -------------------- -.. _added-4: +.. _added-3: Added ~~~~~ @@ -633,7 +626,7 @@ Fixed [1.6.3] - 2023-06-26 -------------------- -.. _added-5: +.. _added-4: Added ~~~~~ @@ -803,7 +796,7 @@ Fixed [1.6.2] - 2023-04-24 -------------------- -.. _added-6: +.. _added-5: Added ~~~~~ @@ -921,7 +914,7 @@ Changed: [1.6.1] - 2023-03-16 -------------------- -.. _added-7: +.. _added-6: Added ~~~~~ @@ -970,7 +963,7 @@ Fixed [1.6.0] - 2023-02-06 -------------------- -.. _added-8: +.. _added-7: Added ~~~~~ @@ -1101,7 +1094,7 @@ Fixed [1.5.0] - 2022-12-16 -------------------- -.. _added-9: +.. _added-8: Added ~~~~~ @@ -1215,7 +1208,7 @@ Fixed [1.4.0] - 2022-10-12 -------------------- -.. _added-10: +.. _added-9: Added ~~~~~ @@ -1333,7 +1326,7 @@ Changed [1.3.0] - 2022-09-08 -------------------- -.. _added-11: +.. _added-10: Added ~~~~~ @@ -1433,7 +1426,7 @@ Changed [1.2.0] - 2022-06-15 -------------------- -.. _added-12: +.. _added-11: Added ~~~~~ @@ -1492,7 +1485,7 @@ Changed [1.1.0] - 2022-05-24 -------------------- -.. _added-13: +.. _added-12: Added ~~~~~ @@ -1523,7 +1516,7 @@ Fixed [1.0.0] - 2022-05-10 -------------------- -.. _added-14: +.. _added-13: Added ~~~~~ @@ -1701,7 +1694,7 @@ Fixed [0.11.0] - 2021-04-25 --------------------- -.. _added-15: +.. _added-14: Added ~~~~~ @@ -1757,7 +1750,7 @@ Fixed [0.10.1] - 2021-02-22 --------------------- -.. _added-16: +.. _added-15: Added ~~~~~ @@ -1806,7 +1799,7 @@ Fixed [0.10.0] - 2021-02-12 --------------------- -.. _added-17: +.. _added-16: Added ~~~~~ @@ -1869,7 +1862,7 @@ Fixed [0.9.0] - 2021-01-04 -------------------- -.. _added-18: +.. _added-17: Added ~~~~~ @@ -1907,7 +1900,7 @@ Fixed [0.8.1] - 2020-12-09 -------------------- -.. _added-19: +.. _added-18: Added ~~~~~ @@ -1928,7 +1921,7 @@ Fixed [0.8.0] - 2020-11-06 -------------------- -.. _added-20: +.. _added-19: Added ~~~~~ @@ -1959,7 +1952,7 @@ Fixed [0.7.0] - 2020-09-11 -------------------- -.. _added-21: +.. _added-20: Added ~~~~~ @@ -2023,7 +2016,7 @@ Fixed [0.6.1] - 2020-08-20 -------------------- -.. _added-22: +.. _added-21: Added ~~~~~ @@ -2050,7 +2043,7 @@ Fixed [0.6.0] - 2020-08-18 -------------------- -.. _added-23: +.. _added-22: Added ~~~~~ @@ -2118,7 +2111,7 @@ Changed - Now we test the PCB and/or SCH only when we are doing something that needs them. -.. _added-24: +.. _added-23: Added ~~~~~ @@ -2187,7 +2180,7 @@ Fixed [0.4.0] - 2020-06-17 -------------------- -.. _added-25: +.. _added-24: Added ~~~~~ @@ -2200,7 +2193,7 @@ Added [0.3.0] - 2020-06-14 -------------------- -.. _added-26: +.. _added-25: Added ~~~~~ @@ -2229,7 +2222,7 @@ Fixed [0.2.5] - 2020-06-11 -------------------- -.. _added-27: +.. _added-26: Added ~~~~~ @@ -2270,7 +2263,7 @@ Fixed [0.2.3] - 2020-04-23 -------------------- -.. _added-28: +.. _added-27: Added ~~~~~ @@ -2308,7 +2301,7 @@ Fixed [0.2.0] - 2020-03-28 -------------------- -.. _added-29: +.. _added-28: Added ~~~~~ @@ -2338,7 +2331,7 @@ Fixed [0.1.1] - 2020-03-13 -------------------- -.. _added-30: +.. _added-29: Added ~~~~~ From ec5956c32d3a0dc47a1d8442c2049edb733a4080 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Wed, 25 Sep 2024 09:00:12 -0300 Subject: [PATCH 65/81] [DOCs] Updated version info for release --- CHANGELOG.md | 2 +- debian/changelog | 15 +++++-- docs/source/Changelog.rst | 78 +++++++++++++++++---------------- tools/release_helper_version.py | 2 +- 4 files changed, 53 insertions(+), 44 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba1591735..4202fd112 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [1.8.1] - UNRELEASED +## [1.8.1] - 2024-09-25 ### Fixed - Blender Export: - Stacked boards when using an automatically generated PCB3D. diff --git a/debian/changelog b/debian/changelog index e2bd8ac73..bfc3f349a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,15 @@ -kibot (1.8.1-1) UNRELEASED; urgency=medium +kibot (1.8.1-1) stable; urgency=medium - * Next release + * Bug fix release + * Blender Export: + - Stacked boards when using an automatically generated PCB3D. + - Point of view when using the human names instead of the axis names. + * Footprint variant (created by Var Replace filter): + - Flipped components didn't get flipped after replacement + - Problems generating drill outputs + * PCB print: errors when printing a fully empty layer - -- Salvador Eduardo Tropea Wed, 18 Sep 2024 09:21:46 -0300 + -- Salvador E. Tropea Wed, 25 Sep 2024 08:58:13 -0300 kibot (1.8.0-1) stable; urgency=medium @@ -85,7 +92,7 @@ kibot (1.8.0-1) stable; urgency=medium - Spec to Field: some simple defaults for the specs (voltage, current, power and tolerance) - -- Salvador Eduardo Tropea Tue, 17 Sep 2024 10:09:33 -0300 + -- Salvador E. Tropea Tue, 17 Sep 2024 10:09:33 -0300 kibot (1.7.0-1) stable; urgency=medium diff --git a/docs/source/Changelog.rst b/docs/source/Changelog.rst index 28a2bf06d..6e33691b9 100644 --- a/docs/source/Changelog.rst +++ b/docs/source/Changelog.rst @@ -13,7 +13,7 @@ Changelog `__, and this project adheres to `Semantic Versioning `__. -[1.8.1] - UNRELEASED +[1.8.1] - 2024-09-25 -------------------- Fixed @@ -32,6 +32,8 @@ Fixed - PCB print: errors when printing a fully empty layer +.. _section-1: + [1.8.0] - 2024-09-17 -------------------- @@ -175,7 +177,7 @@ Changed: - Spec to Field: some simple defaults for the specs (voltage, current, power and tolerance) -.. _section-1: +.. _section-2: [1.7.0] - 2024-04-23 -------------------- @@ -280,7 +282,7 @@ Changed - PcbDraw: Now handles panelized boards much faster. Previous code was really slow for panels and the time increased exponentially. -.. _section-2: +.. _section-3: [1.6.5] - 2024-03-31 -------------------- @@ -340,7 +342,7 @@ Fixed (#589) - Panelize: not able to use external JSON configs (#592) -.. _section-3: +.. _section-4: [1.6.4] - 2024-02-02 -------------------- @@ -621,7 +623,7 @@ Fixed - Problems when creating a colored resistor, but we didn’t have a cache yet (i.e. no model downloaded) #553 -.. _section-4: +.. _section-5: [1.6.3] - 2023-06-26 -------------------- @@ -791,7 +793,7 @@ Fixed - KiCad user template directory autodetection for KiCad 7+ -.. _section-5: +.. _section-6: [1.6.2] - 2023-04-24 -------------------- @@ -909,7 +911,7 @@ Changed: - Some R, L and C values that were rejected are accepted now. You just get a warning about what part of the value was discarded. -.. _section-6: +.. _section-7: [1.6.1] - 2023-03-16 -------------------- @@ -958,7 +960,7 @@ Fixed conditions were met. - PCB Print: KiCad crashing on some complex filled zones (#396) -.. _section-7: +.. _section-8: [1.6.0] - 2023-02-06 -------------------- @@ -1077,7 +1079,7 @@ Added ~/.cache/kibot/3d You can change the directory using KIBOT_3D_MODELS - License is now AGPL v3, since we are incorporating AGPL code. -.. _section-8: +.. _section-9: [1.5.1] - 2022-12-16 -------------------- @@ -1089,7 +1091,7 @@ Fixed - System level resources look-up -.. _section-9: +.. _section-10: [1.5.0] - 2022-12-16 -------------------- @@ -1203,7 +1205,7 @@ Fixed - Makefile: outputs marked as not run by default were listed in the ``all`` target. -.. _section-10: +.. _section-11: [1.4.0] - 2022-10-12 -------------------- @@ -1321,7 +1323,7 @@ Changed - When importing globals now options that are lists or dicts are merged, not just replaced. (#291) -.. _section-11: +.. _section-12: [1.3.0] - 2022-09-08 -------------------- @@ -1421,7 +1423,7 @@ Changed - Fails to expand KiCad vars are reported once (not every time) - No more warnings about missing 3D models when we can download them -.. _section-12: +.. _section-13: [1.2.0] - 2022-06-15 -------------------- @@ -1480,7 +1482,7 @@ Changed - ``navigate_results`` and ``compress`` outputs are created after others -.. _section-13: +.. _section-14: [1.1.0] - 2022-05-24 -------------------- @@ -1511,7 +1513,7 @@ Fixed - KiCost+Internal variants: problem with ``variant`` field capitalization -.. _section-14: +.. _section-15: [1.0.0] - 2022-05-10 -------------------- @@ -1689,7 +1691,7 @@ Fixed (not imported from KiCad 5) - Problems when using page layout files with relative paths. (#174) -.. _section-15: +.. _section-16: [0.11.0] - 2021-04-25 --------------------- @@ -1745,7 +1747,7 @@ Fixed - The “References” (plural) column is now coloured as “Reference” (singular) -.. _section-16: +.. _section-17: [0.10.1] - 2021-02-22 --------------------- @@ -1758,7 +1760,7 @@ Added - GitLab CI workaround - Verbosity level is now passed to KiAuto -.. _section-17: +.. _section-18: [0.10.0-4] - 2021-02-16 ----------------------- @@ -1770,7 +1772,7 @@ Fixed - Problem using Python 3.6 (ZipFile’s compresslevel arg needs 3.7) -.. _section-18: +.. _section-19: [0.10.0-3] - 2021-02-16 ----------------------- @@ -1782,7 +1784,7 @@ Fixed - Problem using Python 3.6 (StreamHandler.setStream introduced in 3.7) -.. _section-19: +.. _section-20: [0.10.0-2] - 2021-02-12 ----------------------- @@ -1794,7 +1796,7 @@ Fixed - Missing python3-distutils dependency on Debian package. -.. _section-20: +.. _section-21: [0.10.0] - 2021-02-12 --------------------- @@ -1857,7 +1859,7 @@ Fixed (i.e. UTF-8). - Problems when using components with more than 10 subparts. -.. _section-21: +.. _section-22: [0.9.0] - 2021-01-04 -------------------- @@ -1895,7 +1897,7 @@ Fixed - Generic filter ``include_only`` option worked only when debug enabled. -.. _section-22: +.. _section-23: [0.8.1] - 2020-12-09 -------------------- @@ -1916,7 +1918,7 @@ Fixed - Internal BoM separator wasn’t applied when using ``use_alt`` - Problems loading plug-ins when using ``pip``. -.. _section-23: +.. _section-24: [0.8.0] - 2020-11-06 -------------------- @@ -1947,7 +1949,7 @@ Fixed - Excellon drill output when using unified output and not using default KiCad names. -.. _section-24: +.. _section-25: [0.7.0] - 2020-09-11 -------------------- @@ -1985,7 +1987,7 @@ Fixed - Virtual components are always excluded from position files. Note you can change it using the variants mechanism. -.. _section-25: +.. _section-26: [0.6.2] - 2020-08-25 -------------------- @@ -2011,7 +2013,7 @@ Fixed - Problems with PcbDraw when generating PNG and JPG outputs. Now we use a more reliable conversion method when available. -.. _section-26: +.. _section-27: [0.6.1] - 2020-08-20 -------------------- @@ -2038,7 +2040,7 @@ Fixed - Problems when using ``pip install`` without –no-compile. At least for user level install. -.. _section-27: +.. _section-28: [0.6.0] - 2020-08-18 -------------------- @@ -2090,7 +2092,7 @@ Changed - pdf_sch_print: adds -schematic - IBoM: contains the project name. -.. _section-28: +.. _section-29: [0.5.0] - 2020-07-11 -------------------- @@ -2175,7 +2177,7 @@ Fixed - ‘ignore_unconnected’ preflight wasn’t working. - The report of hwo many ERC/DRC errors we found. -.. _section-29: +.. _section-30: [0.4.0] - 2020-06-17 -------------------- @@ -2188,7 +2190,7 @@ Added - STEP 3D model generation - Support for unpatched InteractiveHtmlBom -.. _section-30: +.. _section-31: [0.3.0] - 2020-06-14 -------------------- @@ -2217,7 +2219,7 @@ Fixed - Error codes that overlapped. -.. _section-31: +.. _section-32: [0.2.5] - 2020-06-11 -------------------- @@ -2238,7 +2240,7 @@ Fixed - All pcbnew plot formats generated gerber job files - Most formats that needed layers didn’t complain when omitted -.. _section-32: +.. _section-33: [0.2.4] - 2020-05-19 -------------------- @@ -2258,7 +2260,7 @@ Fixed - Problems for kibom and print_sch outputs when the PCB name included a path. -.. _section-33: +.. _section-34: [0.2.3] - 2020-04-23 -------------------- @@ -2270,7 +2272,7 @@ Added - List available targets -.. _section-34: +.. _section-35: [0.2.2] - 2020-04-20 -------------------- @@ -2283,7 +2285,7 @@ Fixed - KiBoM temporal files, now removed - preflight tasks that didn’t honor –out-dir -.. _section-35: +.. _section-36: [0.2.1] - 2020-04-18 -------------------- @@ -2296,7 +2298,7 @@ Fixed - Problem when the excellon drill target directory didn’t exist (now created) -.. _section-36: +.. _section-37: [0.2.0] - 2020-03-28 -------------------- @@ -2326,7 +2328,7 @@ Fixed - Debian dependencies -.. _section-37: +.. _section-38: [0.1.1] - 2020-03-13 -------------------- diff --git a/tools/release_helper_version.py b/tools/release_helper_version.py index b3aaaddeb..ffac15965 100755 --- a/tools/release_helper_version.py +++ b/tools/release_helper_version.py @@ -1,5 +1,5 @@ #!/usr/bin/python3 -VERSION = "1.8.0" +VERSION = "1.8.1" DRY = False from datetime import datetime From 55599f6c8587873e6e895d809a7986e93f7b96a1 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Wed, 25 Sep 2024 09:34:18 -0300 Subject: [PATCH 66/81] [CI/CD][Release][Added] Debug information The workflow is currently broken, fails to upload the .deb package All seems to be ok, most probably some incompatibility with the new artifacts-download (which is really incompatible) --- .github/workflows/release.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5eb858814..a4ef120bc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,7 +24,7 @@ jobs: run: | REF=${{ github.ref }} URL="https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/${REF##*/}" - StatusCode=$(curl -o -I -L -s -w "%{http_code}" -X GET -G $URL) + StatusCode=$(curl -o discard -I -L -s -w "%{http_code}" -X GET -G $URL) echo $StatusCode if [[ "$StatusCode" == 200 ]]; then echo "This is tagged release!" @@ -73,6 +73,11 @@ jobs: with: name: package + - name: Debug + run: | + ls -la + ls -la package + - name: Release uses: docker://antonyurchenko/git-release:latest env: From c495efb1c834585840a8df8785a5fee7188168ab Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Fri, 27 Sep 2024 07:58:10 -0300 Subject: [PATCH 67/81] [CI/CD][Changed] DEB_NAME to uppercase Doesn't seem to be needed, but adds coherence --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a4ef120bc..4236d6277 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,7 +40,7 @@ jobs: needs: check if: ${{ needs.check.outputs.IS_TAG == 'yes' }} outputs: - deb_name: ${{ steps.mdeb.outputs.deb_name }} + DEB_NAME: ${{ steps.mdeb.outputs.DEB_NAME }} steps: - name: Checkout From b4aac13386da5957cd64b5f01385219034705068 Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Fri, 4 Oct 2024 22:41:21 -0600 Subject: [PATCH 68/81] [SVG Export][Added] Flag for using aux origin * Add the same flag from the PDF export for using the aux origin for the export. --- kibot/out_svg.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kibot/out_svg.py b/kibot/out_svg.py index 4e8958fb9..1b8df8ec9 100644 --- a/kibot/out_svg.py +++ b/kibot/out_svg.py @@ -33,6 +33,8 @@ def __init__(self): """ [0,6] Scale factor used to represent 1 mm in the SVG (KiCad 6). The value is how much zeros has the multiplier (1 mm = 10 power `svg_precision` units). Note that for an A4 paper Firefox 91 and Chrome 105 can't handle more than 5 """ + self.use_aux_axis_as_origin = False + """ Use the auxiliary axis as origin for coordinates """ self.limit_viewbox = False """ When enabled the view box is limited to a selected area. This option can't be enabled when using a scale """ @@ -54,6 +56,7 @@ def _configure_plot_ctrl(self, po, output_dir): po.SetMirror(self.mirror_plot) if GS.ki5: po.SetLineWidth(FromMM(self.line_width)) + po.SetUseAuxOrigin(self.use_aux_axis_as_origin) po.SetNegative(self.negative_plot) GS.SetSvgPrecision(po, self.svg_precision) @@ -61,6 +64,7 @@ def read_vals_from_po(self, po): super().read_vals_from_po(po) if GS.ki5: self.line_width = ToMM(po.GetLineWidth()) + self.use_aux_axis_as_origin = po.GetUseAuxOrigin() self.negative_plot = po.GetNegative() self.mirror_plot = po.GetMirror() From 3e879e03f7dfe6e52c8119c856d2e5dab8ea7a1b Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 28 Oct 2024 10:19:03 -0300 Subject: [PATCH 69/81] [Debian][Changelog][Fixed] Indentation --- debian/changelog | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/debian/changelog b/debian/changelog index a69d22ca3..ac5ef6374 100644 --- a/debian/changelog +++ b/debian/changelog @@ -23,16 +23,16 @@ kibot (1.8.2-1) stable; urgency=medium single layer (even technical ones) - When trying to force a WKS and the project didn't define a WKS. The "gui" strategy failed to use the specified WKS - * Fixed on Draw stackup: - - Segmentation Fault on KiCad 8 when creating a new group - - Units not applied when creating a new group - * Fixed in the expansion of internal field names. KiCad expands "VALUE", - not "Value" - * Changed in Quick Start's Diff/KiRi: Avoid creating when we don't have at - least 2 to compare - * Changed PCB Print: Avoid `colored_pads` and `colored_vias` side effects - * Changed in BoM: Avoid leaking DIGIKEY_CLIENT_ID and DIGIKEY_CLIENT_SECRET - in logs + * Fixed on Draw stackup: + - Segmentation Fault on KiCad 8 when creating a new group + - Units not applied when creating a new group + * Fixed in the expansion of internal field names. KiCad expands "VALUE", + not "Value" + * Changed in Quick Start's Diff/KiRi: Avoid creating when we don't have at + least 2 to compare + * Changed PCB Print: Avoid `colored_pads` and `colored_vias` side effects + * Changed in BoM: Avoid leaking DIGIKEY_CLIENT_ID and DIGIKEY_CLIENT_SECRET + in logs -- Salvador Eduardo Tropea Mon, 28 Oct 2024 09:42:20 -0300 From 1dfb71bd9e76c7c2444ffc23c78b671d37bde0f0 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Mon, 28 Oct 2024 10:19:28 -0300 Subject: [PATCH 70/81] [CI/CD] Adapted release workflow to the incompatible v4 artifacts --- .github/workflows/release.yml | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0568a499c..c25efdbd7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -73,11 +73,6 @@ jobs: with: name: package - - name: Debug - run: | - ls -la - ls -la ${{needs.build.outputs.DEB_NAME}} - - name: Release uses: docker://antonyurchenko/git-release:latest env: @@ -87,16 +82,15 @@ jobs: CHANGELOG_FILE: "CHANGELOG.md" with: args: | - package/${{needs.build.outputs.DEB_NAME}} + ${{needs.build.outputs.DEB_NAME}} -# Temporarily disabled while testing the new GITHUB_OUTPUT mechanism and download-artifact@v4 -# - name: Trigger kicad_auto image build -# run: | -# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k5"}' -# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k6"}' -# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k7"}' -# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k8"}' -# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k5"}' -# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k6"}' -# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k7"}' -# curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k8"}' + - name: Trigger kicad_auto image build + run: | + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k5"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k6"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k7"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto/dispatches --data '{"event_type": "build_k8"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k5"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k6"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k7"}' + curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.v3+json" -H "Content-Type: application/json" https://api.github.com/repos/INTI-CMNB/kicad_auto_test/dispatches --data '{"event_type": "build_k8"}' From 360eb646da0908ada58f766998f1fd94fdb4b809 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 29 Oct 2024 09:50:04 -0300 Subject: [PATCH 71/81] [Debian][Fixed] Missing tools in resources --- debian/install | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/debian/install b/debian/install index eb880ba35..2d723132e 100644 --- a/debian/install +++ b/debian/install @@ -1,9 +1,22 @@ -kibot/resources/config_templates/ /usr/share/kibot/ -kibot/resources/images/ /usr/share/kibot/ -kibot/resources/kicad_colors/ /usr/share/kibot/ -kibot/resources/kicad_layouts/ /usr/share/kibot/ -kibot/resources/pcbdraw/ /usr/share/kibot/ -kibot/resources/report_templates/ /usr/share/kibot/ -kibot/resources/parsers/ /usr/share/kibot/ -kibot/resources/kiri/ /usr/share/kibot/ -kibot/resources/kicanvas/ /usr/share/kibot/ +kibot/resources/config_templates/*.yaml /usr/share/kibot/config_templates/ +kibot/resources/images/*.ico /usr/share/kibot/images/ +kibot/resources/images/*.png /usr/share/kibot/images/ +kibot/resources/images/*.svg /usr/share/kibot/images/ +kibot/resources/kicad_colors/*.json /usr/share/kibot/kicad_colors/ +kibot/resources/kicad_layouts/*.kicad_wks /usr/share/kibot/kicad_layouts/ +kibot/resources/kicanvas/*.svg /usr/share/kibot/kicanvas/ +kibot/resources/kiri/*.css /usr/share/kibot/kiri/ +kibot/resources/kiri/*.html /usr/share/kibot/kiri/ +kibot/resources/kiri/*.js /usr/share/kibot/kiri/ +kibot/resources/kiri/kiri-server /usr/share/kibot/kiri/ +kibot/resources/kiri/*.svg /usr/share/kibot/kiri/ +kibot/resources/kiri/images/*.svg /usr/share/kibot/kiri/images/ +kibot/resources/kiri/utils/*.css /usr/share/kibot/kiri/utils/ +kibot/resources/kiri/utils/*.js /usr/share/kibot/kiri/utils/ +kibot/resources/parsers/*.lark /usr/share/kibot/parsers/ +kibot/resources/pcbdraw/styles/*.json /usr/share/kibot/pcbdraw/styles/ +kibot/resources/pcbdraw/templates/*.handlebars /usr/share/kibot/pcbdraw/templates/ +kibot/resources/pcbdraw/footprints/ /usr/share/kibot/pcbdraw/ +kibot/resources/pcbdraw/present/ /usr/share/kibot/pcbdraw/ +kibot/resources/report_templates/*.txt /usr/share/kibot/report_templates/ +kibot/resources/tools/* /usr/share/kibot/tools/ From 66d08e0c2227b084eb7e7e636706697ae75fb77c Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 29 Oct 2024 09:58:02 -0300 Subject: [PATCH 72/81] [Distribution] Also include the KiRi favicon --- MANIFEST.in | 1 + debian/install | 1 + 2 files changed, 2 insertions(+) diff --git a/MANIFEST.in b/MANIFEST.in index e7e3fe98c..df73b2b05 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -14,6 +14,7 @@ include kibot/resources/kiri/*.js include kibot/resources/kiri/kiri-server include kibot/resources/kiri/*.svg include kibot/resources/kiri/images/*.svg +include kibot/resources/kiri/images/*.png include kibot/resources/kiri/utils/*.css include kibot/resources/kiri/utils/*.js include kibot/resources/parsers/*.lark diff --git a/debian/install b/debian/install index 2d723132e..ce856027b 100644 --- a/debian/install +++ b/debian/install @@ -11,6 +11,7 @@ kibot/resources/kiri/*.js /usr/share/kibot/kiri/ kibot/resources/kiri/kiri-server /usr/share/kibot/kiri/ kibot/resources/kiri/*.svg /usr/share/kibot/kiri/ kibot/resources/kiri/images/*.svg /usr/share/kibot/kiri/images/ +kibot/resources/kiri/images/*.png /usr/share/kibot/kiri/images/ kibot/resources/kiri/utils/*.css /usr/share/kibot/kiri/utils/ kibot/resources/kiri/utils/*.js /usr/share/kibot/kiri/utils/ kibot/resources/parsers/*.lark /usr/share/kibot/parsers/ From a236ba1dbf45eeeaa95fe76754bb4a84f86c523c Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 29 Oct 2024 10:00:29 -0300 Subject: [PATCH 73/81] [Debian] Bumped version to 1.8.2-2 --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index ac5ef6374..7c0045ad8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +kibot (1.8.2-2) stable; urgency=medium + + * Included missing tool resource + + -- Salvador Eduardo Tropea Tue, 29 Oct 2024 09:51:18 -0300 + kibot (1.8.2-1) stable; urgency=medium * Added experimental GUI From dbf47a6ee3f6aa26fdf8de05634b4b504bf09dcc Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 29 Oct 2024 10:54:35 -0300 Subject: [PATCH 74/81] [DOCs][Fixed] 1.8.1 docker images tag names --- docs/source/usage_with_ci_cd.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/usage_with_ci_cd.rst b/docs/source/usage_with_ci_cd.rst index adaef21f7..860f09a9b 100644 --- a/docs/source/usage_with_ci_cd.rst +++ b/docs/source/usage_with_ci_cd.rst @@ -84,10 +84,10 @@ ghcr.io/inti-cmnb/kicad5_auto_full:dev git code 5.1.9 ghcr.io/inti-cmnb/kicad6_auto_full:dev git code 6.0.11 ghcr.io/inti-cmnb/kicad7_auto_full:dev git code 7.0.11 ghcr.io/inti-cmnb/kicad8_auto_full:dev git code 8.x -ghcr.io/inti-cmnb/kicad5_auto_full:1.7.0 1.8.1 5.1.9 -ghcr.io/inti-cmnb/kicad6_auto_full:1.7.0 1.8.1 6.0.11 -ghcr.io/inti-cmnb/kicad7_auto_full:1.7.0 1.8.1 7.0.11 -ghcr.io/inti-cmnb/kicad8_auto_full:1.7.0 1.8.1 8.0.5 +ghcr.io/inti-cmnb/kicad5_auto_full:1.8.1 1.8.1 5.1.9 +ghcr.io/inti-cmnb/kicad6_auto_full:1.8.1 1.8.1 6.0.11 +ghcr.io/inti-cmnb/kicad7_auto_full:1.8.1 1.8.1 7.0.11 +ghcr.io/inti-cmnb/kicad8_auto_full:1.8.1 1.8.1 8.0.5 ghcr.io/inti-cmnb/kicad5_auto_full:1.7.0 1.7.0 5.1.9 ghcr.io/inti-cmnb/kicad6_auto_full:1.7.0 1.7.0 6.0.11 ghcr.io/inti-cmnb/kicad7_auto_full:1.7.0 1.7.0 7.0.11 From b21238eaf4be91db47227486566e3945e251d923 Mon Sep 17 00:00:00 2001 From: Jasper Smit Date: Thu, 28 Nov 2024 09:47:05 +0100 Subject: [PATCH 75/81] Config: Panelize: Add missing fiducials plugin options Adds `code` and `arg` options to support plugin type for fiducials in panelization. --- docs/samples/generic_plot.kibot.yaml | 4 +++ .../outputs/PanelizeFiducials.rst | 2 ++ kibot/out_panelize.py | 4 +++ tests/GUI/outputs | 14 ++++++++++ tests/GUI/stats | 26 +++++++++---------- 5 files changed, 37 insertions(+), 13 deletions(-) diff --git a/docs/samples/generic_plot.kibot.yaml b/docs/samples/generic_plot.kibot.yaml index 470774ac3..bc95b48c1 100644 --- a/docs/samples/generic_plot.kibot.yaml +++ b/docs/samples/generic_plot.kibot.yaml @@ -2085,6 +2085,10 @@ outputs: extends: '' # [dict=null] Used to add fiducial marks to the (rail/frame of) the panel fiducials: + # [string=''] Argument to pass to the plugin. Used for *plugin* + arg: '' + # [string=''] Plugin specification (PACKAGE.FUNCTION or PYTHON_FILE.FUNCTION). Used for *plugin* + code: '' # `copper_size` is an alias for `coppersize` # [number|string=1] Diameter of the copper spot coppersize: 1 diff --git a/docs/source/configuration/outputs/PanelizeFiducials.rst b/docs/source/configuration/outputs/PanelizeFiducials.rst index 53d5547c8..889cdd8a2 100644 --- a/docs/source/configuration/outputs/PanelizeFiducials.rst +++ b/docs/source/configuration/outputs/PanelizeFiducials.rst @@ -5,6 +5,8 @@ PanelizeFiducials parameters ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - **type** :index:`: ` '' +- ``arg`` :index:`: ` [:ref:`string `] (default: ``''``) Argument to pass to the plugin. Used for *plugin*. +- ``code`` :index:`: ` [:ref:`string `] (default: ``''``) Plugin specification (PACKAGE.FUNCTION or PYTHON_FILE.FUNCTION). Used for *plugin*. - *copper_size* :index:`: ` Alias for coppersize. - ``coppersize`` :index:`: ` [:ref:`number ` | :ref:`string `] (default: ``1``) Diameter of the copper spot. - ``hoffset`` :index:`: ` [:ref:`number ` | :ref:`string `] (default: ``0``) Horizontal offset from panel edges. diff --git a/kibot/out_panelize.py b/kibot/out_panelize.py index e4ba58d34..5fb2855aa 100644 --- a/kibot/out_panelize.py +++ b/kibot/out_panelize.py @@ -385,6 +385,10 @@ def __init__(self): """ [number|string=1] Diameter of the solder mask opening """ self.paste = False """ Include the fiducials in the paste layer (therefore they appear on the stencil) """ + self.code = '' + """ Plugin specification (PACKAGE.FUNCTION or PYTHON_FILE.FUNCTION). Used for *plugin* """ + self.arg = '' + """ Argument to pass to the plugin. Used for *plugin* """ super().__init__() def config(self, parent): diff --git a/tests/GUI/outputs b/tests/GUI/outputs index e2dfe50cd..b97f7795a 100644 --- a/tests/GUI/outputs +++ b/tests/GUI/outputs @@ -7021,6 +7021,20 @@ "DataTypeBoolean" ], null + ], + [ + "code", + [ + "DataTypeString" + ], + null + ], + [ + "arg", + [ + "DataTypeString" + ], + null ] ] ], diff --git a/tests/GUI/stats b/tests/GUI/stats index 5174265be..c042443bc 100644 --- a/tests/GUI/stats +++ b/tests/GUI/stats @@ -1,8 +1,8 @@ -48 outputs types with a total of 1874 different parameters -Single type parameters: 1700 (91 %) +48 outputs types with a total of 1876 different parameters +Single type parameters: 1702 (91 %) Multi type parameters: 174 (9 %) Average parameters: 39 -Maximum number of parameters: 214 +Maximum number of parameters: 216 Minimum number of parameters: 14 Histogram: 0- 9: @@ -75,7 +75,7 @@ Outputs sorted by parameters: - blender_export: 75 - pcb_print: 89 - bom: 145 -- panelize: 214 +- panelize: 216 Average depth: 2.5416666666666665 Maximum depth: 5 Minimum depth: 2 @@ -137,7 +137,7 @@ Outputs sorted by depth: - bom: 5 -------------------------------------------------------------------------------- 14 different data types -- String: 843 +- String: 845 - Boolean: 469 - Number: 266 - ListStringSingular: 222 @@ -153,7 +153,7 @@ Outputs sorted by depth: - NumberChoice: 1 -------------------------------------------------------------------------------- Used as single data type: -- String: 689 +- String: 691 - Boolean: 413 - ListStringSingular: 219 - Number: 172 @@ -390,11 +390,11 @@ Used as single data type: - Number,String: 15 ================================================================================ ================================================================================ -86 totals types with a total of 2242 different parameters -Single type parameters: 2044 (91 %) +86 totals types with a total of 2244 different parameters +Single type parameters: 2046 (91 %) Multi type parameters: 198 (9 %) Average parameters: 26 -Maximum number of parameters: 214 +Maximum number of parameters: 216 Minimum number of parameters: 1 Histogram: 0- 9: *********************** @@ -505,7 +505,7 @@ Totals sorted by parameters: - blender_export: 75 - pcb_print: 89 - bom: 145 -- panelize: 214 +- panelize: 216 Average depth: 2.186046511627907 Maximum depth: 5 Minimum depth: 1 @@ -605,7 +605,7 @@ Totals sorted by depth: - bom: 5 -------------------------------------------------------------------------------- 14 different data types -- String: 994 +- String: 996 - Boolean: 567 - Number: 314 - ListStringSingular: 251 @@ -621,7 +621,7 @@ Totals sorted by depth: - NumberChoice: 1 -------------------------------------------------------------------------------- Used as single data type: -- String: 824 +- String: 826 - Boolean: 503 - ListStringSingular: 248 - Number: 205 @@ -648,4 +648,4 @@ Used as single data type: - Dict,Number: 2 ['pcbdraw.options.margin', 'svg.options.margin'] - Boolean,Choice: 1 ['ibom.options.highlight_pin1'] - String,StringDict: 1 ['pcbdraw.options.remap'] -Found 2 unique warning/s (3 total) +Found 3 unique warning/s (4 total) From 634b8ad900931669e2f50cb90973836b6be6cd84 Mon Sep 17 00:00:00 2001 From: Toon Van Eyck Date: Mon, 30 Dec 2024 00:10:40 +0100 Subject: [PATCH 76/81] Use Kicad major version for 3dparty path --- kibot/kicad/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kibot/kicad/config.py b/kibot/kicad/config.py index 8722d0b21..f6191a93c 100644 --- a/kibot/kicad/config.py +++ b/kibot/kicad/config.py @@ -319,7 +319,7 @@ def guess_3rd_dir(): home = os.environ.get('HOME') if home is None: return None - return os.path.join(home, '.local', 'share', 'kicad', '6.0', '3rdparty') + return os.path.join(home, '.local', 'share', 'kicad', str(GS.kicad_version_major)+'.0', '3rdparty') def load_ki5_env(cfg): """ Environment vars from KiCad 5 configuration """ From b553649b8d850563ea982db05a9cfb715b869af0 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Thu, 27 Mar 2025 12:57:48 -0300 Subject: [PATCH 77/81] [DOCs][Added] KiCad 9 docker tags --- docs/source/usage_with_ci_cd.rst | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/source/usage_with_ci_cd.rst b/docs/source/usage_with_ci_cd.rst index 8f9a841d3..5f661163b 100644 --- a/docs/source/usage_with_ci_cd.rst +++ b/docs/source/usage_with_ci_cd.rst @@ -75,15 +75,18 @@ Name KiBot KiCad ghcr.io/inti-cmnb/kicad5_auto_full:latest last release 5.1.9 ghcr.io/inti-cmnb/kicad6_auto_full:latest last release 6.0.11 ghcr.io/inti-cmnb/kicad7_auto_full:latest last release 7.0.11 -ghcr.io/inti-cmnb/kicad8_auto_full:latest last release 8.x +ghcr.io/inti-cmnb/kicad8_auto_full:latest last release 8.0.8 +ghcr.io/inti-cmnb/kicad9_auto_full:latest last release 9.x ghcr.io/inti-cmnb/kicad5_auto:latest last release 5.1.9 ghcr.io/inti-cmnb/kicad6_auto:latest last release 6.0.11 ghcr.io/inti-cmnb/kicad7_auto:latest last release 7.0.11 -ghcr.io/inti-cmnb/kicad8_auto:latest last release 8.x +ghcr.io/inti-cmnb/kicad8_auto:latest last release 8.0.8 +ghcr.io/inti-cmnb/kicad9_auto:latest last release 9.x ghcr.io/inti-cmnb/kicad5_auto_full:dev git code 5.1.9 ghcr.io/inti-cmnb/kicad6_auto_full:dev git code 6.0.11 ghcr.io/inti-cmnb/kicad7_auto_full:dev git code 7.0.11 -ghcr.io/inti-cmnb/kicad8_auto_full:dev git code 8.x +ghcr.io/inti-cmnb/kicad8_auto_full:dev git code 8.0.8 +ghcr.io/inti-cmnb/kicad9_auto_full:dev git code 9.x ghcr.io/inti-cmnb/kicad5_auto_full:1.8.2 1.8.2 5.1.9 ghcr.io/inti-cmnb/kicad6_auto_full:1.8.2 1.8.2 6.0.11 ghcr.io/inti-cmnb/kicad7_auto_full:1.8.2 1.8.2 7.0.11 @@ -287,11 +290,13 @@ v2_k8_1_8_2 2 1.8.2 8.0.8 v2 2 last release 5.1.9 v2_k6 2 last release 6.0.11 v2_k7 2 last release 7.0.11 -v2_k8 2 last release 8.x +v2_k8 2 last release 8.0.8 +v2_k9 2 last release 9.x v2_d 2 git code 5.1.9 v2_dk6 2 git code 6.0.11 v2_dk7 2 git code 7.0.11 -v2_dk8 2 git code 8.x +v2_dk8 2 git code 8.0.8 +v2_dk9 2 git code 9.x =========== === ============ ======= The main differences between API 1 and 2 are: From ad50432f27f5607a07505d27303fd162deb515d4 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Thu, 8 May 2025 10:30:21 -0300 Subject: [PATCH 78/81] [Tests][Added] KiCad 9 + g3 individual test --- .github/workflows/pythonapp_test.yml | 95 ++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 .github/workflows/pythonapp_test.yml diff --git a/.github/workflows/pythonapp_test.yml b/.github/workflows/pythonapp_test.yml new file mode 100644 index 000000000..fe8f166b8 --- /dev/null +++ b/.github/workflows/pythonapp_test.yml @@ -0,0 +1,95 @@ +# This workflow will install Python dependencies, run tests and lint with a single version of Python +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: Regression tests + +on: + push: + paths: + - '**.py' + - 'g*.sh' + - 'src/kibot' + - 'tests/**' + - '.github/workflows/pythonapp.yml' + - 'tools/dev_image/Dockerfile' + - 'tools/dev_image_k6/Dockerfile' + pull_request: + paths: + - '**.py' + - 'g*.sh' + - 'src/kibot' + - 'tests/**' + - '.github/workflows/pythonapp.yml' + - 'tools/dev_image/Dockerfile' + - 'tools/dev_image_k6/Dockerfile' + repository_dispatch: + types: [run_tests] + workflow_dispatch: + +jobs: + test: + strategy: + fail-fast: false + matrix: + ki_release: [ki9] + w_tests: [g3] + + runs-on: ubuntu-latest + container: ghcr.io/inti-cmnb/kicad_auto_test:${{ matrix.ki_release }} + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Test ${{ matrix.ki_release }} + env: + KI_RELEASE: ${{ matrix.ki_release }} + PIP_OPS: ${{ matrix.ki_release != 'ki5' && '--break-system-packages' || ''}} + run: | + rm -rf output + rm -f tests/.local + ##### Experimental stuff: + ## Remove KiAuto + #dpkg --remove --force-all kiauto + ## Install KiAuto@master + #curl https://codeload.github.com/INTI-CMNB/KiAuto/zip/refs/heads/master --output pp.zip + #unzip pp.zip + #pip3 install ${PIP_OPS} KiAuto-master/ + ## Clean the downloaded stuff + #rm -rf KiAuto-master/ pp.zip + ## Install KiDiff@master + #curl https://codeload.github.com/INTI-CMNB/KiDiff/zip/refs/heads/master --output pp.zip + #unzip pp.zip + #pip3 install ${PIP_OPS} KiDiff-master/ + ## Clean the downloaded stuff + #rm -rf KiDiff-master/ pp.zip + ## Check what we got + #echo $PATH + #ls -la /usr/bin/*_do || true + #ls -la /usr/local/bin/*_do || true + #which pcbnew_do + #pcbnew_do --version + # KiDiff tests + #curl https://codeload.github.com/INTI-CMNB/KiDiff/zip/refs/heads/kiri_mode --output pp.zip + #unzip pp.zip + #prefix=/usr make -C KiDiff-kiri_mode install + #rm -rf KiDiff-kiri_mode/ pp.zip + #kicad-diff.py --version + ##### End Experimental stuff + # Ensure we start a fresh coverage meassurement + python3-coverage erase + # Create the caches with macros + python3-coverage run src/kibot --help-outputs > /dev/null + # Individual run for specific tests + # pytest --log-cli-level debug -k "test_ibom_parse_fail" --test_dir=output + # Run the 90% faster tests (under 3 s) together + # Do it in parallel + ./${{ matrix.w_tests }}.sh + - name: Store results + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: Test_Output_${{ matrix.ki_release }}_${{ matrix.w_tests }} + # Important! empty directories are skipped!!!! + path: output + include-hidden-files: true From 7362376188c458db5d38f5bee256d4cd52ee16b8 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Thu, 29 May 2025 10:42:48 -0300 Subject: [PATCH 79/81] Create FUNDING.yml --- .github/FUNDING.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..5aa2b74c3 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,15 @@ +# These are supported funding model platforms + +#github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +#patreon: # Replace with a single Patreon username +#open_collective: # Replace with a single Open Collective username +#ko_fi: # Replace with a single Ko-fi username +#tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +#community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +#liberapay: # Replace with a single Liberapay username +#issuehunt: # Replace with a single IssueHunt username +#lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +#polar: # Replace with a single Polar username +#buy_me_a_coffee: # Replace with a single Buy Me a Coffee username +#thanks_dev: # Replace with a single thanks.dev username +custom: ['https://www.paypal.com/donate/?hosted_button_id=K2T86GDTTMRPL'] From 367a2e04122aa46413a30e61cb213bfe7223c8c8 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Wed, 26 Nov 2025 13:39:21 -0300 Subject: [PATCH 80/81] [DOCs] Updated tags No more KiCad 5 releases --- docs/source/usage_with_ci_cd.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/source/usage_with_ci_cd.rst b/docs/source/usage_with_ci_cd.rst index 42c623e09..ee0a6ef9d 100644 --- a/docs/source/usage_with_ci_cd.rst +++ b/docs/source/usage_with_ci_cd.rst @@ -87,6 +87,10 @@ ghcr.io/inti-cmnb/kicad6_auto_full:dev git code 6.0.11 ghcr.io/inti-cmnb/kicad7_auto_full:dev git code 7.0.11 ghcr.io/inti-cmnb/kicad8_auto_full:dev git code 8.0.8 ghcr.io/inti-cmnb/kicad9_auto_full:dev git code 9.x +ghcr.io/inti-cmnb/kicad6_auto_full:1.8.4 1.8.4 6.0.11 +ghcr.io/inti-cmnb/kicad7_auto_full:1.8.4 1.8.4 7.0.11 +ghcr.io/inti-cmnb/kicad8_auto_full:1.8.4 1.8.4 8.0.8 +ghcr.io/inti-cmnb/kicad9_auto_full:1.8.4 1.8.4 9.0.1 ghcr.io/inti-cmnb/kicad5_auto_full:1.8.3 1.8.3 5.1.9 ghcr.io/inti-cmnb/kicad6_auto_full:1.8.3 1.8.3 6.0.11 ghcr.io/inti-cmnb/kicad7_auto_full:1.8.3 1.8.3 7.0.11 @@ -297,7 +301,6 @@ v2_k6_1_8_3 2 1.8.3 6.0.11 v2_k7_1_8_3 2 1.8.3 7.0.11 v2_k8_1_8_3 2 1.8.3 8.0.8 v2_k9_1_8_3 2 1.8.3 9.0.0 -v2_1_8_4 2 1.8.4 5.1.9 v2_k6_1_8_4 2 1.8.4 6.0.11 v2_k7_1_8_4 2 1.8.4 7.0.11 v2_k8_1_8_4 2 1.8.4 8.0.8 From 4a88c12c5cad289a01563c53b1b2881a30518f48 Mon Sep 17 00:00:00 2001 From: telagod Date: Tue, 9 Jun 2026 18:40:35 +0800 Subject: [PATCH 81/81] fix: set f_ref in SchematicComponentV6.set_ref() for KiCad 9 compat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SchematicComponentV6.set_ref() sets self.ref but never self.f_ref. When a KiCad 9 schematic component is missing one of the 4 basic fields (Reference/Value/Footprint/Datasheet), _solve_fields() in v5_sch.py:1073 accesses self.f_ref for the warning message, causing: AttributeError: 'SchematicComponentV6' object has no attribute 'f_ref' This crashes KiBot on virtually all KiCad 9 schematics because KiCad 9 changed how fields are stored (fewer default fields in the instance). The fix mirrors what the V5 parsing path does — f_ref is assigned during component reference resolution. Tested with KiBot 1.9.0 + KiCad 9.0.9 on a 91-component board. Before: crash on any output that loads the schematic (bom, render_3d, erc, pdf_sch_print). After: all pass (warnings about missing basic fields are expected and harmless). --- kibot/kicad/v6_sch.py | 1 + 1 file changed, 1 insertion(+) diff --git a/kibot/kicad/v6_sch.py b/kibot/kicad/v6_sch.py index 95b915e0f..4659ce91e 100644 --- a/kibot/kicad/v6_sch.py +++ b/kibot/kicad/v6_sch.py @@ -1264,6 +1264,7 @@ def __init__(self): def set_ref(self, ref): self.ref = ref + self.f_ref = ref # Separate the reference in its components self.split_ref() self.set_field('Reference', ref)