Skip to content

Commit 5673173

Browse files
authored
fix(script): restore previous CLI build logic (#384)
1 parent 47d6b2d commit 5673173

File tree

3 files changed

+71
-55
lines changed

3 files changed

+71
-55
lines changed

clients/algoliasearch-client-javascript/rollup.config.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,18 @@ function getUtilConfigs() {
9595
];
9696
}
9797

98-
function isClientBuilt(client) {
98+
function shouldBuildUtil(utilClient) {
99+
if (process.env.SKIP_UTILS === 'true') {
100+
return false;
101+
}
102+
99103
// Checking existence of `dist` folder doesn't really guarantee the built files are up-to-date.
100104
// However, on the CI, it's very likely.
101105
// For the local environment, we simply return `false`, which will trigger unnecessary builds.
102106
// We can come back here and improve this part (checking if `dist` folder exists and if it's up-to-date).
103107
return process.env.CI
104-
? fs.existsSync(path.resolve('packages', client, 'dist'))
105-
: false;
108+
? !fs.existsSync(path.resolve('packages', utilClient, 'dist'))
109+
: true;
106110
}
107111

108112
function getPackageConfigs() {
@@ -168,7 +172,7 @@ function getPackageConfigs() {
168172
});
169173

170174
return [
171-
...getUtilConfigs().filter((config) => !isClientBuilt(config.package)),
175+
...getUtilConfigs().filter((config) => shouldBuildUtil(config.package)),
172176
...configs,
173177
];
174178
}

scripts/buildClients.ts

Lines changed: 57 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,40 @@
1-
import {
2-
createGeneratorKey,
3-
GENERATORS,
4-
LANGUAGES,
5-
run,
6-
toAbsolutePath,
7-
} from './common';
1+
import { run } from './common';
82
import { getLanguageFolder } from './config';
93
import { createSpinner } from './oraLog';
4+
import type { Generator } from './types';
5+
6+
const multiBuildLanguage = new Set(['javascript']);
107

118
/**
12-
* Build all client for a language at the same time, for those who live in the same folder.
9+
* Build only a specific client for one language, used by javascript for example.
1310
*/
14-
async function buildPerLanguage({
15-
language,
16-
client,
17-
verbose,
18-
}: {
19-
language: string;
20-
client: string;
21-
verbose: boolean;
22-
}): Promise<void> {
23-
const spinner = createSpinner(`building '${language}'`, verbose).start();
24-
const cwd = toAbsolutePath(getLanguageFolder(language));
25-
const generator =
26-
client === 'all'
27-
? null
28-
: GENERATORS[createGeneratorKey({ language, client })];
29-
11+
async function buildPerClient(
12+
{ language, key, additionalProperties: { packageName } }: Generator,
13+
verbose: boolean
14+
): Promise<void> {
15+
const spinner = createSpinner(`building ${key}`, verbose).start();
3016
switch (language) {
3117
case 'javascript':
32-
await run(`yarn clean`, { cwd, verbose });
18+
await run(`yarn workspace ${packageName} clean`, { verbose });
3319
await run(
34-
`yarn build ${
35-
client === 'all'
36-
? ''
37-
: generator?.additionalProperties.buildFile ?? client
38-
}`,
39-
{
40-
cwd,
41-
verbose,
42-
}
20+
`SKIP_UTILS=true yarn workspace algoliasearch-client-javascript build ${packageName}`,
21+
{ verbose }
4322
);
4423
break;
24+
default:
25+
}
26+
spinner.succeed();
27+
}
28+
29+
/**
30+
* Build all client for a language at the same time, for those who live in the same folder.
31+
*/
32+
async function buildAllClients(
33+
language: string,
34+
verbose: boolean
35+
): Promise<void> {
36+
const spinner = createSpinner(`building '${language}'`, verbose).start();
37+
switch (language) {
4538
case 'java':
4639
await run(
4740
`./gradle/gradlew --no-daemon -p ${getLanguageFolder(
@@ -60,19 +53,37 @@ async function buildPerLanguage({
6053
}
6154

6255
export async function buildClients(
63-
language: string,
64-
client: string,
56+
generators: Generator[],
6557
verbose: boolean
6658
): Promise<void> {
67-
const languages = language === 'all' ? LANGUAGES : [language];
59+
const langs = [...new Set(generators.map((gen) => gen.language))];
60+
61+
if (langs.includes('javascript')) {
62+
const spinner = createSpinner(
63+
"building 'JavaScript' utils",
64+
verbose
65+
).start();
66+
67+
await run('yarn workspace algoliasearch-client-javascript clean:utils', {
68+
verbose,
69+
});
70+
await run('yarn workspace algoliasearch-client-javascript build:utils', {
71+
verbose,
72+
});
73+
74+
spinner.succeed();
75+
}
6876

69-
await Promise.all(
70-
languages.map((lang) =>
71-
buildPerLanguage({
72-
language: lang,
73-
client,
74-
verbose,
75-
})
76-
)
77-
);
77+
await Promise.all([
78+
Promise.all(
79+
generators
80+
.filter(({ language }) => multiBuildLanguage.has(language))
81+
.map((gen) => buildPerClient(gen, verbose))
82+
),
83+
Promise.all(
84+
langs
85+
.filter((lang) => !multiBuildLanguage.has(lang))
86+
.map((lang) => buildAllClients(lang, verbose))
87+
),
88+
]);
7889
}

scripts/index.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,13 +151,14 @@ buildCommand
151151
) => {
152152
language = await promptLanguage(language, interactive);
153153

154-
const shouldBuildJs = language === 'javascript' || language === 'all';
155-
const clientList = shouldBuildJs
156-
? [...CLIENTS_JS_UTILS, ...CLIENTS_JS]
157-
: CLIENTS;
154+
const clientList =
155+
language === 'javascript' || language === 'all' ? CLIENTS_JS : CLIENTS;
158156
client = await promptClient(client, interactive, clientList);
159157

160-
await buildClients(language, client, Boolean(verbose));
158+
await buildClients(
159+
generatorList({ language, client, clientList }),
160+
Boolean(verbose)
161+
);
161162
}
162163
);
163164

0 commit comments

Comments
 (0)