Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
6ce0cfe
Add workflow debugging feature: SDK classes and CLI debug command
claude Apr 14, 2026
0b05558
Add script() to DataPortalTask and show it in debug output
claude Apr 14, 2026
619259f
Add read_csv, read_json, readlines to WorkDirFile
claude Apr 14, 2026
be6eed0
Replace linear debug prompts with menu-driven interactive navigation
claude Apr 14, 2026
4ba8c63
Recurse through input chain in non-interactive debug output
claude Apr 14, 2026
c8cae3f
Add --show-script/log/files toggles to non-interactive debug command
claude Apr 14, 2026
13bec09
Add dataset.primary_failed_task and harden all edge cases
claude Apr 14, 2026
e0bacdc
Fix bugs identified in code review of workflow debugging feature
claude Apr 14, 2026
9239623
Align workflow debugging code with repo style guide
claude Apr 14, 2026
8813360
Fix flake8 F821: import DataPortalTask under TYPE_CHECKING in dataset.py
claude Apr 14, 2026
f26d92e
Add tests for DataPortalTask, WorkDirFile, and DataPortalDataset task…
claude Apr 15, 2026
49eb2a1
Polish docstrings and return type annotations to match repo conventions
claude Apr 15, 2026
92b4ec3
Merge upstream/main into feature branch, preserving workflow debuggin…
claude Apr 15, 2026
7339f4b
Fix test_dataset_tasks: mock get_file instead of get_file_from_path
claude Apr 15, 2026
5a513de
Trigger CI run for test fix verification
claude Apr 15, 2026
890739c
Skip S3 integration test in CI environment
claude Apr 15, 2026
0587a5c
Fix test_task_id_missing helper bug and skip nf-core integration test…
claude Apr 15, 2026
a5aa087
Make SonarCloud scan non-blocking in CI (continue-on-error)
claude Apr 15, 2026
9b1c3ad
Revert "Make SonarCloud scan non-blocking in CI (continue-on-error)"
claude Apr 15, 2026
6527874
WIP
sminot Apr 17, 2026
1505d32
Merge branch 'main' into claude/add-workflow-debugging-pBw5J
sminot Apr 17, 2026
e98ccc4
WIP
sminot Apr 17, 2026
b7a0bf9
Clean up
sminot Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion cirro/cli/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from cirro.cli.controller import run_ingest, run_download, run_configure, run_list_datasets
from cirro.cli.controller import run_create_pipeline_config, run_validate_folder
from cirro.cli.controller import run_list_projects, run_list_files
from cirro.cli.controller import run_list_projects, run_list_files, run_debug

__all__ = [
'run_ingest',
Expand All @@ -11,4 +11,5 @@
'run_validate_folder',
'run_list_projects',
'run_list_files',
'run_debug',
]
18 changes: 17 additions & 1 deletion cirro/cli/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from cirro.cli import run_create_pipeline_config, run_validate_folder
from cirro.cli import run_ingest, run_download, run_configure, run_list_datasets
from cirro.cli.controller import handle_error, run_upload_reference, run_list_projects, run_list_files
from cirro.cli.controller import handle_error, run_upload_reference, run_list_projects, run_list_files, run_debug
from cirro.cli.interactive.utils import InputError


Expand Down Expand Up @@ -142,6 +142,22 @@ def upload_reference(**kwargs):
run_upload_reference(kwargs, interactive=kwargs.get('interactive'))


# no_args_is_help=False: running 'cirro debug' with no arguments enters interactive mode
@run.command(help='Debug a failed workflow execution', no_args_is_help=False)
@click.option('--project',
help='Name or ID of the project',
default=None)
@click.option('--dataset',
help='Name or ID of the dataset',
default=None)
@click.option('-i', '--interactive',
help='Gather arguments interactively',
is_flag=True, default=False)
def debug(**kwargs):
check_required_args(kwargs)
run_debug(kwargs, interactive=kwargs.get('interactive'))


@run.command(help='Configure authentication')
def configure():
run_configure()
Expand Down
Loading
Loading