From 731ca658a163ae17fe2917b06bae63aa41ff572f Mon Sep 17 00:00:00 2001 From: Nicola Soranzo Date: Wed, 8 Apr 2026 01:56:30 +0100 Subject: [PATCH 1/3] Fix running twine commands in package Makefiles --- packages/package.Makefile | 14 ++++++-------- packages/web_client/Makefile | 21 ++++++++++----------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/packages/package.Makefile b/packages/package.Makefile index 941de94c3e0..abcd5037ab9 100644 --- a/packages/package.Makefile +++ b/packages/package.Makefile @@ -31,7 +31,7 @@ clean: clean-build clean-pyc clean-tests clean-build: rm -fr build/ - rm -fr dist/ + rm -fr $(DIST)/ rm -fr galaxy_*.egg-info clean-pyc: @@ -65,8 +65,6 @@ _mypy: mypy: _setup-mypy-venv _mypy -_twine-exists: ; @which twine > /dev/null - _setup-lint-venv: setup-venv uv pip install -r ../../lib/galaxy/dependencies/pinned-lint-requirements.txt @@ -75,8 +73,8 @@ _lint: lint: _setup-lint-venv _lint -lint-dist: _twine-exists dist - $(IN_VENV) twine check dist/* +lint-dist: + uvx twine check $(DIST)/* # black doesn't actually work on symlinked files because they are outside # the current directory @@ -90,10 +88,10 @@ lint-dist: _twine-exists dist #format: _setup-format-venv _isort _black _release-test-artifacts: - $(IN_VENV) twine upload -r test dist/* + uvx twine upload -r test $(DIST)/* $(OPEN_RESOURCE) https://testpypi.python.org/pypi/$(PROJECT_NAME) -release-test-artifacts: lint-dist _release-test-artifacts +release-test-artifacts: dist lint-dist _release-test-artifacts _release-artifacts: @while [ -z "$$CONTINUE" ]; do \ @@ -101,7 +99,7 @@ _release-artifacts: done ; \ [ $$CONTINUE = "y" ] || [ $$CONTINUE = "Y" ] || (echo "Exiting."; exit 1;) @echo "Releasing" - $(IN_VENV) twine upload dist/* + uvx twine upload $(DIST)/* release-artifacts: release-test-artifacts _release-artifacts diff --git a/packages/web_client/Makefile b/packages/web_client/Makefile index 4c9a855da24..cb656561f1f 100644 --- a/packages/web_client/Makefile +++ b/packages/web_client/Makefile @@ -13,6 +13,7 @@ PROJECT_NAME?=galaxy-$(shell basename $(CURDIR)) PROJECT_NAME:=$(subst _,-,$(PROJECT_NAME)) BRANCH?=$(shell git rev-parse --abbrev-ref HEAD) TEST_DIR?=tests +DIST=dist TESTS?=$(SOURCE_DIR) $(TEST_DIR) .PHONY: clean-pyc clean-build docs clean @@ -30,7 +31,7 @@ clean: clean-build clean-pyc clean-tests clean-web-client clean-build: rm -fr build/ - rm -fr dist/ + rm -fr $(DIST)/ rm -fr galaxy_*.egg-info clean-pyc: @@ -48,15 +49,15 @@ clean-web-client: rm -rf galaxy/web_client/dist galaxy/web_client/client_build_hash.txt setup-venv: - if [ ! -d $(VENV) ]; then python -m venv $(VENV); exit; fi; + if [ ! -d $(VENV) ]; then python3 -m venv $(VENV); exit; fi; $(IN_VENV) pip install -r dev-requirements.txt test: $(IN_VENV) pytest $(TESTS) dist: clean $(VENV)/bin/yarn galaxy/web_client/client_build_hash.txt - $(IN_VENV) python -m build - ls -l dist + $(IN_VENV) python -m build -o $(DIST) + ls -l $(DIST) $(VENV)/bin/yarn: setup-venv $(IN_VENV) pip install build nodeenv @@ -68,16 +69,14 @@ galaxy/web_client/client_build_hash.txt: mv ../../client/dist galaxy/web_client git rev-parse HEAD > galaxy/web_client/client_build_hash.txt -_twine-exists: ; @which twine > /dev/null - -lint-dist: _twine-exists dist - $(IN_VENV) twine check dist/* +lint-dist: + uvx twine check $(DIST)/* _release-test-artifacts: - $(IN_VENV) twine upload -r test dist/* + uvx twine upload -r test $(DIST)/* $(OPEN_RESOURCE) https://testpypi.python.org/pypi/$(PROJECT_NAME) -release-test-artifacts: lint-dist _release-test-artifacts +release-test-artifacts: dist lint-dist _release-test-artifacts _release-artifacts: @while [ -z "$$CONTINUE" ]; do \ @@ -85,7 +84,7 @@ _release-artifacts: done ; \ [ $$CONTINUE = "y" ] || [ $$CONTINUE = "Y" ] || (echo "Exiting."; exit 1;) @echo "Releasing" - $(IN_VENV) twine upload dist/* + uvx twine upload $(DIST)/* release-artifacts: release-test-artifacts _release-artifacts From afaa2515fe515e4e75bdcac2ae6600e0b05149db Mon Sep 17 00:00:00 2001 From: Nicola Soranzo Date: Wed, 8 Apr 2026 14:41:20 +0100 Subject: [PATCH 2/3] Pin twine version Also: - Drop unused `sphinx` from `package-dev-requirements.txt` - Sync `client/.node_version` with `nodejs-wheel` version in `lib/galaxy/dependencies/pinned-requirements.txt` - Sync `packages/web_client/Makefile` with `packages/package.Makefile` - Rewrite the Makefile target to buid the client in `packages/web_client/Makefile` --- client/.node_version | 2 +- packages/package-dev-requirements.txt | 3 +- packages/package.Makefile | 21 ++++++----- packages/web_client/Makefile | 53 ++++++++++++++++----------- 4 files changed, 46 insertions(+), 33 deletions(-) diff --git a/client/.node_version b/client/.node_version index 6fa8dec4cd6..442c7587a99 100644 --- a/client/.node_version +++ b/client/.node_version @@ -1 +1 @@ -22.13.0 +22.20.0 diff --git a/packages/package-dev-requirements.txt b/packages/package-dev-requirements.txt index 605f8abb12e..2c4fc63731b 100644 --- a/packages/package-dev-requirements.txt +++ b/packages/package-dev-requirements.txt @@ -1,7 +1,6 @@ # For dev -sphinx mypy # For release build -twine +twine==6.2.0 diff --git a/packages/package.Makefile b/packages/package.Makefile index abcd5037ab9..ad14c1d877f 100644 --- a/packages/package.Makefile +++ b/packages/package.Makefile @@ -44,15 +44,15 @@ clean-tests: rm -fr .tox/ setup-venv: - uv sync --all-extras + uv sync --inexact --all-extras -_test: +_test: uv run pytest $(TESTS) test: setup-venv _test _dist: - uv build --out-dir $(DIST) + uv build -o $(DIST) ls -l $(DIST) dist: setup-venv clean _dist @@ -73,8 +73,11 @@ _lint: lint: _setup-lint-venv _lint -lint-dist: - uvx twine check $(DIST)/* +_setup-dev-venv: + uv pip install -r dev-requirements.txt + +lint-dist: _setup-dev-venv + uv run twine check $(DIST)/* # black doesn't actually work on symlinked files because they are outside # the current directory @@ -87,19 +90,19 @@ lint-dist: # uv run black --config ../pyproject.toml . #format: _setup-format-venv _isort _black -_release-test-artifacts: - uvx twine upload -r test $(DIST)/* +_release-test-artifacts: _setup-dev-venv + uv run twine upload -r test $(DIST)/* $(OPEN_RESOURCE) https://testpypi.python.org/pypi/$(PROJECT_NAME) release-test-artifacts: dist lint-dist _release-test-artifacts -_release-artifacts: +_release-artifacts: _setup-dev-venv @while [ -z "$$CONTINUE" ]; do \ read -r -p "Have you executed release-test and reviewed results? [y/N]: " CONTINUE; \ done ; \ [ $$CONTINUE = "y" ] || [ $$CONTINUE = "Y" ] || (echo "Exiting."; exit 1;) @echo "Releasing" - uvx twine upload $(DIST)/* + uv run twine upload $(DIST)/* release-artifacts: release-test-artifacts _release-artifacts diff --git a/packages/web_client/Makefile b/packages/web_client/Makefile index cb656561f1f..197b51275f9 100644 --- a/packages/web_client/Makefile +++ b/packages/web_client/Makefile @@ -49,42 +49,56 @@ clean-web-client: rm -rf galaxy/web_client/dist galaxy/web_client/client_build_hash.txt setup-venv: - if [ ! -d $(VENV) ]; then python3 -m venv $(VENV); exit; fi; - $(IN_VENV) pip install -r dev-requirements.txt + uv sync --inexact --all-extras -test: - $(IN_VENV) pytest $(TESTS) +_test: + uv run pytest $(TESTS) -dist: clean $(VENV)/bin/yarn galaxy/web_client/client_build_hash.txt - $(IN_VENV) python -m build -o $(DIST) +test: setup-venv _test + +_dist: galaxy/web_client/client_build_hash.txt + uv build -o $(DIST) ls -l $(DIST) -$(VENV)/bin/yarn: setup-venv - $(IN_VENV) pip install build nodeenv - $(IN_VENV) nodeenv -n $(shell cat ../../client/.node_version) -p - $(IN_VENV) npm install --global yarn +dist: clean _dist galaxy/web_client/client_build_hash.txt: - $(IN_VENV) cd ../..; make client-production - mv ../../client/dist galaxy/web_client + # Use the main Galaxy virtualenv, since that's what `make client-production` uses + cd ../..; \ + uv venv --allow-existing $(VENV); \ + $(IN_VENV) \ + uv pip install "nodejs-wheel==$$(cat client/.node_version)"; \ + make client-production + mv ../../client/dist galaxy/web_client/ git rev-parse HEAD > galaxy/web_client/client_build_hash.txt -lint-dist: - uvx twine check $(DIST)/* +_setup-mypy-venv: setup-venv + uv pip install -r ../../lib/galaxy/dependencies/pinned-typecheck-requirements.txt -_release-test-artifacts: - uvx twine upload -r test $(DIST)/* +_mypy: + uv run mypy . + +mypy: _setup-mypy-venv _mypy + +_setup-dev-venv: + uv pip install -r dev-requirements.txt + +lint-dist: _setup-dev-venv + uv run twine check $(DIST)/* + +_release-test-artifacts: _setup-dev-venv + uv run twine upload -r test $(DIST)/* $(OPEN_RESOURCE) https://testpypi.python.org/pypi/$(PROJECT_NAME) release-test-artifacts: dist lint-dist _release-test-artifacts -_release-artifacts: +_release-artifacts: _setup-dev-venv @while [ -z "$$CONTINUE" ]; do \ read -r -p "Have you executed release-test and reviewed results? [y/N]: " CONTINUE; \ done ; \ [ $$CONTINUE = "y" ] || [ $$CONTINUE = "Y" ] || (echo "Exiting."; exit 1;) @echo "Releasing" - uvx twine upload $(DIST)/* + uv run twine upload $(DIST)/* release-artifacts: release-test-artifacts _release-artifacts @@ -102,6 +116,3 @@ push-release: echo "Makefile doesn't manually push release." release: release-local push-release - -mypy: - mypy . From 07d9e5d474f70aa3c5f9ac08c0c19bfa17b0b4fc Mon Sep 17 00:00:00 2001 From: Nicola Soranzo Date: Wed, 8 Apr 2026 14:49:23 +0100 Subject: [PATCH 3/3] Remove release-test-artifacts and release-artifacts Makefile targets Superseded by Trusted Publishing via CI. --- packages/package.Makefile | 16 ---------------- packages/web_client/Makefile | 16 ---------------- 2 files changed, 32 deletions(-) diff --git a/packages/package.Makefile b/packages/package.Makefile index ad14c1d877f..4f02edcd0c5 100644 --- a/packages/package.Makefile +++ b/packages/package.Makefile @@ -90,22 +90,6 @@ lint-dist: _setup-dev-venv # uv run black --config ../pyproject.toml . #format: _setup-format-venv _isort _black -_release-test-artifacts: _setup-dev-venv - uv run twine upload -r test $(DIST)/* - $(OPEN_RESOURCE) https://testpypi.python.org/pypi/$(PROJECT_NAME) - -release-test-artifacts: dist lint-dist _release-test-artifacts - -_release-artifacts: _setup-dev-venv - @while [ -z "$$CONTINUE" ]; do \ - read -r -p "Have you executed release-test and reviewed results? [y/N]: " CONTINUE; \ - done ; \ - [ $$CONTINUE = "y" ] || [ $$CONTINUE = "Y" ] || (echo "Exiting."; exit 1;) - @echo "Releasing" - uv run twine upload $(DIST)/* - -release-artifacts: release-test-artifacts _release-artifacts - commit-version: $(IN_VENV) DEV_RELEASE=$(DEV_RELEASE) python $(BUILD_SCRIPTS_DIR)/commit_version.py $(VERSION) diff --git a/packages/web_client/Makefile b/packages/web_client/Makefile index 197b51275f9..538c5d31a0b 100644 --- a/packages/web_client/Makefile +++ b/packages/web_client/Makefile @@ -86,22 +86,6 @@ _setup-dev-venv: lint-dist: _setup-dev-venv uv run twine check $(DIST)/* -_release-test-artifacts: _setup-dev-venv - uv run twine upload -r test $(DIST)/* - $(OPEN_RESOURCE) https://testpypi.python.org/pypi/$(PROJECT_NAME) - -release-test-artifacts: dist lint-dist _release-test-artifacts - -_release-artifacts: _setup-dev-venv - @while [ -z "$$CONTINUE" ]; do \ - read -r -p "Have you executed release-test and reviewed results? [y/N]: " CONTINUE; \ - done ; \ - [ $$CONTINUE = "y" ] || [ $$CONTINUE = "Y" ] || (echo "Exiting."; exit 1;) - @echo "Releasing" - uv run twine upload $(DIST)/* - -release-artifacts: release-test-artifacts _release-artifacts - commit-version: $(IN_VENV) DEV_RELEASE=$(DEV_RELEASE) python $(BUILD_SCRIPTS_DIR)/commit_version.py $(VERSION)