Commit Graph

86872 Commits

Author SHA1 Message Date
Nicola Soranzo 2c9f05c090 Merge pull request #23355 from mvdbeek/backport-minikube-cni-25-1
[25.1] Create /etc/cni/net.d before minikube's none driver chmods it [25.1]
2026-08-24 16:53:41 +01:00
Alireza Heidari 7f5348458f Create /etc/cni/net.d before minikube's none driver chmods it
medyagh/setup-minikube runs 'sudo chmod 755 /etc/cni/net.d' for the none
driver but never creates the directory, and current ubuntu-latest images no
longer ship it, so every integration shard fails before checkout with
'chmod: cannot access /etc/cni/net.d: No such file or directory'.

Upstream fix is medyagh/setup-minikube#836, unmerged since 2026-07-30, and
the action is used unpinned, so pre-create the directory here instead.

(cherry picked from commit 7b7240e0e5)
2026-08-24 15:54:58 +02:00
Marius van den Beek 7e88f2e027 Merge pull request #23216 from nsoranzo/release_25.1_fix_23203
[25.1] Fix broken calls to ``InteractiveToolManager`` methods
2026-07-31 08:58:39 +02:00
Nicola Soranzo 06e587c20c Fix broken calls to `InteractiveToolManager` methods
Fix https://github.com/galaxyproject/galaxy/issues/23203 .
Introduced in commit aa13a63352 .

Also:
- Add type annotation to affected ``KubernetesJobRunner.__get_k8s_ingress_spec()``
  method.
2026-07-30 13:10:25 +01:00
mvdbeek c51a0fde1f Merge branch 'release_25.0' into release_25.1 2026-07-06 15:27:18 +02:00
Marius van den Beek ec10c792f9 Merge pull request #23057 from ksuderman/release_25.0-ansible-pin
[25.0] Pin Ansible version
2026-07-03 10:32:37 +02:00
Keith Suderman 2430a483e4 Remove GHCR Docker build 2026-07-02 16:25:05 -04:00
Keith Suderman 20af0f5631 Pin Ansible version to prevent tool-chain breakages 2026-07-02 16:24:38 -04:00
John Y. Davis 1de6dfa8ec Merge pull request #23053 from ccoulombe/fix/cleanup-failed-jobs-nameerror
[25.0] Fix NameError, move assignation of days prior to get_failed_jobs call
2026-07-02 17:01:59 +02:00
Charles Coulombe 00db9e0f16 Fix NameError, move assignation of days prior to get_failed_jobs call 2026-07-02 10:54:57 -04:00
Alireza Heidari b26953ac0b Merge pull request #22858 from arash77/fix-optional-credentials-workflow-blocking
[25.1] Fix: Allow workflows with optional credentials to run without credentials set
2026-06-15 10:54:37 +02:00
Arash afca58d981 Fix prettier formatting in ToolForm.vue 2026-06-09 17:16:54 +02:00
Arash ed56b88c4f Remove ToolForm.vue workaround - now handled by composable 2026-06-09 15:07:00 +02:00
Arash 377d41123e Fix: Allow workflows with optional credentials to run without credentials set
Fixes a bug where workflows containing tools with only optional credentials
were blocked from running when the user hadn't set up any credentials yet.

The issue was in the hasUserProvidedAllRequiredServiceCredentials computed
property in userToolCredentials.ts, which returned false when
currentUserToolServices was empty, without checking if there were actually
any required credentials.

Changes:
- Modified client/src/composables/userToolCredentials.ts to check
  toolHasRequiredServiceCredentials before returning false when no
  credentials are configured
- Added test case to verify tools with only optional credentials don't
  block workflow execution
2026-06-09 10:53:46 +02:00
David López c0df64da72 Merge pull request #22802 from nilchia/update_spdata_class
[25.1] update the binary.py for spatialdata so it also works if the file has…
2026-06-02 11:34:39 +02:00
Amirhossein Naghsh Nilchi 1f38d21587 it works now even in nested directories 2026-06-01 19:49:34 +02:00
Amirhossein Naghsh Nilchi 137b6f4e12 update the binary.py for spatialdata so it also works if the file has no extension 2026-06-01 17:12:42 +02:00
Marius van den Beek d3624268c3 Merge pull request #22778 from mvdbeek/backport_fastapi_starlette_upgrade
[25.1] Backport FastAPI/Starlette upgrade for BadHost (CVE-2026-48710)
2026-05-29 10:28:58 +02:00
mvdbeek 6b07f5492f [25.1] Backport FastAPI/Starlette upgrade for BadHost (CVE-2026-48710)
Updates the pinned FastAPI/Starlette versions on release_25.1 to match
upstream/dev, closing CVE-2026-48710 ("BadHost"). The vulnerability lets
an attacker inject a path into the HTTP Host header and have
``request.url.path`` reflect that path, bypassing path-based access
control in middleware. Starlette 1.0.1+ rejects Host headers with
invalid characters; we pin starlette==1.1.0 to match dev.

