Skip to content

Commit

Permalink
feat: Configurable repos.csv path (#93)
Browse files Browse the repository at this point in the history
* feat: Configurable repos.csv path

* readme

* typo

* extract config to `moderne.reposCsvPath`

* Update README.md

Co-authored-by: Kevin Carpenter™️ <kevin@moderne.io>

---------

Co-authored-by: Kevin Carpenter™️ <kevin@moderne.io>
  • Loading branch information
pstreef and kmccarp authored Aug 22, 2024
1 parent 5be7c4d commit 8f08ab3
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 13 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ The org structure is represented in a series of columns `org1..orgN` where `N` i

There is repetition in organizational hierarchy in this format. The reference implementation validates the internal consistency of those organizational repositories across CSV lines.

You can either overwrite the existing [repos.csv](src/main/resources/repos.csv), set the `moderne.reposCsvPath` in [application.yaml](src/main/resources/application.yaml), or provide the path via an argument on application startup.

If you have multiple organizations with the same display name, you can map id to display name in an `id-mapping.txt`. A simple reference
file is included in this repository.

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/io/moderne/organizations/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

@EnableConfigurationProperties(ScmConfiguration.class)
@EnableConfigurationProperties(ModerneConfiguration.class)
@SpringBootApplication
public class Application {

Expand Down
31 changes: 31 additions & 0 deletions src/main/java/io/moderne/organizations/ModerneConfiguration.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package io.moderne.organizations;

import org.openrewrite.internal.lang.Nullable;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.nio.file.Path;

@ConfigurationProperties(prefix = "moderne")
public class ModerneConfiguration {

@Nullable
private Path reposCsvPath;

private ScmConfiguration scm;

public @Nullable Path getReposCsvPath() {
return reposCsvPath;
}

public void setReposCsvPath(@Nullable Path reposCsvPath) {
this.reposCsvPath = reposCsvPath;
}

public ScmConfiguration getScm() {
return scm;
}

public void setScm(ScmConfiguration scm) {
this.scm = scm;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,10 @@
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Path;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Expand All @@ -22,14 +21,18 @@
*/
@Service
public class OrganizationStructureService {
private static final String REPOS_CSV = "repos.csv";
private static final String DEFAULT_REPOS_CSV = "repos.csv";
private static final String NAME_MAPPING = "id-mapping.txt";
private static final Logger log = LoggerFactory.getLogger(OrganizationStructureService.class.getName());
private final ScmConfiguration scmConfiguration;
private final RepositoryMapper repositoryMapper;

public OrganizationStructureService(ScmConfiguration scmConfiguration) {
this.scmConfiguration = scmConfiguration;
@Nullable
private final Path reposCsvPath;

public OrganizationStructureService(ModerneConfiguration moderneConfiguration) {
this.scmConfiguration = moderneConfiguration.getScm();
this.reposCsvPath = moderneConfiguration.getReposCsvPath();
repositoryMapper = new RepositoryMapper(scmConfiguration);
}

Expand All @@ -39,7 +42,18 @@ public Map<String, OrganizationRepositories> readOrganizationStructure() {

final Map<String, String> idToNameMapping = readIdToNameMapping();

try (BufferedReader reader = new BufferedReader(new InputStreamReader(new ClassPathResource(REPOS_CSV).getInputStream()))) {
InputStream inputStream;
try {
if (reposCsvPath == null) {
inputStream = new ClassPathResource(DEFAULT_REPOS_CSV).getInputStream();
} else {
inputStream = new FileInputStream(reposCsvPath.toFile());
}
} catch (IOException e) {
throw new UncheckedIOException(e);
}

try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
reader.readLine(); // skip header
reader.lines()
.forEach(line -> {
Expand Down
5 changes: 0 additions & 5 deletions src/main/java/io/moderne/organizations/ScmConfiguration.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package io.moderne.organizations;

import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.ArrayList;
import java.util.List;

@ConfigurationProperties(prefix = "moderne.scm")
public class ScmConfiguration {
private List<ScmRepository> repositories;
private boolean allowMissingScmOrigins;
Expand Down Expand Up @@ -53,6 +50,4 @@ public boolean isAllowMissingScmOrigins() {
public void setAllowMissingScmOrigins(boolean allowMissingScmOrigins) {
this.allowMissingScmOrigins = allowMissingScmOrigins;
}


}

0 comments on commit 8f08ab3

Please sign in to comment.