Skip to content

Commit d97511a

Browse files
authored
fix(javascript): release process (#1779)
1 parent 8997c8a commit d97511a

File tree

11 files changed

+80
-186
lines changed

11 files changed

+80
-186
lines changed

config/clients.config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"folder": "clients/algoliasearch-client-javascript",
1616
"npmNamespace": "@algolia",
1717
"gitRepoId": "algoliasearch-client-javascript",
18-
"utilsPackageVersion": "5.0.0-alpha.73",
18+
"packageVersion": "5.0.0-alpha.73",
1919
"modelFolder": "model",
2020
"apiFolder": "src",
2121
"customGenerator": "algolia-javascript",

config/openapitools.json

Lines changed: 11 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -4,83 +4,39 @@
44
"generators": {
55
"javascript-algoliasearch": {
66
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/algoliasearch",
7-
"reservedWordsMappings": "queryParameters=queryParameters,requestOptions=requestOptions,delete=delete",
8-
"additionalProperties": {
9-
"packageVersion": "5.0.0-alpha.73",
10-
"packageName": "algoliasearch"
11-
}
7+
"reservedWordsMappings": "queryParameters=queryParameters,requestOptions=requestOptions,delete=delete"
128
},
139
"javascript-search": {
1410
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-search",
15-
"reservedWordsMappings": "queryParameters=queryParameters,requestOptions=requestOptions,delete=delete",
16-
"additionalProperties": {
17-
"packageVersion": "5.0.0-alpha.73",
18-
"packageName": "client-search"
19-
}
11+
"reservedWordsMappings": "queryParameters=queryParameters,requestOptions=requestOptions,delete=delete"
2012
},
2113
"javascript-recommend": {
2214
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/recommend",
23-
"reservedWordsMappings": "queryParameters=queryParameters,delete=delete",
24-
"additionalProperties": {
25-
"packageVersion": "5.0.0-alpha.73",
26-
"packageName": "recommend"
27-
}
15+
"reservedWordsMappings": "queryParameters=queryParameters,delete=delete"
2816
},
2917
"javascript-personalization": {
30-
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-personalization",
31-
"additionalProperties": {
32-
"packageVersion": "5.0.0-alpha.73",
33-
"packageName": "client-personalization"
34-
}
18+
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-personalization"
3519
},
3620
"javascript-analytics": {
37-
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-analytics",
38-
"additionalProperties": {
39-
"packageVersion": "5.0.0-alpha.73",
40-
"packageName": "client-analytics"
41-
}
21+
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-analytics"
4222
},
4323
"javascript-insights": {
44-
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-insights",
45-
"additionalProperties": {
46-
"packageVersion": "5.0.0-alpha.73",
47-
"packageName": "client-insights"
48-
}
24+
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-insights"
4925
},
5026
"javascript-abtesting": {
51-
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-abtesting",
52-
"additionalProperties": {
53-
"packageVersion": "5.0.0-alpha.73",
54-
"packageName": "client-abtesting"
55-
}
27+
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-abtesting"
5628
},
5729
"javascript-query-suggestions": {
58-
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-query-suggestions",
59-
"additionalProperties": {
60-
"packageVersion": "5.0.0-alpha.73",
61-
"packageName": "client-query-suggestions"
62-
}
30+
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-query-suggestions"
6331
},
6432
"javascript-predict": {
65-
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/predict",
66-
"additionalProperties": {
67-
"packageVersion": "1.0.0-alpha.73",
68-
"packageName": "predict"
69-
}
33+
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/predict"
7034
},
7135
"javascript-ingestion": {
72-
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/ingestion",
73-
"additionalProperties": {
74-
"packageVersion": "1.0.0-alpha.47",
75-
"packageName": "ingestion"
76-
}
36+
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/ingestion"
7737
},
7838
"javascript-monitoring": {
79-
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/monitoring",
80-
"additionalProperties": {
81-
"packageVersion": "1.0.0-alpha.1",
82-
"packageName": "monitoring"
83-
}
39+
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/monitoring"
8440
},
8541
"java-search": {
8642
"output": "#{cwd}/clients/algoliasearch-client-java-2"

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

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.algolia.codegen;
22

33
import com.algolia.codegen.exceptions.*;
4+
import com.fasterxml.jackson.databind.JsonNode;
45
import io.swagger.v3.oas.models.Operation;
56
import io.swagger.v3.oas.models.servers.Server;
67
import java.util.List;
@@ -16,6 +17,7 @@ public class AlgoliaJavaScriptGenerator extends TypeScriptNodeClientCodegen {
1617

1718
private String CLIENT;
1819
private boolean isAlgoliasearchClient;
20+
private static JsonNode cacheOpenApiToolsConfig;
1921

2022
@Override
2123
public String getName() {
@@ -110,9 +112,26 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
110112
return Utils.specifyCustomRequest(super.fromOperation(path, httpMethod, operation, servers));
111113
}
112114

115+
/** Get the packageName from the output field in the `config/openapitools.json` file */
116+
public String getPackageName(String client) throws ConfigException {
117+
if (cacheOpenApiToolsConfig == null) {
118+
cacheOpenApiToolsConfig = Utils.readJsonFile("config/openapitools.json");
119+
}
120+
121+
String output = cacheOpenApiToolsConfig
122+
.get("generator-cli")
123+
.get("generators")
124+
.get("javascript-" + (String) additionalProperties.get("client"))
125+
.get("output")
126+
.asText();
127+
128+
return output.substring(output.lastIndexOf("/") + 1);
129+
}
130+
113131
/** Set default generator options */
114132
private void setDefaultGeneratorOptions() {
115133
String apiName = CLIENT + Utils.API_SUFFIX;
134+
String packageName = getPackageName(CLIENT);
116135

117136
additionalProperties.put("apiName", apiName);
118137
additionalProperties.put("capitalizedApiName", Utils.capitalize(apiName));
@@ -121,13 +140,15 @@ private void setDefaultGeneratorOptions() {
121140
additionalProperties.put("isSearchClient", CLIENT.equals("search"));
122141
additionalProperties.put("isIngestionClient", CLIENT.equals("ingestion"));
123142
additionalProperties.put("isAlgoliasearchClient", isAlgoliasearchClient);
143+
additionalProperties.put("packageVersion", Utils.getPackageJsonVersion(packageName));
144+
additionalProperties.put("packageName", packageName);
124145

125146
if (isAlgoliasearchClient) {
126147
// Files used to create the package.json of the algoliasearch package
127-
additionalProperties.put("analyticsVersion", Utils.getOpenApiToolsField("javascript", "analytics", "packageVersion"));
128-
additionalProperties.put("abtestingVersion", Utils.getOpenApiToolsField("javascript", "abtesting", "packageVersion"));
129-
additionalProperties.put("personalizationVersion", Utils.getOpenApiToolsField("javascript", "personalization", "packageVersion"));
130-
additionalProperties.put("searchVersion", Utils.getOpenApiToolsField("javascript", "search", "packageVersion"));
148+
additionalProperties.put("analyticsVersion", Utils.getPackageJsonVersion("client-analytics"));
149+
additionalProperties.put("abtestingVersion", Utils.getPackageJsonVersion("client-abtesting"));
150+
additionalProperties.put("personalizationVersion", Utils.getPackageJsonVersion("client-personalization"));
151+
additionalProperties.put("searchVersion", Utils.getPackageJsonVersion("client-search"));
131152

132153
// Files used to generate the `lite` client
133154
apiName = "lite" + Utils.API_SUFFIX;
@@ -152,7 +173,7 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<Mo
152173
setDefaultGeneratorOptions();
153174
try {
154175
Utils.generateServer((String) additionalProperties.get("client"), additionalProperties);
155-
additionalProperties.put("utilsPackageVersion", Utils.getClientConfigField("javascript", "utilsPackageVersion"));
176+
additionalProperties.put("utilsPackageVersion", Utils.getPackageJsonVersion("client-common"));
156177
additionalProperties.put("npmNamespace", Utils.getClientConfigField("javascript", "npmNamespace"));
157178
} catch (GeneratorException e) {
158179
e.printStackTrace();

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

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,31 @@ public static void generateServer(String clientKebab, Map<String, Object> additi
130130
}
131131
}
132132

133+
/**
134+
* Get the current version of the given client from the
135+
* `clients/algoliasearch-client-javascript/packages/${client}/package.json` file, defaults to
136+
* 0.0.1 if not found
137+
*/
138+
public static String getPackageJsonVersion(String client) throws ConfigException {
139+
try {
140+
JsonNode packageJson = Utils.readJsonFile("clients/algoliasearch-client-javascript/packages/" + client + "/package.json");
141+
String value = packageJson.get("version").asText();
142+
143+
if (value.isEmpty()) {
144+
return "0.0.1";
145+
}
146+
147+
return value;
148+
} catch (ConfigException e) {
149+
return "0.0.1";
150+
}
151+
}
152+
133153
/** Get the `field` value in the `config/clients.config.json` file for the given language */
134154
public static String getClientConfigField(String language, String... fields) throws ConfigException {
135155
if (fields.length == 0) {
136156
throw new ConfigException("getClientConfigField requires at least one field");
137157
}
138-
if (language.equals("javascript") && fields[0].equals("packageVersion")) {
139-
throw new ConfigException("Cannot read 'packageVersion' with language=\"javascript\", " + "read configs/openapitools.json instead");
140-
}
141158
if (cacheConfig == null) {
142159
cacheConfig = readJsonFile("config/clients.config.json");
143160
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public void addSupportingFiles(List<SupportingFile> supportingFiles) {
2323
public void addDataToBundle(Map<String, Object> bundle) throws GeneratorException {
2424
String npmNamespace = Utils.getClientConfigField("javascript", "npmNamespace");
2525

26-
bundle.put("utilsPackageVersion", Utils.getClientConfigField("javascript", "utilsPackageVersion"));
26+
bundle.put("utilsPackageVersion", Utils.getPackageJsonVersion("client-common"));
2727
bundle.put("npmNamespace", npmNamespace);
2828

2929
JsonNode openApiToolsConfig = Utils.readJsonFile("config/openapitools.json").get("generator-cli").get("generators");
@@ -38,10 +38,10 @@ public void addDataToBundle(Map<String, Object> bundle) throws GeneratorExceptio
3838
}
3939

4040
Map<String, String> client = new HashMap<>();
41-
JsonNode additionalProperties = field.getValue().get("additionalProperties");
42-
String packageName = additionalProperties.get("packageName").asText();
41+
String output = field.getValue().get("output").asText();
42+
String packageName = output.substring(output.lastIndexOf("/") + 1);
4343

44-
client.put("packagePath", "link:../../../clients/algoliasearch-client-javascript/packages/" + packageName);
44+
client.put("packagePath", "link:../../../" + output.replace("#{cwd}/", ""));
4545

4646
if (!packageName.equals("algoliasearch")) {
4747
packageName = npmNamespace + "/" + packageName;

scripts/__tests__/common.test.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,9 @@ describe('config', () => {
5959
describe('getClientsConfigField', () => {
6060
it('throws if the field is not found', () => {
6161
expect(() => {
62-
getClientsConfigField('javascript', 'packageVersion');
62+
getClientsConfigField('javascript', 'foofoo');
6363
}).toThrowErrorMatchingInlineSnapshot(
64-
`"Unable to find 'packageVersion' for 'javascript'"`
65-
);
66-
67-
expect(() => {
68-
getClientsConfigField('java', 'utilsPackageVersion');
69-
}).toThrowErrorMatchingInlineSnapshot(
70-
`"Unable to find 'utilsPackageVersion' for 'java'"`
64+
`"Unable to find 'foofoo' for 'javascript'"`
7165
);
7266
});
7367

scripts/config.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import clientsConfig from '../config/clients.config.json' assert { type: 'json' };
2-
import openapiConfig from '../config/openapitools.json' assert { type: 'json' };
32

43
import type { Language, LanguageConfig } from './types.js';
54

@@ -48,11 +47,6 @@ export function getCustomGenerator(language: Language): string {
4847
* Returns the version of the package from clients.config.json, except for JavaScript where it returns the version of javascript-search.
4948
*/
5049
export function getPackageVersionDefault(language: Language): string {
51-
if (language === 'javascript') {
52-
return openapiConfig['generator-cli'].generators['javascript-search']
53-
.additionalProperties.packageVersion;
54-
}
55-
5650
return getClientsConfigField(language, 'packageVersion');
5751
}
5852

scripts/release/createReleasePR.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import type {
3232
Scope,
3333
Changelog,
3434
} from './types.js';
35-
import { updateAPIVersions, updateDartPackages } from './updateAPIVersions.js';
35+
import { updateAPIVersions } from './updateAPIVersions.js';
3636

3737
dotenv.config({ path: ROOT_ENV_PATH });
3838

@@ -442,7 +442,6 @@ async function createReleasePR(): Promise<void> {
442442

443443
console.log('Updating config files...');
444444
await updateAPIVersions(versions, changelog);
445-
await updateDartPackages();
446445

447446
const headBranch = `chore/prepare-release-${TODAY}`;
448447
console.log(`Switching to branch: ${headBranch}`);

0 commit comments

Comments
 (0)