Inital commit
This commit is contained in:
312
kibot_resources/colors/Altium_Theme.json
Normal file
312
kibot_resources/colors/Altium_Theme.json
Normal file
@@ -0,0 +1,312 @@
|
||||
{
|
||||
"3d_viewer": {
|
||||
"background_bottom": "rgb(102, 102, 128)",
|
||||
"background_top": "rgb(204, 204, 230)",
|
||||
"board": "rgba(51, 43, 23, 0.902)",
|
||||
"copper": "rgb(179, 156, 0)",
|
||||
"silkscreen_bottom": "rgb(230, 230, 230)",
|
||||
"silkscreen_top": "rgb(230, 230, 230)",
|
||||
"soldermask_bottom": "rgba(20, 51, 36, 0.831)",
|
||||
"soldermask_top": "rgba(20, 51, 36, 0.831)",
|
||||
"solderpaste": "rgb(128, 128, 128)",
|
||||
"use_board_stackup_colors": true,
|
||||
"user_1": "rgb(194, 194, 194)",
|
||||
"user_10": "rgb(89, 148, 220)",
|
||||
"user_11": "rgb(180, 219, 210)",
|
||||
"user_12": "rgb(216, 200, 82)",
|
||||
"user_13": "rgb(194, 194, 194)",
|
||||
"user_14": "rgb(89, 148, 220)",
|
||||
"user_15": "rgb(180, 219, 210)",
|
||||
"user_16": "rgb(216, 200, 82)",
|
||||
"user_17": "rgb(194, 194, 194)",
|
||||
"user_18": "rgb(89, 148, 220)",
|
||||
"user_19": "rgb(180, 219, 210)",
|
||||
"user_2": "rgb(89, 148, 220)",
|
||||
"user_20": "rgb(216, 200, 82)",
|
||||
"user_21": "rgb(194, 194, 194)",
|
||||
"user_22": "rgb(89, 148, 220)",
|
||||
"user_23": "rgb(180, 219, 210)",
|
||||
"user_24": "rgb(216, 200, 82)",
|
||||
"user_25": "rgb(194, 194, 194)",
|
||||
"user_26": "rgb(89, 148, 220)",
|
||||
"user_27": "rgb(180, 219, 210)",
|
||||
"user_28": "rgb(216, 200, 82)",
|
||||
"user_29": "rgb(194, 194, 194)",
|
||||
"user_3": "rgb(180, 219, 210)",
|
||||
"user_30": "rgb(89, 148, 220)",
|
||||
"user_31": "rgb(180, 219, 210)",
|
||||
"user_32": "rgb(216, 200, 82)",
|
||||
"user_33": "rgb(194, 194, 194)",
|
||||
"user_34": "rgb(89, 148, 220)",
|
||||
"user_35": "rgb(180, 219, 210)",
|
||||
"user_36": "rgb(216, 200, 82)",
|
||||
"user_37": "rgb(194, 194, 194)",
|
||||
"user_38": "rgb(89, 148, 220)",
|
||||
"user_39": "rgb(180, 219, 210)",
|
||||
"user_4": "rgb(216, 200, 82)",
|
||||
"user_40": "rgb(216, 200, 82)",
|
||||
"user_41": "rgb(194, 194, 194)",
|
||||
"user_42": "rgb(89, 148, 220)",
|
||||
"user_43": "rgb(180, 219, 210)",
|
||||
"user_44": "rgb(216, 200, 82)",
|
||||
"user_45": "rgb(194, 194, 194)",
|
||||
"user_5": "rgb(194, 194, 194)",
|
||||
"user_6": "rgb(89, 148, 220)",
|
||||
"user_7": "rgb(180, 219, 210)",
|
||||
"user_8": "rgb(216, 200, 82)",
|
||||
"user_9": "rgb(232, 178, 167)"
|
||||
},
|
||||
"board": {
|
||||
"anchor": "rgb(255, 38, 226)",
|
||||
"aux_items": "rgb(255, 255, 255)",
|
||||
"b_adhes": "rgb(0, 0, 132)",
|
||||
"b_crtyd": "rgb(38, 233, 255)",
|
||||
"b_fab": "rgb(88, 93, 132)",
|
||||
"b_mask": "rgba(2, 255, 238, 0.400)",
|
||||
"b_paste": "rgba(0, 194, 194, 0.902)",
|
||||
"b_silks": "rgb(232, 178, 167)",
|
||||
"background": "rgb(0, 16, 35)",
|
||||
"cmts_user": "rgb(89, 148, 220)",
|
||||
"conflicts_shadow": "rgba(255, 0, 5, 0.502)",
|
||||
"copper": {
|
||||
"b": "rgb(77, 127, 196)",
|
||||
"f": "rgb(200, 52, 52)",
|
||||
"in1": "rgb(127, 200, 127)",
|
||||
"in10": "rgb(237, 124, 51)",
|
||||
"in11": "rgb(91, 195, 235)",
|
||||
"in12": "rgb(247, 111, 142)",
|
||||
"in13": "rgb(167, 165, 198)",
|
||||
"in14": "rgb(40, 204, 217)",
|
||||
"in15": "rgb(232, 178, 167)",
|
||||
"in16": "rgb(242, 237, 161)",
|
||||
"in17": "rgb(237, 124, 51)",
|
||||
"in18": "rgb(91, 195, 235)",
|
||||
"in19": "rgb(247, 111, 142)",
|
||||
"in2": "rgb(206, 125, 44)",
|
||||
"in20": "rgb(167, 165, 198)",
|
||||
"in21": "rgb(40, 204, 217)",
|
||||
"in22": "rgb(232, 178, 167)",
|
||||
"in23": "rgb(242, 237, 161)",
|
||||
"in24": "rgb(237, 124, 51)",
|
||||
"in25": "rgb(91, 195, 235)",
|
||||
"in26": "rgb(247, 111, 142)",
|
||||
"in27": "rgb(167, 165, 198)",
|
||||
"in28": "rgb(40, 204, 217)",
|
||||
"in29": "rgb(232, 178, 167)",
|
||||
"in3": "rgb(79, 203, 203)",
|
||||
"in30": "rgb(242, 237, 161)",
|
||||
"in4": "rgb(219, 98, 139)",
|
||||
"in5": "rgb(167, 165, 198)",
|
||||
"in6": "rgb(40, 204, 217)",
|
||||
"in7": "rgb(232, 178, 167)",
|
||||
"in8": "rgb(242, 237, 161)",
|
||||
"in9": "rgb(141, 203, 129)"
|
||||
},
|
||||
"cursor": "rgb(255, 255, 255)",
|
||||
"drc_error": "rgba(215, 91, 107, 0.800)",
|
||||
"drc_exclusion": "rgba(255, 255, 255, 0.800)",
|
||||
"drc_warning": "rgba(255, 208, 66, 0.800)",
|
||||
"dwgs_user": "rgb(194, 194, 194)",
|
||||
"eco1_user": "rgb(180, 219, 210)",
|
||||
"eco2_user": "rgb(216, 200, 82)",
|
||||
"edge_cuts": "rgb(208, 210, 205)",
|
||||
"f_adhes": "rgb(132, 0, 132)",
|
||||
"f_crtyd": "rgb(255, 38, 226)",
|
||||
"f_fab": "rgb(175, 175, 175)",
|
||||
"f_mask": "rgba(216, 100, 255, 0.400)",
|
||||
"f_paste": "rgba(180, 160, 154, 0.902)",
|
||||
"f_silks": "rgb(242, 237, 161)",
|
||||
"footprint_text_invisible": "rgb(132, 132, 132)",
|
||||
"grid": "rgb(132, 132, 132)",
|
||||
"grid_axes": "rgb(194, 194, 194)",
|
||||
"locked_shadow": "rgba(255, 38, 226, 0.502)",
|
||||
"margin": "rgb(255, 38, 226)",
|
||||
"pad_net_names": "rgba(255, 255, 255, 0.902)",
|
||||
"pad_plated_hole": "rgb(194, 194, 0)",
|
||||
"pad_through_hole": "rgb(227, 183, 46)",
|
||||
"page_limits": "rgb(132, 132, 132)",
|
||||
"plated_hole": "rgb(26, 196, 210)",
|
||||
"ratsnest": "rgba(0, 248, 255, 0.349)",
|
||||
"track_net_names": "rgba(255, 255, 255, 0.702)",
|
||||
"user_1": "rgb(194, 194, 194)",
|
||||
"user_10": "rgb(89, 148, 220)",
|
||||
"user_11": "rgb(180, 219, 210)",
|
||||
"user_12": "rgb(216, 200, 82)",
|
||||
"user_13": "rgb(194, 194, 194)",
|
||||
"user_14": "rgb(89, 148, 220)",
|
||||
"user_15": "rgb(180, 219, 210)",
|
||||
"user_16": "rgb(216, 200, 82)",
|
||||
"user_17": "rgb(194, 194, 194)",
|
||||
"user_18": "rgb(89, 148, 220)",
|
||||
"user_19": "rgb(180, 219, 210)",
|
||||
"user_2": "rgb(89, 148, 220)",
|
||||
"user_20": "rgb(216, 200, 82)",
|
||||
"user_21": "rgb(194, 194, 194)",
|
||||
"user_22": "rgb(89, 148, 220)",
|
||||
"user_23": "rgb(180, 219, 210)",
|
||||
"user_24": "rgb(216, 200, 82)",
|
||||
"user_25": "rgb(194, 194, 194)",
|
||||
"user_26": "rgb(89, 148, 220)",
|
||||
"user_27": "rgb(180, 219, 210)",
|
||||
"user_28": "rgb(216, 200, 82)",
|
||||
"user_29": "rgb(194, 194, 194)",
|
||||
"user_3": "rgb(180, 219, 210)",
|
||||
"user_30": "rgb(89, 148, 220)",
|
||||
"user_31": "rgb(180, 219, 210)",
|
||||
"user_32": "rgb(216, 200, 82)",
|
||||
"user_33": "rgb(194, 194, 194)",
|
||||
"user_34": "rgb(89, 148, 220)",
|
||||
"user_35": "rgb(180, 219, 210)",
|
||||
"user_36": "rgb(216, 200, 82)",
|
||||
"user_37": "rgb(194, 194, 194)",
|
||||
"user_38": "rgb(89, 148, 220)",
|
||||
"user_39": "rgb(180, 219, 210)",
|
||||
"user_4": "rgb(216, 200, 82)",
|
||||
"user_40": "rgb(216, 200, 82)",
|
||||
"user_41": "rgb(194, 194, 194)",
|
||||
"user_42": "rgb(89, 148, 220)",
|
||||
"user_43": "rgb(180, 219, 210)",
|
||||
"user_44": "rgb(216, 200, 82)",
|
||||
"user_45": "rgb(194, 194, 194)",
|
||||
"user_5": "rgb(194, 194, 194)",
|
||||
"user_6": "rgb(89, 148, 220)",
|
||||
"user_7": "rgb(180, 219, 210)",
|
||||
"user_8": "rgb(216, 200, 82)",
|
||||
"user_9": "rgb(232, 178, 167)",
|
||||
"via_blind_buried": "rgb(187, 151, 38)",
|
||||
"via_hole": "rgb(227, 183, 46)",
|
||||
"via_hole_walls": "rgb(236, 236, 236)",
|
||||
"via_micro": "rgb(0, 132, 132)",
|
||||
"via_net_names": "rgba(50, 50, 50, 0.902)",
|
||||
"via_through": "rgb(236, 236, 236)",
|
||||
"worksheet": "rgb(200, 114, 171)"
|
||||
},
|
||||
"gerbview": {
|
||||
"axes": "rgb(0, 0, 132)",
|
||||
"background": "rgb(0, 0, 0)",
|
||||
"dcodes": "rgb(255, 255, 255)",
|
||||
"grid": "rgb(132, 132, 132)",
|
||||
"layers": [
|
||||
"rgb(200, 52, 52)",
|
||||
"rgb(127, 200, 127)",
|
||||
"rgb(206, 125, 44)",
|
||||
"rgb(79, 203, 203)",
|
||||
"rgb(219, 98, 139)",
|
||||
"rgb(167, 165, 198)",
|
||||
"rgb(40, 204, 217)",
|
||||
"rgb(232, 178, 167)",
|
||||
"rgb(242, 237, 161)",
|
||||
"rgb(141, 203, 129)",
|
||||
"rgb(237, 124, 51)",
|
||||
"rgb(91, 195, 235)",
|
||||
"rgb(247, 111, 142)",
|
||||
"rgb(77, 127, 196)",
|
||||
"rgb(200, 52, 52)",
|
||||
"rgb(127, 200, 127)",
|
||||
"rgb(206, 125, 44)",
|
||||
"rgb(79, 203, 203)",
|
||||
"rgb(219, 98, 139)",
|
||||
"rgb(167, 165, 198)",
|
||||
"rgb(40, 204, 217)",
|
||||
"rgb(232, 178, 167)",
|
||||
"rgb(242, 237, 161)",
|
||||
"rgb(141, 203, 129)",
|
||||
"rgb(237, 124, 51)",
|
||||
"rgb(91, 195, 235)",
|
||||
"rgb(247, 111, 142)",
|
||||
"rgb(77, 127, 196)",
|
||||
"rgb(200, 52, 52)",
|
||||
"rgb(127, 200, 127)",
|
||||
"rgb(206, 125, 44)",
|
||||
"rgb(79, 203, 203)",
|
||||
"rgb(219, 98, 139)",
|
||||
"rgb(167, 165, 198)",
|
||||
"rgb(40, 204, 217)",
|
||||
"rgb(232, 178, 167)",
|
||||
"rgb(242, 237, 161)",
|
||||
"rgb(141, 203, 129)",
|
||||
"rgb(237, 124, 51)",
|
||||
"rgb(91, 195, 235)",
|
||||
"rgb(247, 111, 142)",
|
||||
"rgb(77, 127, 196)",
|
||||
"rgb(200, 52, 52)",
|
||||
"rgb(127, 200, 127)",
|
||||
"rgb(206, 125, 44)",
|
||||
"rgb(79, 203, 203)",
|
||||
"rgb(219, 98, 139)",
|
||||
"rgb(167, 165, 198)",
|
||||
"rgb(40, 204, 217)",
|
||||
"rgb(232, 178, 167)",
|
||||
"rgb(242, 237, 161)",
|
||||
"rgb(141, 203, 129)",
|
||||
"rgb(237, 124, 51)",
|
||||
"rgb(91, 195, 235)",
|
||||
"rgb(247, 111, 142)",
|
||||
"rgb(77, 127, 196)",
|
||||
"rgb(200, 52, 52)",
|
||||
"rgb(127, 200, 127)",
|
||||
"rgb(206, 125, 44)",
|
||||
"rgb(79, 203, 203)",
|
||||
"rgb(219, 98, 139)",
|
||||
"rgb(167, 165, 198)",
|
||||
"rgb(40, 204, 217)",
|
||||
"rgb(232, 178, 167)"
|
||||
],
|
||||
"negative_objects": "rgb(132, 132, 132)",
|
||||
"page_limits": "rgb(132, 132, 132)",
|
||||
"worksheet": "rgb(0, 0, 132)"
|
||||
},
|
||||
"meta": {
|
||||
"name": "Altium_Theme",
|
||||
"version": 5
|
||||
},
|
||||
"schematic": {
|
||||
"anchor": "rgb(0, 0, 255)",
|
||||
"aux_items": "rgb(0, 0, 0)",
|
||||
"background": "rgb(245, 244, 239)",
|
||||
"brightened": "rgb(255, 0, 255)",
|
||||
"bus": "rgb(0, 0, 132)",
|
||||
"bus_junction": "rgb(0, 0, 132)",
|
||||
"component_body": "rgb(255, 255, 194)",
|
||||
"component_outline": "rgb(132, 0, 0)",
|
||||
"cursor": "rgb(15, 15, 15)",
|
||||
"dnp_marker": "rgba(220, 9, 13, 0.851)",
|
||||
"erc_error": "rgba(230, 9, 13, 0.800)",
|
||||
"erc_exclusion": "rgba(94, 194, 194, 0.800)",
|
||||
"erc_warning": "rgba(209, 146, 0, 0.800)",
|
||||
"excluded_from_sim": "rgba(194, 194, 194, 0.949)",
|
||||
"fields": "rgb(132, 0, 132)",
|
||||
"grid": "rgb(181, 181, 181)",
|
||||
"grid_axes": "rgb(0, 0, 132)",
|
||||
"hidden": "rgb(94, 194, 194)",
|
||||
"hovered": "rgb(0, 0, 255)",
|
||||
"junction": "rgb(0, 0, 0)",
|
||||
"label_global": "rgb(132, 0, 0)",
|
||||
"label_hier": "rgb(114, 86, 0)",
|
||||
"label_local": "rgb(132, 0, 0)",
|
||||
"netclass_flag": "rgb(72, 72, 72)",
|
||||
"no_connect": "rgb(0, 0, 132)",
|
||||
"note": "rgb(0, 0, 194)",
|
||||
"note_background": "rgba(0, 0, 0, 0.000)",
|
||||
"op_currents": "rgb(224, 0, 12)",
|
||||
"op_voltages": "rgb(132, 0, 50)",
|
||||
"override_item_colors": false,
|
||||
"page_limits": "rgb(181, 181, 181)",
|
||||
"pin": "rgb(0, 0, 0)",
|
||||
"pin_name": "rgb(0, 0, 0)",
|
||||
"pin_number": "rgb(0, 0, 0)",
|
||||
"private_note": "rgb(72, 72, 255)",
|
||||
"reference": "rgb(0, 0, 194)",
|
||||
"rule_area": "rgb(255, 0, 0)",
|
||||
"shadow": "rgba(102, 179, 255, 0.800)",
|
||||
"sheet": "rgb(0, 0, 0)",
|
||||
"sheet_background": "rgba(255, 255, 255, 0.000)",
|
||||
"sheet_fields": "rgb(132, 0, 132)",
|
||||
"sheet_filename": "rgb(0, 0, 132)",
|
||||
"sheet_label": "rgb(0, 0, 0)",
|
||||
"sheet_name": "rgb(0, 0, 132)",
|
||||
"value": "rgb(0, 0, 194)",
|
||||
"wire": "rgb(0, 0, 0)",
|
||||
"worksheet": "rgb(0, 0, 0)"
|
||||
}
|
||||
}
|
||||
BIN
kibot_resources/fonts/Arial.ttf
Normal file
BIN
kibot_resources/fonts/Arial.ttf
Normal file
Binary file not shown.
BIN
kibot_resources/fonts/Arial_Bold.ttf
Normal file
BIN
kibot_resources/fonts/Arial_Bold.ttf
Normal file
Binary file not shown.
BIN
kibot_resources/fonts/Arial_Bold_Italic.ttf
Normal file
BIN
kibot_resources/fonts/Arial_Bold_Italic.ttf
Normal file
Binary file not shown.
BIN
kibot_resources/fonts/Arial_Italic.ttf
Normal file
BIN
kibot_resources/fonts/Arial_Italic.ttf
Normal file
Binary file not shown.
BIN
kibot_resources/fonts/Times New Roman Bold Italic.ttf
Normal file
BIN
kibot_resources/fonts/Times New Roman Bold Italic.ttf
Normal file
Binary file not shown.
BIN
kibot_resources/fonts/Times New Roman Bold.ttf
Normal file
BIN
kibot_resources/fonts/Times New Roman Bold.ttf
Normal file
Binary file not shown.
BIN
kibot_resources/fonts/Times New Roman Italic.ttf
Normal file
BIN
kibot_resources/fonts/Times New Roman Italic.ttf
Normal file
Binary file not shown.
BIN
kibot_resources/fonts/Times New Roman.ttf
Normal file
BIN
kibot_resources/fonts/Times New Roman.ttf
Normal file
Binary file not shown.
46
kibot_resources/scripts/docker_kibot_linux.sh
Executable file
46
kibot_resources/scripts/docker_kibot_linux.sh
Executable file
@@ -0,0 +1,46 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Default image version
|
||||
IMAGE="ghcr.io/inti-cmnb/kicad8_auto_full:dev"
|
||||
|
||||
# Parse the optional -v flag
|
||||
while getopts "v:" opt; do
|
||||
case "$opt" in
|
||||
v)
|
||||
if [ "$OPTARG" = "9" ]; then
|
||||
IMAGE="ghcr.io/inti-cmnb/kicad9_auto_full:dev"
|
||||
else
|
||||
echo "Unsupported version: $OPTARG" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 [-v 9]" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
export USER_ID=$(id -u)
|
||||
export GROUP_ID=$(id -g)
|
||||
export USER_NAME=$(whoami)
|
||||
|
||||
docker run --rm -it \
|
||||
--user "$USER_ID:$GROUP_ID" \
|
||||
--env NO_AT_BRIDGE=1 \
|
||||
--env DISPLAY="$DISPLAY" \
|
||||
--workdir="/home/$USER_NAME" \
|
||||
--volume=/tmp/.X11-unix:/tmp/.X11-unix \
|
||||
--volume="/etc/group:/etc/group:ro" \
|
||||
--volume="/etc/passwd:/etc/passwd:ro" \
|
||||
--volume="/etc/shadow:/etc/shadow:ro" \
|
||||
--volume="/home/$USER_NAME:/home/$USER_NAME:rw" \
|
||||
-p 8000:8000 \
|
||||
--entrypoint /bin/bash \
|
||||
"$IMAGE" -c "
|
||||
if ! id $USER_NAME &>/dev/null; then
|
||||
echo \"Creating user $USER_NAME ($USER_ID:$GROUP_ID)...\"
|
||||
useradd -u $USER_ID -g $GROUP_ID -d /home/$USER_NAME -m $USER_NAME
|
||||
chown -R $USER_ID:$GROUP_ID /home/$USER_NAME
|
||||
fi
|
||||
exec su - $USER_NAME"
|
||||
28
kibot_resources/scripts/docker_kibot_windows.bat
Normal file
28
kibot_resources/scripts/docker_kibot_windows.bat
Normal file
@@ -0,0 +1,28 @@
|
||||
@echo off
|
||||
REM Set variables for display and user name
|
||||
set DISPLAY=host.docker.internal:0.0
|
||||
set USER_NAME=%USERNAME%
|
||||
|
||||
REM Set default image
|
||||
set "IMAGE=ghcr.io/inti-cmnb/kicad8_auto_full:dev"
|
||||
|
||||
REM Check for optional -v flag and version number
|
||||
if /I "%~1"=="-v" (
|
||||
if "%~2"=="9" (
|
||||
set "IMAGE=ghcr.io/inti-cmnb/kicad9_auto_full:dev"
|
||||
) else (
|
||||
echo Unsupported version: %~2
|
||||
goto :eof
|
||||
)
|
||||
)
|
||||
|
||||
REM Run the Docker container with mounted volumes
|
||||
docker run --rm -it ^
|
||||
--env NO_AT_BRIDGE=1 ^
|
||||
--env DISPLAY=%DISPLAY% ^
|
||||
--workdir="/home/%USER_NAME%" ^
|
||||
--volume=C:\Users\%USER_NAME%:/home/%USER_NAME%:rw ^
|
||||
--volume=/tmp/.X11-unix:/tmp/.X11-unix ^
|
||||
--entrypoint /bin/bash ^
|
||||
-p 8000:8000 ^
|
||||
%IMAGE%
|
||||
49
kibot_resources/scripts/get_changelog.py
Normal file
49
kibot_resources/scripts/get_changelog.py
Normal file
@@ -0,0 +1,49 @@
|
||||
import argparse
|
||||
import re
|
||||
import sys
|
||||
|
||||
def parse_changelog(file_path, version, title_only, extra_spaces, separators):
|
||||
try:
|
||||
with open(file_path, 'r') as f:
|
||||
changelog = f.read()
|
||||
except FileNotFoundError:
|
||||
print(f"Error: File '{file_path}' not found.")
|
||||
sys.exit(1)
|
||||
|
||||
# Regex to match the version block and stop at the next version or any line with square brackets
|
||||
version_pattern = re.compile(rf"## \[{version}\] - (\d{{4}}-\d{{2}}-\d{{2}})\n(.*?)(?=## \[|\[Unreleased\]:|\[\d+\.\d+\.\d+\]:|$)", re.DOTALL)
|
||||
match = version_pattern.search(changelog)
|
||||
|
||||
if not match:
|
||||
print(f"Version {version} not found.")
|
||||
return
|
||||
|
||||
date, content = match.groups()
|
||||
|
||||
if title_only:
|
||||
print(f"Version {version} - {date}")
|
||||
else:
|
||||
|
||||
if separators is not None:
|
||||
content = re.sub(r'^(###.*?)$', '_' * separators + r'\n\1', content, flags=re.MULTILINE)
|
||||
|
||||
cleaned_content = re.sub(r'### ', '', content) # Remove ###
|
||||
|
||||
if extra_spaces:
|
||||
cleaned_content = re.sub(r'(?<!\n)\n(?!\n)', '\n\n', cleaned_content)
|
||||
|
||||
print(cleaned_content)
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Extract and format a specific version from CHANGELOG.md")
|
||||
parser.add_argument("-v", "--version", required=True, help="Version to extract (e.g., 1.0.1)")
|
||||
parser.add_argument("-f", "--file", required=True, help="Path to CHANGELOG.md file")
|
||||
parser.add_argument("-t", "--title-only", action="store_true", help="Print the title only")
|
||||
parser.add_argument("-s", "--extra-spaces", action="store_true", help="Add extra spaces between lines")
|
||||
parser.add_argument("-a", "--separators", type=int, required=False, help="Number of underscores for separators")
|
||||
|
||||
args = parser.parse_args()
|
||||
parse_changelog(args.file, args.version, args.title_only, args.extra_spaces, args.separators)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
41
kibot_resources/scripts/get_changelog_version.py
Normal file
41
kibot_resources/scripts/get_changelog_version.py
Normal file
@@ -0,0 +1,41 @@
|
||||
import re
|
||||
import sys
|
||||
import argparse
|
||||
|
||||
def get_last_version(file_path):
|
||||
try:
|
||||
with open(file_path, 'r') as file:
|
||||
content = file.read()
|
||||
|
||||
# Regex to match version entries
|
||||
version_pattern = r"## \[(.*?)\]"
|
||||
versions = re.findall(version_pattern, content)
|
||||
|
||||
if not versions:
|
||||
return "N/A"
|
||||
|
||||
# Check the last entry
|
||||
last_version = versions[0] # First match is the most recent
|
||||
|
||||
if last_version.lower() == "unreleased":
|
||||
if len(versions) > 1:
|
||||
second_last_version = versions[1]
|
||||
return f"{second_last_version}+ (Unreleased)"
|
||||
else:
|
||||
return "(Unreleased)"
|
||||
else:
|
||||
return last_version
|
||||
|
||||
except FileNotFoundError:
|
||||
return f"File '{file_path}' not found."
|
||||
except Exception as e:
|
||||
return f"An error occurred: {e}"
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="Get the latest version from a changelog file.")
|
||||
parser.add_argument("-f", "--file", required=True, help="Path to the changelog file.")
|
||||
args = parser.parse_args()
|
||||
|
||||
version = get_last_version(args.file)
|
||||
if version:
|
||||
print(version)
|
||||
49
kibot_resources/scripts/get_sheet_title.py
Normal file
49
kibot_resources/scripts/get_sheet_title.py
Normal file
@@ -0,0 +1,49 @@
|
||||
import argparse
|
||||
import xml.etree.ElementTree as ET
|
||||
import sys
|
||||
|
||||
def get_sheet_title(file_path, page_number, dots_number):
|
||||
try:
|
||||
tree = ET.parse(file_path)
|
||||
root = tree.getroot()
|
||||
|
||||
page_number = str(page_number)
|
||||
titles = []
|
||||
|
||||
for sheet in root.findall(".//sheet"):
|
||||
number = sheet.get("number")
|
||||
if number == page_number:
|
||||
# Get the last part of the 'name' attribute after '/'
|
||||
name = sheet.get("name")
|
||||
title_block = sheet.find("title_block")
|
||||
title = title_block.find("title").text if title_block is not None else None
|
||||
if name:
|
||||
titles.append(name.split("/")[-2 if name.endswith("/") else -1])
|
||||
|
||||
if not titles:
|
||||
print('.'*dots_number)
|
||||
|
||||
elif len(set(titles)) > 1:
|
||||
print("Conflicting page numbers")
|
||||
else:
|
||||
print(titles[0])
|
||||
except ET.ParseError:
|
||||
print("Error: Invalid XML format")
|
||||
except FileNotFoundError:
|
||||
print("Error: XML File not found")
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Get the sheet title based on page number from a KiCad XML file")
|
||||
parser.add_argument("-p", "--page-number", type=int, required=True, help="Page number to search")
|
||||
parser.add_argument("-f", "--file", type=str, required=True, help="Path to the schematic XML file")
|
||||
parser.add_argument("-d", "--dots-number", type=int, required=True, help="Number of dots for empty lines")
|
||||
|
||||
args = parser.parse_args()
|
||||
get_sheet_title(args.file, args.page_number, args.dots_number)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
13
kibot_resources/templates/assembly_notes.txt
Normal file
13
kibot_resources/templates/assembly_notes.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
ASSEMBLY NOTES (UNLESS OTHERWISE SPECIFIED)
|
||||
|
||||
1) DO NOT POPULATE PARTS ARE MARKED WITH A RED CROSS.
|
||||
|
||||
2) DO NOT POPULATE PARTS ARE NOT PRESENT IN THE BOM.
|
||||
|
||||
3) IF CONFLICTING INFORMATION IS FOUND BETWEEN THE ASSEMBLY
|
||||
FILE AND BOM, BOM SHOULD BE USED AS THE MAIN SOURCE.
|
||||
|
||||
4) CONFORMAL COATING IS NOT REQUIRED.
|
||||
|
||||
5) DOT IDENTIFIES PIN #1 LOCATION AND DEVICE ORIENTATION
|
||||
WHEN VIEWED FROM THE TOP.
|
||||
58
kibot_resources/templates/fabrication_notes.txt
Normal file
58
kibot_resources/templates/fabrication_notes.txt
Normal file
@@ -0,0 +1,58 @@
|
||||
FABRICATION NOTES (UNLESS OTHERWISE SPECIFIED)
|
||||
|
||||
1) FABRICATE PER IPC-6012A CLASS 2.
|
||||
|
||||
2) OUTLINE DEFINED IN SEPARATE GERBER FILE WITH
|
||||
"Edge_Cuts.GBR" SUFFIX.
|
||||
|
||||
DIMENSIONS OF CIRCUMSIZED RECTANGLE SHOWN ON THIS
|
||||
DRAWING FOR REFERENCE ONLY.
|
||||
|
||||
3) SEE SEPARATE DRILL FILES WITH ".DRL" SUFFIX
|
||||
FOR HOLE LOCATIONS.
|
||||
|
||||
SELECTED HOLE LOCATIONS SHOWN ON THIS DRAWING
|
||||
FOR REFERENCE ONLY.
|
||||
|
||||
4) SURFACE FINISH: ${pcb_finish_cap}
|
||||
|
||||
5) SOLDERMASK ON BOTH SIDES OF THE BOARD SHALL
|
||||
BE LPI, COLOR ${solder_mask_color_text_cap}.
|
||||
|
||||
6) SILK SCREEN LEGEND TO BE APPLIED PER LAYER
|
||||
STACKUP USING ${silk_screen_color_text_cap} NON-CONDUCTIVE EPOXY INK.
|
||||
|
||||
7) ALL VIAS ARE TENTED ON BOTH SIDES UNLESS
|
||||
SOLDERMASK OPENED IN GERBER.
|
||||
|
||||
8) VENDOR SHOULD FOLLOW ROHS COMPLIANT PROCESS
|
||||
AND Pb FREE FOR MANUFACTURING
|
||||
|
||||
9) PCB MATERIAL REQUIREMENTS:
|
||||
|
||||
A. FLAMMABILITY RATING MUST MEET OR EXCEED
|
||||
UL94V-0 REQUIREMENTS.
|
||||
B. Tg 170 C OR EQUIVALENT.
|
||||
C. EQUIVALENT MATERIAL SHALL BE RoHS COMPLIANT,
|
||||
HALOGEN FREE AND APPROVED BY ${COMPANY_cap}.
|
||||
|
||||
10) DESIGN GEOMETRY MINIMUM FEATURE SIZES:
|
||||
|
||||
BOARD SIZE ${bb_w_mm} × ${bb_h_mm} mm
|
||||
BOARD THICKNESS ${thickness_mm} mm
|
||||
TRACE WIDTH ${track_mm} mm
|
||||
TRACE TO TRACE ${clearance_mm} mm
|
||||
MIN. HOLE (PTH) ${drill_pth_real_mm} mm
|
||||
MIN. HOLE (NPTH) ${drill_npth_real_mm} mm
|
||||
ANNULAR RING ${oar_mm} mm
|
||||
COPPER TO HOLE ${c2h_mm} mm
|
||||
COPPER TO EDGE ${c2e_mm} mm
|
||||
HOLE TO HOLE ${h2h_mm} mm
|
||||
#?stackup and impedance_controlled
|
||||
|
||||
#?stackup and impedance_controlled
|
||||
11) REFER TO IMPEDANCE TABLE FOR IMPEDANCE CONTROL REQUIREMENTS.
|
||||
#?stackup and impedance_controlled
|
||||
|
||||
#?stackup and impedance_controlled
|
||||
12) CONFIRM SPACE WIDTHS AND SPACINGS.
|
||||
2
kibot_resources/templates/impedance_table.txt
Normal file
2
kibot_resources/templates/impedance_table.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Transmission Line, Impedance [ohms], Tolerance [ohms], Layer, Trace Width [mm], Gap [mm], Ref. Layers
|
||||
Edge-Coupled Coated Microstrip, 100, ±10 %, L1, 0.2032, 0.28, L2
|
||||
71
kibot_resources/templates/readme.txt
Normal file
71
kibot_resources/templates/readme.txt
Normal file
@@ -0,0 +1,71 @@
|
||||
<p align="center" width="100%">
|
||||
<img alt="Logo" width="33%" src="Logos/dummy_logo.svg">
|
||||
</p>
|
||||
|
||||
<h1 align="center">${BOARD_NAME}</h1>
|
||||
|
||||
<p align="center" width="100%">
|
||||
<a href="${GIT_URL}/actions/workflows/ci.yaml">
|
||||
<img alt="CI Badge" src="${GIT_URL}/actions/workflows/ci.yaml/badge.svg?branch=">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p align="center" width="100%">
|
||||
<img src="Images/dummy_image.png">
|
||||
</p>
|
||||
|
||||
***
|
||||
|
||||
<p align="center">
|
||||
<img alt="3D Top Angled" src="${png_3d_viewer_angled_top_outpath}" width="45%">
|
||||
|
||||
<img alt="3D Bottom Angled" src="${png_3d_viewer_angled_bottom_outpath}" width="45%">
|
||||
</p>
|
||||
|
||||
***
|
||||
|
||||
## SPECIFICATIONS
|
||||
|
||||
| Parameter | Value |
|
||||
| --- | --- |
|
||||
| Dimensions | ${bb_w_mm} × ${bb_h_mm} mm |
|
||||
|
||||
***
|
||||
|
||||
## DIRECTORY STRUCTURE
|
||||
|
||||
.
|
||||
├─ Computations # Misc calculations
|
||||
├─ HTML # HTML files for generated webpage
|
||||
├─ Images # Pictures and renders
|
||||
│
|
||||
├─ kibot_resources # External resources for KiBot
|
||||
│ ├─ colors # Color theme for KiCad
|
||||
│ ├─ fonts # Fonts used in the project
|
||||
│ ├─ scripts # External scripts used with KiBot
|
||||
│ └─ templates # Templates for KiBot generated reports
|
||||
│
|
||||
├─ kibot_yaml # KiBot YAML config files
|
||||
├─ KiRI # KiRI (PCB diff viewer) files
|
||||
│
|
||||
├─ lib # KiCad footprint and symbol libraries
|
||||
│ ├─ 3d_models # Component 3D models
|
||||
│ ├─ lib_fp # Footprint libraries
|
||||
│ └─ lib_sym # Symbol libraries
|
||||
│
|
||||
├─ Logos # Logos
|
||||
│
|
||||
├─ Manufacturing # Assembly and fabrication documents
|
||||
│ ├─ Assembly # Assembly documents (BoM, pos, notes)
|
||||
│ │
|
||||
│ └─ Fabrication # Fabrication documents (ZIP, notes)
|
||||
│ ├─ Drill Tables # CSV drill tables
|
||||
│ └─ Gerbers # Gerbers
|
||||
│
|
||||
├─ Report # Reports for ERC/DRC
|
||||
├─ Schematic # PDF of schematic
|
||||
├─ Templates # Title block templates
|
||||
├─ Testing
|
||||
│ └─ Testpoints # Testpoints tables
|
||||
│
|
||||
└─ Variants # Outputs for assembly variants
|
||||
Reference in New Issue
Block a user