Simplified dockerfile
This commit is contained in:
24
Dockerfile
24
Dockerfile
@@ -36,29 +36,31 @@ RUN mkdir -p \
|
|||||||
|
|
||||||
# ITB tool setup
|
# ITB tool setup
|
||||||
FROM base AS itb-env
|
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
|
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 \
|
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
|
# Train tool setup
|
||||||
FROM base AS train-env
|
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
|
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 \
|
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
|
# SIA core setup
|
||||||
FROM base AS sia-env
|
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 ./setup.py /root/sia/setup.py
|
||||||
COPY ./lib /root/sia/lib
|
COPY ./lib /root/sia/lib
|
||||||
RUN python3 /root/sia/scripts/setup_binaries.py /root/sia/setup.py
|
RUN /root/venvs/sia/bin/python /root/sia/setup.py egg_info
|
||||||
RUN python3 -m venv /root/venvs/sia
|
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
|
COPY action_schema.xsd /root/sia/action_schema.xsd
|
||||||
RUN mkdir -p /root/sia/lib/xml_schema_validator/src/
|
RUN mkdir -p /root/sia/lib/xml_schema_validator/src/
|
||||||
|
|||||||
@@ -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)
|
|
||||||
Reference in New Issue
Block a user