(List<GHRepository> repos)
| 414 | } |
| 415 | |
| 416 | private ArrayNode findRepositoriesWithCLA(List<GHRepository> repos) { |
| 417 | ArrayNode reposWithCLA = yamlMapper.createArrayNode(); |
| 418 | |
| 419 | for (GHRepository repo : repos) { |
| 420 | try { |
| 421 | // Look for CLA files with various naming patterns |
| 422 | GHContent cla = findFileInRepo(repo, ".*(?:cla|contributor|agreement).*"); |
| 423 | if (cla != null) { |
| 424 | ObjectNode claInfo = yamlMapper.createObjectNode() |
| 425 | .put("repository", repo.getName()) |
| 426 | .put("url", repo.getHtmlUrl().toString()) |
| 427 | .put("tool", "... (EasyCLA, CLA Assistant, etc.)") |
| 428 | .put("storage", "... (e.g. cla-assistant database, etc.)") |
| 429 | .put("manager", "... (who manages the CLA process?)") |
| 430 | .put("notes", "CLA detected.\nFill in the details. Any notes for future you can go here"); |
| 431 | reposWithCLA.add(claInfo); |
| 432 | } |
| 433 | } catch (Exception e) { |
| 434 | log.warning("Error checking CLA for " + repo.getName() + ": " + e.getMessage()); |
| 435 | } |
| 436 | } |
| 437 | return reposWithCLA; |
| 438 | } |
| 439 | |
| 440 | private void runOrgSettingsReport(GHOrganization org) throws IOException { |
| 441 | log.info("🌳 Creating a listing of organization and repository settings"); |
no test coverage detected