Drops Python 3.9 support, matching upstream/dev (commit eb9fde1dcd).
Starlette dropped 3.9 in 0.50.0, so the BadHost fix (starlette >= 1.0.1)
cannot be installed on 3.9. Bumping the floor to 3.10 is the only way
to ship the security fix; the alternative -- marker-splitting the pins
to keep 3.9 on starlette 0.49.x -- would leave 3.9 users exposed to the
CVE we are trying to close.

Actual exposure on release_25.1 (pre-fix)
-----------------------------------------

Galaxy was running a vulnerable starlette but is **not exploitable for
the headline auth-bypass scenario**. Auth runs through FastAPI
dependencies (``get_user``, ``get_trans``, ``AdminUserRequired``), not
through path-string checks in middleware. ``AccessLoggingMiddleware``
already uses ``scope["path"]``; ``add_galaxy_middleware`` /
``GalaxyCORSMiddleware`` / ``RawContextMiddleware`` /
``SentryAsgiMiddleware`` do not branch on ``request.url.path``.

Lower-severity findings that this upgrade also closes:

- ``lib/galaxy/webapps/base/api.py`` ``get_error_response_for_request``
  picks an error schema with ``"ga4gh"/"drs"/"trs" in
  request.url.path`` -- spoofable Host nudges error payload shape
  (info-disclosure / shape confusion only).
- ``lib/galaxy/webapps/galaxy/api/drs.py`` and
  ``lib/galaxy/webapps/galaxy/services/datasets.py`` derive DRS
  ``service_info`` / ``self_uri`` from ``request.url`` -- spoofable
  Host poisons the advertised DRS identity and client-visible URIs,
  not access.
- ``lib/tool_shed/webapp/api2/tools.py`` -- same shape, TRS service
  info.

Bumping the pin closes the parser flaw at source and downgrades all of
the above to non-issues, so no separate ``request.url.path ->
scope["path"]`` sweep is needed.

