Repository: societe-generale/github-crawler
Pull request #98 (2022-03-23 16:55:31)

Preparing 2.x release
doc updates + cleanup before release


Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 70dbd32..6a72ff4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,9 +12,11 @@
 
 ### Fixed
 
-##  [1.3.0] - 2022-03-15
+##  [2.0.0] - 2022-03-23
 
 ### Changed
+- PR #96 / 97 : renaming some config keys
+- PR #94 : Added first Azure Devops capabilities
 - PR #91 / 92 : upgraded to latest Spring Boot (2.6.4) and Kotlin (1.6.10)
 - PR #93 : now expecting that target source control is explicitly defined in config 
 - quick fix to output miscTaskresults in CIdroidReadyJsonFileOutput
diff --git a/README.md b/README.md
index d4b2e4d..0993d26 100644
--- a/README.md
+++ b/README.md
@@ -53,17 +53,17 @@ Several output types are available in [this package](./github-crawler-core/src/m
 Below configuration shows how outputs, indicators and actions are configured under the ```github-crawler``` prefix.
 
 ```yaml
-github-crawler:
+crawler:
     
-    githubConfig:    
-        # since v1.3.0, we need to mention the source control type. defaults to GitHub, but other options are possible
+    source-control:    
+        # since v2.0.0, we need to mention the source control type. defaults to GitHub, but other options are possible
         # as defined in https://github.com/societe-generale/github-crawler/blob/master/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/GithubConfig.kt
         type: "GITHUB"
         # the base GitHub URL for your Github enterprise instance to crawl
         # or if it's github.com...
         # gitHub.url: https://api.github.com
-        apiUrl: https://my.githubEnterprise/api/v3
-        oauthToken: "YOUR_TOKEN"
+        url: https://my.githubEnterprise/api/v3
+        apiToken: "YOUR_TOKEN"
         # the name of the GitHub organization to crawl. To fetch the repositories, the crawler will hit 
         # https://${gitHub.url}/api/v3/orgs/${organizationName}/repos
         organizationName: MyOrganization
@@ -183,29 +183,24 @@ GithubCrawler crawls through repository and attaches tags information with all t
 
 ## Gitlab support
 
-From v1.2.0 onward, basic support for gitLab is available ! It all boils down to implementing a GitLab specific version of ```RemoteGitHub``` interface. Primary support is still for Github though, so not all the naming and config is aligned for GitLab (at least for now).
+Basic support for gitLab is available ! It all boils down to implementing a GitLab specific version of ```RemoteSourceControl``` interface.
 
-### Running the crawler for Gitlab
-
-- run the application with proper Spring Boot profile, ie with ```-Dspring.profiles.active=gitLab``` on the command line
-- Since the crawler is still primarily for GitHub, the config properties haven't been adapted (yet ?) for Gitlab. So your config would look like : 
-
-note : if you're using v1.3.0+ , then we won't use profiles anymore, but use the `github-crawler.githubConfig.type` property and set it to `GITLAB` . 
+Your config would look like : 
 
 ```
-    github-crawler:
-      githubConfig:
+    crawler:
+      source-control:
         type: "GITLAB"
-        apiUrl: https://gitlab.com/api/v4/
+        url: https://gitlab.com/api/v4/
 
         # your Gitlab personal access token
-        oauthToken: "5yL4_Y9hyC_YX9urZN_G"
+        apiToken: "5yL4_Y9hyC_YX9urZN_G"
 
         # your Gitlab "group"
         organizationName: myJavaProjects
 ```
 
-Not all methods defined in [RemoteGitHub](https://github.com/societe-generale/github-crawler/blob/b86c7483e4f361211750f454d70ccdec135ad655/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitHub.kt) interface may have been implemented for Gitlab : ```NotImplementedError``` would be thrown in that case. If you need them, you can implement them in ```RemoteGitLabImpl``` (and contribute them back through a pull request ?).
+Not all methods defined in [RemoteSourceControl](https://github.com/societe-generale/github-crawler/blob/b86c7483e4f361211750f454d70ccdec135ad655/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitHub.kt) interface may have been implemented for Gitlab : ```NotImplementedError``` would be thrown in that case. If you need them, you can implement them in ```RemoteGitLabImpl``` (and contribute them back through a pull request ?).
 
 Similarly, we may have added methods in the interface for some of our Gitlab specific use-cases : in that case, these methods may not have been implemented in the [Github version of the interface](https://github.com/societe-generale/github-crawler/blob/master/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitHubImpl.kt) 
 
@@ -213,6 +208,23 @@ Similarly, we may have added methods in the interface for some of our Gitlab spe
 
 the same rules apply that for GitHub, but in a file named `.gitlabCrawler`
 
+
+## Azure Devops support
+
+Just like for GitLab, there's basic support for Azure Devops !
+
+```
+    crawler:
+      source-control:
+        type: "AZURE_DEVOPS"
+        apiToken: "abcedfr6rwqwzslqhvfmdpuo5amfyv25a"
+        # no need to define the URL, since it can only be a hosted service 
+
+        # in Azure devops, repositories are in a project, within an organization. We mention both of them, separated by a '#' :
+        # the crawler will pick the repositories from this project
+        organization-name: "myOrg#myProject"
+```
+
  
 ## File content parsers
 
diff --git a/github-crawler-autoconfigure/pom.xml b/github-crawler-autoconfigure/pom.xml
index ca8f31a..cce1f7d 100644
--- a/github-crawler-autoconfigure/pom.xml
+++ b/github-crawler-autoconfigure/pom.xml
@@ -4,7 +4,7 @@
 
     <groupId>com.societegenerale.github-crawler</groupId>
     <artifactId>github-crawler-autoconfigure</artifactId>
-    <version>1.3.0-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>github-crawler-autoconfigure</name>
@@ -12,7 +12,7 @@
     <parent>
         <groupId>com.societegenerale.github-crawler</groupId>
         <artifactId>github-crawler-parent</artifactId>
-        <version>1.3.0-SNAPSHOT</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
 
     <dependencies>
diff --git a/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/AzureDevopsConfiguration.kt b/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/AzureDevopsConfiguration.kt
index 4b22f4b..9fd8577 100644
--- a/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/AzureDevopsConfiguration.kt
+++ b/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/AzureDevopsConfiguration.kt
@@ -4,7 +4,7 @@ package com.societegenerale.githubcrawler.config
 import com.societegenerale.githubcrawler.GitHubCrawlerProperties
 import com.societegenerale.githubcrawler.remote.RemoteAzureDevopsImpl
 import com.societegenerale.githubcrawler.remote.RemoteAzureDevopsImpl.Companion.AZURE_DEVOPS_URL
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import org.slf4j.LoggerFactory
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
 import org.springframework.context.annotation.Bean
@@ -17,7 +17,7 @@ open class AzureDevopsConfiguration {
     val log = LoggerFactory.getLogger(this.javaClass)
 
     @Bean
-    open fun remoteAzureDevops(gitHubCrawlerProperties: GitHubCrawlerProperties): RemoteGitHub {
+    open fun remoteAzureDevops(gitHubCrawlerProperties: GitHubCrawlerProperties): RemoteSourceControl {
 
         val targetUrl:String
 
diff --git a/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitHubConfiguration.kt b/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitHubConfiguration.kt
index 5bd7081..9c9a507 100644
--- a/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitHubConfiguration.kt
+++ b/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitHubConfiguration.kt
@@ -2,8 +2,8 @@ package com.societegenerale.githubcrawler.config
 
 
 import com.societegenerale.githubcrawler.GitHubCrawlerProperties
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
 import com.societegenerale.githubcrawler.remote.RemoteGitHubImpl
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
 import org.springframework.context.annotation.Bean
 import org.springframework.context.annotation.Configuration
@@ -13,7 +13,7 @@ import org.springframework.context.annotation.Configuration
 open class GitHubConfiguration {
 
     @Bean
-    open fun remoteGitHub(gitHubCrawlerProperties: GitHubCrawlerProperties): RemoteGitHub {
+    open fun remoteGitHub(gitHubCrawlerProperties: GitHubCrawlerProperties): RemoteSourceControl {
 
         return RemoteGitHubImpl(gitHubCrawlerProperties.sourceControl.url,
                                 gitHubCrawlerProperties.sourceControl.crawlUsersRepoInsteadOfOrgasRepos,
diff --git a/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitHubCrawlerAutoConfiguration.kt b/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitHubCrawlerAutoConfiguration.kt
index c62c65d..98a9fd7 100644
--- a/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitHubCrawlerAutoConfiguration.kt
+++ b/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitHubCrawlerAutoConfiguration.kt
@@ -4,7 +4,7 @@ package com.societegenerale.githubcrawler.config
 import com.societegenerale.githubcrawler.*
 import com.societegenerale.githubcrawler.output.GitHubCrawlerOutput
 import com.societegenerale.githubcrawler.parsers.FileContentParser
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import com.societegenerale.githubcrawler.repoTaskToPerform.RepoTaskBuilder
 import org.slf4j.LoggerFactory
 import org.springframework.boot.context.properties.EnableConfigurationProperties
@@ -30,7 +30,7 @@ open class GitHubCrawlerAutoConfiguration {
     }
 
     @Bean
-    open fun crawler(remoteGitHub: RemoteGitHub,
+    open fun crawler(remoteSourceControl: RemoteSourceControl,
                      output: List<GitHubCrawlerOutput>,
                      gitHubCrawlerProperties: GitHubCrawlerProperties,
                      environment : Environment,
@@ -41,18 +41,18 @@ open class GitHubCrawlerAutoConfiguration {
 
         var availableParsersAndTasks = AvailableParsersAndTasks(fileContentParsers,repoTasksBuilders)
 
-        val repositoryEnricher = RepositoryEnricher(remoteGitHub,availableParsersAndTasks)
+        val repositoryEnricher = RepositoryEnricher(remoteSourceControl,availableParsersAndTasks)
 
         log.info("using repositoryEnricher "+repositoryEnricher+" when building the crawler...")
 
-        return GitHubCrawler(remoteGitHub, output, repositoryEnricher,gitHubCrawlerProperties,environment,gitHubCrawlerProperties.sourceControl.organizationName,configValidator,availableParsersAndTasks)
+        return GitHubCrawler(remoteSourceControl, output, repositoryEnricher,gitHubCrawlerProperties,environment,gitHubCrawlerProperties.sourceControl.organizationName,configValidator,availableParsersAndTasks)
     }
 
     @Bean
     open fun configValidator(gitHubCrawlerProperties: GitHubCrawlerProperties,
-                             remoteGitHub: RemoteGitHub): ConfigValidator {
+                             remoteSourceControl: RemoteSourceControl): ConfigValidator {
 
-        return ConfigValidator(gitHubCrawlerProperties,remoteGitHub)
+        return ConfigValidator(gitHubCrawlerProperties,remoteSourceControl)
     }
 
 }
diff --git a/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitHubCrawlerMiscTasksConfig.kt b/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitHubCrawlerMiscTasksConfig.kt
index ed53189..57aad57 100644
--- a/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitHubCrawlerMiscTasksConfig.kt
+++ b/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitHubCrawlerMiscTasksConfig.kt
@@ -2,7 +2,7 @@ package com.societegenerale.githubcrawler.config
 
 
 import com.societegenerale.githubcrawler.GitHubCrawlerProperties
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import com.societegenerale.githubcrawler.repoTaskToPerform.CountHitsOnRepoSearchBuilder
 import com.societegenerale.githubcrawler.repoTaskToPerform.NbBranchesOnRepoBuilder
 import com.societegenerale.githubcrawler.repoTaskToPerform.NbOpenPRsOnRepoBuilder
@@ -19,35 +19,35 @@ import org.springframework.context.annotation.Configuration
 open class GitHubCrawlerMiscTasksConfig {
 
     @Bean
-    open fun countHitsOnRepoSearchBuilder(remoteGitHub: RemoteGitHub): CountHitsOnRepoSearchBuilder{
+    open fun countHitsOnRepoSearchBuilder(remoteSourceControl: RemoteSourceControl): CountHitsOnRepoSearchBuilder{
 
-        return CountHitsOnRepoSearchBuilder(remoteGitHub)
+        return CountHitsOnRepoSearchBuilder(remoteSourceControl)
     }
 
     @Bean
-    open fun pathsForHitsOnRepoSearchBuilder(remoteGitHub: RemoteGitHub): PathsForHitsOnRepoSearchBuilder {
+    open fun pathsForHitsOnRepoSearchBuilder(remoteSourceControl: RemoteSourceControl): PathsForHitsOnRepoSearchBuilder {
 
-        return PathsForHitsOnRepoSearchBuilder(remoteGitHub)
+        return PathsForHitsOnRepoSearchBuilder(remoteSourceControl)
     }
 
     @Bean
-    open fun nbOpenPRsOnRepoBuilder(remoteGitHub: RemoteGitHub): NbOpenPRsOnRepoBuilder {
+    open fun nbOpenPRsOnRepoBuilder(remoteSourceControl: RemoteSourceControl): NbOpenPRsOnRepoBuilder {
 
-        return NbOpenPRsOnRepoBuilder(remoteGitHub)
+        return NbOpenPRsOnRepoBuilder(remoteSourceControl)
     }
 
     @Bean
-    open fun nbBranchesOnRepoBuilder(remoteGitHub: RemoteGitHub): NbBranchesOnRepoBuilder {
+    open fun nbBranchesOnRepoBuilder(remoteSourceControl: RemoteSourceControl): NbBranchesOnRepoBuilder {
 
-        return NbBranchesOnRepoBuilder(remoteGitHub)
+        return NbBranchesOnRepoBuilder(remoteSourceControl)
     }
 
     @Bean
-    open fun repoOwnershipComputer(remoteGitHub: RemoteGitHub, gitHubCrawlerProperties: GitHubCrawlerProperties): RepoOwnershipComputerBuilder {
+    open fun repoOwnershipComputer(remoteSourceControl: RemoteSourceControl, gitHubCrawlerProperties: GitHubCrawlerProperties): RepoOwnershipComputerBuilder {
 
         val organizationName=gitHubCrawlerProperties.sourceControl.organizationName
 
-        return RepoOwnershipComputerBuilder(remoteGitHub, MembershipParser(remoteGitHub, organizationName), organizationName,150);
+        return RepoOwnershipComputerBuilder(remoteSourceControl, MembershipParser(remoteSourceControl, organizationName), organizationName,150);
     }
 
 }
diff --git a/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitLabConfiguration.kt b/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitLabConfiguration.kt
index 5f4907c..6623abe 100644
--- a/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitLabConfiguration.kt
+++ b/github-crawler-autoconfigure/src/main/kotlin/com/societegenerale/githubcrawler/config/GitLabConfiguration.kt
@@ -2,8 +2,8 @@ package com.societegenerale.githubcrawler.config
 
 
 import com.societegenerale.githubcrawler.GitHubCrawlerProperties
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
 import com.societegenerale.githubcrawler.remote.RemoteGitLabImpl
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
 import org.springframework.context.annotation.Bean
 import org.springframework.context.annotation.Configuration
@@ -13,7 +13,7 @@ import org.springframework.context.annotation.Configuration
 open class GitLabConfiguration {
 
     @Bean
-    open fun remoteGitLab(gitHubCrawlerProperties: GitHubCrawlerProperties): RemoteGitHub {
+    open fun remoteGitLab(gitHubCrawlerProperties: GitHubCrawlerProperties): RemoteSourceControl {
 
         return RemoteGitLabImpl(gitHubCrawlerProperties.sourceControl.url,gitHubCrawlerProperties.sourceControl.apiToken)
     }
diff --git a/github-crawler-core/pom.xml b/github-crawler-core/pom.xml
index 1300006..de33846 100644
--- a/github-crawler-core/pom.xml
+++ b/github-crawler-core/pom.xml
@@ -4,7 +4,7 @@
 
     <groupId>com.societegenerale.github-crawler</groupId>
     <artifactId>github-crawler-core</artifactId>
-    <version>1.3.0-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>github-crawler-core</name>
@@ -12,7 +12,7 @@
     <parent>
         <groupId>com.societegenerale.github-crawler</groupId>
         <artifactId>github-crawler-parent</artifactId>
-        <version>1.3.0-SNAPSHOT</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
 
     <dependencies>
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/ConfigValidator.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/ConfigValidator.kt
index dcd13d2..f766580 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/ConfigValidator.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/ConfigValidator.kt
@@ -3,13 +3,13 @@ package com.societegenerale.githubcrawler
 
 import com.google.common.collect.ImmutableList
 import com.societegenerale.githubcrawler.remote.NoReachableRepositories
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import org.slf4j.LoggerFactory
 
 
 class ConfigValidator(val properties : GitHubCrawlerProperties,
 
-                      private val remoteGitHub: RemoteGitHub) {
+                      private val remoteSourceControl: RemoteSourceControl) {
 
     val log = LoggerFactory.getLogger(this.javaClass)
 
@@ -34,7 +34,7 @@ class ConfigValidator(val properties : GitHubCrawlerProperties,
         val organizationName=properties.sourceControl.organizationName;
 
         try{
-            remoteGitHub.validateRemoteConfig(organizationName)
+            remoteSourceControl.validateRemoteConfig(organizationName)
         }
         catch(e : NoReachableRepositories){
             //TODO make this GitLab ready..
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/GitHubCrawler.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/GitHubCrawler.kt
index 35c05ce..59df26f 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/GitHubCrawler.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/GitHubCrawler.kt
@@ -2,7 +2,7 @@ package com.societegenerale.githubcrawler
 
 import com.societegenerale.githubcrawler.model.Repository
 import com.societegenerale.githubcrawler.output.GitHubCrawlerOutput
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import com.societegenerale.githubcrawler.repoTaskToPerform.RepoTaskToPerform
 import org.slf4j.LoggerFactory
 import org.springframework.core.env.Environment
@@ -11,7 +11,7 @@ import java.text.SimpleDateFormat
 import java.util.*
 import java.util.stream.Collectors.toList
 
-class GitHubCrawler(private val remoteGitHub: RemoteGitHub,
+class GitHubCrawler(private val remoteSourceControl: RemoteSourceControl,
                     private val output: List<GitHubCrawlerOutput>,
                     private val repositoryEnricher: RepositoryEnricher,
                     private val gitHubCrawlerProperties: GitHubCrawlerProperties,
@@ -45,7 +45,7 @@ class GitHubCrawler(private val remoteGitHub: RemoteGitHub,
 
         }
 
-        var repositoriesFromOrga = remoteGitHub.fetchRepositories(organizationName)
+        var repositoriesFromOrga = remoteSourceControl.fetchRepositories(organizationName)
 
         fetchAndParseRepoContent(repositoriesFromOrga)
 
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/RepositoryEnricher.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/RepositoryEnricher.kt
index 3d95d05..5c1074e 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/RepositoryEnricher.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/RepositoryEnricher.kt
@@ -4,12 +4,12 @@ package com.societegenerale.githubcrawler
 import com.societegenerale.githubcrawler.model.Branch
 import com.societegenerale.githubcrawler.model.Repository
 import com.societegenerale.githubcrawler.remote.NoFileFoundException
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import com.societegenerale.githubcrawler.repoTaskToPerform.RepoTaskToPerform
 import org.slf4j.LoggerFactory
 
 
-class RepositoryEnricher(val remoteGitHub: RemoteGitHub,
+class RepositoryEnricher(val remoteSourceControl: RemoteSourceControl,
                          val availableParsersAndTasks : AvailableParsersAndTasks = AvailableParsersAndTasks(emptyList(), emptyList())){
 
     val log = LoggerFactory.getLogger(this.javaClass)
@@ -18,7 +18,7 @@ class RepositoryEnricher(val remoteGitHub: RemoteGitHub,
 
         if (crawlAllBranches) {
 
-            val branchesFound = remoteGitHub.fetchRepoBranches(repository.fullName);
+            val branchesFound = remoteSourceControl.fetchRepoBranches(repository.fullName);
 
             val repoWithBranches = repository.copy(branchesToParse = branchesFound)
 
@@ -39,7 +39,7 @@ class RepositoryEnricher(val remoteGitHub: RemoteGitHub,
         try {
             log.debug("loading repo config for $repository.fullName")
 
-            repositoryConfig = remoteGitHub.fetchRepoConfig(repository.fullName,repository.defaultBranch)
+            repositoryConfig = remoteSourceControl.fetchRepoConfig(repository.fullName,repository.defaultBranch)
 
             log.debug("..repo config found ${repositoryConfig.toString()}")
         } catch (e: NoFileFoundException) {
@@ -110,7 +110,7 @@ class RepositoryEnricher(val remoteGitHub: RemoteGitHub,
 
 
     private fun fetchFileWithIndicatorsToFind(repoFullName : String, branch: Branch, fileToFetchAndProcess: String): String {
-            return remoteGitHub.fetchFileContent(repoFullName, branch.name, fileToFetchAndProcess)
+            return remoteSourceControl.fetchFileContent(repoFullName, branch.name, fileToFetchAndProcess)
     }
 
 
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteAzureDevopsImpl.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteAzureDevopsImpl.kt
index 0418d48..9ca897c 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteAzureDevopsImpl.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteAzureDevopsImpl.kt
@@ -27,7 +27,7 @@ import java.util.*
 import java.util.stream.Collectors.toSet
 
 
-class RemoteAzureDevopsImpl @JvmOverloads constructor(val azureDevopsUrl: String = "https://dev.azure.com/", val organization: String, val personalAccessToken: String) : RemoteGitHub {
+class RemoteAzureDevopsImpl @JvmOverloads constructor(val azureDevopsUrl: String = "https://dev.azure.com/", val organization: String, val personalAccessToken: String) : RemoteSourceControl {
 
     var log = LoggerFactory.getLogger(this.javaClass.toString())
 
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitHubImpl.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitHubImpl.kt
index 10d1602..b5c9302 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitHubImpl.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitHubImpl.kt
@@ -43,7 +43,7 @@ import java.lang.reflect.Type
  * Implementation is mainly based on Feign's Builder for standard calls, and OkHttpClient for the others
  */
 @Suppress("TooManyFunctions") // most of methods are one liners, implementing the methods declared in interface
-class RemoteGitHubImpl @JvmOverloads constructor(val gitHubUrl: String, val usersReposInsteadOfOrgasRepos: Boolean = false, val oauthToken: String) : RemoteGitHub {
+class RemoteGitHubImpl @JvmOverloads constructor(val gitHubUrl: String, val usersReposInsteadOfOrgasRepos: Boolean = false, val apiKey: String) : RemoteSourceControl {
 
     companion object {
         const val REPO_LEVEL_CONFIG_FILE = ".githubCrawler"
@@ -59,7 +59,7 @@ class RemoteGitHubImpl @JvmOverloads constructor(val gitHubUrl: String, val user
         .decoder(GitHubResponseDecoder())
         .errorDecoder(GiHubErrorDecoder())
         .decode404()
-        .requestInterceptor(GitHubOauthTokenSetter(oauthToken))
+        .requestInterceptor(GitHubOauthTokenSetter(apiKey))
         .logger(Slf4jLogger(RemoteGitHubImpl::class.java))
         .logLevel(Logger.Level.FULL)
         .target<InternalGitHubClient>(InternalGitHubClient::class.java, gitHubUrl)
@@ -118,8 +118,8 @@ class RemoteGitHubImpl @JvmOverloads constructor(val gitHubUrl: String, val user
 
     private fun addOAuthTokenIfRequired(requestBuilder: okhttp3.Request.Builder): Unit {
 
-        if (oauthToken.isNotBlank()) {
-            requestBuilder.addHeader("Authorization", "token " + oauthToken)
+        if (apiKey.isNotBlank()) {
+            requestBuilder.addHeader("Authorization", "token " + apiKey)
         }
 
     }
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitLabImpl.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitLabImpl.kt
index f6d19bd..a2e4e00 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitLabImpl.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitLabImpl.kt
@@ -42,7 +42,7 @@ import java.util.stream.Collectors.toSet
  *
  */
 @Suppress("TooManyFunctions") // most of methods are one liners, implementing the methods declared in interface
-class RemoteGitLabImpl @JvmOverloads constructor(val gitLabUrl: String, val privateToken: String) : RemoteGitHub {
+class RemoteGitLabImpl @JvmOverloads constructor(val gitLabUrl: String, val privateToken: String) : RemoteSourceControl {
 
     companion object {
         const val REPO_LEVEL_CONFIG_FILE = ".gitlabCrawler"
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitHub.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteSourceControl.kt
similarity index 98%
rename from github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitHub.kt
rename to github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteSourceControl.kt
index 0734879..91162af 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteGitHub.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/remote/RemoteSourceControl.kt
@@ -10,7 +10,7 @@ import com.societegenerale.githubcrawler.model.commit.DetailedCommit
 import com.societegenerale.githubcrawler.model.team.Team
 import com.societegenerale.githubcrawler.model.team.TeamMember
 
-interface RemoteGitHub {
+interface RemoteSourceControl {
 
     fun fetchRepoConfig(repositoryFullName: String, defaultBranch: String): RepositoryConfig
 
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/CountHitsOnRepoSearch.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/CountHitsOnRepoSearch.kt
index a2e475f..7e4ca5a 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/CountHitsOnRepoSearch.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/CountHitsOnRepoSearch.kt
@@ -2,7 +2,7 @@ package com.societegenerale.githubcrawler.repoTaskToPerform
 
 import com.societegenerale.githubcrawler.model.Branch
 import com.societegenerale.githubcrawler.model.Repository
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 
 
 /**
@@ -11,12 +11,12 @@ import com.societegenerale.githubcrawler.remote.RemoteGitHub
  * Note : It will NOT perform the search in each branch of the repository
  */
 class CountHitsOnRepoSearch(private val name : String,
-                            private val remoteGitHub: RemoteGitHub,
+                            private val remoteSourceControl: RemoteSourceControl,
                             private val searchQuery: String) : RepoTaskToPerform {
 
     override fun perform(repository: Repository): Map<Branch, Pair<String, Any>> {
 
-        val nbHitsMatching= remoteGitHub.fetchCodeSearchResult(repository.fullName, searchQuery).totalCount.toString()
+        val nbHitsMatching= remoteSourceControl.fetchCodeSearchResult(repository.fullName, searchQuery).totalCount.toString()
 
         return hashMapOf(Pair(Branch(repository.defaultBranch), Pair(name,nbHitsMatching)))
 
@@ -24,14 +24,14 @@ class CountHitsOnRepoSearch(private val name : String,
 
 }
 
-class CountHitsOnRepoSearchBuilder(private val remoteGitHub: RemoteGitHub) : RepoTaskBuilder  {
+class CountHitsOnRepoSearchBuilder(private val remoteSourceControl: RemoteSourceControl) : RepoTaskBuilder  {
 
     override val type="countHitsOnRepoSearch"
 
 
     override fun buildTask(name: String, params : Map<String,String>) : RepoTaskToPerform{
 
-        return CountHitsOnRepoSearch(name, remoteGitHub, params["queryString"]!!)
+        return CountHitsOnRepoSearch(name, remoteSourceControl, params["queryString"]!!)
 
     }
 
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/NbBranchesOnRepo.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/NbBranchesOnRepo.kt
index 6b32a8e..722ed6e 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/NbBranchesOnRepo.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/NbBranchesOnRepo.kt
@@ -2,16 +2,16 @@ package com.societegenerale.githubcrawler.repoTaskToPerform
 
 import com.societegenerale.githubcrawler.model.Branch
 import com.societegenerale.githubcrawler.model.Repository
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 
 
 
 class NbBranchesOnRepo( private val taskName: String,
-                       private val remoteGitHub: RemoteGitHub) : RepoTaskToPerform {
+                       private val remoteSourceControl: RemoteSourceControl) : RepoTaskToPerform {
 
     override fun perform(repository: Repository): Map<Branch, Pair<String, Any>> {
 
-        val nbBranches= remoteGitHub.fetchRepoBranches(repository.fullName).size
+        val nbBranches= remoteSourceControl.fetchRepoBranches(repository.fullName).size
 
         return hashMapOf(Pair(Branch(repository.defaultBranch), Pair(taskName,nbBranches)))
 
@@ -19,14 +19,14 @@ class NbBranchesOnRepo( private val taskName: String,
 
 }
 
-class NbBranchesOnRepoBuilder(private val remoteGitHub: RemoteGitHub) : RepoTaskBuilder  {
+class NbBranchesOnRepoBuilder(private val remoteSourceControl: RemoteSourceControl) : RepoTaskBuilder  {
 
     override val type="nbBranchesOnRepo"
 
 
     override fun buildTask(name: String, params : Map<String,String>) : RepoTaskToPerform{
 
-        return NbBranchesOnRepo(name,remoteGitHub)
+        return NbBranchesOnRepo(name,remoteSourceControl)
 
     }
 
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/NbOpenPRsOnRepo.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/NbOpenPRsOnRepo.kt
index 2a2662f..45f59e5 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/NbOpenPRsOnRepo.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/NbOpenPRsOnRepo.kt
@@ -2,16 +2,16 @@ package com.societegenerale.githubcrawler.repoTaskToPerform
 
 import com.societegenerale.githubcrawler.model.Branch
 import com.societegenerale.githubcrawler.model.Repository
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 
 
 
 class NbOpenPRsOnRepo( private val taskName: String,
-                       private val remoteGitHub: RemoteGitHub) : RepoTaskToPerform {
+                       private val remoteSourceControl: RemoteSourceControl) : RepoTaskToPerform {
 
     override fun perform(repository: Repository): Map<Branch, Pair<String, Any>> {
 
-        val nbOpenPrs= remoteGitHub.fetchOpenPRs(repository.fullName).size
+        val nbOpenPrs= remoteSourceControl.fetchOpenPRs(repository.fullName).size
 
         return hashMapOf(Pair(Branch(repository.defaultBranch), Pair(taskName,nbOpenPrs)))
 
@@ -19,14 +19,14 @@ class NbOpenPRsOnRepo( private val taskName: String,
 
 }
 
-class NbOpenPRsOnRepoBuilder(private val remoteGitHub: RemoteGitHub) : RepoTaskBuilder  {
+class NbOpenPRsOnRepoBuilder(private val remoteSourceControl: RemoteSourceControl) : RepoTaskBuilder  {
 
     override val type="nbOpenPRsOnRepo"
 
 
     override fun buildTask(name: String, params : Map<String,String>) : RepoTaskToPerform{
 
-        return NbOpenPRsOnRepo(name,remoteGitHub)
+        return NbOpenPRsOnRepo(name,remoteSourceControl)
 
     }
 
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/PathsForHitsOnRepoSearch.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/PathsForHitsOnRepoSearch.kt
index cf666d0..c788274 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/PathsForHitsOnRepoSearch.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/PathsForHitsOnRepoSearch.kt
@@ -2,7 +2,7 @@ package com.societegenerale.githubcrawler.repoTaskToPerform
 
 import com.societegenerale.githubcrawler.model.Branch
 import com.societegenerale.githubcrawler.model.Repository
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 
 
 /**
@@ -12,11 +12,11 @@ import com.societegenerale.githubcrawler.remote.RemoteGitHub
  */
 class PathsForHitsOnRepoSearch( private val taskName: String,
                                 private val searchQuery: String,
-                                private val remoteGitHub: RemoteGitHub) : RepoTaskToPerform {
+                                private val remoteSourceControl: RemoteSourceControl) : RepoTaskToPerform {
 
     override fun perform(repository: Repository): Map<Branch, Pair<String, Any>> {
 
-        val searchResult= remoteGitHub.fetchCodeSearchResult(repository.fullName, searchQuery)
+        val searchResult= remoteSourceControl.fetchCodeSearchResult(repository.fullName, searchQuery)
 
         val paths=if(searchResult.totalCount>0){
                 searchResult.items.map { i -> i.path }
@@ -32,14 +32,14 @@ class PathsForHitsOnRepoSearch( private val taskName: String,
 
 }
 
-class PathsForHitsOnRepoSearchBuilder(private val remoteGitHub: RemoteGitHub) : RepoTaskBuilder  {
+class PathsForHitsOnRepoSearchBuilder(private val remoteSourceControl: RemoteSourceControl) : RepoTaskBuilder  {
 
     override val type="pathsForHitsOnRepoSearch"
 
 
     override fun buildTask(name: String, params : Map<String,String>) : RepoTaskToPerform{
 
-        return PathsForHitsOnRepoSearch(name, params["queryString"]!!,remoteGitHub)
+        return PathsForHitsOnRepoSearch(name, params["queryString"]!!,remoteSourceControl)
 
     }
 
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/ownership/MembershipParser.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/ownership/MembershipParser.kt
index 66dd378..203c383 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/ownership/MembershipParser.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/ownership/MembershipParser.kt
@@ -1,11 +1,11 @@
 package com.societegenerale.githubcrawler.repoTaskToPerform.ownership
 
 import com.societegenerale.githubcrawler.model.team.Membership
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import org.slf4j.LoggerFactory
 import java.util.function.Consumer
 
-class MembershipParser(private val githubClient: RemoteGitHub, private val organizationName: String) {
+class MembershipParser(private val githubClient: RemoteSourceControl, private val organizationName: String) {
 
     companion object {
         private val log = LoggerFactory.getLogger(MembershipParser::class.java)
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/ownership/OwnershipParserImpl.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/ownership/OwnershipParserImpl.kt
index cebb568..345e839 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/ownership/OwnershipParserImpl.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/ownership/OwnershipParserImpl.kt
@@ -1,14 +1,14 @@
 package com.societegenerale.githubcrawler.repoTaskToPerform.ownership
 
 import com.societegenerale.githubcrawler.model.team.Membership
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import org.slf4j.LoggerFactory
 
 /**
  * Example of implementation for repository ownership computation.
  * Just instantiate a class implementing OwnershipParser interface in your Spring Boot config. If none is found, a dummy one will be instantiated by default.
  */
-class OwnershipParserImpl(private val githubClient: RemoteGitHub, private val membershipParser: MembershipParser, private val organizationName: String) : OwnershipParser {
+class OwnershipParserImpl(private val githubClient: RemoteSourceControl, private val membershipParser: MembershipParser, private val organizationName: String) : OwnershipParser {
 
     companion object {
         private val log = LoggerFactory.getLogger(OwnershipParserImpl::class.java)
diff --git a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/ownership/RepoOwnershipComputer.kt b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/ownership/RepoOwnershipComputer.kt
index 8ea2c5f..d49db15 100644
--- a/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/ownership/RepoOwnershipComputer.kt
+++ b/github-crawler-core/src/main/kotlin/com/societegenerale/githubcrawler/repoTaskToPerform/ownership/RepoOwnershipComputer.kt
@@ -3,7 +3,7 @@ package com.societegenerale.githubcrawler.repoTaskToPerform.ownership
 import com.societegenerale.githubcrawler.model.Branch
 import com.societegenerale.githubcrawler.model.Repository
 import com.societegenerale.githubcrawler.model.team.Membership
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import com.societegenerale.githubcrawler.repoTaskToPerform.RepoTaskBuilder
 import com.societegenerale.githubcrawler.repoTaskToPerform.RepoTaskToPerform
 import org.slf4j.LoggerFactory
@@ -14,7 +14,7 @@ import org.slf4j.LoggerFactory
  *
  * The value will be returned under an indicator named "owningTeam". If it hasn't been able to find an owning team, it will return "Undefined"
  */
-class RepoOwnershipComputer(private val githubClient: RemoteGitHub,
+class RepoOwnershipComputer(private val githubClient: RemoteSourceControl,
                             private val membershipParser: MembershipParser,
                             private val organizationName: String,
                             private val lastCommitNumber: Int) : RepoTaskToPerform{
@@ -70,7 +70,7 @@ class RepoOwnershipComputer(private val githubClient: RemoteGitHub,
 
 }
 
-class RepoOwnershipComputerBuilder(private val githubClient: RemoteGitHub,
+class RepoOwnershipComputerBuilder(private val githubClient: RemoteSourceControl,
                                    private val membershipParser: MembershipParser,
                                    private val organizationName: String,
                                    private val lastCommitNumber: Int) : RepoTaskBuilder  {
diff --git a/github-crawler-starter/pom.xml b/github-crawler-starter/pom.xml
index 9c14dfc..f229cf4 100644
--- a/github-crawler-starter/pom.xml
+++ b/github-crawler-starter/pom.xml
@@ -4,7 +4,7 @@
 
     <groupId>com.societegenerale.github-crawler</groupId>
     <artifactId>github-crawler-starter</artifactId>
-    <version>1.3.0-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>github-crawler-starter</name>
@@ -12,7 +12,7 @@
     <parent>
         <groupId>com.societegenerale.github-crawler</groupId>
         <artifactId>github-crawler-parent</artifactId>
-        <version>1.3.0-SNAPSHOT</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
 
     <dependencies>
diff --git a/pom.xml b/pom.xml
index e6cbd82..13acad7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 
     <groupId>com.societegenerale.github-crawler</groupId>
     <artifactId>github-crawler-parent</artifactId>
-    <version>1.3.0-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <name>github-crawler</name>


Test patch:
diff --git a/github-crawler-autoconfigure/src/test/java/com/societegenerale/githubcrawler/AzureDevopsCrawlerIT.java b/github-crawler-autoconfigure/src/test/java/com/societegenerale/githubcrawler/AzureDevopsCrawlerIT.java
index cf52ee5..b4125b1 100644
--- a/github-crawler-autoconfigure/src/test/java/com/societegenerale/githubcrawler/AzureDevopsCrawlerIT.java
+++ b/github-crawler-autoconfigure/src/test/java/com/societegenerale/githubcrawler/AzureDevopsCrawlerIT.java
@@ -5,12 +5,12 @@ import static com.github.tomakehurst.wiremock.client.WireMock.configureFor;
 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
 import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import com.github.tomakehurst.wiremock.WireMockServer;
 import com.github.tomakehurst.wiremock.client.WireMock;
 import com.societegenerale.githubcrawler.config.GitHubCrawlerAutoConfiguration;
 import com.societegenerale.githubcrawler.config.TestConfig;
-import com.societegenerale.githubcrawler.remote.RemoteGitHub;
 import java.io.IOException;
 import org.apache.commons.io.FileUtils;
 import org.junit.jupiter.api.BeforeEach;
@@ -19,7 +19,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.ApplicationContext;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.annotation.DirtiesContext.ClassMode;
 import org.springframework.test.context.ActiveProfiles;
@@ -38,10 +37,10 @@ class AzureDevopsCrawlerIT {
   private final static int AZUREDEVOPS_SERVER_PORT_FOR_TESTS=9901;
 
   @Autowired
-  ApplicationContext context;
+  private GitHubCrawler crawler;
 
   @Autowired
-  private GitHubCrawler crawler;
+  private TestConfig.InMemoryGitHubCrawlerOutput output;
 
   private final WireMockServer wm = new WireMockServer(
       options()
@@ -78,37 +77,9 @@ class AzureDevopsCrawlerIT {
   @Test
   void shouldCrawl() throws IOException {
 
-    var crawlers=context.getBeanNamesForType(GitHubCrawler.class);
-    log.info("found "+crawlers.length+" crawlers in context : "+crawlers[0]);
-
-    var crawlerFromContext= context.getBean(GitHubCrawler.class);
-    log.info("crawlerId : "+crawlerFromContext);
-    log.info("properties : "+crawlerFromContext.getGitHubCrawlerProperties());
-
-
-    var remoteGitHubs=context.getBeanNamesForType(RemoteGitHub.class);
-    log.info("found "+remoteGitHubs.length+" remoteGitHubs in context : "+remoteGitHubs[0]);
-    var remoteGitHubFromContext= context.getBean(RemoteGitHub.class);
-    log.info("remoteGitHubFromContextId : "+remoteGitHubFromContext);
-
-
-
-    log.info("about to start crawling...");
-
-    log.info("URL config used : "+crawler.getGitHubCrawlerProperties().getSourceControl().getUrl());
-
-    log.info("nb misc tasks : "+crawler.getGitHubCrawlerProperties().getMiscRepositoryTasks().size());
-
-
-    try {
       crawler.crawl();
-    } catch (IOException e) {
-      log.error("problem while crawling",e);
-      throw e;
-    }
-
 
-    //TODO have an in-memory output and assert content
+      assertThat(output.getAnalyzedRepositories()).hasSize(2);
   }
 
 
diff --git a/github-crawler-autoconfigure/src/test/java/com/societegenerale/githubcrawler/config/TestConfig.java b/github-crawler-autoconfigure/src/test/java/com/societegenerale/githubcrawler/config/TestConfig.java
index 6c8fd71..32b3c3a 100644
--- a/github-crawler-autoconfigure/src/test/java/com/societegenerale/githubcrawler/config/TestConfig.java
+++ b/github-crawler-autoconfigure/src/test/java/com/societegenerale/githubcrawler/config/TestConfig.java
@@ -4,13 +4,12 @@ import com.societegenerale.githubcrawler.GitHubCrawlerProperties;
 import com.societegenerale.githubcrawler.mocks.GitHubMock;
 import com.societegenerale.githubcrawler.model.Repository;
 import com.societegenerale.githubcrawler.output.GitHubCrawlerOutput;
+import java.util.HashMap;
+import java.util.Map;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
-import java.util.HashMap;
-import java.util.Map;
-
 @Configuration
 @EnableConfigurationProperties(GitHubCrawlerProperties.class)
 public class TestConfig {
@@ -22,7 +21,7 @@ public class TestConfig {
     }
 
     @Bean
-    public InMemoryGitHubCrawlerOutput output() {
+    public GitHubCrawlerOutput output() {
 
         InMemoryGitHubCrawlerOutput output = new InMemoryGitHubCrawlerOutput();
 
diff --git a/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/ConfigValidatorTest.kt b/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/ConfigValidatorTest.kt
index 944fb29..3c43850 100644
--- a/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/ConfigValidatorTest.kt
+++ b/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/ConfigValidatorTest.kt
@@ -1,7 +1,7 @@
 package com.societegenerale.githubcrawler
 
 import com.societegenerale.githubcrawler.remote.NoReachableRepositories
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import org.assertj.core.api.Assertions.assertThat
 import org.junit.jupiter.api.Test
 import org.mockito.Mockito.`when`
@@ -10,12 +10,12 @@ import org.mockito.Mockito.mock
 
 class ConfigValidatorTest {
 
-    val mockRemoteGitHub = mock(RemoteGitHub::class.java)
+    val mockRemoteSourceControl = mock(RemoteSourceControl::class.java)
 
     @Test
     fun shouldNotHaveEmptyGitHubUrl() {
 
-        val configValidator = ConfigValidator(GitHubCrawlerProperties(SourceControlConfig(url = "",organizationName="notEmpty")),mockRemoteGitHub)
+        val configValidator = ConfigValidator(GitHubCrawlerProperties(SourceControlConfig(url = "",organizationName="notEmpty")),mockRemoteSourceControl)
 
         assertThat(configValidator.getValidationErrors()).containsOnly("source-control.url can't be empty");
 
@@ -24,7 +24,7 @@ class ConfigValidatorTest {
     @Test
     fun shouldNotHaveEmptyOrganization() {
 
-        val configValidator = ConfigValidator(GitHubCrawlerProperties(SourceControlConfig(url = "notEmpty",organizationName="")),mockRemoteGitHub)
+        val configValidator = ConfigValidator(GitHubCrawlerProperties(SourceControlConfig(url = "notEmpty",organizationName="")),mockRemoteSourceControl)
 
         assertThat(configValidator.getValidationErrors()).containsOnly("organization can't be empty");
 
@@ -33,9 +33,9 @@ class ConfigValidatorTest {
     @Test
     fun shouldLogProperMessageIfNotAbleToHitAPI() {
 
-        val configValidator = ConfigValidator(GitHubCrawlerProperties(SourceControlConfig(url = "someIncorrectURL",organizationName="someOrg")),mockRemoteGitHub)
+        val configValidator = ConfigValidator(GitHubCrawlerProperties(SourceControlConfig(url = "someIncorrectURL",organizationName="someOrg")),mockRemoteSourceControl)
 
-        `when`(mockRemoteGitHub.validateRemoteConfig("someOrg")).thenThrow(NoReachableRepositories("problem !",mock(Exception::class.java)))
+        `when`(mockRemoteSourceControl.validateRemoteConfig("someOrg")).thenThrow(NoReachableRepositories("problem !",mock(Exception::class.java)))
 
         val validationErrors=configValidator.getValidationErrors()
 
diff --git a/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/GitHubCrawlerTest.kt b/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/GitHubCrawlerTest.kt
index f79e67f..72e85e5 100644
--- a/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/GitHubCrawlerTest.kt
+++ b/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/GitHubCrawlerTest.kt
@@ -5,7 +5,7 @@ import com.jayway.awaitility.Awaitility.await
 import com.societegenerale.githubcrawler.model.Repository
 import com.societegenerale.githubcrawler.output.GitHubCrawlerOutput
 import com.societegenerale.githubcrawler.parsers.SimpleFilePathParser
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 
 import org.assertj.core.api.Assertions.assertThat
 import org.junit.jupiter.api.BeforeEach
@@ -20,7 +20,7 @@ import java.util.*
 
 class GitHubCrawlerTest {
 
-    private val mockRemoteGitHub: RemoteGitHub = mock(RemoteGitHub::class.java)
+    private val mockRemoteSourceControl: RemoteSourceControl = mock(RemoteSourceControl::class.java)
 
     private val output = InMemoryGitHubCrawlerOutput()
     private val outputs: List<GitHubCrawlerOutput> = arrayListOf(output)
@@ -31,7 +31,7 @@ class GitHubCrawlerTest {
 
     private val availableParsersAndTasks = AvailableParsersAndTasks(listOf(SimpleFilePathParser()), emptyList())
 
-    private val repositoryEnricher = RepositoryEnricher(mockRemoteGitHub,availableParsersAndTasks)
+    private val repositoryEnricher = RepositoryEnricher(mockRemoteSourceControl,availableParsersAndTasks)
 
     private val gitHubCrawlerProperties = GitHubCrawlerProperties(sourceControl= SourceControlConfig(), indicatorsToFetchByFile = mapOf(Pair(FileToParse(fileToParse, null), listOf(indicator))))
     private val mockEnvironment = mock(Environment::class.java)
@@ -43,16 +43,16 @@ class GitHubCrawlerTest {
     @BeforeEach
     fun setUp() {
 
-        gitHubCrawler = GitHubCrawler(mockRemoteGitHub, outputs, repositoryEnricher, gitHubCrawlerProperties, mockEnvironment, organizationName, mockConfigValidator,availableParsersAndTasks)
+        gitHubCrawler = GitHubCrawler(mockRemoteSourceControl, outputs, repositoryEnricher, gitHubCrawlerProperties, mockEnvironment, organizationName, mockConfigValidator,availableParsersAndTasks)
 
-        `when`(mockRemoteGitHub.fetchRepositories(organizationName)).thenReturn(setOf(
+        `when`(mockRemoteSourceControl.fetchRepositories(organizationName)).thenReturn(setOf(
                 Repository(url = "url1", fullName = "fullRepo1", name = "repo1", defaultBranch = "master", creationDate = Date(), lastUpdateDate = Date(), topics = listOf("topic1a", "topic1b")),
                 Repository(url = "url2", fullName = "fullRepo2", name = "repo2", defaultBranch = "master", creationDate = Date(), lastUpdateDate = Date(), groups = listOf("group2a", "group2b"))
         ))
 
-        `when`(mockRemoteGitHub.fetchRepoConfig(anyString(), anyString())).thenReturn(RepositoryConfig())
+        `when`(mockRemoteSourceControl.fetchRepoConfig(anyString(), anyString())).thenReturn(RepositoryConfig())
 
-        `when`(mockRemoteGitHub.fetchFileContent(any(String::class.java), any(String::class.java),eq(fileToParse))).thenReturn("")
+        `when`(mockRemoteSourceControl.fetchFileContent(any(String::class.java), any(String::class.java),eq(fileToParse))).thenReturn("")
 
 
         `when`(mockConfigValidator.getValidationErrors()).thenReturn(ImmutableList.of())
@@ -73,7 +73,7 @@ class GitHubCrawlerTest {
     @Test
     fun excludedRepositoriesOnRepoConfigSideAreNotOutputByDefault() {
 
-        `when`(mockRemoteGitHub.fetchRepoConfig("fullRepo1", "master")).thenReturn(RepositoryConfig(excluded = true))
+        `when`(mockRemoteSourceControl.fetchRepoConfig("fullRepo1", "master")).thenReturn(RepositoryConfig(excluded = true))
 
         val processedRepositories = crawlAndWaitUntilWeHaveRecordsInOutput(1)
 
@@ -84,7 +84,7 @@ class GitHubCrawlerTest {
     @Test
     fun excludedRepositoriesOnRepoConfigSideShouldBeOutputIfConfigured() {
 
-        `when`(mockRemoteGitHub.fetchRepoConfig("fullRepo1", "master")).thenReturn(RepositoryConfig(excluded = true))
+        `when`(mockRemoteSourceControl.fetchRepoConfig("fullRepo1", "master")).thenReturn(RepositoryConfig(excluded = true))
 
         gitHubCrawlerProperties.publishExcludedRepositories = true
 
@@ -122,9 +122,9 @@ class GitHubCrawlerTest {
 
         val processedRepositories = crawlAndWaitUntilWeHaveRecordsInOutput(1)
 
-        verify(mockRemoteGitHub, times(1)).fetchFileContent("fullRepo2", "master", "pom.xml")
+        verify(mockRemoteSourceControl, times(1)).fetchFileContent("fullRepo2", "master", "pom.xml")
         //TODO we shouldn't check for pom.xml but for anyString()
-        verify(mockRemoteGitHub, never()).fetchFileContent("fullRepo1", "master", "pom.xml")
+        verify(mockRemoteSourceControl, never()).fetchFileContent("fullRepo1", "master", "pom.xml")
 
         assertThat(processedRepositories.keys).containsExactly("repo2")
     }
diff --git a/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/RepositoryEnricherTest.kt b/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/RepositoryEnricherTest.kt
index 54bb5b7..17db931 100644
--- a/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/RepositoryEnricherTest.kt
+++ b/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/RepositoryEnricherTest.kt
@@ -2,7 +2,7 @@ package com.societegenerale.githubcrawler
 
 import com.societegenerale.githubcrawler.model.Branch
 import com.societegenerale.githubcrawler.model.Repository
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import com.societegenerale.githubcrawler.repoTaskToPerform.RepoTaskToPerform
 import org.assertj.core.api.Assertions.assertThat
 import org.junit.jupiter.api.Test
@@ -12,9 +12,9 @@ import java.util.*
 
 class RepositoryEnricherTest {
 
-    private val mockRemoteGitHub: RemoteGitHub = Mockito.mock(RemoteGitHub::class.java)
+    private val mockRemoteSourceControl: RemoteSourceControl = Mockito.mock(RemoteSourceControl::class.java)
 
-    private val repositoryEnricher = RepositoryEnricher(mockRemoteGitHub)
+    private val repositoryEnricher = RepositoryEnricher(mockRemoteSourceControl)
 
     private val masterBranch=Branch("master")
     private val branch1=Branch("branch1")
diff --git a/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/parsers/MembershipParserTest.kt b/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/parsers/MembershipParserTest.kt
index 7af55a5..03872f4 100644
--- a/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/parsers/MembershipParserTest.kt
+++ b/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/parsers/MembershipParserTest.kt
@@ -2,7 +2,7 @@ package com.societegenerale.githubcrawler.parsers
 
 import com.societegenerale.githubcrawler.model.team.Team
 import com.societegenerale.githubcrawler.model.team.TeamMember
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import com.societegenerale.githubcrawler.repoTaskToPerform.ownership.MembershipParser
 import org.assertj.core.api.Assertions.assertThat
 import org.junit.jupiter.api.Test
@@ -19,7 +19,7 @@ class MembershipParserTest {
     @Test
     fun should_build_membership() {
         //Given
-        val githubClient: RemoteGitHub = mock(RemoteGitHub::class.java)
+        val githubClient: RemoteSourceControl = mock(RemoteSourceControl::class.java)
 
 
         doReturn(setOf(Team("2", "Stark"), Team("3", "White Walkers")))
@@ -48,7 +48,7 @@ class MembershipParserTest {
     @Test
     fun should_filter_developers_team_when_building_membership() {
         //Given
-        val githubClient: RemoteGitHub = mock(RemoteGitHub::class.java)
+        val githubClient: RemoteSourceControl = mock(RemoteSourceControl::class.java)
         doReturn(setOf(Team("2", "Developers")))
                 .`when`(githubClient)
                 .fetchTeams(ORGA_NAME)
@@ -64,7 +64,7 @@ class MembershipParserTest {
     @Test
     fun should_filter_tech_leads_team_when_building_membership() {
         //Given
-        val githubClient: RemoteGitHub = mock(RemoteGitHub::class.java)
+        val githubClient: RemoteSourceControl = mock(RemoteSourceControl::class.java)
         doReturn(setOf(Team("2", "Tech Leads")))
                 .`when`(githubClient)
                 .fetchTeams("FCC_OSD")
diff --git a/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/parsers/OwnershipParserImplTest.kt b/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/parsers/OwnershipParserImplTest.kt
index cd5e501..732c277 100644
--- a/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/parsers/OwnershipParserImplTest.kt
+++ b/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/parsers/OwnershipParserImplTest.kt
@@ -8,7 +8,7 @@ import com.societegenerale.githubcrawler.model.commit.DetailedCommit
 import com.societegenerale.githubcrawler.model.team.Membership
 import com.societegenerale.githubcrawler.model.team.Team
 import com.societegenerale.githubcrawler.model.team.TeamMember
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import com.societegenerale.githubcrawler.repoTaskToPerform.ownership.MembershipParser
 import com.societegenerale.githubcrawler.repoTaskToPerform.ownership.OwnershipParserImpl
 import org.assertj.core.api.Assertions.assertThat
@@ -17,7 +17,7 @@ import org.mockito.Mockito.*
 
 class OwnershipParserImplTest {
 
-    private val githubClient: RemoteGitHub = mock(RemoteGitHub::class.java)
+    private val githubClient: RemoteSourceControl = mock(RemoteSourceControl::class.java)
     private val membershipParser: MembershipParser = mock(MembershipParser::class.java)
     private val organizationName = "FCC_OSD"
     private val repositoryFullName = "declarative-process"
diff --git a/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/repoTaskToPerform/PathsForHitsOnRepoSearchTest.kt b/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/repoTaskToPerform/PathsForHitsOnRepoSearchTest.kt
index 1dcca83..c47a211 100644
--- a/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/repoTaskToPerform/PathsForHitsOnRepoSearchTest.kt
+++ b/github-crawler-core/src/test/java/com/societegenerale/githubcrawler/repoTaskToPerform/PathsForHitsOnRepoSearchTest.kt
@@ -4,7 +4,7 @@ import com.societegenerale.githubcrawler.model.Branch
 import com.societegenerale.githubcrawler.model.Repository
 import com.societegenerale.githubcrawler.model.SearchResult
 import com.societegenerale.githubcrawler.model.SearchResultItem
-import com.societegenerale.githubcrawler.remote.RemoteGitHub
+import com.societegenerale.githubcrawler.remote.RemoteSourceControl
 import org.assertj.core.api.Assertions.assertThat
 import org.junit.jupiter.api.Test
 import org.mockito.Mockito.`when`
@@ -13,7 +13,7 @@ import java.util.*
 
 class PathsForHitsOnRepoSearchTest {
 
-    private val mockRemoteGithub = mock(RemoteGitHub::class.java)
+    private val mockRemoteGithub = mock(RemoteSourceControl::class.java)
 
     private val repoToSearch = Repository(name = "repo1",
             creationDate = Date(),
diff --git a/github-crawler-core/src/test/resources/application.yml b/github-crawler-core/src/test/resources/application.yml
deleted file mode 100644
index 62512e8..0000000
--- a/github-crawler-core/src/test/resources/application.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-crawler:
-
-  githubConfig:
-    type: "GITHUB"
-    url: https://api.github.com
-    apiToken: "lihwlfhlihvliwh;wjg;"
-    organizationName: MyOrg
-    crawlUsersRepoInsteadOfOrgasRepos: false
-
-  publishExcludedRepositories: false
-  crawl-in-parallel: false
-  crawlAllBranches: false
-
-  outputs:
-    searchPatternInCodeCsvFileOutput.searchNameToOutput: "consulCatalogWatch"
-
-  indicatorsToFetchByFile:
-    "[pom.xml]":
-    - name: spring_boot_starter_parent_version
-      type: findDependencyVersionInXml
-      params:
-        artifactId: spring-boot-starter-parent
-
-  miscRepositoryTasks:
-    - name: "consulCatalogWatch"
-      type: "pathsForHitsOnRepoSearch"
-      params:
-        queryString: "ConsulCatalogWatch"
-
-logging:
-  level:
-    com.societegenerale.githubcrawler: info
-    com.societegenerale.githubcrawler.remote: info
-    com.societegenerale.githubcrawler.parsers: info
-