94152 Commits

Author SHA1 Message Date
Matthias Bernt c998d43169 bump requirements 2026-08-20 16:30:43 +02:00
Matthias Bernt dda2144b5f only sort if needed 2026-08-20 16:28:18 +02:00
Matthias Bernt 5f7fe56325 bump version 2026-08-20 16:16:46 +02:00
Matthias Bernt 8bb1dd6aaa limit memory and allow parallel processing
for large files sort uses a lot of memory (a user had a job with a file
of 45M lines and top showed 1TB of VIRT memory and the jon crashed a
37GB) and we need a way to limit this.

also parallel processing seems a nice to have
2026-08-20 16:15:11 +02:00
Matthias Bernt c8b2bfdf85 compare tool: do not process substitute sort
the sort processes would run in parallel, i.e. oversubscribe ressources
2026-08-20 16:05:58 +02:00
John Chilton fa2fa47aed Merge pull request #23239 from ahmedhamidawan/migrate_workflow_editor_to_ts
Migrate WorkflowEditor to TypeScript
2026-08-20 07:53:52 -04:00
John Chilton 050753d095 Fix custom tool prompt examples that fail schema validation
`format: fastq` is a string, but `YamlDataParameter.format` is a list.
The string form parses only via the `_split_format` before-validator; the
JSON Schema dumped from the model does not declare it, so schema
consumers reject what the prompt teaches. The prompt's own complete
example omits `format` entirely, so the two examples disagreed.

Also state `name`'s `min_length=5`. It was unstated, and short names
("BWA", "STAR") are exactly what a model reaches for.

Neither bites upstream, where `output_type=UserToolSourceAuthoringView`
constrains generation. Both bite consumers using the prompt unconstrained.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 17:09:38 -04:00
Bjoern Gruening f89d3e0bd8 add helmholtz OIDC 2026-08-19 19:44:25 +02:00
Dannon Baker 2d2ca5708c Refresh workflow versions when the editor switches workflows
Both onCreate and the save-as handler clear hasChanges before calling
routeToWorkflow, so the onSave() in there hits its early return and never
reaches the getVersions() call below it. onCreate got a compensating fetch
in b592a0f, but save-as didn't, so saving-as leaves you editing the new
workflow with the previous one's version list still in the dropdown.

id only ever changes in routeToWorkflow, so refreshing there covers both
paths and lets the onCreate copy go away.
2026-08-19 13:22:06 -04:00
Ahmed Awan 9c741bc657 fix cloned step's workflow_outputs keeping their source uuids
`CopyStepAction` already stripped the cloned step's own `uuid`, but left the uuids on its `workflow_outputs` array untouched, since `cloneStepWithUniqueLabel` deep-clones the step with `structuredClone` and copies those output uuids verbatim. Saving a workflow after cloning a step with a workflow output would then fail with "Duplicate workflow output UUID '...' in request." the same way the original bug failed with duplicate step UUIDs. The fix strips `uuid` off each entry of the cloned step's `workflow_outputs`, mirroring how the step's own `uuid` is already handled.