Pin bumps (cherry-picks the relevant ranges from PRs #21526, #22206,
#22754):

- fastapi 0.118.0 -> 0.136.3
- starlette 0.48.0 -> 1.1.0
- starlette-context 0.4.0 -> 0.5.1
- python-multipart 0.0.20 -> 0.0.29
- anyio 4.11.0 -> 4.13.0

Required code changes backported from upstream/dev:

- ``lib/galaxy/webapps/openapi/_compat/v2.py``: import
  ``GenerateJsonSchema`` and ``get_flat_models_from_fields`` from
  ``fastapi._compat.v2`` and adopt the new ``get_definitions()``
  implementation for FastAPI 0.128.8+ (PRs #21384, dev commits
  0800c025ce, c8ccc7f44d, b3bfb45884).
- ``lib/galaxy/webapps/openapi/utils.py``: route ``GenerateJsonSchema``
  through ``_compat.v2`` and drop the now-unreachable
  ``get_compat_model_name_map`` fallback (dev commit b3bfb45884).
- ``lib/galaxy/schema/generics.py``: drop ``CustomJsonSchema`` here
  (moved to fast_app.py so it can use the patched ``GenerateJsonSchema``
  from ``_compat.v2``).
- ``lib/galaxy/webapps/galaxy/fast_app.py``: relocate
  ``CustomJsonSchema`` and switch its base to the ``_compat.v2``
  ``GenerateJsonSchema``; replace the @app.middleware("http") X-Frame
  Options handler with a pure ASGI ``XFrameOptionsMiddleware`` class
  (dev commit 67eea395ab) since ``BaseHTTPMiddleware`` semantics
  changed in starlette 1.0.
- ``lib/galaxy/webapps/base/api.py`` and
  ``lib/galaxy/webapps/galaxy/api/datasets.py``: drop the ``method``
  argument of ``FileResponse`` which starlette 1.0 removed (dev commit
  63954cb42e).

Also bumps the minimum FastAPI requirement to ``>=0.133.0`` (first
version compatible with starlette>=1.0.0) and adds an explicit
``starlette>=1.0.1`` floor in ``pyproject.toml`` and the
``packages/web_apps`` / ``packages/tool_shed`` setup.cfg files so
source installs cannot resolve to a vulnerable combo.

Co-authored-by: Nicola Soranzo <nicola.soranzo@gmail.com>
2026-05-28 18:56:59 +02:00
John Chilton ad8e40de4a Merge pull request #22446 from mvdbeek/fix-scheduling-delay
[25.1] Use correct timezone to compare step scheduling
2026-04-15 09:48:42 -04:00
mvdbeek 5962ba2fb2 Use correct timezone to compare step scheduling
`get_last_workflow_invocation_step_update_time()` returns UTC time (it's
set by galaxy.model.orm.now.now()) while datetime.now() is your local
time.

If your system is not on UTC time this caused 5 minute scheduling delays
for steps depending on expression tools that only produce parameters.

Fixes the delay observed in https://github.com/galaxyproject/tools-iuc/pull/7314
2026-04-09 21:53:34 +02:00
Marius van den Beek 84506e3afa Merge pull request #22372 from mvdbeek/fix_datetime_restore
[25.1] Fix timestamp parsing in job import/export
2026-04-03 10:35:50 +02:00
mvdbeek 6dfc44056e Fix timestamp parsing in job import/export
Use datetime.fromisoformat() instead of strptime with a rigid format
that requires microseconds. When datetime.isoformat() produces
timestamps without microseconds (e.g. "2026-04-02T14:28:40"), the
strptime format "%Y-%m-%dT%H:%M:%S.%f" fails silently, leaving
update_time/create_time as None on the restored model object.

Also guard against None timestamps on the export side to prevent
AttributeError when update_time or create_time is None.

The try/except: pass was silently swallowing parse errors for 5 years,
making it impossible to debug when timestamps failed to restore. Just
check for key presence instead — if the value exists but is malformed,
let it fail loudly.
These fields are required by downstream code, so silently skipping
them just delays the failure. Let KeyError or ValueError surface
at the actual point of failure.

Fixes https://github.com/galaxyproject/galaxy/issues/22371
2026-04-02 19:15:39 +02:00
Marius van den Beek 22c1e0e59c Merge pull request #22332 from mvdbeek/fix_readline_to_advance_iterator_25.1
[25.1] Discard rest of line in chunks in iter_start_of_line
2026-04-01 08:47:56 +02:00
mvdbeek 3358f8f46f Default chunk_size to CHUNK_SIZE in iter_start_of_line 2026-03-31 21:49:10 +02:00
mvdbeek ba7594dd5a Discard rest of line in chunks in iter_start_of_line
Avoid reading the entire remainder of a line into memory when
discarding, as some lines can be gigabytes in size.
2026-03-31 21:28:50 +02:00
Marius van den Beek 1ea3db20d6 Merge pull request #22290 from mvdbeek/fix_job_search_hdca_25.1
[25.1] Fix flaky job search for HDCA inputs on PostgreSQL
2026-03-29 12:24:17 +02:00
mvdbeek 4c74687991 Fix flaky job search for HDCA inputs on PostgreSQL
The job search HDCA signature comparison was non-deterministic because
`func.array_agg(column, order_by=column)` silently drops the `order_by`
keyword argument in SQLAlchemy, generating `array_agg(col)` instead of
`array_agg(col ORDER BY col)`.

This meant both the reference and candidate HDCA signatures were
aggregated in whatever scan order PostgreSQL happened to use. When the
query planner chose different scan orders for the reference and
candidate CTEs (which depends on table statistics and query plan), the
resulting arrays had different element orderings, causing the equality
comparison to fail — even for the exact same HDCA.

The fix uses `aggregate_order_by` from SQLAlchemy's PostgreSQL dialect,
which correctly generates `array_agg(col ORDER BY col ASC)`.

Diagnostic output from CI confirming the root cause:

  reference full signature=['data0;251', 'data1;252', 'data2;253']
  candidate full signatures=[(75, ['data2;253', 'data1;252', 'data0;251'])]
  equivalent HDCA ids=[]

Same HDCA (id=75), same elements, different array ordering → no match.

Investigation details: https://gist.github.com/mvdbeek/a3bd1528be0985e4a7d36e929a502bd2

Fixes #21230
2026-03-28 18:06:57 +01:00
Marius van den Beek 3794c0f30f Merge pull request #22276 from bernt-matthias/fasta-set-meta-1byte
[25.1] Sequence datatypes: only read first character per line for setting metadata
2026-03-28 10:53:20 +01:00
Marius van den Beek 5fbf8bbe08 Merge pull request #22279 from bgruening/refresh-utime-in-cache
[25.1] refresh utime in object store caches
2026-03-28 09:22:29 +01:00
Björn Grüning 47db01adb1 Apply suggestions from code review
Co-authored-by: Marius van den Beek <m.vandenbeek@gmail.com>
2026-03-27 16:40:05 +01:00
Björn Grüning 54d3d0985d fix suggestion 2026-03-27 16:16:15 +01:00
Björn Grüning 3fe84bda83 Apply suggestion from @bgruening 2026-03-27 16:15:30 +01:00
Björn Grüning 9d2380f206 Apply suggestions from code review
Co-authored-by: Marius van den Beek <m.vandenbeek@gmail.com>
Co-authored-by: Björn Grüning <bjoern@gruenings.eu>
2026-03-27 16:15:18 +01:00
Matthias Bernt af445e6b56 apply same to more types 2026-03-27 16:08:25 +01:00
Matthias Bernt e464f50823 FASTA: only read first character per line for setting metadata
otherwise the whole line is kept in memory which
might be the complete sequence in edge cases
2026-03-27 16:08:24 +01:00
Bjoern Gruening 2ee6edba5a rucio seems to have a different code path 2026-03-27 14:17:36 +01:00
Bjoern Gruening bda5b7b76d refresh timestamp for newly created cache files 2026-03-27 14:17:36 +01:00
John Chilton ad18c46bca Merge pull request #21988 from mvdbeek/report_sniff_discrepancy
[25.1] Restore file doesn't match sniffed datatype message
2026-03-24 10:21:10 -04:00
Marius van den Beek c8962592e1 Merge pull request #22229 from mvdbeek/fix-data-table-reload-admin-interface
[25.1] Use ``/api/tool_data`` endpoints in DataTables.vue & DataManagerTable.vue
2026-03-24 08:12:45 +01:00
mvdbeek 61e2b81830 Use /api/tool_data endpoints in DataTables.vue & DataManagerTable.vue
Switch from legacy controller axios calls to the typed GalaxyApi() fetcher
for both loading and reloading tool data tables. Remove the now-unused
tool_data_table_info, tool_data_table_info_1, and reload_tool_data_tables
methods from the data_manager controller.

Fixes https://github.com/galaxyproject/galaxy/issues/22227
2026-03-23 15:01:45 +01:00
Marius van den Beek 4a8d6469a8 Merge pull request #22156 from martenson/do-not-queue-paused
[25.1] Do not queue paused jobs
2026-03-19 10:09:58 +01:00
Marius van den Beek 9514614380 Merge pull request #22174 from ahmedhamidawan/fix_make_all_data_private_pref
[25.1] Fix make all histories private controller None id bug
2026-03-19 10:07:08 +01:00
Ahmed Awan 2b25a92c71 add regression test for make all histories private None id bug 2026-03-18 15:25:30 -05:00
Ahmed Awan be9e738759 [25.1] Fix make all histories private controller None id bug
When passing the all_histories param we do not pass a history_id and instead of disabling link access for each history.id we were setting it for history_id, which produced a "Wrong id (None) specified" error.

Fixes https://github.com/galaxyproject/galaxy/issues/22173
2026-03-18 14:31:51 -05:00
Martin Cech be562c4e0d do not queue paused jobs 2026-03-17 14:17:51 +01:00
mvdbeek 1c143a413e Merge branch 'release_25.0' into release_25.1 2026-03-13 18:47:24 +01:00
Marius van den Beek 48c78404f6 Merge pull request #22106 from mvdbeek/string_return_wsgi_subapplication
[25.0] Fix legacy_expose_api error callable returning str instead of bytes
2026-03-13 18:46:25 +01:00
mvdbeek f2740d28f5 Fix legacy_expose_api error callable returning str instead of bytes
The error inner function was used as a WSGI sub-application but returned
a bare string. WSGI requires response bodies to be iterables of byte
strings. With a2wsgi converting to ASGI, h11 rejects the str, causing a
TypeError in starlette's BaseHTTPMiddleware.
2026-03-13 16:57:06 +01:00
Marius van den Beek 8742289f05 Merge pull request #22082 from mvdbeek/worktree-backport-22032
[25.1] Fix subworkflow editing navigation and enable e2e test
2026-03-12 17:45:43 +01:00