Merge branch 'dev' into kiri_integration

This commit is contained in:
Salvador E. Tropea 2023-12-06 13:40:31 -03:00
commit 889a8323f5
20 changed files with 121 additions and 31 deletions

View File

@ -8,7 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [1.6.4] - UNRELEASED
### Added
- General:
- Operations that copies the project now also copies the PRL
- Operations that copies the project now also copies the PRL and the DRU
- Command line:
- `--help-list-offsets` to list footprint offsets (JLCPCB)
- `--help-list-rotations` to list footprint rotations (JLCPCB)
@ -118,6 +118,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- When used from the preflight the name of the file changed to the name of a
temporal, generating problems with the plot outputs, like pcb_print
- Project options not preserved, i.e. set_text_variables failing
- Bottom QRs should be mirrored in the Y axis
## [1.6.3] - 2023-06-26

View File

@ -171,7 +171,7 @@
which is used by the KiBot docker images, on other OSs *your mileage may vary*.
- ``restore_project`` :index:`: <pair: global options; restore_project>` [boolean=false] Restore the KiCad project after execution.
Note that this option will undo operations like `set_text_variables`.
Starting with 1.6.4 it also restores the PRL (Project Local Settings) file.
Starting with 1.6.4 it also restores the PRL (Project Local Settings) and DRU (Design RUles) files.
- ``set_text_variables_before_output`` :index:`: <pair: global options; set_text_variables_before_output>` [boolean=false] Run the `set_text_variables` preflight before running each output that involves variants.
This can be used when a text variable uses the variant and you want to create more than
one variant in the same run. Note that this could be slow because it forces a board

View File

@ -239,7 +239,7 @@ class Globals(FiltersOptions):
self.restore_project = False
""" Restore the KiCad project after execution.
Note that this option will undo operations like `set_text_variables`.
Starting with 1.6.4 it also restores the PRL (Project Local Settings) file """
Starting with 1.6.4 it also restores the PRL (Project Local Settings) and DRU (Design RUles) files """
self.set_text_variables_before_output = False
""" Run the `set_text_variables` preflight before running each output that involves variants.
This can be used when a text variable uses the variant and you want to create more than

View File

@ -254,7 +254,12 @@ class GS(object):
if os.path.isfile(prl_name):
with open(prl_name, 'rb') as f:
prl = f.read()
return (pro, prl)
dru_name = GS.pro_file[:-3]+'dru'
dru = None
if os.path.isfile(dru_name):
with open(dru_name, 'rb') as f:
dru = f.read()
return (pro, prl, dru)
@staticmethod
def write_pro(data):
@ -262,10 +267,12 @@ class GS(object):
return
with open(GS.pro_file, 'wb') as f:
f.write(data[0])
if data[1] is None:
return
with open(GS.pro_file[:-3]+'prl', 'wb') as f:
f.write(data[1])
if data[1] is not None:
with open(GS.pro_file[:-3]+'prl', 'wb') as f:
f.write(data[1])
if data[2] is not None:
with open(GS.pro_file[:-3]+'dru', 'wb') as f:
f.write(data[2])
@staticmethod
def load_sch_title_block():
@ -480,7 +487,7 @@ class GS(object):
def copy_project(new_pcb_name, dry=False):
pro_name = GS.pro_file
if pro_name is None or not os.path.isfile(pro_name):
return None, None
return None, None, None
pro_copy = new_pcb_name.replace('.kicad_pcb', GS.pro_ext)
if not dry:
logger.debug(f'Copying project `{pro_name}` to `{pro_copy}`')
@ -493,7 +500,15 @@ class GS(object):
if not dry:
logger.debug(f'Copying project local settings `{prl_name}` to `{prl_copy}`')
copy2(prl_name, prl_copy)
return pro_copy, prl_copy
# ... and the DRU
dru_name = pro_name[:-3]+'dru'
dru_copy = None
if os.path.isfile(dru_name):
dru_copy = pro_copy[:-3]+'dru'
if not dry:
logger.debug(f'Copying project custom design rules `{dru_name}` to `{dru_copy}`')
copy2(dru_name, dru_copy)
return pro_copy, prl_copy, dru_copy
@staticmethod
def copy_project_sch(sch_dir):

View File

@ -604,7 +604,7 @@ class KiConf(object):
dest = os.path.join(dest_dir, key+'.kicad_wks')
logger.debug('Copying {} -> {}'.format(fname, dest))
copy2(fname, dest)
data[key]['page_layout_descr_file'] = dest
data[key]['page_layout_descr_file'] = key+'.kicad_wks'
return dest
else:
logger.error('Missing page layout file: '+fname)
@ -626,10 +626,10 @@ class KiConf(object):
else:
aux = data.get('schematic', None)
if aux:
layouts[0] = KiConf.expand_env(aux.get('page_layout_descr_file', None))
layouts[0] = KiConf.expand_env(aux.get('page_layout_descr_file', None), ref_dir=dest_dir)
aux = data.get('pcbnew', None)
if aux:
layouts[1] = KiConf.expand_env(aux.get('page_layout_descr_file', None))
layouts[1] = KiConf.expand_env(aux.get('page_layout_descr_file', None), ref_dir=dest_dir)
return layouts
def fix_page_layout_k5(project, dry):
@ -655,13 +655,14 @@ class KiConf(object):
layouts[is_pcb_new] = dest
else:
layouts[is_pcb_new] = fname
dest = str(order)+'.kicad_wks'
order = order+1
else:
logger.error('Missing page layout file: '+fname)
exit(MISSING_WKS)
else:
dest = ''
lns[c] = 'PageLayoutDescrFile='+dest+'\n'
lns[c] = f'PageLayoutDescrFile={dest}\n'
if not dry:
with open(project, 'wt') as f:
lns = f.writelines(lns)

View File

@ -930,7 +930,7 @@ class VariantOptions(BaseOptions):
fname = os.path.join(pcb_dir, basename+'.kicad_pcb')
logger.debug('Storing modified PCB to `{}`'.format(fname))
GS.board.Save(fname)
pro_name, _ = GS.copy_project(fname)
pro_name, _, _ = GS.copy_project(fname)
KiConf.fix_page_layout(pro_name)
return fname, pcb_dir

View File

@ -174,7 +174,8 @@ class Copy_FilesOptions(Base3DOptions):
extra_files.append(table_fname)
if dry:
for lib in libs.keys():
extra_files.append(os.path.join(out_lib_base, lib+'.kicad_sym'))
if lib != 'locally_edited':
extra_files.append(os.path.join(out_lib_base, lib+'.kicad_sym'))
else:
# Create the libs
for lib, comps in libs.items():
@ -235,13 +236,18 @@ class Copy_FilesOptions(Base3DOptions):
self.add_sch_files(extra_files, dest_dir)
elif mode_project:
self.add_sch_files(extra_files, dest_dir)
prj_name, prl_name = GS.copy_project(fname, dry)
prj_name, prl_name, dru_name = GS.copy_project(fname, dry)
# Extra files that we are generating
extra_files.append(fname)
if prj_name:
extra_files.append(prj_name)
if prl_name:
extra_files.append(prl_name)
if dru_name:
extra_files.append(dru_name)
# Worksheet
wks = GS.fix_page_layout(prj_name, dry=dry)
extra_files += [w for w in wks if w is not None]
if mode_project:
extra_files += self.copy_footprints(f.dest, dry)
extra_files += self.copy_symbols(f.dest, dry)

View File

@ -177,6 +177,7 @@ class QR_LibOptions(BaseOptions):
def qr_draw_fp(self, size, size_rect, center, qrc, negative, layer, do_sep=True):
mod = []
is_bottom = layer[0] == 'B'
for y in range(size):
for x in range(size):
if qrc.get_module(x-negative, y-negative) ^ negative:
@ -186,6 +187,9 @@ class QR_LibOptions(BaseOptions):
y_pos2 = round(y_pos+size_rect, 2)
rect = [Symbol('fp_poly')] # fp_rect not in v5
pts = [Symbol('pts')]
if is_bottom:
y_pos = -y_pos
y_pos2 = -y_pos2
pts.append([Symbol('xy'), x_pos, y_pos])
pts.append([Symbol('xy'), x_pos, y_pos2])
pts.append([Symbol('xy'), x_pos2, y_pos2])

View File

@ -23,3 +23,12 @@ RUN dpkg --remove kicost kibot && \
# unzip pp.zip && \
# pip3 install KiAuto-master/ && \
# rm -rf KiAuto-master/ pp.zip && \
ARG repo_hash
ENV KIBOT_REPO_HASH=$repo_hash
RUN kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n' > /etc/kiauto_tag && \
echo -n -${KIBOT_REPO_HASH}_k >> /etc/kiauto_tag && \
kicad_version.py >> /etc/kiauto_tag && \
echo -n _d >> /etc/kiauto_tag && \
cat /etc/debian_version | tr -d '\n' >> /etc/kiauto_tag

View File

@ -1,8 +1,8 @@
#!/bin/sh
set -e
docker build -f Dockerfile -t ghcr.io/inti-cmnb/kicad5_auto:dev .
TG1=`docker run --rm ghcr.io/inti-cmnb/kicad5_auto:dev kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n'`
HASH=`git log --pretty=format:%h -1 | tr -d '\n'`
docker build -f Dockerfile --build-arg repo_hash=${HASH} -t ghcr.io/inti-cmnb/kicad5_auto:dev .
TG1=`docker run --rm ghcr.io/inti-cmnb/kicad5_auto:dev kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n'`
TG2=k`docker run --rm ghcr.io/inti-cmnb/kicad5_auto:dev kicad_version.py`
TG3=d`docker run --rm ghcr.io/inti-cmnb/kicad5_auto:dev cat /etc/debian_version | tr -d '\n'`
docker tag ghcr.io/inti-cmnb/kicad5_auto:dev ghcr.io/inti-cmnb/kicad5_auto:dev_${TG1}-${HASH}_${TG2}_${TG3}

View File

@ -20,3 +20,15 @@ RUN dpkg --remove kicost kibot && \
# unzip pp.zip && \
# pip3 install KiAuto-master/ && \
# rm -rf KiAuto-master/ pp.zip && \
ARG repo_hash
ENV KIBOT_REPO_HASH=$repo_hash
ENV KICAD_AUTO_FULL=1
RUN kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n' > /etc/kiauto_tag && \
echo -n -${KIBOT_REPO_HASH}_k >> /etc/kiauto_tag && \
kicad_version.py >> /etc/kiauto_tag && \
echo -n _d >> /etc/kiauto_tag && \
cat /etc/debian_version | tr -d '\n' >> /etc/kiauto_tag && \
echo -n _b >> /etc/kiauto_tag && \
blender --version | head -n 1 | tr -d 'Blender ' >> /etc/kiauto_tag

View File

@ -1,8 +1,8 @@
#!/bin/sh
set -e
docker build -f Dockerfile -t ghcr.io/inti-cmnb/kicad5_auto_full:dev .
TG1=`docker run --rm ghcr.io/inti-cmnb/kicad5_auto_full:dev kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n'`
HASH=`git log --pretty=format:%h -1 | tr -d '\n'`
docker build -f Dockerfile --build-arg repo_hash=${HASH} -t ghcr.io/inti-cmnb/kicad5_auto_full:dev .
TG1=`docker run --rm ghcr.io/inti-cmnb/kicad5_auto_full:dev kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n'`
TG2=k`docker run --rm ghcr.io/inti-cmnb/kicad5_auto_full:dev kicad_version.py`
TG3=d`docker run --rm ghcr.io/inti-cmnb/kicad5_auto_full:dev cat /etc/debian_version | tr -d '\n'`
TG4=b`docker run --rm ghcr.io/inti-cmnb/kicad5_auto_full:dev /bin/bash -c "blender --version | head -n 1 | tr -d 'Blender '"`

View File

