Skip to content

Commit

Permalink
Merge pull request #3185 from mirpedrol/sync-fixes
Browse files Browse the repository at this point in the history
Fix nf-core pipelines sync
  • Loading branch information
mirpedrol authored Oct 2, 2024
2 parents 2a35da1 + 26299f0 commit bd1e498
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 12 deletions.
5 changes: 3 additions & 2 deletions nf_core/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1815,6 +1815,7 @@ def command_create_logo(logo_text, directory, name, theme, width, format, force)

# nf-core sync (deprecated)
@nf_core_cli.command("sync", hidden=True, deprecated=True)
@click.pass_context
@click.option(
"-d",
"--dir",
Expand Down Expand Up @@ -1845,14 +1846,14 @@ def command_create_logo(logo_text, directory, name, theme, width, format, force)
@click.option("-g", "--github-repository", type=str, help="GitHub PR: target repository.")
@click.option("-u", "--username", type=str, help="GitHub PR: auth username.")
@click.option("-t", "--template-yaml", help="Pass a YAML file to customize the template")
def command_sync(directory, from_branch, pull_request, github_repository, username, template_yaml, force_pr):
def command_sync(ctx, directory, from_branch, pull_request, github_repository, username, template_yaml, force_pr):
"""
Use `nf-core pipelines sync` instead.
"""
log.warning(
"The `[magenta]nf-core sync[/]` command is deprecated. Use `[magenta]nf-core pipelines sync[/]` instead."
)
pipelines_sync(directory, from_branch, pull_request, github_repository, username, template_yaml, force_pr)
pipelines_sync(ctx, directory, from_branch, pull_request, github_repository, username, template_yaml, force_pr)


# nf-core bump-version (deprecated)
Expand Down
6 changes: 1 addition & 5 deletions nf_core/pipelines/create/create.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ def update_config(self, organisation, version, force, outdir):
self.config.force = force if force else False
if self.config.outdir is None:
self.config.outdir = outdir if outdir else "."
if self.config.is_nfcore is None:
if self.config.is_nfcore is None or self.config.is_nfcore == "null":
self.config.is_nfcore = self.config.org == "nf-core"

def obtain_jinja_params_dict(
Expand Down Expand Up @@ -363,11 +363,9 @@ def render_template(self) -> None:
config_fn, config_yml = nf_core.utils.load_tools_config(self.outdir)
if config_fn is not None and config_yml is not None:
with open(str(config_fn), "w") as fh:
self.config.outdir = str(self.config.outdir)
config_yml.template = NFCoreTemplateConfig(**self.config.model_dump())
yaml.safe_dump(config_yml.model_dump(), fh)
log.debug(f"Dumping pipeline template yml to pipeline config file '{config_fn.name}'")
run_prettier_on_file(self.outdir / config_fn)

# Run prettier on files
run_prettier_on_file(self.outdir)
Expand Down Expand Up @@ -401,8 +399,6 @@ def fix_linting(self):
with open(self.outdir / config_fn, "w") as fh:
yaml.dump(nf_core_yml.model_dump(), fh, default_flow_style=False, sort_keys=False)

run_prettier_on_file(Path(self.outdir, config_fn))

def make_pipeline_logo(self):
"""Fetch a logo for the new pipeline from the nf-core website"""
email_logo_path = Path(self.outdir) / "assets"
Expand Down
2 changes: 1 addition & 1 deletion nf_core/pipelines/download.py
Original file line number Diff line number Diff line change
Expand Up @@ -746,7 +746,7 @@ def find_container_images(self, workflow_directory: str) -> None:
self.nf_config is needed, because we need to restart search over raw input
if no proper container matches are found.
"""
config_findings.append((k, v.strip('"').strip("'"), self.nf_config, "Nextflow configs"))
config_findings.append((k, v.strip("'\""), self.nf_config, "Nextflow configs"))

# rectify the container paths found in the config
# Raw config_findings may yield multiple containers, so better create a shallow copy of the list, since length of input and output may be different ?!?
Expand Down
4 changes: 2 additions & 2 deletions nf_core/pipelines/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def _update_validation_plugin_from_config(self) -> None:
else:
conf = nf_core.utils.fetch_wf_config(Path(self.pipeline_dir))

plugins = str(conf.get("plugins", "")).strip('"').strip("'").strip(" ").split(",")
plugins = str(conf.get("plugins", "")).strip("'\"").strip(" ").split(",")
plugin_found = False
for plugin_instance in plugins:
if "nf-schema" in plugin_instance:
Expand Down Expand Up @@ -373,7 +373,7 @@ def validate_config_default_parameter(self, param, schema_param, config_default)
# If we have a default in the schema, check it matches the config
if "default" in schema_param and (
(schema_param["type"] == "boolean" and str(config_default).lower() != str(schema_param["default"]).lower())
and (str(schema_param["default"]) != str(config_default).strip('"').strip("'"))
and (str(schema_param["default"]) != str(config_default).strip("'\""))
):
# Check that we are not deferring the execution of this parameter in the schema default with squiggly brakcets
if schema_param["type"] != "string" or "{" not in schema_param["default"]:
Expand Down
10 changes: 8 additions & 2 deletions nf_core/pipelines/sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -273,17 +273,23 @@ def make_template_pipeline(self):
yaml.safe_dump(self.config_yml.model_dump(), config_path)

try:
nf_core.pipelines.create.create.PipelineCreate(
pipeline_create_obj = nf_core.pipelines.create.create.PipelineCreate(
outdir=str(self.pipeline_dir),
from_config_file=True,
no_git=True,
force=True,
).init_pipeline()
)
pipeline_create_obj.init_pipeline()

# set force to false to avoid overwriting files in the future
if self.config_yml.template is not None:
self.config_yml.template = pipeline_create_obj.config
# Set force true in config to overwrite existing files
self.config_yml.template.force = False
# Set outdir as the current directory to avoid local info leaking
self.config_yml.template.outdir = "."
# Update nf-core version
self.config_yml.nf_core_version = nf_core.__version__
with open(self.config_yml_path, "w") as config_path:
yaml.safe_dump(self.config_yml.model_dump(), config_path)

Expand Down
29 changes: 29 additions & 0 deletions nf_core/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -1136,6 +1136,35 @@ def load_tools_config(directory: Union[str, Path] = ".") -> Tuple[Optional[Path]
error_message += f"\n{error['loc'][0]}: {error['msg']}"
raise AssertionError(error_message)

wf_config = fetch_wf_config(Path(directory))
if nf_core_yaml_config["repository_type"] == "pipeline" and wf_config:
# Retrieve information if template from config file is empty
template = tools_config.get("template")
config_template_keys = template.keys() if template is not None else []
if nf_core_yaml_config.template is None:
# The .nf-core.yml file did not contain template information
nf_core_yaml_config.template = NFCoreTemplateConfig(
org="nf-core",
name=wf_config["manifest.name"].strip("'\"").split("/")[-1],
description=wf_config["manifest.description"].strip("'\""),
author=wf_config["manifest.author"].strip("'\""),
version=wf_config["manifest.version"].strip("'\""),
outdir=str(directory),
is_nfcore=True,
)
elif "prefix" in config_template_keys or "skip" in config_template_keys:
# The .nf-core.yml file contained the old prefix or skip keys
nf_core_yaml_config.template = NFCoreTemplateConfig(
org=tools_config["template"].get("prefix", tools_config["template"].get("org", "nf-core")),
name=tools_config["template"].get("name", wf_config["manifest.name"].strip("'\"").split("/")[-1]),
description=tools_config["template"].get("description", wf_config["manifest.description"].strip("'\"")),
author=tools_config["template"].get("author", wf_config["manifest.author"].strip("'\"")),
version=tools_config["template"].get("version", wf_config["manifest.version"].strip("'\"")),
outdir=tools_config["template"].get("outdir", str(directory)),
skip_features=tools_config["template"].get("skip", tools_config["template"].get("skip_features")),
is_nfcore=tools_config["template"].get("prefix", tools_config["template"].get("org")) == "nf-core",
)

log.debug("Using config file: %s", config_fn)
return config_fn, nf_core_yaml_config

Expand Down

0 comments on commit bd1e498

Please sign in to comment.