Simplified dockerfile

This commit is contained in:
2025-04-20 12:08:57 +02:00
parent 243e4177cb
commit 7a4028085f
2 changed files with 13 additions and 136 deletions

View File

@@ -36,29 +36,31 @@ RUN mkdir -p \
# ITB tool setup
FROM base AS itb-env
COPY ./scripts/setup_binaries.py /root/sia/scripts/
COPY ./tools/itb/setup.py /root/sia/tools/itb/setup.py
RUN python3 /root/sia/scripts/setup_binaries.py /root/sia/tools/itb/setup.py
RUN python3 -m venv /root/venvs/itb
COPY ./tools/itb/setup.py /root/sia/tools/itb/setup.py
RUN /root/venvs/itb/bin/python /root/sia/tools/itb/setup.py egg_info
RUN --mount=type=cache,target=/root/.cache/pip \
/root/venvs/itb/bin/pip install -e /root/sia/tools/itb/
/root/venvs/itb/bin/pip install -r *.egg-info/requires.txt
RUN rm -rf *.egg-info/
# Train tool setup
FROM base AS train-env
COPY ./scripts/setup_binaries.py /root/sia/scripts/
COPY ./tools/train/setup.py /root/sia/tools/train/setup.py
RUN python3 /root/sia/scripts/setup_binaries.py /root/sia/tools/train/setup.py
RUN python3 -m venv /root/venvs/train
COPY ./tools/train/setup.py /root/sia/tools/train/setup.py
RUN /root/venvs/train/bin/python /root/sia/tools/train/setup.py egg_info
RUN --mount=type=cache,target=/root/.cache/pip \
/root/venvs/train/bin/pip install -e /root/sia/tools/train/
/root/venvs/train/bin/pip install -r *.egg-info/requires.txt
RUN rm -rf *.egg-info/
# SIA core setup
FROM base AS sia-env
COPY ./scripts/setup_binaries.py /root/sia/scripts/
RUN python3 -m venv /root/venvs/sia
COPY ./setup.py /root/sia/setup.py
COPY ./lib /root/sia/lib
RUN python3 /root/sia/scripts/setup_binaries.py /root/sia/setup.py
RUN python3 -m venv /root/venvs/sia
RUN /root/venvs/sia/bin/python /root/sia/setup.py egg_info
RUN --mount=type=cache,target=/root/.cache/pip \
/root/venvs/sia/bin/pip install -r *.egg-info/requires.txt
RUN rm -rf *.egg-info/
COPY action_schema.xsd /root/sia/action_schema.xsd
RUN mkdir -p /root/sia/lib/xml_schema_validator/src/

View File

@@ -1,125 +0,0 @@
#!/usr/bin/env python3
"""
Script to extract binary names from setup.py files and create placeholder files.
Usage: setup_binaries.py /path/to/setup.py
"""
import os
import sys
import ast
class SetupVisitor(ast.NodeVisitor):
"""AST visitor that finds setup() function calls and extracts scripts."""
def __init__(self):
self.scripts = []
def visit_Call(self, node):
# Check if this is a call to setup()
if getattr(node.func, 'id', None) == 'setup':
# Look through keyword arguments for scripts
for kw in node.keywords:
if kw.arg == 'scripts':
self._extract_scripts(kw.value)
# Also check entry_points which might contain console_scripts
elif kw.arg == 'entry_points':
self._extract_entry_points(kw.value)
# Continue traversing the AST
self.generic_visit(node)
def _extract_scripts(self, node):
"""Extract script paths from a list or list comprehension."""
if isinstance(node, ast.List):
for elt in node.elts:
if isinstance(elt, ast.Str):
if elt.s.startswith('bin/'):
self.scripts.append(elt.s)
# Handle variables and other expressions by looking for string literals
else:
# This is a simple fallback for complex expressions
script_finder = StringLiteralFinder('bin/')
script_finder.visit(node)
self.scripts.extend(script_finder.matching_strings)
def _extract_entry_points(self, node):
"""Extract console_scripts from entry_points argument."""
# This would need more complex parsing based on how entry_points is specified
# Often it's a dict with 'console_scripts' key or a string with [console_scripts] section
# For this example, we'll just log that we found it
pass
class StringLiteralFinder(ast.NodeVisitor):
"""Find string literals that start with a specific prefix."""
def __init__(self, prefix):
self.prefix = prefix
self.matching_strings = []
def visit_Str(self, node):
if node.s.startswith(self.prefix):
self.matching_strings.append(node.s)
def extract_setup_binaries(setup_path):
"""Extract binary names from a setup.py file and create placeholder files."""
try:
# Read the setup.py file
with open(setup_path, 'r') as f:
setup_content = f.read()
# Parse the file
tree = ast.parse(setup_content)
# Find setup() calls and extract scripts
visitor = SetupVisitor()
visitor.visit(tree)
# Get the scripts
scripts = visitor.scripts
if not scripts:
print(f"No bin scripts found in {setup_path}")
return True # Not an error, just no scripts
# Create placeholder files
base_dir = os.path.dirname(setup_path)
created_count = 0
for script in scripts:
script_path = os.path.join(base_dir, script)
script_dir = os.path.dirname(script_path)
# Create directory if it doesn't exist
os.makedirs(script_dir, exist_ok=True)
# Create an empty file
with open(script_path, 'w') as f:
pass
# Make the file executable
os.chmod(script_path, 0o755)
created_count += 1
print(f"Created {created_count} placeholder binary files from {setup_path}")
return True
except Exception as e:
print(f"Error processing {setup_path}: {e}")
return False
if __name__ == "__main__":
if len(sys.argv) != 2:
print(f"Usage: {sys.argv[0]} /path/to/setup.py")
sys.exit(1)
setup_path = sys.argv[1]
if not os.path.exists(setup_path):
print(f"Error: {setup_path} not found")
sys.exit(1)
success = extract_setup_binaries(setup_path)
sys.exit(0 if success else 1)