@ -22,3 +22,12 @@ RUN dpkg --remove kicost kibot && \
# unzip pp.zip && \
# pip3 install --break-system-packages KiAuto-master/ && \
# rm -rf KiAuto-master/ pp.zip && \
ARG repo_hash
ENV KIBOT_REPO_HASH=$repo_hash
RUN kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n' > /etc/kiauto_tag && \
echo -n -${KIBOT_REPO_HASH}_k >> /etc/kiauto_tag && \
kicad_version.py >> /etc/kiauto_tag && \
echo -n _d >> /etc/kiauto_tag && \
cat /etc/debian_version | tr -d '\n' >> /etc/kiauto_tag

View File

@ -1,8 +1,8 @@
#!/bin/sh
set -e
docker build -f Dockerfile -t ghcr.io/inti-cmnb/kicad6_auto:dev .
TG1=`docker run --rm ghcr.io/inti-cmnb/kicad6_auto:dev kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n'`
HASH=`git log --pretty=format:%h -1 | tr -d '\n'`
docker build -f Dockerfile --build-arg repo_hash=${HASH} -t ghcr.io/inti-cmnb/kicad6_auto:dev .
TG1=`docker run --rm ghcr.io/inti-cmnb/kicad6_auto:dev kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n'`
TG2=k`docker run --rm ghcr.io/inti-cmnb/kicad6_auto:dev kicad_version.py`
TG3=d`docker run --rm ghcr.io/inti-cmnb/kicad6_auto:dev cat /etc/debian_version | tr -d '\n'`
docker tag ghcr.io/inti-cmnb/kicad6_auto:dev ghcr.io/inti-cmnb/kicad6_auto:dev_${TG1}-${HASH}_${TG2}_${TG3}

View File

@ -20,3 +20,15 @@ RUN dpkg --remove kicost kibot && \
# unzip pp.zip && \
# pip3 install --break-system-packages KiAuto-master/ && \
# rm -rf KiAuto-master/ pp.zip && \
ARG repo_hash
ENV KIBOT_REPO_HASH=$repo_hash
ENV KICAD_AUTO_FULL=1
RUN kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n' > /etc/kiauto_tag && \
echo -n -${KIBOT_REPO_HASH}_k >> /etc/kiauto_tag && \
kicad_version.py >> /etc/kiauto_tag && \
echo -n _d >> /etc/kiauto_tag && \
cat /etc/debian_version | tr -d '\n' >> /etc/kiauto_tag && \
echo -n _b >> /etc/kiauto_tag && \
blender --version | head -n 1 | tr -d 'Blender ' >> /etc/kiauto_tag

View File

@ -1,8 +1,8 @@
#!/bin/sh
set -e
docker build -f Dockerfile -t ghcr.io/inti-cmnb/kicad6_auto_full:dev .
TG1=`docker run --rm ghcr.io/inti-cmnb/kicad6_auto_full:dev kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n'`
HASH=`git log --pretty=format:%h -1 | tr -d '\n'`
docker build -f Dockerfile --build-arg repo_hash=${HASH} -t ghcr.io/inti-cmnb/kicad6_auto_full:dev .
TG1=`docker run --rm ghcr.io/inti-cmnb/kicad6_auto_full:dev kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n'`
TG2=k`docker run --rm ghcr.io/inti-cmnb/kicad6_auto_full:dev kicad_version.py`
TG3=d`docker run --rm ghcr.io/inti-cmnb/kicad6_auto_full:dev cat /etc/debian_version | tr -d '\n'`
TG4=b`docker run --rm ghcr.io/inti-cmnb/kicad6_auto_full:dev /bin/bash -c "blender --version | head -n 1 | tr -d 'Blender '"`

View File

@ -1,6 +1,6 @@
FROM ghcr.io/inti-cmnb/kicad_auto:ki7
MAINTAINER Salvador E. Tropea <stropea@inti.gob.ar>
LABEL Description="KiCad 6 with KiBot and other automation scripts"
LABEL Description="KiCad 7 with KiBot and other automation scripts"
RUN dpkg --remove kicost kibot && \
apt-get update && \
@ -22,3 +22,12 @@ RUN dpkg --remove kicost kibot && \
# unzip pp.zip && \
# pip3 install --break-system-packages KiAuto-master/ && \
# rm -rf KiAuto-master/ pp.zip && \
ARG repo_hash
ENV KIBOT_REPO_HASH=$repo_hash
RUN kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n' > /etc/kiauto_tag && \
echo -n -${KIBOT_REPO_HASH}_k >> /etc/kiauto_tag && \
kicad_version.py >> /etc/kiauto_tag && \
echo -n _d >> /etc/kiauto_tag && \
cat /etc/debian_version | tr -d '\n' >> /etc/kiauto_tag

View File

@ -1,8 +1,8 @@
#!/bin/sh
set -e
docker build -f Dockerfile -t ghcr.io/inti-cmnb/kicad7_auto:dev .
TG1=`docker run --rm ghcr.io/inti-cmnb/kicad7_auto:dev kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n'`
HASH=`git log --pretty=format:%h -1 | tr -d '\n'`
docker build -f Dockerfile --build-arg repo_hash=${HASH} -t ghcr.io/inti-cmnb/kicad7_auto:dev .
TG1=`docker run --rm ghcr.io/inti-cmnb/kicad7_auto:dev kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n'`
TG2=k`docker run --rm ghcr.io/inti-cmnb/kicad7_auto:dev kicad_version.py`
TG3=d`docker run --rm ghcr.io/inti-cmnb/kicad7_auto:dev cat /etc/debian_version | tr -d '\n'`
docker tag ghcr.io/inti-cmnb/kicad7_auto:dev ghcr.io/inti-cmnb/kicad7_auto:dev_${TG1}-${HASH}_${TG2}_${TG3}

View File

@ -1,6 +1,6 @@
FROM ghcr.io/inti-cmnb/kicad_auto_test:ki7
MAINTAINER Salvador E. Tropea <stropea@inti.gob.ar>
LABEL Description="KiCad 6 with KiBot and other automation scripts"
LABEL Description="KiCad 7 with KiBot and other automation scripts"
RUN dpkg --remove kicost kibot && \
apt-get update && \
@ -20,3 +20,15 @@ RUN dpkg --remove kicost kibot && \
# unzip pp.zip && \
# pip3 install --break-system-packages KiAuto-master/ && \
# rm -rf KiAuto-master/ pp.zip && \
ARG repo_hash
ENV KIBOT_REPO_HASH=$repo_hash
ENV KICAD_AUTO_FULL=1
RUN kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n' > /etc/kiauto_tag && \
echo -n -${KIBOT_REPO_HASH}_k >> /etc/kiauto_tag && \
kicad_version.py >> /etc/kiauto_tag && \
echo -n _d >> /etc/kiauto_tag && \
cat /etc/debian_version | tr -d '\n' >> /etc/kiauto_tag && \
echo -n _b >> /etc/kiauto_tag && \
blender --version | head -n 1 | tr -d 'Blender ' >> /etc/kiauto_tag

View File

@ -1,8 +1,8 @@
#!/bin/sh
set -e
docker build -f Dockerfile -t ghcr.io/inti-cmnb/kicad7_auto_full:dev .
export HASH=`git log --pretty=format:%h -1 | tr -d '\n'`
docker build -f Dockerfile --build-arg repo_hash=${HASH} -t ghcr.io/inti-cmnb/kicad7_auto_full:dev .
TG1=`docker run --rm ghcr.io/inti-cmnb/kicad7_auto_full:dev kibot --version | sed 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/' | tr -d '\n'`
HASH=`git log --pretty=format:%h -1 | tr -d '\n'`
TG2=k`docker run --rm ghcr.io/inti-cmnb/kicad7_auto_full:dev kicad_version.py`
TG3=d`docker run --rm ghcr.io/inti-cmnb/kicad7_auto_full:dev cat /etc/debian_version | tr -d '\n'`
TG4=b`docker run --rm ghcr.io/inti-cmnb/kicad7_auto_full:dev /bin/bash -c "blender --version | head -n 1 | tr -d 'Blender '"`