diff --git a/scripts/Dockerfile b/scripts/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..c66d3eb58e32165f90ee0955ec9037a84cc744d8 --- /dev/null +++ b/scripts/Dockerfile @@ -0,0 +1,29 @@ +# build-deps container to call scripts/generate-frozen-requirements.txt on an +# application (e.g. swh-loader-svn, swh-loader-git, ...) +FROM python:3.10-bullseye + +# First install the runtime deps of all swh applications +RUN apt-get -y update && \ + apt-get -y upgrade && \ + apt-get install -y \ + # objstorage deps (winery) + libcmph-dev \ + # journal (kafka) + librdkafka-dev \ + # svn loader (subvertpy) + libsvn-dev libapr1-dev libaprutil1-dev \ + libpq-dev \ + python3-venv \ + && \ + apt clean + +RUN mkdir -p /opt/scripts/ +COPY common.py /opt/scripts/ +COPY generate-frozen-requirements /opt/scripts/ +RUN chmod +x /opt/scripts/generate-frozen-requirements + +# This expects the /src/ to be mounted on swh-apps repository folder at runtime +ENV SWH_APPS_DIR=/src/apps + +WORKDIR /opt/scripts +ENTRYPOINT [ "./generate-frozen-requirements" ] diff --git a/scripts/generate-frozen-requirements b/scripts/generate-frozen-requirements index 7ca45aec6866b438d93435059e777a41e9a01b8a..4c3db1616e41c131ffb4f50f6875fef85537306c 100755 --- a/scripts/generate-frozen-requirements +++ b/scripts/generate-frozen-requirements @@ -5,16 +5,15 @@ # License: GNU General Public License v3 or later # See top-level LICENSE file for more information -"""Generate the requirements-frozen.txt file for a given app""" +"""Generate the requirements-frozen.txt file for given app(s)""" +import os import pathlib import subprocess import sys import tempfile from venv import EnvBuilder -from common import APPS_DIR - class AppEnvBuilder(EnvBuilder): """A virtualenv builder specialized for our usecase""" @@ -49,11 +48,16 @@ def usage(): print(f"Usage: {sys.argv[0]} app1 ... appN", file=sys.stderr) -def generate_requirements_frozen(app): +def generate_requirements_frozen(app: str, absolute_apps_dirpath: pathlib.Path) -> None: """Generate the ``requirements-frozen.txt`` file out of the - ``requirements.txt`` file present in the ``app`` directory""" + ``requirements.txt`` file present in the ``app`` directory + + Args: + app: Name of the application to generate the frozen dependencies set + apps_dir: Absolute folder holding all application declarations + """ - app_dir = APPS_DIR / app + app_dir = absolute_apps_dirpath / app src_req_file = app_dir / "requirements.txt" dst_req_file = app_dir / "requirements-frozen.txt" @@ -80,5 +84,13 @@ if __name__ == "__main__": usage() sys.exit(2) + apps_dir = os.environ.get("SWH_APPS_DIR") + if not apps_dir: + from common import APPS_DIR + + absolute_apps_dirpath = APPS_DIR + else: + absolute_apps_dirpath = pathlib.Path(apps_dir) + for app in sys.argv[1:]: - generate_requirements_frozen(app) + generate_requirements_frozen(app, absolute_apps_dirpath)