diff --git a/CHANGES.md b/CHANGES.md
index ce0bd1519b0..78c5a754ad7 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -11,6 +11,14 @@ updated. Only the first match gets replaced, so it's fine to leave the old
ones in. -->
-------------------------------------------------------------------------------
+## __cylc-8.1.1 (Coming Soon)__
+
+### Fixes
+
+[#5314](https://github.com/cylc/cylc-flow/pull/5314) - Fix broken
+command option: `cylc vip --run-name`.
+
+
## __cylc-8.1.0 (Released 2023-01-16)__
### Breaking Changes
diff --git a/cylc/flow/scripts/install.py b/cylc/flow/scripts/install.py
index f58fcc542f4..b33856ad9ad 100755
--- a/cylc/flow/scripts/install.py
+++ b/cylc/flow/scripts/install.py
@@ -84,7 +84,7 @@
import asyncio
from optparse import Values
from pathlib import Path
-from typing import Optional, Dict, Any
+from typing import Any, Dict, Optional, Tuple
from cylc.flow.scripts.scan import (
get_pipe,
@@ -269,18 +269,18 @@ def main(
def install_cli(
opts: 'Values',
reg: Optional[str] = None
-) -> str:
+) -> Tuple[str, str]:
"""Install workflow and scan for already-running instances."""
- wf_name = install(opts, reg)
+ wf_name, wf_id = install(opts, reg)
asyncio.run(
scan(wf_name, not opts.no_ping)
)
- return wf_name
+ return wf_name, wf_id
def install(
opts: 'Values', reg: Optional[str] = None
-) -> str:
+) -> Tuple[str, str]:
if opts.no_run_name and opts.run_name:
raise InputError(
"options --no-run-name and --run-name are mutually exclusive."
@@ -306,7 +306,7 @@ def install(
elif opts.symlink_dirs:
cli_symdirs = parse_cli_sym_dirs(opts.symlink_dirs)
- source_dir, rundir, workflow_name = install_workflow(
+ source_dir, rundir, workflow_name, workflow_id = install_workflow(
source=source,
workflow_name=opts.workflow_name,
run_name=opts.run_name,
@@ -331,4 +331,5 @@ def install(
entry_point.name,
exc
) from None
- return workflow_name
+
+ return workflow_name, workflow_id
diff --git a/cylc/flow/scripts/validate_install_play.py b/cylc/flow/scripts/validate_install_play.py
index 25f6e805b5e..655d101a369 100644
--- a/cylc/flow/scripts/validate_install_play.py
+++ b/cylc/flow/scripts/validate_install_play.py
@@ -95,7 +95,7 @@ def main(parser: COP, options: 'Values', workflow_id: Optional[str] = None):
validate_main(parser, options, str(source))
log_subcommand('install', source)
- workflow_id = cylc_install(options, workflow_id)
+ _, workflow_id = cylc_install(options, workflow_id)
cleanup_sysargv(
'play',
diff --git a/cylc/flow/scripts/validate_reinstall.py b/cylc/flow/scripts/validate_reinstall.py
index 2ea753820d0..f5a7b4c3663 100644
--- a/cylc/flow/scripts/validate_reinstall.py
+++ b/cylc/flow/scripts/validate_reinstall.py
@@ -162,12 +162,12 @@ def vro_cli(parser: COP, options: 'Values', workflow_id: str):
)
return 1
- # Run reload if workflow is running, else play:
+ # Run reload if workflow is running or paused:
if workflow_running:
log_subcommand('reload', workflow_id)
cylc_reload(options, workflow_id)
- # run play anyway, to resume a paused workflow:
+ # run play anyway, to play a stopped workflow:
else:
cleanup_sysargv(
'play',
diff --git a/cylc/flow/workflow_files.py b/cylc/flow/workflow_files.py
index 29bbefdab02..f32ddc0afaa 100644
--- a/cylc/flow/workflow_files.py
+++ b/cylc/flow/workflow_files.py
@@ -1633,7 +1633,7 @@ def install_workflow(
run_name: Optional[str] = None,
no_run_name: bool = False,
cli_symlink_dirs: Optional[Dict[str, Dict[str, Any]]] = None
-) -> Tuple[Path, Path, str]:
+) -> Tuple[Path, Path, str, str]:
"""Install a workflow, or renew its installation.
Install workflow into new run directory.
@@ -1655,6 +1655,7 @@ def install_workflow(
rundir: absolute path to run directory, where the workflow has been
installed into.
workflow_name: installed workflow name (which may be computed here).
+ named_run: Name of the run.
Raise:
WorkflowFilesError:
@@ -1751,7 +1752,7 @@ def install_workflow(
install_log.info(f'INSTALLED {named_run} from {source}')
print(f'INSTALLED {named_run} from {source}')
close_log(install_log)
- return source, rundir, workflow_name
+ return source, rundir, workflow_name, named_run
def get_run_dir_info(
diff --git a/tests/functional/cylc-combination-scripts/06-vip-named-run b/tests/functional/cylc-combination-scripts/06-vip-named-run
new file mode 120000
index 00000000000..da74c253b1e
--- /dev/null
+++ b/tests/functional/cylc-combination-scripts/06-vip-named-run
@@ -0,0 +1 @@
+00-vip
\ No newline at end of file
diff --git a/tests/functional/cylc-combination-scripts/06-vip-named-run.t b/tests/functional/cylc-combination-scripts/06-vip-named-run.t
new file mode 100644
index 00000000000..bb53b08dfcc
--- /dev/null
+++ b/tests/functional/cylc-combination-scripts/06-vip-named-run.t
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+# THIS FILE IS PART OF THE CYLC WORKFLOW ENGINE.
+# Copyright (C) NIWA & British Crown (Met Office) & Contributors.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+#------------------------------------------------------------------------------
+# Test `cylc vip` (Validate Install Play)
+
+. "$(dirname "$0")/test_header"
+set_test_number 5
+
+WORKFLOW_NAME="cylctb-x$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6)"
+
+cp -r "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/flow.cylc" .
+cp -r "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/reference.log" .
+
+run_ok "${TEST_NAME_BASE}-from-path" \
+ cylc vip --no-detach --debug \
+ --workflow-name "${WORKFLOW_NAME}" \
+ --initial-cycle-point=1300 \
+ --run-name sardine \
+ --reference-test
+
+grep_ok "13000101T0000Z" "${TEST_NAME_BASE}-from-path.stdout"
+
+grep "\$" "${TEST_NAME_BASE}-from-path.stdout" > VIPOUT.txt
+
+named_grep_ok "${TEST_NAME_BASE}-it-validated" "$ cylc validate" "VIPOUT.txt"
+named_grep_ok "${TEST_NAME_BASE}-it-installed" "$ cylc install" "VIPOUT.txt"
+named_grep_ok "${TEST_NAME_BASE}-it-played" "$ cylc play" "VIPOUT.txt"
+
+purge
+exit 0
diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py
index 65fdab9713a..b2a4f0dde97 100644
--- a/tests/integration/conftest.py
+++ b/tests/integration/conftest.py
@@ -469,7 +469,7 @@ def _inner(source, **kwargs):
# Cylc install's default limit.
opts.workflow_name = (
f'{str(test_dir.relative_to(run_dir))}.{source.name}')
- workflow_id = cylc_install(opts, str(source))
+ workflow_id, _ = cylc_install(opts, str(source))
workflow_id = infer_latest_run_from_id(workflow_id)
return workflow_id
yield _inner