Extended the existing "assigns a fresh id and uuid when cloning a step" regression test to also give the source step a `workflow_outputs` entry with a fixed uuid, and assert the clone's output uuid differs from the source's.

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Alireza Heidari <itisalirh@gmail.com>
2026-08-19 11:34:05 -05:00
Ahmed Awan d81abd3e1d use the slot exposed isActiveSideBar method from ActivityBar in template 2026-08-19 11:26:33 -05:00
Ahmed Awan b592a0f71e add a versions fetch in workflow creation method in editor 2026-08-19 11:14:02 -05:00
Dannon Baker 6287c9feee refactor: drop dead scroll and dropdown state from the workflow editor
rightPanelElement was never bound to an element, so scrollToTop was a no-op and the activeNodeId watcher existed only to call it. showCredentialsDropdown was written by the dropdown's show/hide handlers and read by nothing. Both predate this migration but there's no reason to carry them across.
2026-08-19 10:50:30 -05:00
Dannon Baker 77993cbf75 fix: only take name, version and annotation when the save response has them
The old saveWorkflow guarded the annotation write and never touched anything else on a partial response. onSave now assigns all three unconditionally, so a response missing name leaves the editor with an undefined title that also fails the next nameValidate. loadEditorData already guards every field this way.
2026-08-19 10:50:30 -05:00
Dannon Baker 4799d4fcbf fix: keep the activity bar special-activities prop stable
An array literal in the template is rebuilt on every render, and ActivityBar runs a watchImmediate on that prop into setSpecialPanelActivityIds -- so it re-fired constantly on a component that re-renders whenever hasChanges or loadingWorkflow move. useSpecialWorkflowActivities used to hand back a computed array; this restores that.
2026-08-19 10:50:30 -05:00
Dannon Baker bd19cc90d0 fix: go back to the local useMagicKeys wrapper
The wrapper exists to silence the 'Vue 2 does not support reactive collection types' warning that vueuse's useMagicKeys triggers. Index.test.ts papers over it with suppressExpectedErrorMessages, but nothing else does, so importing from vueuse directly just puts the noise back in the console.
2026-08-19 10:50:30 -05:00
Dannon Baker c14e9dfc5c fix: provide the workflow id ref rather than a snapshot
provideScopedWorkflowStores wraps a bare string in a fresh ref before providing it, so passing id.value meant the injected workflowId stopped tracking id. After routeToWorkflow swaps the temp uid for the real workflow id, children injecting workflowId still saw the old one. Both consumers unref once at setup so nothing breaks today, but the ref is what the old code passed and what the signature is for.
2026-08-19 10:50:29 -05:00
Dannon Baker a0ae358b69 fix: stop the report editor falling back to the default template
loadEditorData already substitutes reportDefault when the workflow has no report, so the extra fallback in the template only fires when the user has deliberately cleared the report -- which put the default template back on screen while the saved value stayed empty. The old binding was just report.markdown.
2026-08-19 10:50:29 -05:00
Dannon Baker 8443a17054 test: restore the workflow editor save button assertions
has_class returns a bool rather than asserting, so the fresh-load check in test_basics was silently checking nothing. The bootstrap-vue to GButton swap also renamed the class from disabled to g-disabled, which never got propagated to navigates_galaxy or framework -- both were still asserting on the old name, making them vacuously true. test_history_pages already had this right.
2026-08-19 10:50:29 -05:00
Dannon Baker 6c57f440af fix: restore user-defined tool insertion in the workflow editor
The TS migration dropped the UserToolPanel import while leaving the component in the template, so the user-defined tools sidebar rendered nothing -- script setup needs the explicit import and there's no global registration for it. onInsertTool also lost its third argument, but UserToolPanel still emits the tool uuid, so custom tools were being resolved by representation id with tool_version=latest instead. Put the import back and thread toolUuid through to insertStep again.
2026-08-19 10:50:09 -05:00
Ahmed Awan 5ab2602ead resolve minor TODOs for workflow attributes; clean up migration comments
Creator was not checking for complete object equality for detecting changes, while we did not need to use the change stack for tags as they are set instantly via backend Services without a version patch.
2026-08-19 10:50:08 -05:00
Ahmed Awan 9cf0ccf733 ensure readme editor is linked to attributes activity in wf editor
If we switch to any other activity, the readme editor now closes; with 1 exception being the changes activity whose panel can still be used to track changes to the readme as well.
2026-08-19 10:50:08 -05:00
Ahmed Awan 330b744395 fix best practices activity test for workflow editor
We now return a singular activity rather than a list of activities; since we only have one special activity.
2026-08-19 10:50:08 -05:00
Ahmed Awan a2eab3c980 fix workflow editor save button has disabled check 2026-08-19 10:50:08 -05:00
Ahmed Awan e275cd5f79 fix cloned workflow steps keeping the source step's uuid
`CopyStepAction` deleted the cloned step's `id` so a fresh one would be assigned, but never did the same for `uuid`, so a cloned step kept its source's uuid verbatim and saving after cloning failed with "Duplicate step UUID '...' in request." The Options API `onClone` used to strip `uuid` at the call site, but that got dropped during the Composition API migration; moving the fix into `CopyStepAction` itself means any future caller of `copyStep` gets correct behavior automatically.

