From 9e050919e62ec2954ee31a7072d2ee15dd38bae6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Crespo=20Garc=C3=ADa?= Date: Tue, 24 Jun 2025 10:41:53 +0200 Subject: [PATCH 1/3] Take token into consideration for Git providers that require authentication --- .../src/main/groovy/nextflow/scm/RepositoryProvider.groovy | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/nextflow/src/main/groovy/nextflow/scm/RepositoryProvider.groovy b/modules/nextflow/src/main/groovy/nextflow/scm/RepositoryProvider.groovy index c62bf7be9e..d3acc83f70 100644 --- a/modules/nextflow/src/main/groovy/nextflow/scm/RepositoryProvider.groovy +++ b/modules/nextflow/src/main/groovy/nextflow/scm/RepositoryProvider.groovy @@ -126,13 +126,15 @@ abstract class RepositoryProvider { } boolean hasCredentials() { - getUser() && getPassword() + return (getUser() && getPassword()) || getToken() } String getUser() { config?.user } String getPassword() { config?.password } + String getToken() { config?.token } + /** * @return The name of the source hub service e.g. github or bitbucket */ From 7bb7f2c3c07446e76f14ab1a30915c510e175168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Crespo=20Garc=C3=ADa?= Date: Thu, 17 Jul 2025 10:07:33 +0200 Subject: [PATCH 2/3] Override hasCredentials method for those provider subclasses that rely on tokens for authentication instead of modifying the parent class method --- .../groovy/nextflow/scm/BitbucketRepositoryProvider.groovy | 2 +- .../groovy/nextflow/scm/GiteaRepositoryProvider.groovy | 7 +++++++ .../groovy/nextflow/scm/GitlabRepositoryProvider.groovy | 7 +++++++ .../src/main/groovy/nextflow/scm/RepositoryProvider.groovy | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/modules/nextflow/src/main/groovy/nextflow/scm/BitbucketRepositoryProvider.groovy b/modules/nextflow/src/main/groovy/nextflow/scm/BitbucketRepositoryProvider.groovy index 2c87272f4b..df1038f747 100644 --- a/modules/nextflow/src/main/groovy/nextflow/scm/BitbucketRepositoryProvider.groovy +++ b/modules/nextflow/src/main/groovy/nextflow/scm/BitbucketRepositoryProvider.groovy @@ -48,7 +48,7 @@ final class BitbucketRepositoryProvider extends RepositoryProvider { @Override boolean hasCredentials() { - return config.token + return getToken() ? true : super.hasCredentials() } diff --git a/modules/nextflow/src/main/groovy/nextflow/scm/GiteaRepositoryProvider.groovy b/modules/nextflow/src/main/groovy/nextflow/scm/GiteaRepositoryProvider.groovy index 65be6c04f8..b47901cac0 100644 --- a/modules/nextflow/src/main/groovy/nextflow/scm/GiteaRepositoryProvider.groovy +++ b/modules/nextflow/src/main/groovy/nextflow/scm/GiteaRepositoryProvider.groovy @@ -53,6 +53,13 @@ final class GiteaRepositoryProvider extends RepositoryProvider { return null } + @Override + boolean hasCredentials() { + return getToken() + ? true + : super.hasCredentials() + } + @Override @CompileDynamic List getBranches() { diff --git a/modules/nextflow/src/main/groovy/nextflow/scm/GitlabRepositoryProvider.groovy b/modules/nextflow/src/main/groovy/nextflow/scm/GitlabRepositoryProvider.groovy index 0f57cc4988..028681871b 100644 --- a/modules/nextflow/src/main/groovy/nextflow/scm/GitlabRepositoryProvider.groovy +++ b/modules/nextflow/src/main/groovy/nextflow/scm/GitlabRepositoryProvider.groovy @@ -50,6 +50,13 @@ class GitlabRepositoryProvider extends RepositoryProvider { return null } + @Override + boolean hasCredentials() { + return getToken() + ? true + : super.hasCredentials() + } + @Override String getName() { "GitLab" } diff --git a/modules/nextflow/src/main/groovy/nextflow/scm/RepositoryProvider.groovy b/modules/nextflow/src/main/groovy/nextflow/scm/RepositoryProvider.groovy index 4dca0a397f..495055c188 100644 --- a/modules/nextflow/src/main/groovy/nextflow/scm/RepositoryProvider.groovy +++ b/modules/nextflow/src/main/groovy/nextflow/scm/RepositoryProvider.groovy @@ -126,7 +126,7 @@ abstract class RepositoryProvider { } boolean hasCredentials() { - return (getUser() && getPassword()) || getToken() + getUser() && getPassword() } String getUser() { config?.user } From bdf20775b17da5f3e04b5a2a8dd2832d067282c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Crespo=20Garc=C3=ADa?= Date: Thu, 17 Jul 2025 13:49:33 +0200 Subject: [PATCH 3/3] Add unit tests for hasCredentials method in the different subclasses --- .../scm/GiteaRepositoryProviderTest.groovy | 18 ++++++++++++++++++ .../scm/GitlabRepositoryProviderTest.groovy | 17 +++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/modules/nextflow/src/test/groovy/nextflow/scm/GiteaRepositoryProviderTest.groovy b/modules/nextflow/src/test/groovy/nextflow/scm/GiteaRepositoryProviderTest.groovy index f1791e2b6a..2ec1b6284e 100644 --- a/modules/nextflow/src/test/groovy/nextflow/scm/GiteaRepositoryProviderTest.groovy +++ b/modules/nextflow/src/test/groovy/nextflow/scm/GiteaRepositoryProviderTest.groovy @@ -19,6 +19,8 @@ package nextflow.scm import spock.lang.IgnoreIf import spock.lang.Requires import spock.lang.Specification +import spock.lang.Unroll + /** * * @author Akira Sekiguchi @@ -68,6 +70,22 @@ class GiteaRepositoryProviderTest extends Specification { } + @Unroll + def 'should validate hasCredentials' () { + given: + def provider = new GiteaRepositoryProvider('pditommaso/tutorial', PROVIDER_CONFIG) + + expect: + provider.hasCredentials() == EXPECTED + + where: + EXPECTED | PROVIDER_CONFIG + false | new ProviderConfig('gitea') + false | new ProviderConfig('gitea').setUser('foo') + true | new ProviderConfig('gitea').setUser('foo').setPassword('bar') + true | new ProviderConfig('gitea').setToken('xyz') + } + @IgnoreIf({System.getenv('NXF_SMOKE')}) @Requires({System.getenv('NXF_GITEA_ACCESS_TOKEN')}) def 'should read file content'() { diff --git a/modules/nextflow/src/test/groovy/nextflow/scm/GitlabRepositoryProviderTest.groovy b/modules/nextflow/src/test/groovy/nextflow/scm/GitlabRepositoryProviderTest.groovy index 3c6d45a6f5..59f7b848de 100644 --- a/modules/nextflow/src/test/groovy/nextflow/scm/GitlabRepositoryProviderTest.groovy +++ b/modules/nextflow/src/test/groovy/nextflow/scm/GitlabRepositoryProviderTest.groovy @@ -19,6 +19,7 @@ package nextflow.scm import spock.lang.IgnoreIf import spock.lang.Requires import spock.lang.Specification +import spock.lang.Unroll /** * @@ -37,6 +38,22 @@ class GitlabRepositoryProviderTest extends Specification { new GitlabRepositoryProvider('pditommaso/hello').getRepositoryUrl() == 'https://gitlab.com/pditommaso/hello' } + @Unroll + def 'should validate hasCredentials' () { + given: + def provider = new GitlabRepositoryProvider('pditommaso/tutorial', CONFIG) + + expect: + provider.hasCredentials() == EXPECTED + + where: + EXPECTED | CONFIG + false | new ProviderConfig('gitlab') + false | new ProviderConfig('gitlab').setUser('foo') + true | new ProviderConfig('gitlab').setUser('foo').setPassword('bar') + true | new ProviderConfig('gitlab').setToken('xyz') + } + @Requires({System.getenv('NXF_GITLAB_ACCESS_TOKEN')}) def 'should return clone url'() { given: