From a8fc3d5746ba1e0743406af2b82f8740cafb279b Mon Sep 17 00:00:00 2001 From: pacnpal <183241239+pacnpal@users.noreply.github.com> Date: Tue, 28 Jan 2025 23:24:30 -0500 Subject: [PATCH] feat(docker): streamline Dockerfile by optimizing layer caching and enhancing installation verification --- Dockerfile | 50 +++++++++++++++++++++----------------------------- pyproject.toml | 14 ++------------ setup.py | 22 +++++++++++++++++++++- 3 files changed, 44 insertions(+), 42 deletions(-) diff --git a/Dockerfile b/Dockerfile index 80a63d2..df9fd9c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,46 +20,38 @@ RUN apt-get update && \ # Add architecture-specific compiler flags if needed ENV ARCHFLAGS="" -# Create necessary directories and set permissions -RUN mkdir -p /app/src/simpleguardhome && \ - chmod -R 755 /app +# Copy requirements first to leverage Docker cache +COPY requirements.txt /app/ +RUN pip install --no-cache-dir -r requirements.txt -# Copy source code, maintaining directory structure +# Copy the entire project COPY . /app/ -# Debug: Show the copied files and set execute permission for entrypoint script -RUN echo "Project structure:" && \ +# Debug: Show project structure after copy +RUN echo "Project structure after copy:" && \ tree /app && \ - echo "Package directory contents:" && \ - ls -la /app/src/simpleguardhome/ && \ + echo "Verifying source directory:" && \ + if [ ! -d "/app/src/simpleguardhome" ]; then \ + echo "ERROR: Source directory missing!" && \ + exit 1; \ + fi && \ + echo "Source directory contents:" && \ + ls -la /app/src/simpleguardhome/ + +# Set permissions +RUN chmod -R 755 /app && \ chmod +x /app/docker-entrypoint.sh && \ cp /app/docker-entrypoint.sh /usr/local/bin/ # Set PYTHONPATH ENV PYTHONPATH=/app/src -# Install Python requirements and verify the package -RUN pip install --no-cache-dir -r requirements.txt && \ - set -e && \ +# Install Python package in development mode +RUN set -e && \ echo "Installing package..." && \ - pip uninstall -y simpleguardhome || true && \ - # Debug: Show package files - echo "Python path:" && \ - python3 -c "import sys; print('\n'.join(sys.path))" && \ - echo "Source directory contents:" && \ - ls -R /app/src && \ - # Install package in editable mode with compatibility mode enabled - pip install --use-pep517 -e . --config-settings editable_mode=compat && \ - echo "Verifying installation..." && \ - pip show simpleguardhome && \ - # List all package files - echo "Package contents:" && \ - find /app/src/simpleguardhome -type f -ls && \ - # Verify package can be imported - echo "Testing import..." && \ - python3 -c "import simpleguardhome; print(f'Package found at: {simpleguardhome.__file__}')" && \ - # Verify app can be imported - echo "Testing app import..." && \ + pip install -e . && \ + echo "Verifying package installation..." && \ + python3 -c "import simpleguardhome; print('Package location:', simpleguardhome.__file__)" && \ python3 -c "from simpleguardhome.main import app; print('App imported successfully')" && \ echo "Package installation successful" && \ # Create rules backup directory with proper permissions diff --git a/pyproject.toml b/pyproject.toml index f82f47d..76ef59a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,21 +22,11 @@ dependencies = [ ] [tool.setuptools] -# Using explicit package configuration package-dir = {"" = "src"} packages = ["simpleguardhome"] -# Include all package data [tool.setuptools.package-data] -"*" = ["*.ico", "templates/*.html"] - -# Explicitly include the package data -[options.package_data] simpleguardhome = [ - "templates/*", + "templates/*.html", "favicon.ico" -] - -# Make sure data files are included -[options] -include_package_data = true \ No newline at end of file +] \ No newline at end of file diff --git a/setup.py b/setup.py index fc1f76c..55ec2e3 100644 --- a/setup.py +++ b/setup.py @@ -1,3 +1,23 @@ +# -*- coding: utf-8 -*- from setuptools import setup -setup() \ No newline at end of file +if __name__ == "__main__": + try: + setup( + package_dir={"": "src"}, + packages=["simpleguardhome"], + package_data={ + "simpleguardhome": [ + "templates/*", + "favicon.ico" + ] + }, + include_package_data=True + ) + except: # noqa + print( + "\n\nAn error occurred while building the project, " + "please ensure you have the most updated version of setuptools, " + "setuptools_scm and wheel with:\n" + " pip install -U setuptools setuptools_scm wheel\n\n" + ) \ No newline at end of file