Added a regression test in `Index.test.ts` that adds a step with a fixed uuid to the step store, emits `onClone` from the `WorkflowGraph` stub, and asserts the resulting clone has a different id, uuid, and label than the source step.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-19 10:50:08 -05:00
Ahmed Awan 8356901b96 add hasChanges coverage for help/logoUrl/readme, load, and save
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-19 10:50:07 -05:00
Ahmed Awan 1bab451932 restructure and organize workflow editor Index.vue script section 2026-08-19 10:50:07 -05:00
Ahmed Awan 545ec19f3d update Index.vue tests for its Composition API + TS migration
`Index.vue` was migrated from Options API to `<script setup>` + TypeScript in a prior commit, which broke most of the tests in `Index.test.ts`: internals like `wrapper.vm.annotation`, `wrapper.vm.saveAsName`, `wrapper.vm.onNavigate`, etc. are no longer exposed on the component instance, since `<script setup>` doesn't return a public API the way the old `setup()`/Options API component did.

Rewrote every test to drive the component through real, user-facing paths instead of reaching into internals: emitting events on child components (`WorkflowAttributes`, `ActivityBar`, `SaveChangesModal`, `WorkflowGraph`) rather than mutating refs directly, and reading state back through rendered props or the Pinia store rather than `vm` properties.

Also fixed some incidental issues found along the way: `vue-test-utils`' stub matching only works by a component's `.name`, but `<script setup>` SFCs compile with their inferred name on `__name` instead, so stubs for `ActivityBar`/`WorkflowGraph` were silently not matching until their `.name` was set explicitly in the test file; the shared mock workflow payload was missing `comments`/`tags`, which was silently making every test's initial workflow load fail before any assertions ran; and switched from a real `VueRouter` instance to mocking `vue-router/composables` directly, avoiding real navigation side effects like `NavigationDuplicated` errors. Split the flat `describe("Index", ...)` block into `"default mount"` and `"onNavigate"` sibling blocks so the `onNavigate` tests (which mount their own wrapper per test) don't also pay for the outer block's mount in `beforeEach`.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-19 10:50:07 -05:00
Ahmed Awan f39965ab28 migrate bootstrap Vue components with available base components 2026-08-19 10:50:07 -05:00
Alireza Heidari 53896769d9 Refactors Workflow Editor component to use typescript setup
Migrates the Workflow Editor component to use the script setup and typescript syntax for improved maintainability, readability and performance.
Replaces BootstrapVue components with their corresponding B-prefixed versions.

Co-authored-by: Ahmed Hamid Awan <qe66653@umbc.edu>
2026-08-19 10:50:07 -05:00
Ahmed Awan cb0234ca58 add a couple tests for WorkflowEditor 2026-08-19 10:50:06 -05:00
Alireza Heidari 6fad96a5af Migrates WorkflowEditor to typescript
Refactors WorkflowEditor component to use Vue 3's script setup syntax
Improves route query handling and editor configuration loading

Co-authored-by: Ahmed Hamid Awan <qe66653@umbc.edu>
2026-08-19 10:50:06 -05:00
Ahmed Awan 8c0e9497c1 add unit tests for WorkflowEditor.vue
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-19 10:50:06 -05:00
John Chilton 671d1b1e19 Merge pull request #23225 from mvdbeek/issue-23203-kubernetes-interactive-tools-broken
Cover interactive tools on the native Kubernetes runner, and type-check it
2026-08-19 09:57:17 -04:00
Aysam Guerler 4de6bf6eb9 Merge pull request #23268 from B0r1sD/dev
Remove query reset when switching tabs in the install admin page
2026-08-19 14:50:43 +03:00
Nuwan Goonasekera 0ce5816010 Fix mypy errors in the new tests
get_accessible is typed on HDAManager, so setting return_value on it through the
service's attribute is an attr-defined error; reach the mock through a cast
instead. The shared tee-streaming test case reads object_store_config, which
only its subclasses define, so declare it on the base.
2026-08-19 15:24:52 +05:30
Nuwan Goonasekera 5b1d97dfe2 Use a unique temp file for every cache download
_atomic_download named its temp file after the object it was downloading, so two
downloads of the same uncached object shared one temp path: the second's open()
truncated what the first was still writing, and whichever renamed first
published a corrupt object into the cache to be served as complete.

Give every download its own temp file instead. Concurrent downloads can no
longer interfere, and whichever finishes last publishes a complete copy. Temp
files left behind by a hard kill are reaped by the cache monitor like any other
cache file.
2026-08-19 15:24:49 +05:30
John Chilton 36127deab0 Merge pull request #23279 from guerler/avoid_refetch
Avoid refetch of test inputs
2026-08-18 16:15:51 -04:00
John Chilton c09652c693 Merge pull request #23297 from AdrianJaeger/fix-selection-dialog-double-pagination
Fix empty pages for file sources with server side pagination
2026-08-18 11:42:37 -04:00
Alireza Heidari f816a867c2 Keep a new GalaxyAI chat from being replaced by the previous one
The currentChatId watcher awaits a chat history refresh before syncing the
route. When a new chat starts while that request is in flight, the resumed
handler still routes to the old exchange id, and the exchangeId watch then
re-fetches the conversation over the fresh one.

