Inital commit
Some checks failed
CI / release (push) Has been cancelled
CI / generate_outputs (push) Has been cancelled

This commit is contained in:
2026-02-17 08:39:27 -05:00
commit 1d094e6a04
81 changed files with 25739 additions and 0 deletions

View 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"

View 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%

View 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()

View 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)

View 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()