diff --git a/.github/workflows/api.yaml b/.github/workflows/api.yaml index af1b55c112f3..3005df3cb603 100644 --- a/.github/workflows/api.yaml +++ b/.github/workflows/api.yaml @@ -51,14 +51,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/converter_tests.yaml b/.github/workflows/converter_tests.yaml index cf0c4cefc1af..e4fb8051f86e 100644 --- a/.github/workflows/converter_tests.yaml +++ b/.github/workflows/converter_tests.yaml @@ -34,14 +34,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - name: Clone galaxyproject/galaxy-test-data uses: actions/checkout@v5 with: diff --git a/.github/workflows/cwl_conformance.yaml b/.github/workflows/cwl_conformance.yaml index 116164403c00..c14f724e03ff 100644 --- a/.github/workflows/cwl_conformance.yaml +++ b/.github/workflows/cwl_conformance.yaml @@ -43,14 +43,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/first_startup.yaml b/.github/workflows/first_startup.yaml index 212e078668df..c45df624d81a 100644 --- a/.github/workflows/first_startup.yaml +++ b/.github/workflows/first_startup.yaml @@ -34,14 +34,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - name: Set up Python uses: actions/setup-python@v6 with: diff --git a/.github/workflows/framework_tools.yaml b/.github/workflows/framework_tools.yaml index c347b33f91a0..edc415b3d168 100644 --- a/.github/workflows/framework_tools.yaml +++ b/.github/workflows/framework_tools.yaml @@ -46,14 +46,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/framework_workflows.yaml b/.github/workflows/framework_workflows.yaml index 160658029d6a..375c0dafef35 100644 --- a/.github/workflows/framework_workflows.yaml +++ b/.github/workflows/framework_workflows.yaml @@ -47,14 +47,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml index ca576b47a8ac..7cc13b2ea5bc 100644 --- a/.github/workflows/integration.yaml +++ b/.github/workflows/integration.yaml @@ -55,14 +55,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/integration_selenium.yaml b/.github/workflows/integration_selenium.yaml index b008525e7e57..27ba24dc0f8d 100644 --- a/.github/workflows/integration_selenium.yaml +++ b/.github/workflows/integration_selenium.yaml @@ -68,14 +68,6 @@ jobs: with: path: 'galaxy root/.venv' key: gxy-venv-${{ runner.os }}-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('galaxy root/requirements.txt') }}-integration-selenium - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - name: Restore client cache uses: actions/cache@v4 with: diff --git a/.github/workflows/main_tools.yaml b/.github/workflows/main_tools.yaml index b68a76fde437..00646929d7b4 100644 --- a/.github/workflows/main_tools.yaml +++ b/.github/workflows/main_tools.yaml @@ -39,14 +39,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/osx_startup.yaml b/.github/workflows/osx_startup.yaml index 883f94450a4a..46cea3511416 100644 --- a/.github/workflows/osx_startup.yaml +++ b/.github/workflows/osx_startup.yaml @@ -32,14 +32,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - name: Cache pip dir uses: actions/cache@v4 with: diff --git a/.github/workflows/performance.yaml b/.github/workflows/performance.yaml index b90ff8eeae4e..47551a865214 100644 --- a/.github/workflows/performance.yaml +++ b/.github/workflows/performance.yaml @@ -45,14 +45,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/reports_startup.yaml b/.github/workflows/reports_startup.yaml index e99182ba6171..f3f9b0f85732 100644 --- a/.github/workflows/reports_startup.yaml +++ b/.github/workflows/reports_startup.yaml @@ -29,14 +29,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - name: Set up Python uses: actions/setup-python@v6 with: diff --git a/.github/workflows/selenium.yaml b/.github/workflows/selenium.yaml index 382c6ca4deba..8d2fc7016dab 100644 --- a/.github/workflows/selenium.yaml +++ b/.github/workflows/selenium.yaml @@ -54,14 +54,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/test_galaxy_packages.yaml b/.github/workflows/test_galaxy_packages.yaml index e0e87096c853..c928c51a3d6b 100644 --- a/.github/workflows/test_galaxy_packages.yaml +++ b/.github/workflows/test_galaxy_packages.yaml @@ -24,14 +24,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/toolshed.yaml b/.github/workflows/toolshed.yaml index bc736d21ee20..e3ee589e628a 100644 --- a/.github/workflows/toolshed.yaml +++ b/.github/workflows/toolshed.yaml @@ -40,14 +40,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/unit-postgres.yaml b/.github/workflows/unit-postgres.yaml index 73a06059d9d8..f811de120f0c 100644 --- a/.github/workflows/unit-postgres.yaml +++ b/.github/workflows/unit-postgres.yaml @@ -39,14 +39,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/unit.yaml b/.github/workflows/unit.yaml index 5b57d57b84be..3d711dc6715e 100644 --- a/.github/workflows/unit.yaml +++ b/.github/workflows/unit.yaml @@ -28,14 +28,6 @@ jobs: with: path: 'galaxy root' persist-credentials: false - - name: Read Node.js version - id: node-version - run: echo "version=$(cat 'galaxy root/client/.node_version')" >> $GITHUB_OUTPUT - - uses: actions/setup-node@v5 - with: - node-version: ${{ steps.node-version.outputs.version }} - cache: 'yarn' - cache-dependency-path: 'galaxy root/client/yarn.lock' - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/Makefile b/Makefile index 60f7fdf00af1..72f32693e3bd 100644 --- a/Makefile +++ b/Makefile @@ -180,19 +180,15 @@ skip-client: ## Run only the server, skipping the client build. node-deps: ## Install NodeJS dependencies. ifndef YARN - @echo $(NO_YARN_MSG) - false; -else - $(IN_VENV) yarn install $(YARN_INSTALL_OPTS) + npm install -g yarn; endif + $(IN_VENV) yarn install $(YARN_INSTALL_OPTS) client-node-deps: ## Install NodeJS dependencies for the client. ifndef YARN - @echo $(NO_YARN_MSG) - false; -else - $(IN_VENV) cd client && yarn install $(YARN_INSTALL_OPTS) + npm install -g yarn; endif + $(IN_VENV) cd client && yarn install $(YARN_INSTALL_OPTS) format-xsd: xmllint --format --output galaxy-tmp.xsd lib/galaxy/tool_util/xsd/galaxy.xsd diff --git a/lib/galaxy/dependencies/pinned-requirements.txt b/lib/galaxy/dependencies/pinned-requirements.txt index 8c7c23a7263d..80ded94856d6 100644 --- a/lib/galaxy/dependencies/pinned-requirements.txt +++ b/lib/galaxy/dependencies/pinned-requirements.txt @@ -124,7 +124,7 @@ mypy-extensions==1.1.0 networkx==3.2.1 ; python_full_version < '3.10' networkx==3.4.2 ; python_full_version == '3.10.*' networkx==3.5 ; python_full_version >= '3.11' -nodeenv==1.9.1 +nodejs-wheel==22.13.0 numpy==2.0.2 ; python_full_version < '3.10' numpy==2.2.6 ; python_full_version == '3.10.*' numpy==2.3.3 ; python_full_version >= '3.11' diff --git a/packages/app/setup.cfg b/packages/app/setup.cfg index 262815fa8435..c6c6ef4bfa75 100644 --- a/packages/app/setup.cfg +++ b/packages/app/setup.cfg @@ -60,6 +60,7 @@ install_requires = Markdown MarkupSafe mercurial>=6.8.2 + nodejs-wheel>=22,<23 packaging paramiko!=2.9.0,!=2.9.1 pebble diff --git a/pyproject.toml b/pyproject.toml index 316fa1abee7c..44929dbbefe0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,7 +60,7 @@ dependencies = [ "mercurial>=6.8.2", # Python 3.13 support "mrcfile", "msal", - "nodeenv", + "nodejs-wheel==22", "numpy>=1.26.0", # Python 3.12 support "numpy>=2.1.0 ; python_version>='3.10'", # Python 3.13 support "openpyxl>=3.1.5", # Minimum version ever tested with diff --git a/scripts/common_startup.sh b/scripts/common_startup.sh index b951cfb94812..9770d6243d61 100755 --- a/scripts/common_startup.sh +++ b/scripts/common_startup.sh @@ -10,9 +10,7 @@ CREATE_VENV=1 COPY_SAMPLE_FILES=1 SET_VENV=1 SKIP_CLIENT_BUILD=${GALAXY_SKIP_CLIENT_BUILD:-0} -SKIP_NODE=${GALAXY_SKIP_NODE:-0} INSTALL_PREBUILT_CLIENT=${GALAXY_INSTALL_PREBUILT_CLIENT:-0} -NODE_VERSION=${GALAXY_NODE_VERSION:-"$(cat client/.node_version)"} : "${YARN_INSTALL_OPTS:=--network-timeout 300000 --check-files}" : "${GALAXY_CONDA_PYTHON_VERSION:=3.9}" @@ -28,7 +26,6 @@ for arg in "$@"; do [ "$arg" = "--stop-daemon" ] && FETCH_WHEELS=0 [ "$arg" = "--skip-samples" ] && COPY_SAMPLE_FILES=0 [ "$arg" = "--skip-client-build" ] && SKIP_CLIENT_BUILD=1 - [ "$arg" = "--skip-node" ] && SKIP_NODE=1 done SAMPLES=" @@ -198,23 +195,6 @@ if [ $FETCH_WHEELS -eq 1 ]; then fi fi -# Install node if not installed -if [ $SKIP_NODE -eq 0 ]; then - if ! command -v node >/dev/null || [ "$(node --version)" != "v${NODE_VERSION}" ]; then - if [ -n "$CONDA_DEFAULT_ENV" ] && [ -n "$CONDA_EXE" ]; then - echo "Installing node into '$CONDA_DEFAULT_ENV' Conda environment with conda." - $CONDA_EXE install --yes --override-channels --channel conda-forge --name "$CONDA_DEFAULT_ENV" nodejs="$NODE_VERSION" - elif [ -n "$VIRTUAL_ENV" ]; then - echo "Installing node into $VIRTUAL_ENV with nodeenv." - if [ -d "${VIRTUAL_ENV}/lib/node_modules" ]; then - echo "Removing old ${VIRTUAL_ENV}/lib/node_modules directory." - rm -rf "${VIRTUAL_ENV}/lib/node_modules" - fi - nodeenv -n "$NODE_VERSION" -p - fi - fi -fi - # Check client build state. if [ $SKIP_CLIENT_BUILD -eq 0 ]; then if [ -f static/client_build_hash.txt ]; then