Skip to content

Commit 5b79563

Browse files
authored
feat(generator): add custom generator to fix customRequest (#315)
1 parent 1f40958 commit 5b79563

File tree

12 files changed

+106
-39
lines changed

12 files changed

+106
-39
lines changed

.github/.cache_version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
6.0.1
1+
7

.github/actions/setup/action.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ runs:
5555
5656
echo "::set-output name=SCRIPTS_CHANGED::$(git diff --shortstat $origin..HEAD -- scripts | wc -l)"
5757
58+
echo "::set-output name=GENERATORS_CHANGED::$(git diff --shortstat $origin..HEAD -- generators | wc -l)"
59+
5860
echo "::set-output name=JS_CLIENT_CHANGED::$(git diff --shortstat $origin..HEAD -- clients/algoliasearch-client-javascript | wc -l)"
5961
echo "::set-output name=JS_ALGOLIASEARCH_CHANGED::$(git diff --shortstat $origin..HEAD -- clients/algoliasearch-client-javascript/packages/algoliasearch clients/algoliasearch-client-javascript/packages/client-search clients/algoliasearch-client-javascript/packages/client-analytics clients/algoliasearch-client-javascript/packages/client-personalization | wc -l)"
6062
echo "::set-output name=JS_COMMON_CHANGED::$(git diff --shortstat $origin..HEAD -- clients/algoliasearch-client-javascript/packages/client-common clients/algoliasearch-client-javascript/packages/requester-browser-xhr clients/algoliasearch-client-javascript/packages/requester-node-http | wc -l)"
@@ -95,7 +97,7 @@ runs:
9597
id: js-matrix
9698
shell: bash
9799
run: |
98-
base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.JS_TEMPLATE_CHANGED > 0 || steps.diff.outputs.JS_COMMON_CHANGED > 0 }}
100+
base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.GENERATORS_CHANGED > 0 || steps.diff.outputs.JS_TEMPLATE_CHANGED > 0 || steps.diff.outputs.JS_COMMON_CHANGED > 0 }}
99101
algoliasearch_changed=${{ steps.diff.outputs.JS_ALGOLIASEARCH_CHANGED > 0 }}
100102
common_changed=${{ steps.diff.outputs.JS_COMMON_CHANGED > 0 }}
101103
@@ -128,7 +130,7 @@ runs:
128130
id: java-matrix
129131
shell: bash
130132
run: |
131-
base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.JAVA_TEMPLATE_CHANGED > 0 }}
133+
base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.GENERATORS_CHANGED > 0 || steps.diff.outputs.JAVA_TEMPLATE_CHANGED > 0 }}
132134
133135
matrix=$(./scripts/ci/create-client-matrix.sh java $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }})
134136
@@ -149,7 +151,7 @@ runs:
149151
id: php-matrix
150152
shell: bash
151153
run: |
152-
base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.PHP_TEMPLATE_CHANGED > 0 }}
154+
base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.GENERATORS_CHANGED > 0 || steps.diff.outputs.PHP_TEMPLATE_CHANGED > 0 }}
153155
154156
matrix=$(./scripts/ci/create-client-matrix.sh php $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }})
155157

.github/workflows/pr-title.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ jobs:
1616
- name: Pull Request title rules
1717
uses: deepakputhraya/[email protected]
1818
with:
19-
regex: '^(docs|chore)|((?:feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)\((?:javascript|php|java|cts|spec|script|ci)\)): .+'
19+
regex: '^(docs|chore)|((?:feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)\((?:generator|javascript|php|java|cts|spec|script|ci)\)): .+'

