Skip to content

Commit fdd510c

Browse files
authored
chore(scripts): allow variadic compilation for javascript (#3933)
1 parent 06c4854 commit fdd510c

File tree

6 files changed

+79
-40
lines changed

6 files changed

+79
-40
lines changed

.github/workflows/check.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ jobs:
222222
run: ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).buildCommand }}
223223

224224
- name: Build the playground
225-
run: yarn cli build playground javascript
225+
run: yarn cli build playground javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }}
226226

227227
- name: Run common and requester tests
228228
run: cd clients/algoliasearch-client-javascript && yarn test ${{ !contains(fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun, 'algoliasearch') && '--ignore algoliasearch' || '' }}
@@ -279,13 +279,13 @@ jobs:
279279
run: yarn cli snippets javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }}
280280

281281
- name: Build the snippets to check validity
282-
run: yarn cli build snippets javascript
282+
run: yarn cli build snippets javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }}
283283

284284
- name: Generate code guides
285285
run: yarn cli guides javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }}
286286

287287
- name: Build the guides to check validity
288-
run: yarn cli build guides javascript
288+
run: yarn cli build guides javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }}
289289

290290
- name: Zip artifact before storing
291291
run: zip -r -y clients-javascript.zip clients/algoliasearch-client-javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).testsToStore }} ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).guidesToStore }} -x "**/node_modules**" "**/.yarn/cache/**" "**/.yarn/install-state.gz" "**/build/**" "**/dist/**" "**/.gradle/**" "**/bin/**" "**/.nx/**"
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { ApiError } from '@algolia/client-common';
2+
import { monitoringClient } from '@algolia/monitoring';
3+
4+
const appId = process.env.ALGOLIA_APPLICATION_ID || '**** APP_ID *****';
5+
const apiKey = process.env.ALGOLIA_ADMIN_KEY || '**** MONITORING_KEY *****';
6+
7+
// Init client with appId and apiKey
8+
const client = monitoringClient(appId, apiKey);
9+
10+
async function testMonitoring() {
11+
try {
12+
const res = await client.getStatus();
13+
14+
console.log(`[OK]`, res);
15+
} catch (e) {
16+
if (e instanceof ApiError) {
17+
return console.log(`[${e.status}] ${e.message}`, e.stackTrace, e);
18+
}
19+
20+
console.log('[ERROR]', e);
21+
}
22+
}
23+
24+
testMonitoring();

