Skip to content

Commit 09746a7

Browse files
authored
chore(ci): test java on multiple versions (#3651)
1 parent 62c2f21 commit 09746a7

File tree

20 files changed

+89
-40
lines changed

20 files changed

+89
-40
lines changed

.github/workflows/check.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ jobs:
357357
run: rm -rf ${{ matrix.client.testsToDelete }} || true
358358

359359
- name: Generate CTS
360-
run: yarn cli cts generate ${{ matrix.client.language }} ${{ matrix.client.toRun }}
360+
run: yarn cli cts generate ${{ matrix.client.language }} ${{ matrix.client.toRun }} --language-version ${{ matrix.client.version }}
361361

362362
- name: Run unit CTS
363363
run: yarn cli cts run ${{ matrix.client.language }} ${{ matrix.client.toRun }} --no-e2e

config/clients.config.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,13 @@
115115
"snippets": {
116116
"extension": ".java",
117117
"outputFolder": "src/test/java/com/algolia"
118-
}
118+
},
119+
"supportedVersions": [
120+
"8",
121+
"11",
122+
"17.0.12",
123+
"21"
124+
]
119125
},
120126
"javascript": {
121127
"clients": [

generators/src/main/java/com/algolia/codegen/AlgoliaCSharpGenerator.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
import io.swagger.v3.oas.models.Operation;
88
import io.swagger.v3.oas.models.servers.Server;
99
import java.io.IOException;
10-
import java.nio.file.Files;
11-
import java.nio.file.Paths;
1210
import java.util.*;
1311
import org.openapitools.codegen.*;
1412
import org.openapitools.codegen.languages.CSharpClientCodegen;
@@ -37,7 +35,7 @@ public void processOpts() {
3735
setLibrary("httpclient");
3836

3937
try {
40-
additionalProperties.put("dotnetSdkMajorVersion", Files.readString(Paths.get("config/.csharp-version")).trim());
38+
additionalProperties.put("languageVersion", Helpers.getLanguageVersion("csharp"));
4139
} catch (IOException e) {
4240
e.printStackTrace();
4341
System.exit(1);

generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
import io.swagger.v3.oas.models.servers.Server;
1515
import java.io.File;
1616
import java.io.IOException;
17-
import java.nio.file.Files;
18-
import java.nio.file.Paths;
1917
import java.util.*;
2018
import java.util.logging.Logger;
2119
import org.apache.commons.lang3.StringUtils;
@@ -162,7 +160,7 @@ public void processOpts() {
162160
setLibrary(LIBRARY_URLSESSION);
163161

164162
try {
165-
additionalProperties.put("swiftVersion", Files.readString(Paths.get("config/.swift-version")).trim());
163+
additionalProperties.put("swiftVersion", Helpers.getLanguageVersion("swift"));
166164
} catch (IOException e) {
167165
e.printStackTrace();
168166
System.exit(1);

generators/src/main/java/com/algolia/codegen/cts/AlgoliaCTSGenerator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,9 @@ public Map<String, Object> postProcessSupportingFileData(Map<String, Object> obj
152152
bundle.put("dynamicTemplate", new DynamicTemplateLambda(this));
153153
bundle.put("lambda", lambda);
154154

155+
String languageVersion = ctsManager.getLanguageVersion((String) additionalProperties.getOrDefault("languageVersion", ""));
156+
bundle.put("languageVersion", languageVersion);
157+
155158
ctsManager.addDataToBundle(bundle);
156159

157160
for (TestsGenerator testGen : testsGenerators) {

generators/src/main/java/com/algolia/codegen/cts/manager/CSharpCTSManager.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
import com.algolia.codegen.exceptions.GeneratorException;
44
import com.algolia.codegen.utils.*;
5-
import java.io.IOException;
6-
import java.nio.file.Files;
7-
import java.nio.file.Paths;
85
import java.util.*;
96
import org.openapitools.codegen.SupportingFile;
107

@@ -32,12 +29,5 @@ public void addTestsSupportingFiles(List<SupportingFile> supportingFiles) {
3229
@Override
3330
public void addDataToBundle(Map<String, Object> bundle) throws GeneratorException {
3431
bundle.put("packageVersion", getVersion());
35-
36-
try {
37-
bundle.put("dotnetSdkMajorVersion", Files.readString(Paths.get("config/.csharp-version")).trim());
38-
} catch (IOException e) {
39-
e.printStackTrace();
40-
System.exit(1);
41-
}
4232
}
4333
}

generators/src/main/java/com/algolia/codegen/cts/manager/CTSManager.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.algolia.codegen.exceptions.GeneratorException;
44
import com.algolia.codegen.utils.Helpers;
5+
import java.io.IOException;
56
import java.util.*;
67
import org.openapitools.codegen.SupportingFile;
78

@@ -18,6 +19,14 @@ public default String getVersion() {
1819
return Helpers.getClientConfigField(getLanguage(), "packageVersion");
1920
}
2021

22+
public default String getLanguageVersion(String override) throws IOException {
23+
if (override != null && !override.isEmpty()) {
24+
return override;
25+
}
26+
27+
return Helpers.getLanguageVersion(getLanguage());
28+
}
29+
2130
public default void addTestsSupportingFiles(List<SupportingFile> supportingFiles) {
2231
// NO-OP
2332
}

generators/src/main/java/com/algolia/codegen/cts/manager/JavaCTSManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.algolia.codegen.exceptions.GeneratorException;
44
import com.algolia.codegen.utils.*;
5+
import java.io.IOException;
56
import java.util.*;
67
import org.openapitools.codegen.SupportingFile;
78

@@ -21,6 +22,15 @@ public String getClient() {
2122
return client;
2223
}
2324

25+
@Override
26+
public String getLanguageVersion(String override) throws IOException {
27+
if (override != null && !override.isEmpty()) {
28+
return override.split("\\.")[0];
29+
}
30+
31+
return Helpers.getLanguageVersion(getLanguage()).split("\\.")[0];
32+
}
33+
2434
@Override
2535
public void addTestsSupportingFiles(List<SupportingFile> supportingFiles) {
2636
supportingFiles.add(new SupportingFile("tests/build.mustache", "tests/output/java", "build.gradle"));

generators/src/main/java/com/algolia/codegen/utils/Helpers.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.io.IOException;
99
import java.net.MalformedURLException;
1010
import java.net.URL;
11+
import java.nio.file.Files;
1112
import java.util.*;
1213
import org.apache.commons.lang3.StringUtils;
1314
import org.openapitools.codegen.CodegenOperation;
@@ -256,4 +257,11 @@ public static String setGenerationBanner(Map<String, Object> additionalPropertie
256257
public static void prettyPrint(Object o) {
257258
Json.prettyPrint(o);
258259
}
260+
261+
public static String getLanguageVersion(String language) throws IOException {
262+
String versionFile = language.equals("javascript")
263+
? ".nvmrc"
264+
: "config/." + (language.equals("kotlin") || language.equals("scala") ? "java" : language) + "-version";
265+
return Files.readString(new File(versionFile).toPath()).trim();
266+
}
259267
}

scripts/cli/index.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Argument, program } from 'commander';
22
import semver from 'semver';
33

44
import { buildClients, buildPlaygrounds, buildSnippets } from '../buildClients.js';
5-
import { CLIENTS, LANGUAGES, run, setVerbose } from '../common.js';
5+
import { CI, CLIENTS, LANGUAGES, run, setVerbose } from '../common.js';
66
import { ctsGenerateMany } from '../cts/generate.js';
77
import { runCts } from '../cts/runCts.js';
88
import { startTestServer } from '../cts/testServer';
@@ -41,8 +41,10 @@ const flags = {
4141
program.name('cli');
4242

4343
program.hook('preAction', () => {
44-
// restore the cursor because sometime it's broken
45-
process.stdout.write('\x1B[?25h');
44+
if (!CI) {
45+
// restore the cursor because sometime it's broken
46+
process.stdout.write('\x1B[?25h');
47+
}
4648
});
4749

4850
program
@@ -135,15 +137,16 @@ ctsCommand
135137
.addArgument(args.language)
136138
.addArgument(args.clients)
137139
.option(flags.verbose.flag, flags.verbose.description)
138-
.action(async (langArg: LangArg, clientArg: string[], { verbose }) => {
140+
.option('-lv, --language-version <version>', 'the version of the language to use')
141+
.action(async (langArg: LangArg, clientArg: string[], { verbose, languageVersion }) => {
139142
const { language, client, clientList } = transformSelection({
140143
langArg,
141144
clientArg,
142145
});
143146

144147
setVerbose(Boolean(verbose));
145148

146-
await ctsGenerateMany(generatorList({ language, client, clientList }));
149+
await ctsGenerateMany(generatorList({ language, client, clientList }), languageVersion);
147150
});
148151

149152
ctsCommand

scripts/common.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,13 +277,14 @@ export async function setupAndGen(
277277
generators: Generator[],
278278
mode: GeneratorMode,
279279
fn: (gen: Generator) => Promise<void>,
280+
additionalProperties = {},
280281
): Promise<void> {
281282
if (!CI) {
282283
const clients = [...new Set(generators.map((gen) => gen.client))];
283284
await buildSpecs({ clients, outputFormat: 'yml', docs: false, useCache: true });
284285
}
285286

286-
await generateOpenapitools(generators, mode);
287+
await generateOpenapitools(generators, mode, additionalProperties);
287288
await buildCustomGenerators();
288289

289290
for (const gen of generators) {

scripts/cts/generate.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,19 @@ import { getTestOutputFolder } from '../config.js';
33
import { formatter } from '../formatter.js';
44
import type { Generator } from '../types.js';
55

6-
export async function ctsGenerateMany(generators: Generator[]): Promise<void> {
7-
await setupAndGen(generators, 'tests', async (gen) => {
8-
if (getTestOutputFolder(gen.language)) {
9-
await callGenerator(gen);
10-
}
11-
});
6+
export async function ctsGenerateMany(generators: Generator[], languageVersion = ''): Promise<void> {
7+
await setupAndGen(
8+
generators,
9+
'tests',
10+
async (gen) => {
11+
if (getTestOutputFolder(gen.language)) {
12+
await callGenerator(gen);
13+
}
14+
},
15+
{
16+
languageVersion,
17+
},
18+
);
1219

1320
const langs = [...new Set(generators.map((gen) => gen.language))];
1421
for (const lang of langs) {

scripts/pre-gen/generateOpenapitools.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ import type { Generator, GeneratorMode } from '../types.js';
1010
* Defaults options are used to
1111
* - Set config path.
1212
*/
13-
export async function generateOpenapitools(gens: Generator[], mode: GeneratorMode): Promise<void> {
13+
export async function generateOpenapitools(
14+
gens: Generator[],
15+
mode: GeneratorMode,
16+
additionalProperties = {},
17+
): Promise<void> {
1418
const generators = {};
1519
for (const { key, client, language, ...rest } of gens) {
1620
const templateDir =
@@ -29,6 +33,7 @@ export async function generateOpenapitools(gens: Generator[], mode: GeneratorMod
2933
language,
3034
client,
3135
mode,
36+
...additionalProperties,
3237
},
3338
};
3439
}

templates/csharp/globaljson.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"sdk": {
3-
"version": "{{dotnetSdkMajorVersion}}",
3+
"version": "{{languageVersion}}",
44
"rollForward": "latestMinor"
55
}
66
}

templates/java/tests/build.mustache

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,20 @@ repositories {
66
mavenCentral()
77
}
88

9+
java {
10+
toolchain {
11+
languageVersion = JavaLanguageVersion.of({{languageVersion}})
12+
vendor = JvmVendorSpec.ADOPTIUM
13+
}
14+
}
15+
916
dependencies {
1017
testImplementation 'com.algolia:algoliasearch:{{packageVersion}}'
1118
testImplementation 'org.junit.jupiter:junit-jupiter:5.11.0'
1219
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
1320
testImplementation 'org.skyscreamer:jsonassert:1.5.3'
1421
testImplementation 'com.fasterxml.jackson.core:jackson-core:2.17.2'
15-
testImplementation 'io.github.cdimascio:dotenv-java:3.0.1'
22+
testImplementation 'io.github.cdimascio:dotenv-java:2.3.2' // use an old version to support java 8
1623
}
1724

1825
tasks.withType(JavaCompile) {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
{{^useEchoRequester}}var res = {{/useEchoRequester}}{{> tests/method}};
1+
{{^useEchoRequester}}{{{returnType}}} res = {{/useEchoRequester}}{{> tests/method}};
22
{{#useEchoRequester}}EchoResponse result = echo.getLastResponse();{{/useEchoRequester}}

templates/java/tests/e2e/e2e.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class {{client}}RequestsTestsE2E {
2626
if ("true".equals(System.getenv("CI"))) {
2727
this.client = new {{client}}(System.getenv("ALGOLIA_APPLICATION_ID"), System.getenv("{{e2eApiKey}}"){{#hasRegionalHost}}, "{{defaultRegion}}"{{/hasRegionalHost}});
2828
} else {
29-
var dotenv = Dotenv.configure().directory("../../").load();
29+
Dotenv dotenv = Dotenv.configure().directory("../../").load();
3030
this.client = new {{client}}(dotenv.get("ALGOLIA_APPLICATION_ID"), dotenv.get("{{e2eApiKey}}"){{#hasRegionalHost}}, "{{defaultRegion}}"{{/hasRegionalHost}});
3131
}
3232
}
@@ -41,7 +41,7 @@ class {{client}}RequestsTestsE2E {
4141
@Test
4242
@DisplayName("{{{testName}}}")
4343
void {{method}}Test{{testIndex}}() {
44-
var res = {{> tests/method}};
44+
{{returnType}} res = {{> tests/method}};
4545
{{#response}}
4646
{{#body}}
4747
assertDoesNotThrow(() -> JSONAssert.assertEquals("{{#lambda.escapeQuotes}}{{{body}}}{{/lambda.escapeQuotes}}", json.writeValueAsString(res), JSONCompareMode.LENIENT));

templates/java/tests/generateInnerParams.mustache

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@
2020
{{{objectName}}}.{{#lambda.javaEnum}}{{{value}}}{{/lambda.javaEnum}}
2121
{{/isEnum}}
2222
{{#isArray}}
23-
List.of({{#value}}{{> tests/generateParams}}{{^-last}},{{/-last}}{{/value}})
23+
Arrays.asList({{#value}}{{> tests/generateParams}}{{^-last}},{{/-last}}{{/value}})
2424
{{/isArray}}
2525
{{#isObject}}
2626
new {{{objectName}}}()
2727
{{#value}}{{#isAdditionalProperty}}.setAdditionalProperty("{{{key}}}", {{> tests/generateParams}}){{/isAdditionalProperty}}{{^isAdditionalProperty}}.set{{#lambda.pascalcase}}{{{key}}}{{/lambda.pascalcase}}({{> tests/generateParams}}){{/isAdditionalProperty}}{{/value}}
2828
{{/isObject}}
2929
{{#isFreeFormObject}}
3030
{{#isAnyType}}
31-
Map.of({{#value}}{{#entrySet}}"{{{key}}}", "{{{value}}}"{{^-last}},{{/-last}}{{/entrySet}}{{/value}})
31+
new HashMap(){{ {{#value}}{{#entrySet}}put("{{{key}}}", "{{{value}}}");{{/entrySet}}{{/value}} }}
3232
{{/isAnyType}}
3333
{{^isAnyType}}
34-
Map.of({{#value}}"{{{key}}}", {{> tests/generateParams}}{{^-last}},{{/-last}}{{/value}})
34+
new HashMap(){{ {{#value}}put("{{{key}}}", {{> tests/generateParams}});{{/value}} }}
3535
{{/isAnyType}}
3636
{{/isFreeFormObject}}

templates/java/tests/requests/requests.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class {{client}}RequestsTests {
3030
void init() {
3131
this.json = JsonMapper.builder().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).build();
3232
this.echo = new EchoInterceptor();
33-
var options = ClientOptions.builder()
33+
ClientOptions options = ClientOptions.builder()
3434
.setRequesterConfig(requester -> requester.addInterceptor(echo))
3535
.build();
3636
this.client = new {{client}}("appId", "apiKey", {{#hasRegionalHost}}"{{defaultRegion}}", {{/hasRegionalHost}}options);

tests/output/java/settings.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
plugins {
2+
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0'
3+
}
4+
15
rootProject.name = 'java-tests'
26

37
includeBuild('../../../clients/algoliasearch-client-java') {

0 commit comments

Comments
 (0)