config/clients.config.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"java": {
33
"folder": "clients/algoliasearch-client-java-2",
4-
"mainGenerator": "java-search",
4+
"mainPackage": "java-search",
55
"modelFolder": "algoliasearch-core/com/algolia/model",
66
"customGenerator": "algolia-java",
77
"tests": {
@@ -11,16 +11,18 @@
1111
},
1212
"javascript": {
1313
"folder": "clients/algoliasearch-client-javascript",
14-
"mainGenerator": "javascript-search",
14+
"mainPackage": "javascript-search",
1515
"modelFolder": "model",
16+
"customGenerator": "algolia-javascript",
1617
"tests": {
1718
"extension": ".test.ts",
1819
"outputFolder": "src"
1920
}
2021
},
2122
"php": {
2223
"folder": "clients/algoliasearch-client-php",
23-
"mainGenerator": "php-search",
24-
"modelFolder": "lib/Model"
24+
"mainPackage": "php-search",
25+
"modelFolder": "lib/Model",
26+
"customGenerator": "algolia-php"
2527
}
2628
}

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66
import org.yaml.snakeyaml.Yaml;
77

88
import java.util.*;
9-
import java.util.Map.Entry;
109
import java.io.FileInputStream;
1110
import java.net.URL;
1211

12+
import io.swagger.v3.oas.models.Operation;
1313
import io.swagger.v3.oas.models.media.Schema;
14+
import io.swagger.v3.oas.models.servers.Server;
1415

1516
@SuppressWarnings("unchecked")
1617
public class AlgoliaJavaGenerator extends JavaClientCodegen {
@@ -93,6 +94,11 @@ private void generateServer(Map<String, Object> client) {
9394
}
9495
}
9596

97+
@Override
98+
public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, List<Server> servers) {
99+
return Utils.specifyCustomRequest(super.fromOperation(path, httpMethod, operation, servers));
100+
}
101+
96102
/**
97103
* Provides an opportunity to inspect and modify operation data before the code
98104
* is generated.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.algolia.codegen;
2+
3+
import java.util.List;
4+
5+
import org.openapitools.codegen.CodegenOperation;
6+
import org.openapitools.codegen.languages.TypeScriptNodeClientCodegen;
7+
8+
import io.swagger.v3.oas.models.Operation;
9+
import io.swagger.v3.oas.models.servers.Server;
10+
11+
public class AlgoliaJavascriptGenerator extends TypeScriptNodeClientCodegen {
12+
@Override
13+
public String getName() {
14+
return "algolia-javascript";
15+
}
16+
17+
@Override
18+
public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, List<Server> servers) {
19+
return Utils.specifyCustomRequest(super.fromOperation(path, httpMethod, operation, servers));
20+
}
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.algolia.codegen;
2+
3+
import java.util.List;
4+
5+
import org.openapitools.codegen.CodegenOperation;
6+
import org.openapitools.codegen.languages.PhpClientCodegen;
7+
8+
import io.swagger.v3.oas.models.Operation;
9+
import io.swagger.v3.oas.models.servers.Server;
10+
11+
public class AlgoliaPhpGenerator extends PhpClientCodegen {
12+
@Override
13+
public String getName() {
14+
return "algolia-php";
15+
}
16+
17+
@Override
18+
public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, List<Server> servers) {
19+
return Utils.specifyCustomRequest(super.fromOperation(path, httpMethod, operation, servers));
20+
}
21+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,26 @@
11
package com.algolia.codegen;
22

3+
import java.util.Set;
4+
5+
import com.google.common.collect.Sets;
6+
7+
import org.openapitools.codegen.CodegenOperation;
8+
39
public class Utils {
10+
public static final Set<String> CUSTOM_METHOD = Sets.newHashSet("del", "get", "post", "put");
11+
412
public static String capitalize(String str) {
513
return str.substring(0, 1).toUpperCase() + str.substring(1);
614
}
15+
16+
/**
17+
* Will add the boolean `vendorExtensions.x-is-custom-request` to operations if
18+
* they should not escape '/' in the path variable
19+
*/
20+
public static CodegenOperation specifyCustomRequest(CodegenOperation ope) {
21+
if (CUSTOM_METHOD.contains(ope.nickname)) {
22+
ope.vendorExtensions.put("x-is-custom-request", true);
23+
}
24+
return ope;
25+
}
726
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
com.algolia.codegen.AlgoliaJavaGenerator
2+
com.algolia.codegen.AlgoliaJavascriptGenerator
3+
com.algolia.codegen.AlgoliaPhpGenerator
24
com.algolia.codegen.cts.AlgoliaCtsGenerator

