Skip to content

Commit

Permalink
fix(javascript): release process (#1779)
Browse files Browse the repository at this point in the history
  • Loading branch information
shortcuts committed Jul 19, 2023
1 parent 8997c8a commit d97511a
Show file tree
Hide file tree
Showing 11 changed files with 80 additions and 186 deletions.
2 changes: 1 addition & 1 deletion config/clients.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"folder": "clients/algoliasearch-client-javascript",
"npmNamespace": "@algolia",
"gitRepoId": "algoliasearch-client-javascript",
"utilsPackageVersion": "5.0.0-alpha.73",
"packageVersion": "5.0.0-alpha.73",
"modelFolder": "model",
"apiFolder": "src",
"customGenerator": "algolia-javascript",
Expand Down
66 changes: 11 additions & 55 deletions config/openapitools.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,83 +4,39 @@
"generators": {
"javascript-algoliasearch": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/algoliasearch",
"reservedWordsMappings": "queryParameters=queryParameters,requestOptions=requestOptions,delete=delete",
"additionalProperties": {
"packageVersion": "5.0.0-alpha.73",
"packageName": "algoliasearch"
}
"reservedWordsMappings": "queryParameters=queryParameters,requestOptions=requestOptions,delete=delete"
},
"javascript-search": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-search",
"reservedWordsMappings": "queryParameters=queryParameters,requestOptions=requestOptions,delete=delete",
"additionalProperties": {
"packageVersion": "5.0.0-alpha.73",
"packageName": "client-search"
}
"reservedWordsMappings": "queryParameters=queryParameters,requestOptions=requestOptions,delete=delete"
},
"javascript-recommend": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/recommend",
"reservedWordsMappings": "queryParameters=queryParameters,delete=delete",
"additionalProperties": {
"packageVersion": "5.0.0-alpha.73",
"packageName": "recommend"
}
"reservedWordsMappings": "queryParameters=queryParameters,delete=delete"
},
"javascript-personalization": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-personalization",
"additionalProperties": {
"packageVersion": "5.0.0-alpha.73",
"packageName": "client-personalization"
}
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-personalization"
},
"javascript-analytics": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-analytics",
"additionalProperties": {
"packageVersion": "5.0.0-alpha.73",
"packageName": "client-analytics"
}
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-analytics"
},
"javascript-insights": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-insights",
"additionalProperties": {
"packageVersion": "5.0.0-alpha.73",
"packageName": "client-insights"
}
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-insights"
},
"javascript-abtesting": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-abtesting",
"additionalProperties": {
"packageVersion": "5.0.0-alpha.73",
"packageName": "client-abtesting"
}
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-abtesting"
},
"javascript-query-suggestions": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-query-suggestions",
"additionalProperties": {
"packageVersion": "5.0.0-alpha.73",
"packageName": "client-query-suggestions"
}
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/client-query-suggestions"
},
"javascript-predict": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/predict",
"additionalProperties": {
"packageVersion": "1.0.0-alpha.73",
"packageName": "predict"
}
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/predict"
},
"javascript-ingestion": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/ingestion",
"additionalProperties": {
"packageVersion": "1.0.0-alpha.47",
"packageName": "ingestion"
}
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/ingestion"
},
"javascript-monitoring": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/monitoring",
"additionalProperties": {
"packageVersion": "1.0.0-alpha.1",
"packageName": "monitoring"
}
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/monitoring"
},
"java-search": {
"output": "#{cwd}/clients/algoliasearch-client-java-2"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.algolia.codegen;

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

private String CLIENT;
private boolean isAlgoliasearchClient;
private static JsonNode cacheOpenApiToolsConfig;

@Override
public String getName() {
Expand Down Expand Up @@ -110,9 +112,26 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
return Utils.specifyCustomRequest(super.fromOperation(path, httpMethod, operation, servers));
}

/** Get the packageName from the output field in the `config/openapitools.json` file */
public String getPackageName(String client) throws ConfigException {
if (cacheOpenApiToolsConfig == null) {
cacheOpenApiToolsConfig = Utils.readJsonFile("config/openapitools.json");
}

String output = cacheOpenApiToolsConfig
.get("generator-cli")
.get("generators")
.get("javascript-" + (String) additionalProperties.get("client"))
.get("output")
.asText();

return output.substring(output.lastIndexOf("/") + 1);
}

/** Set default generator options */
private void setDefaultGeneratorOptions() {
String apiName = CLIENT + Utils.API_SUFFIX;
String packageName = getPackageName(CLIENT);

additionalProperties.put("apiName", apiName);
additionalProperties.put("capitalizedApiName", Utils.capitalize(apiName));
Expand All @@ -121,13 +140,15 @@ private void setDefaultGeneratorOptions() {
additionalProperties.put("isSearchClient", CLIENT.equals("search"));
additionalProperties.put("isIngestionClient", CLIENT.equals("ingestion"));
additionalProperties.put("isAlgoliasearchClient", isAlgoliasearchClient);
additionalProperties.put("packageVersion", Utils.getPackageJsonVersion(packageName));
additionalProperties.put("packageName", packageName);

if (isAlgoliasearchClient) {
// Files used to create the package.json of the algoliasearch package
additionalProperties.put("analyticsVersion", Utils.getOpenApiToolsField("javascript", "analytics", "packageVersion"));
additionalProperties.put("abtestingVersion", Utils.getOpenApiToolsField("javascript", "abtesting", "packageVersion"));
additionalProperties.put("personalizationVersion", Utils.getOpenApiToolsField("javascript", "personalization", "packageVersion"));
additionalProperties.put("searchVersion", Utils.getOpenApiToolsField("javascript", "search", "packageVersion"));
additionalProperties.put("analyticsVersion", Utils.getPackageJsonVersion("client-analytics"));
additionalProperties.put("abtestingVersion", Utils.getPackageJsonVersion("client-abtesting"));
additionalProperties.put("personalizationVersion", Utils.getPackageJsonVersion("client-personalization"));
additionalProperties.put("searchVersion", Utils.getPackageJsonVersion("client-search"));

// Files used to generate the `lite` client
apiName = "lite" + Utils.API_SUFFIX;
Expand All @@ -152,7 +173,7 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<Mo
setDefaultGeneratorOptions();
try {
Utils.generateServer((String) additionalProperties.get("client"), additionalProperties);
additionalProperties.put("utilsPackageVersion", Utils.getClientConfigField("javascript", "utilsPackageVersion"));
additionalProperties.put("utilsPackageVersion", Utils.getPackageJsonVersion("client-common"));
additionalProperties.put("npmNamespace", Utils.getClientConfigField("javascript", "npmNamespace"));
} catch (GeneratorException e) {
e.printStackTrace();
Expand Down
23 changes: 20 additions & 3 deletions generators/src/main/java/com/algolia/codegen/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -130,14 +130,31 @@ public static void generateServer(String clientKebab, Map<String, Object> additi
}
}

/**
* Get the current version of the given client from the
* `clients/algoliasearch-client-javascript/packages/${client}/package.json` file, defaults to
* 0.0.1 if not found
*/
public static String getPackageJsonVersion(String client) throws ConfigException {
try {
JsonNode packageJson = Utils.readJsonFile("clients/algoliasearch-client-javascript/packages/" + client + "/package.json");
String value = packageJson.get("version").asText();

if (value.isEmpty()) {
return "0.0.1";
}

return value;
} catch (ConfigException e) {
return "0.0.1";
}
}

/** Get the `field` value in the `config/clients.config.json` file for the given language */
public static String getClientConfigField(String language, String... fields) throws ConfigException {
if (fields.length == 0) {
throw new ConfigException("getClientConfigField requires at least one field");
}
if (language.equals("javascript") && fields[0].equals("packageVersion")) {
throw new ConfigException("Cannot read 'packageVersion' with language=\"javascript\", " + "read configs/openapitools.json instead");
}
if (cacheConfig == null) {
cacheConfig = readJsonFile("config/clients.config.json");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public void addSupportingFiles(List<SupportingFile> supportingFiles) {
public void addDataToBundle(Map<String, Object> bundle) throws GeneratorException {
String npmNamespace = Utils.getClientConfigField("javascript", "npmNamespace");

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

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

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

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

if (!packageName.equals("algoliasearch")) {
packageName = npmNamespace + "/" + packageName;
Expand Down
10 changes: 2 additions & 8 deletions scripts/__tests__/common.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,15 +59,9 @@ describe('config', () => {
describe('getClientsConfigField', () => {
it('throws if the field is not found', () => {
expect(() => {
getClientsConfigField('javascript', 'packageVersion');
getClientsConfigField('javascript', 'foofoo');
}).toThrowErrorMatchingInlineSnapshot(
`"Unable to find 'packageVersion' for 'javascript'"`
);

expect(() => {
getClientsConfigField('java', 'utilsPackageVersion');
}).toThrowErrorMatchingInlineSnapshot(
`"Unable to find 'utilsPackageVersion' for 'java'"`
`"Unable to find 'foofoo' for 'javascript'"`
);
});

Expand Down
6 changes: 0 additions & 6 deletions scripts/config.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import clientsConfig from '../config/clients.config.json' assert { type: 'json' };
import openapiConfig from '../config/openapitools.json' assert { type: 'json' };

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

Expand Down Expand Up @@ -48,11 +47,6 @@ export function getCustomGenerator(language: Language): string {
* Returns the version of the package from clients.config.json, except for JavaScript where it returns the version of javascript-search.
*/
export function getPackageVersionDefault(language: Language): string {
if (language === 'javascript') {
return openapiConfig['generator-cli'].generators['javascript-search']
.additionalProperties.packageVersion;
}

return getClientsConfigField(language, 'packageVersion');
}

Expand Down
3 changes: 1 addition & 2 deletions scripts/release/createReleasePR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import type {
Scope,
Changelog,
} from './types.js';
import { updateAPIVersions, updateDartPackages } from './updateAPIVersions.js';
import { updateAPIVersions } from './updateAPIVersions.js';

dotenv.config({ path: ROOT_ENV_PATH });

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

console.log('Updating config files...');
await updateAPIVersions(versions, changelog);
await updateDartPackages();

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

0 comments on commit d97511a

Please sign in to comment.