diff --git a/client/src/components/Workflow/Editor/Index.vue b/client/src/components/Workflow/Editor/Index.vue index b045017acc9c..64502b77a927 100644 --- a/client/src/components/Workflow/Editor/Index.vue +++ b/client/src/components/Workflow/Editor/Index.vue @@ -13,6 +13,7 @@ @onRefactor="onRefactor" @onShow="hideModal" /> + import { Toast } from "composables/toast"; import { storeToRefs } from "pinia"; -import Vue, { computed, onUnmounted, ref, unref } from "vue"; +import Vue, { computed, nextTick, onUnmounted, ref, unref } from "vue"; import { replaceLabel } from "@/components/Markdown/parse"; import { getUntypedWorkflowParameters } from "@/components/Workflow/Editor/modules/parameters"; @@ -195,6 +196,7 @@ import WorkflowLint from "./Lint.vue"; import MessagesModal from "./MessagesModal.vue"; import WorkflowOptions from "./Options.vue"; import RefactorConfirmationModal from "./RefactorConfirmationModal.vue"; +import SaveChangesModal from "./SaveChangesModal.vue"; import StateUpgradeModal from "./StateUpgradeModal.vue"; import WorkflowGraph from "./WorkflowGraph.vue"; import MarkdownEditor from "@/components/Markdown/MarkdownEditor.vue"; @@ -207,6 +209,7 @@ export default { components: { MarkdownEditor, FlexPanel, + SaveChangesModal, StateUpgradeModal, ToolPanel, FormDefault, @@ -313,7 +316,6 @@ export default { data() { return { isCanvas: true, - markdownConfig: null, markdownText: null, versions: [], parameters: null, @@ -341,6 +343,8 @@ export default { transform: { x: 0, y: 0, k: 1 }, graphOffset: { left: 0, top: 0, width: 0, height: 0 }, debounceTimer: null, + showSaveChangesModal: false, + navUrl: "", }; }, computed: { @@ -702,14 +706,21 @@ export default { const runUrl = `/workflows/run?id=${this.id}`; this.onNavigate(runUrl); }, - async onNavigate(url) { + async onNavigate(url, forceSave = false, ignoreChanges = false) { if (this.isNewTempWorkflow) { await this.onCreate(); - } else { - await this.onSave(true); + } else if (this.hasChanges && !forceSave && !ignoreChanges) { + // if there are changes, prompt user to save or discard or cancel + this.navUrl = url; + this.showSaveChangesModal = true; + return; + } else if (forceSave) { + // when forceSave is true, save the workflow before navigating + await this.onSave(); } this.hasChanges = false; + await nextTick(); this.$router.push(url); }, onSave(hideProgress = false) { @@ -787,8 +798,8 @@ export default { const report = data.report || {}; const markdown = report.markdown || reportDefault; + this.report = report; this.markdownText = markdown; - this.markdownConfig = report; this.hideModal(); this.stateMessages = getStateUpgradeMessages(data); const has_changes = this.stateMessages.length > 0; diff --git a/client/src/components/Workflow/Editor/SaveChangesModal.vue b/client/src/components/Workflow/Editor/SaveChangesModal.vue new file mode 100644 index 000000000000..9a2b5bbda2d0 --- /dev/null +++ b/client/src/components/Workflow/Editor/SaveChangesModal.vue @@ -0,0 +1,97 @@ + + + diff --git a/client/src/stores/workflowStepStore.ts b/client/src/stores/workflowStepStore.ts index c696f3141ad9..e1ee49f479df 100644 --- a/client/src/stores/workflowStepStore.ts +++ b/client/src/stores/workflowStepStore.ts @@ -340,6 +340,7 @@ export const useWorkflowStepStore = defineScopedStore("workflowStepStore", (work del(steps.value, stepId.toString()); del(stepExtraInputs.value, stepId); + del(stepMapOver.value, stepId.toString()); } return { diff --git a/doc/source/admin/galaxy_options.rst b/doc/source/admin/galaxy_options.rst index 2100c81f8cae..f3021dc25d48 100644 --- a/doc/source/admin/galaxy_options.rst +++ b/doc/source/admin/galaxy_options.rst @@ -1453,7 +1453,7 @@ This option has no effect if the file specified by object_store_config_file exists. Otherwise, if this option is set, it overrides any other objectstore settings. - The syntax, available instrumenters, and documentation of their + The syntax, available storage plugins, and documentation of their options is explained in detail in the object store sample configuration file, `object_store_conf.sample.yml` :Default: ``None`` @@ -2606,8 +2606,20 @@ :Description: The upload store is a temporary directory in which files uploaded - by the tus middleware or server will be placed. Defaults to - new_file_path if not set. + by the tus middleware or server for user uploads will be placed. + Defaults to new_file_path if not set. +:Default: ``None`` +:Type: str + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``tus_upload_store_job_files`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:Description: + The upload store is a temporary directory in which files uploaded + by the tus middleware or server for remote job files (Pulsar) will + be placed. Defaults to tus_upload_store if not set. :Default: ``None`` :Type: str @@ -4030,6 +4042,23 @@ :Type: str +~~~~~~~~~~~~~~~~~~~~~ +``oidc_scope_prefix`` +~~~~~~~~~~~~~~~~~~~~~ + +:Description: + Sets the prefix for OIDC scopes specific to this Galaxy instance. + If an API call is made against this Galaxy instance using an OIDC + bearer token, any scopes must be prefixed with this value e.g. + https://galaxyproject.org/api. More concretely, to request all + permissions that the user has, the scope would have to be + specified as ":*". e.g "https://galaxyproject.org/api:*". + Currently, only * is recognised as a valid scope, and future + iterations may provide more fine-grained scopes. +:Default: ``https://galaxyproject.org/api`` +:Type: str + + ~~~~~~~~~~~~~~~~~~~~ ``auth_config_file`` ~~~~~~~~~~~~~~~~~~~~ @@ -5439,9 +5468,9 @@ :Type: str -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -``help_forum_tool_panel_integration_enabled`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``enable_help_forum_tool_panel_integration`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :Description: Enable the integration of the Galaxy Help Forum in the tool panel. diff --git a/lib/galaxy/config/sample/galaxy.yml.sample b/lib/galaxy/config/sample/galaxy.yml.sample index 96c2a84e0bda..21b325bdb490 100644 --- a/lib/galaxy/config/sample/galaxy.yml.sample +++ b/lib/galaxy/config/sample/galaxy.yml.sample @@ -1,21 +1,21 @@ # Galaxy is configured by default to be usable in a single-user development # environment. To tune the application for a multi-user production # environment, see the documentation at: -# +# # https://docs.galaxyproject.org/en/master/admin/production.html -# +# # Throughout this sample configuration file, except where stated otherwise, # uncommented values override the default if left unset, whereas commented # values are set to the default value. Relative paths are relative to the root # Galaxy directory. -# +# # Examples of many of these options are explained in more detail in the Galaxy # Community Hub. -# +# # https://galaxyproject.org/admin/config -# +# # Config hackers are encouraged to check there before asking for help. -# +# # Configuration for Gravity process manager. # ``uwsgi:`` section will be ignored if Galaxy is started via Gravity commands (e.g ``./run.sh``, ``galaxy`` or ``galaxyctl``). gravity: @@ -181,7 +181,7 @@ gravity: # enable: false # gx-it-proxy version - # version: '>=0.0.5' + # version: '>=0.0.6' # Public-facing IP of the proxy # ip: localhost @@ -248,6 +248,14 @@ gravity: # Must match ``tus_upload_store`` setting in ``galaxy:`` section. # upload_dir: + # Value of tusd -hooks-httpd option + # + # the default of is suitable for using tusd for Galaxy uploads and should not be changed unless you are using tusd for + # other purposes such as Pulsar staging. + # + # The value of galaxy_infrastructure_url is automatically prepended if the option starts with a `/` + # hooks_http: /api/upload/hooks + # Comma-separated string of enabled tusd hooks. # # Leave at the default value to require authorization at upload creation time. @@ -333,15 +341,9 @@ gravity: # names. # environment: {} - # Configure dynamic handlers in this section. Below is a simple example + # Configure dynamic handlers in this section. # See https://docs.galaxyproject.org/en/latest/admin/scaling.html#dynamically-defined-handlers for details. - #handlers: - # handler: - # processes: 3 - # pools: - # - job-handlers - # - workflow-schedulers - + # handlers: {} galaxy: # The directory that will be prepended to relative paths in options @@ -1030,7 +1032,7 @@ galaxy: # This option has no effect if the file specified by # object_store_config_file exists. Otherwise, if this option is set, # it overrides any other objectstore settings. - # The syntax, available instrumenters, and documentation of their + # The syntax, available storage plugins, and documentation of their # options is explained in detail in the object store sample # configuration file, `object_store_conf.sample.yml` #object_store_config: null @@ -1067,6 +1069,13 @@ galaxy: # for that object store entry. #object_store_cache_size: -1 + # Set this to true to indicate in the UI that a user's object store + # selection isn't simply a "preference" that job destinations often + # respect but in fact will always be respected. This should be set to + # true to simplify the UI as long as job destinations never override + # 'object_store_id's for a jobs. + #object_store_always_respect_user_selection: false + # What Dataset attribute is used to reference files in an ObjectStore # implementation, this can be 'uuid' or 'id'. The default will depend # on how the object store is configured, starting with 20.05 Galaxy @@ -1304,9 +1313,6 @@ galaxy: # The value of this option will be resolved with respect to # . #interactivetools_map: interactivetools_map.sqlite - # Note: the following config should still be used due to lack of - # support of data_dir resolution in gx-it-proxy and gravity: - #interactivetools_map: database/interactivetools_map.sqlite # Prefix to use in the formation of the subdomain or path for # interactive tools @@ -1547,10 +1553,15 @@ galaxy: #nginx_upload_job_files_path: null # The upload store is a temporary directory in which files uploaded by - # the tus middleware or server will be placed. Defaults to - # new_file_path if not set. + # the tus middleware or server for user uploads will be placed. + # Defaults to new_file_path if not set. #tus_upload_store: null + # The upload store is a temporary directory in which files uploaded by + # the tus middleware or server for remote job files (Pulsar) will be + # placed. Defaults to tus_upload_store if not set. + #tus_upload_store_job_files: null + # Galaxy can upload user files in chunks without using nginx. Enable # the chunk uploader by specifying a chunk size larger than 0. The # chunk size is specified in bytes (default: 10MB). @@ -2189,12 +2200,13 @@ galaxy: # . #oidc_backends_config_file: oidc_backends_config.xml - # Sets the prefix for OIDC scopes specific to this Galaxy instance. - # If an API call is made against this Galaxy instance using an OIDC bearer token, - # any scopes must be prefixed with this value e.g. https://galaxyproject.org/api. - # More concretely, to request all permissions that the user has, the scope - # would have to be specified as ":*". e.g "https://galaxyproject.org/api:*". - # Currently, only * is recognised as a valid scope, and future iterations may + # Sets the prefix for OIDC scopes specific to this Galaxy instance. If + # an API call is made against this Galaxy instance using an OIDC + # bearer token, any scopes must be prefixed with this value e.g. + # https://galaxyproject.org/api. More concretely, to request all + # permissions that the user has, the scope would have to be specified + # as ":*". e.g "https://galaxyproject.org/api:*". Currently, + # only * is recognised as a valid scope, and future iterations may # provide more fine-grained scopes. #oidc_scope_prefix: https://galaxyproject.org/api @@ -2897,3 +2909,4 @@ galaxy: # Enable the integration of the Galaxy Help Forum in the tool panel. # This requires the help_forum_api_url to be set. #enable_help_forum_tool_panel_integration: false + diff --git a/scripts/update_cwl_conformance_tests.sh b/scripts/update_cwl_conformance_tests.sh index 2a71267c554e..4cc2cdc1386d 100755 --- a/scripts/update_cwl_conformance_tests.sh +++ b/scripts/update_cwl_conformance_tests.sh @@ -17,11 +17,7 @@ for version in $VERSIONS; do conformance_filepath=conformance_tests.yaml tests_dir=tests fi - if [ "$version" = '1.2' ]; then - branch=1.2.1_proposed - else - branch=main - fi + branch=main wget "https://github.com/common-workflow-language/${repo_name}/archive/${branch}.zip" unzip ${branch}.zip rm -rf "${DEST_DIR}/v${version}"