Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ jobs:
run: ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).buildCommand }}

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

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

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

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

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

- name: Zip artifact before storing
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/**"
Expand Down
24 changes: 24 additions & 0 deletions playground/javascript/node/monitoring.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { ApiError } from '@algolia/client-common';
import { monitoringClient } from '@algolia/monitoring';

const appId = process.env.ALGOLIA_APPLICATION_ID || '**** APP_ID *****';
const apiKey = process.env.ALGOLIA_ADMIN_KEY || '**** MONITORING_KEY *****';

// Init client with appId and apiKey
const client = monitoringClient(appId, apiKey);

async function testMonitoring() {
try {
const res = await client.getStatus();

console.log(`[OK]`, res);
} catch (e) {
if (e instanceof ApiError) {
return console.log(`[${e.status}] ${e.message}`, e.stackTrace, e);
}

console.log('[ERROR]', e);
}
}

testMonitoring();
4 changes: 2 additions & 2 deletions playground/javascript/node/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
"private": true,
"type": "module",
"scripts": {
"start": "tsc && node --env-file=../../.env dist/$0.js",
"build": "tsc"
"start": "tsc && node --env-file=../../.env dist/$0.js"
},
"dependencies": {
"@algolia/client-abtesting": "link:../../../clients/algoliasearch-client-javascript/packages/client-abtesting",
Expand All @@ -16,6 +15,7 @@
"@algolia/client-query-suggestions": "link:../../../clients/algoliasearch-client-javascript/packages/client-query-suggestions",
"@algolia/client-search": "link:../../../clients/algoliasearch-client-javascript/packages/client-search",
"@algolia/ingestion": "link:../../../clients/algoliasearch-client-javascript/packages/ingestion",
"@algolia/monitoring": "link:../../../clients/algoliasearch-client-javascript/packages/monitoring",
"@algolia/recommend": "link:../../../clients/algoliasearch-client-javascript/packages/recommend",
"@algolia/requester-node-http": "link:../../../clients/algoliasearch-client-javascript/packages/requester-node-http",
"algoliasearch": "link:../../../clients/algoliasearch-client-javascript/packages/algoliasearch"
Expand Down
51 changes: 24 additions & 27 deletions scripts/buildLanguages.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { existsSync } from 'node:fs';

import { run, toAbsolutePath } from './common.js';
import { createClientName, run, toAbsolutePath } from './common.js';
import { getLanguageFolder } from './config.js';
import { createSpinner } from './spinners.js';
import type { Generator, Language } from './types.js';
Expand All @@ -26,6 +26,10 @@ function getFolder(buildType: BuildType, language: Language): string {
* Build code for a specific language.
*/
async function buildLanguage(language: Language, gens: Generator[], buildType: BuildType): Promise<void> {
if (!gens || gens.length === 0) {
return;
}

const cwd = getFolder(buildType, language);
const spinner = createSpinner(`building ${buildType} for '${language}'`);
switch (language) {
Expand All @@ -48,12 +52,20 @@ async function buildLanguage(language: Language, gens: Generator[], buildType: B
packageName === 'algoliasearch' ? packageName : `@algolia/${packageName}`,
);
await run(`yarn build:many '{${packageNames.join(',')},}'`, { cwd, language });
} else if (buildType === 'playground') {
await run('yarn build', { cwd: `${cwd}/node`, language });
} else {
await run('yarn tsc --noEmit', { cwd, language });
break;
}

let fileNames = '';

if (buildType !== 'guides') {
fileNames = gens.reduce((prev, curr) => `${prev} ${createClientName(curr.client, curr.language)}.ts`, '');
}

await run(`yarn tsc ${fileNames} --noEmit`, {
cwd: buildType === 'playground' ? `${cwd}/node` : `${cwd}/src`,
language,
});

break;
case 'java':
case 'kotlin':
Expand Down Expand Up @@ -89,10 +101,15 @@ async function buildLanguage(language: Language, gens: Generator[], buildType: B
spinner.succeed();
}

export async function buildClients(generators: Generator[]): Promise<void> {
export async function buildLanguages(generators: Generator[], scope: BuildType): Promise<void> {
const langs = [...new Set(generators.map((gen) => gen.language))];
const generatorsMap = generators.reduce(
(map, gen) => {
// TODO: remove this when guides are mandatory and implemented in every clients
if (scope === 'guides' && !existsSync(toAbsolutePath(`docs/guides/${gen.language}`))) {
return map;
}

if (!(gen.language in map)) {
map[gen.language] = [];
}
Expand All @@ -104,25 +121,5 @@ export async function buildClients(generators: Generator[]): Promise<void> {
{} as Record<Language, Generator[]>,
);

await Promise.all(langs.map((lang) => buildLanguage(lang, generatorsMap[lang], 'client')));
}

export async function buildPlaygrounds(languages: Language[]): Promise<void> {
await Promise.all(languages.map((lang) => buildLanguage(lang, [], 'playground')));
}

export async function buildSnippets(languages: Language[]): Promise<void> {
await Promise.all(languages.map((lang) => buildLanguage(lang, [], 'snippets')));
}

export async function buildGuides(languages: Language[]): Promise<void> {
await Promise.all(
languages.map((lang) => {
if (!existsSync(toAbsolutePath(`docs/guides/${lang}`))) {
return Promise.resolve();
}

return buildLanguage(lang, [], 'guides');
}),
);
await Promise.all(langs.map((lang) => buildLanguage(lang, generatorsMap[lang], scope)));
}
34 changes: 26 additions & 8 deletions scripts/cli/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Argument, program } from 'commander';
import semver from 'semver';

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

setVerbose(Boolean(verbose));

await buildClients(generatorList({ language, client, clientList }));
await buildLanguages(generatorList({ language, client, clientList }), 'client');
});

buildCommand
.command('playground')
.description('Build a specified playground')
.addArgument(args.language)
.addArgument(args.clients)
.option(flags.verbose.flag, flags.verbose.description)
.action(async (langArg: LangArg, { verbose }) => {
.action(async (langArg: LangArg, clientArg: string[], { verbose }) => {
const { language, client, clientList } = transformSelection({
langArg,
clientArg,
});

setVerbose(Boolean(verbose));

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

buildCommand
.command('snippets')
.description('Build a specified snippets')
.addArgument(args.language)
.addArgument(args.clients)
.option(flags.verbose.flag, flags.verbose.description)
.action(async (langArg: LangArg, { verbose }) => {
.action(async (langArg: LangArg, clientArg: string[], { verbose }) => {
const { language, client, clientList } = transformSelection({
langArg,
clientArg,
});

setVerbose(Boolean(verbose));

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

buildCommand
.command('guides')
.description('Build a specified guides')
.addArgument(args.language)
.addArgument(args.clients)
.option(flags.verbose.flag, flags.verbose.description)
.action(async (langArg: LangArg, { verbose }) => {
.action(async (langArg: LangArg, clientArg: string[], { verbose }) => {
const { language, client, clientList } = transformSelection({
langArg,
clientArg,
});

setVerbose(Boolean(verbose));

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

buildCommand
Expand Down
Loading