Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

can't create nf-core.yml file #3002

Closed
2 tasks done
paulsenlab opened this issue May 27, 2024 · 4 comments
Closed
2 tasks done

can't create nf-core.yml file #3002

paulsenlab opened this issue May 27, 2024 · 4 comments
Labels
bug Something isn't working

Comments

@paulsenlab
Copy link

Have you checked the docs?

Description of the bug

when I run "nf-core modules install deeptmhmm", the error "WARNING 'repository_type' not defined in .nf-core.yml " occurs.

Prompts to create this and add configuration then lead to an error output. The issue seems to that ".nf-core.yml" is being writen to the root directory ie "/.nf-core.yml. Is there an environmental variable or path that can be set to avoid this behaviour?

Command used and terminal output

(virtualnextflow) liamelbourne [virtualnextflow] $ nf-core modules install deeptmhmm

                                          ,--./,-.
          ___     __   __   __   ___     /,-._.--~\
    |\ | |__  __ /  ` /  \ |__) |__         }  {
    | \| |       \__, \__/ |  \ |___     \`-._,-`-,
                                          `._,._,'

    nf-core/tools version 2.14.1 - https://nf-co.re


WARNING  'repository_type' not defined in .nf-core.yml                                                                                                                                                                                                                                                
? Is this repository an nf-core pipeline or a fork of nf-core/modules? nf-core/modules
INFO     To avoid this prompt in the future, add the 'repository_type' key to your .nf-core.yml file.                                                                                                                                                                                                 
? Would you like me to add this config now? [y/n] (y): 
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /Users/liamelbourne/virtualnextflow/bin/nf-core:8 in <module>                                    │
│                                                                                                  │
│   5 from nf_core.__main__ import run_nf_core                                                     │
│   6 if __name__ == '__main__':                                                                   │
│   7 │   sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])                         │
│ ❱ 8 │   sys.exit(run_nf_core())                                                                  │
│   9                                                                                              │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/nf_core/__main__.py:150 in      │
│ run_nf_core                                                                                      │
│                                                                                                  │
│    147 │   │   │   log.debug(f"Could not check latest version: {e}")                             │
│    148 │   │   stderr.print("\n")                                                                │
│    149 │   # Launch the click cli                                                                │
│ ❱  150 │   nf_core_cli(auto_envvar_prefix="NFCORE")                                              │
│    151                                                                                           │
│    152                                                                                           │
│    153 @tui()                                                                                    │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/rich_click/rich_command.py:367  │
│ in __call__                                                                                      │
│                                                                                                  │
│   364 │   │   # Include this here because I run into a false warning                             │
│   365 │   │   # in the PyCharm IDE otherwise; for some reason PyCharm doesn't                    │
│   366 │   │   # seem to think RichGroups are callable. (No issues with Mypy, though.)            │
│ ❱ 367 │   │   return super().__call__(*args, **kwargs)                                           │
│   368                                                                                            │
│   369                                                                                            │
│   370 class RichCommandCollection(CommandCollection, RichGroup):                                 │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/click/core.py:1157 in __call__  │
│                                                                                                  │
│   1154 │                                                                                         │
│   1155 │   def __call__(self, *args: t.Any, **kwargs: t.Any) -> t.Any:                           │
│   1156 │   │   """Alias for :meth:`main`."""                                                     │
│ ❱ 1157 │   │   return self.main(*args, **kwargs)                                                 │
│   1158                                                                                           │
│   1159                                                                                           │
│   1160 class Command(BaseCommand):                                                               │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/rich_click/rich_command.py:152  │
│ in main                                                                                          │
│                                                                                                  │
│   149 │   │   try:                                                                               │
│   150 │   │   │   try:                                                                           │
│   151 │   │   │   │   with self.make_context(prog_name, args, **extra) as ctx:                   │
│ ❱ 152 │   │   │   │   │   rv = self.invoke(ctx)                                                  │
│   153 │   │   │   │   │   if not standalone_mode:                                                │
│   154 │   │   │   │   │   │   return rv                                                          │
│   155 │   │   │   │   │   # it's not safe to `ctx.exit(rv)` here!                                │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/click/core.py:1688 in invoke    │
│                                                                                                  │
│   1685 │   │   │   │   super().invoke(ctx)                                                       │
│   1686 │   │   │   │   sub_ctx = cmd.make_context(cmd_name, args, parent=ctx)                    │
│   1687 │   │   │   │   with sub_ctx:                                                             │
│ ❱ 1688 │   │   │   │   │   return _process_result(sub_ctx.command.invoke(sub_ctx))               │
│   1689 │   │                                                                                     │
│   1690 │   │   # In chain mode we create the contexts step by step, but after the                │
│   1691 │   │   # base command has been invoked.  Because at that point we do not                 │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/click/core.py:1688 in invoke    │
│                                                                                                  │
│   1685 │   │   │   │   super().invoke(ctx)                                                       │
│   1686 │   │   │   │   sub_ctx = cmd.make_context(cmd_name, args, parent=ctx)                    │
│   1687 │   │   │   │   with sub_ctx:                                                             │
│ ❱ 1688 │   │   │   │   │   return _process_result(sub_ctx.command.invoke(sub_ctx))               │
│   1689 │   │                                                                                     │
│   1690 │   │   # In chain mode we create the contexts step by step, but after the                │
│   1691 │   │   # base command has been invoked.  Because at that point we do not                 │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/click/core.py:1434 in invoke    │
│                                                                                                  │
│   1431 │   │   │   echo(style(message, fg="red"), err=True)                                      │
│   1432 │   │                                                                                     │
│   1433 │   │   if self.callback is not None:                                                     │
│ ❱ 1434 │   │   │   return ctx.invoke(self.callback, **ctx.params)                                │
│   1435 │                                                                                         │
│   1436 │   def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]:  │
│   1437 │   │   """Return a list of completions for the incomplete value. Looks                   │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/click/core.py:783 in invoke     │
│                                                                                                  │
│    780 │   │                                                                                     │
│    781 │   │   with augment_usage_errors(__self):                                                │
│    782 │   │   │   with ctx:                                                                     │
│ ❱  783 │   │   │   │   return __callback(*args, **kwargs)                                        │
│    784 │                                                                                         │
│    785 │   def forward(                                                                          │
│    786 │   │   __self, __cmd: "Command", *args: t.Any, **kwargs: t.Any  # noqa: B902             │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/click/decorators.py:33 in       │
│ new_func                                                                                         │
│                                                                                                  │
│    30 │   """                                                                                    │
│    31 │                                                                                          │
│    32 │   def new_func(*args: "P.args", **kwargs: "P.kwargs") -> "R":                            │
│ ❱  33 │   │   return f(get_current_context(), *args, **kwargs)                                   │
│    34 │                                                                                          │
│    35 │   return update_wrapper(new_func, f)                                                     │
│    36                                                                                            │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/nf_core/__main__.py:839 in      │
│ modules_install                                                                                  │
│                                                                                                  │
│    836 │   from nf_core.modules import ModuleInstall                                             │
│    837 │                                                                                         │
│    838 │   try:                                                                                  │
│ ❱  839 │   │   module_install = ModuleInstall(                                                   │
│    840 │   │   │   dir,                                                                          │
│    841 │   │   │   force,                                                                        │
│    842 │   │   │   prompt,                                                                       │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/nf_core/modules/install.py:16   │
│ in __init__                                                                                      │
│                                                                                                  │
│   13 │   │   no_pull=False,                                                                      │
│   14 │   │   installed_by=False,                                                                 │
│   15 │   ):                                                                                      │
│ ❱ 16 │   │   super().__init__(                                                                   │
│   17 │   │   │   pipeline_dir,                                                                   │
│   18 │   │   │   "modules",                                                                      │
│   19 │   │   │   force=force,                                                                    │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/nf_core/components/install.py:3 │
│ 5 in __init__                                                                                    │
│                                                                                                  │
│    32 │   │   no_pull=False,                                                                     │
│    33 │   │   installed_by=False,                                                                │
│    34 │   ):                                                                                     │
│ ❱  35 │   │   super().__init__(component_type, pipeline_dir, remote_url, branch, no_pull)        │
│    36 │   │   self.force = force                                                                 │
│    37 │   │   self.prompt = prompt                                                               │
│    38 │   │   self.sha = sha                                                                     │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/nf_core/components/components_c │
│ ommand.py:40 in __init__                                                                         │
│                                                                                                  │
│    37 │   │   self.modules_repo = ModulesRepo(remote_url, branch, no_pull, hide_progress)        │
│    38 │   │   self.hide_progress = hide_progress                                                 │
│    39 │   │   self.no_prompts = no_prompts                                                       │
│ ❱  40 │   │   self._configure_repo_and_paths()                                                   │
│    41 │                                                                                          │
│    42 │   def _configure_repo_and_paths(self, nf_dir_req: bool = True) -> None:                  │
│    43 │   │   """                                                                                │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/nf_core/components/components_c │
│ ommand.py:53 in _configure_repo_and_paths                                                        │
│                                                                                                  │
│    50 │   │                                                                                      │
│    51 │   │   try:                                                                               │
│    52 │   │   │   if self.dir:                                                                   │
│ ❱  53 │   │   │   │   self.dir, self.repo_type, self.org = get_repo_info(self.dir, use_prompt=   │
│    54 │   │   │   else:                                                                          │
│    55 │   │   │   │   self.repo_type = None                                                      │
│    56 │   │   │   │   self.org = ""                                                              │
│                                                                                                  │
│ /Users/liamelbourne/virtualnextflow/lib/python3.12/site-packages/nf_core/components/components_u │
│ tils.py:47 in get_repo_info                                                                      │
│                                                                                                  │
│    44 │   │   # Save the choice in the config file                                               │
│    45 │   │   log.info(f"To avoid this prompt in the future, add the 'repository_type' key to    │
│    46 │   │   if rich.prompt.Confirm.ask("[bold][blue]?[/] Would you like me to add this confi   │
│ ❱  47 │   │   │   with open(config_fn, "a+") as fh:                                              │
│    48 │   │   │   │   fh.write(f"repository_type: {repo_type}\n")                                │
│    49 │   │   │   │   log.info(f"Config added to '{config_fn.name}'")                            │
│    50                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
OSError: [Errno 30] Read-only file system: '/.nf-core.yml'
(virtualnextflow) liamelbourne [virtualnextflow] $

Relevant files

(virtualnextflow) liamelbourne [virtualnextflow] $ cat .nextflow.log
May-27 15:46:45.501 [main] DEBUG nextflow.cli.Launcher - $> nextflow run hello
May-27 15:46:45.541 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 24.04.1
May-27 15:46:45.564 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/Users/liamelbourne/.nextflow/plugins; core-plugins: nf-amazon@2.5.2,nf-azure@1.6.0,nf-cloudcache@0.4.1,nf-codecommit@0.2.0,nf-console@1.1.3,nf-ga4gh@1.3.0,nf-google@1.13.2,nf-tower@1.9.1,nf-wave@1.4.2
May-27 15:46:45.570 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: []
May-27 15:46:45.571 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: []
May-27 15:46:45.572 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.10.0 in 'deployment' mode
May-27 15:46:45.583 [main] INFO org.pf4j.AbstractPluginManager - No plugins
May-27 15:46:45.589 [main] DEBUG nextflow.scm.ProviderConfig - Using SCM config path: /Users/liamelbourne/.nextflow/scm
May-27 15:46:45.593 [main] DEBUG nextflow.scm.AssetManager - Listing projects in folder: /Users/liamelbourne/.nextflow/assets
May-27 15:46:45.608 [main] DEBUG nextflow.scm.RepositoryFactory - Found Git repository result: [RepositoryFactory]
May-27 15:46:45.614 [main] INFO nextflow.cli.CmdRun - Pulling nextflow-io/hello ...
May-27 15:46:45.616 [main] DEBUG nextflow.scm.RepositoryProvider - Request [credentials -:-] -> https://api.github.com/repos/nextflow-io/hello/contents/nextflow.config
May-27 15:46:46.353 [main] DEBUG nextflow.scm.RepositoryProvider - Request [credentials -:-] -> https://api.github.com/repos/nextflow-io/hello/contents/main.nf
May-27 15:46:46.702 [main] DEBUG nextflow.scm.RepositoryProvider - Request [credentials -:-] -> https://api.github.com/repos/nextflow-io/hello
May-27 15:46:47.084 [main] DEBUG nextflow.scm.AssetManager - Pulling nextflow-io/hello -- Using remote clone url: https://github.com/nextflow-io/hello.git
May-27 15:46:51.354 [main] INFO nextflow.cli.CmdRun - downloaded from https://github.com/nextflow-io/hello.git
May-27 15:46:51.369 [main] DEBUG nextflow.config.ConfigBuilder - Found config base: /Users/liamelbourne/.nextflow/assets/nextflow-io/hello/nextflow.config
May-27 15:46:51.369 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /Users/liamelbourne/.nextflow/assets/nextflow-io/hello/nextflow.config
May-27 15:46:51.375 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /Users/liamelbourne/.nextflow/secrets/store.json
May-27 15:46:51.376 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@7015ebef] - activable => nextflow.secret.LocalSecretsProvider@7015ebef
May-27 15:46:51.379 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: standard
May-27 15:46:51.399 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 by global default
May-27 15:46:51.399 [main] DEBUG nextflow.cli.CmdRun - Launching https://github.com/nextflow-io/hello [elated_saha] DSL2 - revision: 7588c46ffe [master]
May-27 15:46:51.400 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[]
May-27 15:46:51.400 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[]
May-27 15:46:51.423 [main] DEBUG nextflow.Session - Session UUID: c1ce7fae-c30b-419e-aaf5-22b4dda385ea
May-27 15:46:51.424 [main] DEBUG nextflow.Session - Run name: elated_saha
May-27 15:46:51.424 [main] DEBUG nextflow.Session - Executor pool size: 16
May-27 15:46:51.427 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null
May-27 15:46:51.448 [main] DEBUG nextflow.cli.CmdRun -
Version: 24.04.1 build 5913
Created: 20-05-2024 09:48 UTC (19:48 AEDT)
System: Mac OS X 14.5
Runtime: Groovy 4.0.21 on OpenJDK 64-Bit Server VM 21.0.3
Encoding: UTF-8 (UTF-8)
Process: 10476@LiamMacBookPro [10.69.40.106]
CPUs: 16 - Mem: 128 GB (56.4 GB) - Swap: 0 (0) - Virtual threads ON
May-27 15:46:51.458 [main] DEBUG nextflow.Session - Work-dir: /Users/liamelbourne/virtualnextflow/work [Mac OS X]
May-27 15:46:51.459 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /Users/liamelbourne/.nextflow/assets/nextflow-io/hello/bin
May-27 15:46:51.465 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[]
May-27 15:46:51.469 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory
May-27 15:46:51.484 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory
May-27 15:46:51.488 [main] DEBUG nextflow.util.CustomPoolFactory - Creating virtual thread pool
May-27 15:46:51.519 [main] DEBUG nextflow.Session - Session start
May-27 15:46:51.620 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution
May-27 15:46:51.665 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null
May-27 15:46:51.665 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local'
May-27 15:46:51.668 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local
May-27 15:46:51.671 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=16; memory=128 GB; capacity=16; pollInterval=100ms; dumpInterval=5m
May-27 15:46:51.672 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local)
May-27 15:46:51.707 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: sayHello
May-27 15:46:51.707 [main] DEBUG nextflow.Session - Igniting dataflow network (2)
May-27 15:46:51.708 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > sayHello
May-27 15:46:51.708 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files:
Script_45e06ae60646ee81: /Users/liamelbourne/.nextflow/assets/nextflow-io/hello/main.nf
May-27 15:46:51.708 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination
May-27 15:46:51.708 [main] DEBUG nextflow.Session - Session await
May-27 15:46:51.782 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run
May-27 15:46:51.782 [Task submitter] INFO nextflow.Session - [be/4567f2] Submitted process > sayHello (4)
May-27 15:46:51.786 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run
May-27 15:46:51.786 [Task submitter] INFO nextflow.Session - [41/c5653b] Submitted process > sayHello (1)
May-27 15:46:51.789 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run
May-27 15:46:51.789 [Task submitter] INFO nextflow.Session - [e4/04eae7] Submitted process > sayHello (2)
May-27 15:46:51.802 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 4; name: sayHello (4); status: COMPLETED; exit: 0; error: -; workDir: /Users/liamelbourne/virtualnextflow/work/be/4567f2fa4f8f4d523fa83905ba6a46]
May-27 15:46:51.803 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run
May-27 15:46:51.804 [Task submitter] INFO nextflow.Session - [42/4d0b10] Submitted process > sayHello (3)
May-27 15:46:51.805 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: sayHello (1); status: COMPLETED; exit: 0; error: -; workDir: /Users/liamelbourne/virtualnextflow/work/41/c5653bada60d540ecf4139b1c6af44]
May-27 15:46:51.807 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 2; name: sayHello (2); status: COMPLETED; exit: 0; error: -; workDir: /Users/liamelbourne/virtualnextflow/work/e4/04eae733d10f4e4d33adf9005db3ee]
May-27 15:46:51.811 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 3; name: sayHello (3); status: COMPLETED; exit: 0; error: -; workDir: /Users/liamelbourne/virtualnextflow/work/42/4d0b10fbbd51348463f1b40233156a]
May-27 15:46:51.813 [main] DEBUG nextflow.Session - Session await > all processes finished
May-27 15:46:51.914 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop
May-27 15:46:51.914 [main] DEBUG nextflow.Session - Session await > all barriers passed
May-27 15:46:51.915 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'TaskFinalizer' shutdown completed (hard=false)
May-27 15:46:51.917 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=4; failedCount=0; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=0; succeedDuration=3ms; failedDuration=0ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=4; peakCpus=4; peakMemory=0; ]
May-27 15:46:51.956 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done
May-27 15:46:51.962 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false)
May-27 15:46:51.962 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye
(virtualnextflow) liamelbourne [virtualnextflow] $

System information

nextflow version 24.04.1.5913
Docker version 26.1.3, build b72abbb6f0
Apple MacBook Pro M3

local

macOS 14.5

@paulsenlab paulsenlab added the bug Something isn't working label May 27, 2024
@mirpedrol mirpedrol transferred this issue from nf-core/modules May 27, 2024
@mirpedrol
Copy link
Member

Hi @paulsenlab, thanks for pointing this error out.
This PR will fix the bug, once it's merged you can try running the same command with the dev version of nf-core tools.
Otherwise you can manually recreate the .nf-core.yml file containing
repository_type: pipeline

@paulsenlab
Copy link
Author

paulsenlab commented May 28, 2024 via email

@mirpedrol
Copy link
Member

@paulsenlab sorry I didn't explain properly, the file must be created in the root directory of your pipeline

@mirpedrol
Copy link
Member

I will close this issue now, it's solved on the dev version. Please don't hesitate to re-open it if the error continues.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
No open projects
Status: No status
Development

No branches or pull requests

2 participants