openapitools.json

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"version": "5.4.0",
55
"generators": {
66
"javascript-search": {
7-
"generatorName": "typescript-node",
7+
"generatorName": "algolia-javascript",
88
"templateDir": "#{cwd}/templates/javascript/",
99
"config": "#{cwd}/openapitools.json",
1010
"apiPackage": "src",
@@ -26,7 +26,7 @@
2626
}
2727
},
2828
"javascript-recommend": {
29-
"generatorName": "typescript-node",
29+
"generatorName": "algolia-javascript",
3030
"templateDir": "#{cwd}/templates/javascript/",
3131
"config": "#{cwd}/openapitools.json",
3232
"apiPackage": "src",
@@ -48,7 +48,7 @@
4848
}
4949
},
5050
"javascript-personalization": {
51-
"generatorName": "typescript-node",
51+
"generatorName": "algolia-javascript",
5252
"templateDir": "#{cwd}/templates/javascript/",
5353
"config": "#{cwd}/openapitools.json",
5454
"apiPackage": "src",
@@ -73,7 +73,7 @@
7373
}
7474
},
7575
"javascript-analytics": {
76-
"generatorName": "typescript-node",
76+
"generatorName": "algolia-javascript",
7777
"templateDir": "#{cwd}/templates/javascript/",
7878
"config": "#{cwd}/openapitools.json",
7979
"apiPackage": "src",
@@ -99,7 +99,7 @@
9999
}
100100
},
101101
"javascript-insights": {
102-
"generatorName": "typescript-node",
102+
"generatorName": "algolia-javascript",
103103
"templateDir": "#{cwd}/templates/javascript/",
104104
"config": "#{cwd}/openapitools.json",
105105
"apiPackage": "src",
@@ -125,7 +125,7 @@
125125
}
126126
},
127127
"javascript-abtesting": {
128-
"generatorName": "typescript-node",
128+
"generatorName": "algolia-javascript",
129129
"templateDir": "#{cwd}/templates/javascript/",
130130
"config": "#{cwd}/openapitools.json",
131131
"apiPackage": "src",
@@ -151,7 +151,7 @@
151151
}
152152
},
153153
"javascript-query-suggestions": {
154-
"generatorName": "typescript-node",
154+
"generatorName": "algolia-javascript",
155155
"templateDir": "#{cwd}/templates/javascript/",
156156
"config": "#{cwd}/openapitools.json",
157157
"apiPackage": "src",
@@ -176,7 +176,7 @@
176176
}
177177
},
178178
"javascript-sources": {
179-
"generatorName": "typescript-node",
179+
"generatorName": "algolia-javascript",
180180
"templateDir": "#{cwd}/templates/javascript/",
181181
"config": "#{cwd}/openapitools.json",
182182
"apiPackage": "src",
@@ -201,7 +201,7 @@
201201
}
202202
},
203203
"javascript-predict": {
204-
"generatorName": "typescript-node",
204+
"generatorName": "algolia-javascript",
205205
"templateDir": "#{cwd}/templates/javascript/",
206206
"config": "#{cwd}/openapitools.json",
207207
"apiPackage": "src",
@@ -246,7 +246,7 @@
246246
}
247247
},
248248
"php-search": {
249-
"generatorName": "php",
249+
"generatorName": "algolia-php",
250250
"templateDir": "#{cwd}/templates/php/",
251251
"config": "#{cwd}/openapitools.json",
252252
"output": "#{cwd}/clients/algoliasearch-client-php",
@@ -265,7 +265,7 @@
265265
}
266266
},
267267
"php-recommend": {
268-
"generatorName": "php",
268+
"generatorName": "algolia-php",
269269
"templateDir": "#{cwd}/templates/php/",
270270
"config": "#{cwd}/openapitools.json",
271271
"output": "#{cwd}/clients/algoliasearch-client-php",
@@ -284,7 +284,7 @@
284284
}
285285
},
286286
"php-personalization": {
287-
"generatorName": "php",
287+
"generatorName": "algolia-php",
288288
"templateDir": "#{cwd}/templates/php/",
289289
"config": "#{cwd}/openapitools.json",
290290
"output": "#{cwd}/clients/algoliasearch-client-php",
@@ -307,7 +307,7 @@
307307
}
308308
},
309309
"php-analytics": {
310-
"generatorName": "php",
310+
"generatorName": "algolia-php",
311311
"templateDir": "#{cwd}/templates/php/",
312312
"config": "#{cwd}/openapitools.json",
313313
"output": "#{cwd}/clients/algoliasearch-client-php",
@@ -331,7 +331,7 @@
331331
}
332332
},
333333
"php-insights": {
334-
"generatorName": "php",
334+
"generatorName": "algolia-php",
335335
"templateDir": "#{cwd}/templates/php/",
336336
"config": "#{cwd}/openapitools.json",
337337
"output": "#{cwd}/clients/algoliasearch-client-php",
@@ -355,7 +355,7 @@
355355
}
356356
},
357357
"php-abtesting": {
358-
"generatorName": "php",
358+
"generatorName": "algolia-php",
359359
"templateDir": "#{cwd}/templates/php/",
360360
"config": "#{cwd}/openapitools.json",
361361
"output": "#{cwd}/clients/algoliasearch-client-php",
@@ -379,7 +379,7 @@
379379
}
380380
},
381381
"php-query-suggestions": {
382-
"generatorName": "php",
382+
"generatorName": "algolia-php",
383383
"templateDir": "#{cwd}/templates/php/",
384384
"config": "#{cwd}/openapitools.json",
385385
"output": "#{cwd}/clients/algoliasearch-client-php",

scripts/release/common.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ export const RELEASED_TAG = config.releasedTag;
88
export const MAIN_BRANCH = config.mainBranch;
99
export const OWNER = config.owner;
1010
export const REPO = config.repo;
11-
export const MAIN_GENERATOR = Object.keys(clientsConfig).reduce(
12-
(mainGenerator: { [lang: string]: string }, lang: string) => {
11+
export const MAIN_PACKAGE = Object.keys(clientsConfig).reduce(
12+
(mainPackage: { [lang: string]: string }, lang: string) => {
1313
return {
14-
...mainGenerator,
15-
[lang]: clientsConfig[lang].mainGenerator,
14+
...mainPackage,
15+
[lang]: clientsConfig[lang].mainPackage,
1616
};
1717
},
1818
{}

scripts/release/create-release-issue.ts

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,7 @@ import semver from 'semver';
66
import { LANGUAGES, ROOT_ENV_PATH, run, getPackageVersion } from '../common';
77
import type { Language } from '../types';
88

9-
import {
10-
RELEASED_TAG,
11-
MAIN_BRANCH,
12-
OWNER,
13-
REPO,
14-
MAIN_GENERATOR,
15-
} from './common';
9+
import { RELEASED_TAG, MAIN_BRANCH, OWNER, REPO, MAIN_PACKAGE } from './common';
1610
import TEXT from './text';
1711
import type {
1812
Versions,
@@ -24,11 +18,11 @@ import type {
2418
dotenv.config({ path: ROOT_ENV_PATH });
2519

2620
export function readVersions(): VersionsWithoutReleaseType {
27-
return Object.keys(MAIN_GENERATOR).reduce((acc, lang) => {
21+
return Object.keys(MAIN_PACKAGE).reduce((acc, lang) => {
2822
return {
2923
...acc,
3024
[lang]: {
31-
current: getPackageVersion(MAIN_GENERATOR[lang]),
25+
current: getPackageVersion(MAIN_PACKAGE[lang]),
3226
},
3327
};
3428
}, {});

0 commit comments

Comments
 (0)