Bail out of the resumed handler when the id is no longer current.
2026-08-18 16:42:34 +02:00
Alireza Heidari 44b6d87f1c De-race test_run_subworkflow_with_boolean_parameter_in_when_condition
The test waited for the parent invocation only, then read the subworkflow
invocation state once. The completion monitor can mark the parent completed
before it gets to the child, so the assertion sees 'scheduled' and fails.

Wait for the subworkflow invocation to complete on its own before asserting.
2026-08-18 16:42:34 +02:00
Alireza Heidari 7b7240e0e5 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.
2026-08-18 16:42:34 +02:00
Nuwan Goonasekera 2a96623062 Tee-stream object-store downloads instead of pulling into cache first
Serving a dataset from a remote object store pulls the whole object into the
local cache before sending a single byte. For large datasets that trips proxy
time-to-first-byte timeouts (504s), and objects bigger than the cache cannot be
downloaded at all because _caching_allowed refuses to pull them.

Tee-streaming proxies the object's bytes straight to the client while writing
them into the cache on the way past, publishing the cache copy atomically once
the whole object has streamed. First byte is immediate, the cache is warmed for
free, and objects too big for the cache stream straight through without a cache
write.

ObjectStore grows get_data_stream(), dispatched like get_direct_download_url();
the tee itself lives in CachingConcreteObjectStore, so a backend only supplies a
raw chunk iterator (boto3, azure and cloud do; every other store keeps today's
pull). A stream that ends short of the object's remote size is rejected rather
than cached, and each concurrent stream writes its own temp file so they cannot
truncate each other's.

Only plain whole-file downloads stream: HEAD and Range requests need random
access, so they still get a cached file, as do previews, chunked display,
extra-files access and archive downloads. This is the internal-backend
complement to the presigned-URL redirect, which only helps object stores whose
URLs a client can reach directly.
2026-08-18 14:38:22 +05:30
Nicola Soranzo 0ce4ee0c76 Merge pull request #23312 from galaxyproject/dependabot/pip/lib/galaxy/dependencies/sqlparse-0.6.0
Bump sqlparse from 0.5.5 to 0.6.0 in /lib/galaxy/dependencies
2026-08-18 06:50:40 +02:00
dependabot[bot] 3661c8a3ab Bump sqlparse from 0.5.5 to 0.6.0 in /lib/galaxy/dependencies
Bumps [sqlparse](https://github.com/andialbrecht/sqlparse) from 0.5.5 to 0.6.0.
- [Changelog](https://github.com/andialbrecht/sqlparse/blob/master/CHANGELOG)
- [Commits](https://github.com/andialbrecht/sqlparse/compare/0.5.5...0.6.0)

---
updated-dependencies:
- dependency-name: sqlparse
  dependency-version: 0.6.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-17 21:29:04 +00:00
John Chilton 1538777870 Merge pull request #23129 from natefoo/pulsar-container-image-compute-rewrite
Rewrite resolved container image path via the compute environment
2026-08-17 15:51:50 -04:00
Nicola Soranzo 08d4c8af5d Merge pull request #23222 from galaxyproject/dependabot/github_actions/actions-51b513255e
Bump the actions group across 1 directory with 6 updates
2026-08-14 10:53:14 +02:00
AdrianJaeger 05f14e3882 Fix empty pages for file sources with server side pagination
SelectionDialog already fetches only the rows of the current page through the items provider, but GTable paginated them a second time, so every page after the first one was empty. With this change current-page and per-page are no longer passed to GTable when a provider is used.
2026-08-14 00:32:37 +02:00
Alireza Heidari 1e5d2683af Merge pull request #23023 from ahmedhamidawan/b-modal-to-g-modal-batch-2
Migrate BModal components to GModal - final batch
2026-08-13 20:14:35 +02:00
Ahmed Awan f5fd3ebbc3 use GLink in StorageLocationIndicator 2026-08-13 11:34:26 -05:00