Skip to content

Commit

Permalink
Merge pull request cylc#5314 from wxtim/fix_vip_run_names
Browse files Browse the repository at this point in the history
Allow Cylc VIP to work with named runs.
  • Loading branch information
oliver-sanders authored Jan 24, 2023
2 parents 977fd84 + d5333f5 commit eb60339
Show file tree
Hide file tree
Showing 8 changed files with 69 additions and 13 deletions.
8 changes: 8 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 (<span actions:bind='release-date'>Coming Soon</span>)__

### Fixes

[#5314](https://github.com/cylc/cylc-flow/pull/5314) - Fix broken
command option: `cylc vip --run-name`.


## __cylc-8.1.0 (<span actions:bind='release-date'>Released 2023-01-16</span>)__

### Breaking Changes
Expand Down
15 changes: 8 additions & 7 deletions cylc/flow/scripts/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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."
Expand All @@ -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,
Expand All @@ -331,4 +331,5 @@ def install(
entry_point.name,
exc
) from None
return workflow_name

return workflow_name, workflow_id
2 changes: 1 addition & 1 deletion cylc/flow/scripts/validate_install_play.py
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
4 changes: 2 additions & 2 deletions cylc/flow/scripts/validate_reinstall.py
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
5 changes: 3 additions & 2 deletions cylc/flow/workflow_files.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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:
Expand Down Expand Up @@ -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(
Expand Down
1 change: 1 addition & 0 deletions tests/functional/cylc-combination-scripts/06-vip-named-run
45 changes: 45 additions & 0 deletions tests/functional/cylc-combination-scripts/06-vip-named-run.t
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>.

#------------------------------------------------------------------------------
# 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
2 changes: 1 addition & 1 deletion tests/integration/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit eb60339

Please sign in to comment.