playground/javascript/node/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
"private": true,
55
"type": "module",
66
"scripts": {
7-
"start": "tsc && node --env-file=../../.env dist/$0.js",
8-
"build": "tsc"
7+
"start": "tsc && node --env-file=../../.env dist/$0.js"
98
},
109
"dependencies": {
1110
"@algolia/client-abtesting": "link:../../../clients/algoliasearch-client-javascript/packages/client-abtesting",
@@ -16,6 +15,7 @@
1615
"@algolia/client-query-suggestions": "link:../../../clients/algoliasearch-client-javascript/packages/client-query-suggestions",
1716
"@algolia/client-search": "link:../../../clients/algoliasearch-client-javascript/packages/client-search",
1817
"@algolia/ingestion": "link:../../../clients/algoliasearch-client-javascript/packages/ingestion",
18+
"@algolia/monitoring": "link:../../../clients/algoliasearch-client-javascript/packages/monitoring",
1919
"@algolia/recommend": "link:../../../clients/algoliasearch-client-javascript/packages/recommend",
2020
"@algolia/requester-node-http": "link:../../../clients/algoliasearch-client-javascript/packages/requester-node-http",
2121
"algoliasearch": "link:../../../clients/algoliasearch-client-javascript/packages/algoliasearch"

scripts/buildLanguages.ts

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { existsSync } from 'node:fs';
22

3-
import { run, toAbsolutePath } from './common.js';
3+
import { createClientName, run, toAbsolutePath } from './common.js';
44
import { getLanguageFolder } from './config.js';
55
import { createSpinner } from './spinners.js';
66
import type { Generator, Language } from './types.js';
@@ -26,6 +26,10 @@ function getFolder(buildType: BuildType, language: Language): string {
2626
* Build code for a specific language.
2727
*/
2828
async function buildLanguage(language: Language, gens: Generator[], buildType: BuildType): Promise<void> {
29+
if (!gens || gens.length === 0) {
30+
return;
31+
}
32+
2933
const cwd = getFolder(buildType, language);
3034
const spinner = createSpinner(`building ${buildType} for '${language}'`);
3135
switch (language) {
@@ -48,12 +52,20 @@ async function buildLanguage(language: Language, gens: Generator[], buildType: B
4852
packageName === 'algoliasearch' ? packageName : `@algolia/${packageName}`,
4953
);
5054
await run(`yarn build:many '{${packageNames.join(',')},}'`, { cwd, language });
51-
} else if (buildType === 'playground') {
52-
await run('yarn build', { cwd: `${cwd}/node`, language });
53-
} else {
54-
await run('yarn tsc --noEmit', { cwd, language });
55+
break;
56+
}
57+
58+
let fileNames = '';
59+
60+
if (buildType !== 'guides') {
61+
fileNames = gens.reduce((prev, curr) => `${prev} ${createClientName(curr.client, curr.language)}.ts`, '');
5562
}
5663

64+
await run(`yarn tsc ${fileNames} --noEmit`, {
65+
cwd: buildType === 'playground' ? `${cwd}/node` : `${cwd}/src`,
66+
language,
67+
});
68+
5769
break;
5870
case 'java':
5971
case 'kotlin':
@@ -89,10 +101,15 @@ async function buildLanguage(language: Language, gens: Generator[], buildType: B
89101
spinner.succeed();
90102
}
91103

92-
export async function buildClients(generators: Generator[]): Promise<void> {
104+
export async function buildLanguages(generators: Generator[], scope: BuildType): Promise<void> {
93105
const langs = [...new Set(generators.map((gen) => gen.language))];
94106
const generatorsMap = generators.reduce(
95107
(map, gen) => {
108+
// TODO: remove this when guides are mandatory and implemented in every clients
109+
if (scope === 'guides' && !existsSync(toAbsolutePath(`docs/guides/${gen.language}`))) {
110+
return map;
111+
}
112+
96113
if (!(gen.language in map)) {
97114
map[gen.language] = [];
98115
}
@@ -104,25 +121,5 @@ export async function buildClients(generators: Generator[]): Promise<void> {
104121
{} as Record<Language, Generator[]>,
105122
);
106123

107-
await Promise.all(langs.map((lang) => buildLanguage(lang, generatorsMap[lang], 'client')));
108-
}
109-
110-
export async function buildPlaygrounds(languages: Language[]): Promise<void> {
111-
await Promise.all(languages.map((lang) => buildLanguage(lang, [], 'playground')));
112-
}
113-
114-
export async function buildSnippets(languages: Language[]): Promise<void> {
115-
await Promise.all(languages.map((lang) => buildLanguage(lang, [], 'snippets')));
116-
}
117-
118-
export async function buildGuides(languages: Language[]): Promise<void> {
119-
await Promise.all(
120-
languages.map((lang) => {
121-
if (!existsSync(toAbsolutePath(`docs/guides/${lang}`))) {
122-
return Promise.resolve();
123-
}
124-
125-
return buildLanguage(lang, [], 'guides');
126-
}),
127-
);
124+
await Promise.all(langs.map((lang) => buildLanguage(lang, generatorsMap[lang], scope)));
128125
}

scripts/cli/index.ts

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

4-
import { buildClients, buildGuides, buildPlaygrounds, buildSnippets } from '../buildLanguages.js';
4+
import { buildLanguages } from '../buildLanguages.js';
55
import { CI, CLIENTS, LANGUAGES, run, setVerbose, toAbsolutePath } from '../common.js';
66
import { getLanguageFolder } from '../config.js';
77
import { ctsGenerateMany } from '../cts/generate.js';
@@ -82,40 +82,58 @@ buildCommand
8282

8383
setVerbose(Boolean(verbose));
8484

85-
await buildClients(generatorList({ language, client, clientList }));
85+
await buildLanguages(generatorList({ language, client, clientList }), 'client');
8686
});
8787

8888
buildCommand
8989
.command('playground')
9090
.description('Build a specified playground')
9191
.addArgument(args.language)
92+
.addArgument(args.clients)
9293
.option(flags.verbose.flag, flags.verbose.description)
93-
.action(async (langArg: LangArg, { verbose }) => {
94+
.action(async (langArg: LangArg, clientArg: string[], { verbose }) => {
95+
const { language, client, clientList } = transformSelection({
96+
langArg,
97+
clientArg,
98+
});
99+
94100
setVerbose(Boolean(verbose));
95101

96-
await buildPlaygrounds(langArg === ALL || langArg === undefined ? LANGUAGES : [langArg]);
102+
await buildLanguages(generatorList({ language, client, clientList }), 'playground');
97103
});
98104

99105
buildCommand
100106
.command('snippets')
101107
.description('Build a specified snippets')
102108
.addArgument(args.language)
109+
.addArgument(args.clients)
103110
.option(flags.verbose.flag, flags.verbose.description)
104-
.action(async (langArg: LangArg, { verbose }) => {
111+
.action(async (langArg: LangArg, clientArg: string[], { verbose }) => {
112+
const { language, client, clientList } = transformSelection({
113+
langArg,
114+
clientArg,
115+
});
116+
105117
setVerbose(Boolean(verbose));
106118

107-
await buildSnippets(langArg === ALL || langArg === undefined ? LANGUAGES : [langArg]);
119+
await buildLanguages(generatorList({ language, client, clientList }), 'snippets');
108120
});
109121

110122
buildCommand
111123
.command('guides')
112124
.description('Build a specified guides')
113125
.addArgument(args.language)
126+
.addArgument(args.clients)
114127
.option(flags.verbose.flag, flags.verbose.description)
115-
.action(async (langArg: LangArg, { verbose }) => {
128+
.action(async (langArg: LangArg, clientArg: string[], { verbose }) => {
129+
const { language, client, clientList } = transformSelection({
130+
langArg,
131+
clientArg,
132+
});
133+
116134
setVerbose(Boolean(verbose));
117135

118-
await buildGuides(langArg === ALL || langArg === undefined ? LANGUAGES : [langArg]);
136+
await buildLanguages(generatorList({ language, client, clientList }), 'guides');
119137
});
120138

121139
buildCommand

0 commit comments

Comments
 (0)