From ae62f129c651601996482b492408f8386989b6a9 Mon Sep 17 00:00:00 2001 From: Nicola Soranzo Date: Wed, 29 Oct 2025 14:15:12 +0000 Subject: [PATCH] Reduce command duplications --- .../dependencies/update_lint_requirements.sh | 30 +++++++----- packages/package-build-install.sh | 35 +++++--------- packages/test.sh | 20 ++++---- scripts/common_startup.sh | 47 +++++++++---------- 4 files changed, 61 insertions(+), 71 deletions(-) diff --git a/lib/galaxy/dependencies/update_lint_requirements.sh b/lib/galaxy/dependencies/update_lint_requirements.sh index 2aafac2f98d..af711346306 100755 --- a/lib/galaxy/dependencies/update_lint_requirements.sh +++ b/lib/galaxy/dependencies/update_lint_requirements.sh @@ -8,22 +8,26 @@ set -e THIS_DIRECTORY="$(cd "$(dirname "$0")" > /dev/null && pwd)" +if command -v uv >/dev/null; then + VENV_CMD="$(command -v uv) venv --python python3.9" + PIP_CMD="$(command -v uv) pip" + FREEZE_OPTIONS='' +else + VENV_CMD='python3.9 -m venv' + PIP_CMD='python -m pip' + FREEZE_OPTIONS='-l' +fi + update_pinned_reqs() { VENV=$(mktemp -d "${TMPDIR:-/tmp}/$1_venv.XXXXXXXXXX") - if command -v uv >/dev/null; then - uv self update - uv venv "${VENV}" --python python3.9 - . "${VENV}/bin/activate" - uv pip install -r "${THIS_DIRECTORY}/$1-requirements.txt" - uv pip freeze | grep -v 'pkg_resources==0.0.0' > "${THIS_DIRECTORY}/pinned-$1-requirements.txt" - else - python3.9 -m venv "${VENV}" - . "${VENV}/bin/activate" - pip install --upgrade pip setuptools - pip install -r "${THIS_DIRECTORY}/$1-requirements.txt" - # The grep below is needed to workaround https://github.com/pypa/pip/issues/8331 - pip freeze -l | grep -v 'pkg_resources==0.0.0' > "${THIS_DIRECTORY}/pinned-$1-requirements.txt" + ${VENV_CMD} "${VENV}" + . "${VENV}/bin/activate" + if [ "${PIP_CMD}" = 'python -m pip' ]; then + ${PIP_CMD} install --upgrade pip setuptools fi + ${PIP_CMD} install -r "${THIS_DIRECTORY}/$1-requirements.txt" + # The grep below is needed to workaround https://github.com/pypa/pip/issues/8331 + ${PIP_CMD} freeze ${FREEZE_OPTIONS} | grep -v 'pkg_resources==0.0.0' > "${THIS_DIRECTORY}/pinned-$1-requirements.txt" rm -rf "${VENV}" } diff --git a/packages/package-build-install.sh b/packages/package-build-install.sh index a3ca6de35b9..b30d71355e4 100755 --- a/packages/package-build-install.sh +++ b/packages/package-build-install.sh @@ -16,6 +16,14 @@ EDITABLE=false META=false WHEELHOUSE= +if command -v uv >/dev/null; then + VENV_CMD="$(command -v uv) venv" + PIP_CMD="$(command -v uv) pip" +else + VENV_CMD='python3 -m venv' + PIP_CMD='pip' +fi + # Prevent making a venv for build deps for each package, Used inside the package dir, so refers to # /packages/.venv : ${VENV=../.venv} @@ -65,28 +73,15 @@ while read package; do printf "\n========= PACKAGE %s =========\n\n" "$package" pushd $package if $EDITABLE; then - if command -v uv >/dev/null; then - uv pip install -e . - else - pip install -e . - fi + ${PIP_CMD} install -e . else if [ ! -d "$VENV" ]; then - if command -v uv >/dev/null; then - uv venv "$VENV" - VIRTUAL_ENV="${VENV}" uv pip install -r dev-requirements.txt - else - python3 -m venv "$VENV" - "${VENV}/bin/pip" install -r dev-requirements.txt - fi + ${VENV_CMD} "$VENV" + VIRTUAL_ENV="${VENV}" ${PIP_CMD} install -r dev-requirements.txt fi make dist if $INSTALL && ! $META; then - if command -v uv >/dev/null; then - uv pip install dist/*.whl - else - pip install dist/*.whl - fi + ${PIP_CMD} install dist/*.whl fi fi popd @@ -96,9 +91,5 @@ done < "$PACKAGE_LIST_FILE" if $INSTALL && $META && ! $EDITABLE; then WHEELHOUSE=$(mktemp -d -t gxpkgwheelhouseXXXXXX) cp */dist/*.whl "$WHEELHOUSE" - if command -v uv >/dev/null; then - uv pip install $PIP_EXTRA_ARGS --find-links "$WHEELHOUSE" meta/dist/*.whl - else - pip install $PIP_EXTRA_ARGS --find-links "$WHEELHOUSE" meta/dist/*.whl - fi + ${PIP_CMD} install $PIP_EXTRA_ARGS --find-links "$WHEELHOUSE" meta/dist/*.whl fi diff --git a/packages/test.sh b/packages/test.sh index 7e5395270b8..3d46d31fb0e 100755 --- a/packages/test.sh +++ b/packages/test.sh @@ -37,20 +37,20 @@ TEST_PYTHON=${TEST_PYTHON:-"python3"} TEST_ENV_DIR=${TEST_ENV_DIR:-$(mktemp -d -t gxpkgtestenvXXXXXX)} if command -v uv >/dev/null; then - uv venv "$TEST_ENV_DIR" --python "$TEST_PYTHON" - PIP="$(command -v uv) pip" + uv venv --python "$TEST_PYTHON" "$TEST_ENV_DIR" + PIP_CMD="$(command -v uv) pip" else "$TEST_PYTHON" -m venv "$TEST_ENV_DIR" - PIP="pip" + PIP_CMD='python -m pip' fi # shellcheck disable=SC1091 . "${TEST_ENV_DIR}/bin/activate" -if ! command -v uv >/dev/null; then - pip install --upgrade pip setuptools wheel +if [ "${PIP_CMD}" = 'python -m pip' ]; then + ${PIP_CMD} install --upgrade pip setuptools wheel fi if [ $FOR_PULSAR -eq 0 ]; then - ${PIP} install -r ../lib/galaxy/dependencies/pinned-typecheck-requirements.txt + ${PIP_CMD} install -r ../lib/galaxy/dependencies/pinned-typecheck-requirements.txt fi # Ensure ordered by dependency DAG @@ -74,13 +74,13 @@ while read -r package_dir || [ -n "$package_dir" ]; do # https://stackoverflow. # Install extras (if needed) if [ "$package_dir" = "util" ]; then - ${PIP} install '.[image-util,template,jstree,config-template,test]' + ${PIP_CMD} install '.[image-util,template,jstree,config-template,test]' elif [ "$package_dir" = "tool_util" ]; then - ${PIP} install '.[cwl,mulled,edam,extended-assertions,test]' + ${PIP_CMD} install '.[cwl,mulled,edam,extended-assertions,test]' elif grep -q 'test =' setup.cfg 2>/dev/null; then - ${PIP} install '.[test]' + ${PIP_CMD} install '.[test]' else - ${PIP} install . + ${PIP_CMD} install . fi if [ $FOR_PULSAR -eq 0 ]; then diff --git a/scripts/common_startup.sh b/scripts/common_startup.sh index 789ba100b6a..e3f117b3b59 100755 --- a/scripts/common_startup.sh +++ b/scripts/common_startup.sh @@ -133,7 +133,7 @@ if [ $SET_VENV -eq 1 ] && [ $CREATE_VENV -eq 1 ]; then echo "To avoid this, use the --no-create-venv flag or set \$GALAXY_VIRTUAL_ENV to an" echo "existing environment before starting Galaxy." if command -v uv >/dev/null; then - uv venv "$GALAXY_VIRTUAL_ENV" --python "$GALAXY_PYTHON" + uv venv --python "$GALAXY_PYTHON" "$GALAXY_VIRTUAL_ENV" else # First try to use the venv standard library module, although it is # not always installed by default on Linux distributions. @@ -168,6 +168,14 @@ if [ $SET_VENV -eq 1 ] && [ $CREATE_VENV -eq 1 ]; then fi fi +if command -v uv >/dev/null; then + PIP_CMD="$(command -v uv) pip" + UNINSTALL_OPTIONS='' +else + PIP_CMD='python -m pip' + UNINSTALL_OPTIONS='--yes' +fi + # activate virtualenv or conda env, sets $GALAXY_VIRTUAL_ENV and $GALAXY_CONDA_ENV setup_python @@ -188,32 +196,19 @@ fi [ "$CI" = 'true' ] && export PIP_PROGRESS_BAR=off if [ $FETCH_WHEELS -eq 1 ]; then - if command -v uv >/dev/null; then - uv pip install $requirement_args --index-url "${GALAXY_WHEELS_INDEX_URL}" --extra-index-url "${PYPI_INDEX_URL}" - - set_galaxy_config_file_var - GALAXY_CONDITIONAL_DEPENDENCIES=$(PYTHONPATH=lib python -c "from __future__ import print_function; import galaxy.dependencies; print('\n'.join(galaxy.dependencies.optional('$GALAXY_CONFIG_FILE')))") - if [ -n "$GALAXY_CONDITIONAL_DEPENDENCIES" ]; then - if uv pip list --format=columns | grep "psycopg2[\(\ ]*2.7.3" > /dev/null; then - echo "An older version of psycopg2 (non-binary, version 2.7.3) has been detected. Galaxy now uses psycopg2-binary, which will be installed after removing psycopg2." - uv pip uninstall psycopg2 psycopg2-binary - fi - echo "$GALAXY_CONDITIONAL_DEPENDENCIES" | uv pip install -r /dev/stdin --index-url "${GALAXY_WHEELS_INDEX_URL}" --extra-index-url "${PYPI_INDEX_URL}" - fi - else - python -m pip install "pip>=$MIN_PIP_VERSION" wheel - # shellcheck disable=SC2086 - pip install $requirement_args --index-url "${GALAXY_WHEELS_INDEX_URL}" --extra-index-url "${PYPI_INDEX_URL}" - - set_galaxy_config_file_var - GALAXY_CONDITIONAL_DEPENDENCIES=$(PYTHONPATH=lib python -c "from __future__ import print_function; import galaxy.dependencies; print('\n'.join(galaxy.dependencies.optional('$GALAXY_CONFIG_FILE')))") - if [ -n "$GALAXY_CONDITIONAL_DEPENDENCIES" ]; then - if pip list --format=columns | grep "psycopg2[\(\ ]*2.7.3" > /dev/null; then - echo "An older version of psycopg2 (non-binary, version 2.7.3) has been detected. Galaxy now uses psycopg2-binary, which will be installed after removing psycopg2." - pip uninstall -y psycopg2 psycopg2-binary - fi - echo "$GALAXY_CONDITIONAL_DEPENDENCIES" | pip install -r /dev/stdin --index-url "${GALAXY_WHEELS_INDEX_URL}" --extra-index-url "${PYPI_INDEX_URL}" + if [ "${PIP_CMD}" = 'python -m pip' ]; then + ${PIP_CMD} install "pip>=${MIN_PIP_VERSION}" wheel + fi + # shellcheck disable=SC2086 + ${PIP_CMD} install $requirement_args --index-url "${GALAXY_WHEELS_INDEX_URL}" --extra-index-url "${PYPI_INDEX_URL}" + set_galaxy_config_file_var + GALAXY_CONDITIONAL_DEPENDENCIES=$(PYTHONPATH=lib python -c "from __future__ import print_function; import galaxy.dependencies; print('\n'.join(galaxy.dependencies.optional('$GALAXY_CONFIG_FILE')))") + if [ -n "$GALAXY_CONDITIONAL_DEPENDENCIES" ]; then + if ${PIP_CMD} list --format=columns | grep "psycopg2[\(\ ]*2.7.3" > /dev/null; then + echo "An older version of psycopg2 (non-binary, version 2.7.3) has been detected. Galaxy now uses psycopg2-binary, which will be installed after removing psycopg2." + ${PIP_CMD} uninstall ${UNINSTALL_OPTIONS} psycopg2 psycopg2-binary fi + echo "$GALAXY_CONDITIONAL_DEPENDENCIES" | ${PIP_CMD} install -r /dev/stdin --index-url "${GALAXY_WHEELS_INDEX_URL}" --extra-index-url "${PYPI_INDEX_URL}" fi fi