Skip to content

feat: add export_languages support in the config file#985

Open
katerina20 wants to merge 2 commits intomainfrom
feat/export-lang
Open

feat: add export_languages support in the config file#985
katerina20 wants to merge 2 commits intomainfrom
feat/export-lang

Conversation

@katerina20
Copy link
Collaborator

No description provided.

@codecov
Copy link

codecov bot commented Feb 9, 2026

Codecov Report

❌ Patch coverage is 74.07407% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 65.32%. Comparing base (079c871) to head (f655e3c).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
...om/crowdin/cli/properties/PropertiesWithFiles.java 28.58% 4 Missing and 1 partial ⚠️
...m/crowdin/cli/commands/actions/DownloadAction.java 90.00% 1 Missing and 1 partial ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##               main     #985      +/-   ##
============================================
+ Coverage     65.30%   65.32%   +0.03%     
- Complexity     1679     1686       +7     
============================================
  Files           244      244              
  Lines          6881     6897      +16     
  Branches       1046     1051       +5     
============================================
+ Hits           4493     4505      +12     
- Misses         1790     1795       +5     
+ Partials        598      597       -1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds export_languages support to the CLI configuration so downloads can be restricted to a configured subset of target languages (optionally further filtered by excludeLanguageIds).

Changes:

  • Introduces export_languages config key and maps it onto PropertiesWithFiles.
  • Updates DownloadAction to compute target languages using CLI args, export_languages, and excluded languages.
  • Adds a DownloadActionTest covering the export_languages + exclude-languages interaction and extends the test properties builder API.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
src/main/java/com/crowdin/cli/properties/PropertiesBuilder.java Adds EXPORT_LANGUAGES config key constant.
src/main/java/com/crowdin/cli/properties/PropertiesWithFiles.java Adds exportLanguages field and populates it from config.
src/main/java/com/crowdin/cli/commands/actions/DownloadAction.java Uses export_languages (when no --language args) to decide build target languages; refactors language resolution into a helper.
src/test/java/com/crowdin/cli/properties/NewPropertiesWithFilesUtilBuilder.java Adds setExportLanguages(...) to simplify test setup.
src/test/java/com/crowdin/cli/commands/actions/DownloadActionTest.java Adds a test case for configured export languages with excluded languages.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +71 to +74
public NewPropertiesWithFilesUtilBuilder setExportLanguages(List<String> exportLanguages) {
this.pb.setExportLanguages(exportLanguages);
return this;
}
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

setExportLanguages(...) mutates the underlying PropertiesWithFiles, but buildToString() (used to generate a config file in tests) doesn’t serialize export_languages. This makes the builder inconsistent and will silently drop the setting when someone uses setExportLanguages(...).buildToString() to craft a config-based test. Consider updating buildToString() to include export_languages when present (and ensure formatting matches the existing config text conventions).

Copilot uses AI. Check for mistakes.
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added the param to buildToString() function for tests

.map(FileBean.CONFIGURATOR::buildFromMap)
.collect(Collectors.toList()));
props.setPseudoLocalization(PseudoLocalization.CONFIGURATOR.buildFromMap(PropertiesBuilder.getMap(map, PSEUDO_LOCALIZATION)));
PropertiesBuilder.setPropertyIfExists(props::setExportLanguages, map, EXPORT_LANGUAGES, List.class);
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

export_languages is loaded as a raw List via setPropertyIfExists(..., List.class) and assigned to a List<String> field. If the config contains non-string items (e.g., numbers), this will pass the type check but later fail with a ClassCastException when iterating in DownloadAction. Consider adding a dedicated helper to validate/convert a list of strings (similar to getListOfMaps) or explicitly validating elements here to throw a ValidationException with a clear message.

Suggested change
PropertiesBuilder.setPropertyIfExists(props::setExportLanguages, map, EXPORT_LANGUAGES, List.class);
Object exportLanguagesObj = map.get(EXPORT_LANGUAGES);
if (exportLanguagesObj instanceof List<?>) {
List<?> rawList = (List<?>) exportLanguagesObj;
List<String> validatedExportLanguages = new ArrayList<>(rawList.size());
for (Object item : rawList) {
if (!(item instanceof String)) {
throw new IllegalArgumentException(
"Property '" + EXPORT_LANGUAGES + "' must be a list of strings"
);
}
validatedExportLanguages.add((String) item);
}
props.setExportLanguages(validatedExportLanguages);
}

Copilot uses AI. Check for mistakes.
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added check for list of strings

Comment on lines 43 to 45
props.setPseudoLocalization(PseudoLocalization.CONFIGURATOR.buildFromMap(PropertiesBuilder.getMap(map, PSEUDO_LOCALIZATION)));
PropertiesBuilder.setPropertyIfExists(props::setExportLanguages, map, EXPORT_LANGUAGES, List.class);
}
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There’s no test exercising parsing of the new export_languages field from an actual config map/file (i.e., via the PropertiesBuilder pipeline). The added DownloadActionTest sets exportLanguages directly on the bean, so a regression in config parsing would go unnoticed. Consider adding a properties-building test that writes export_languages into a config file and asserts it ends up on PropertiesWithFiles (and/or affects the build request).

Copilot uses AI. Check for mistakes.
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

created a test

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant