11import fsp from 'fs/promises' ;
2-
32import { resolve } from 'path' ;
43
54import {
65 configureGitHubAuthor ,
76 ensureGitHubToken ,
7+ exists ,
88 getOctokit ,
99 gitBranchExists ,
1010 gitCommit ,
11+ LANGUAGES ,
1112 OWNER ,
1213 run ,
1314 setVerbose ,
1415 toAbsolutePath ,
1516} from '../../common.js' ;
1617import { getNbGitDiff } from '../utils.js' ;
1718
19+ import { } from 'fs' ;
20+ import { getClientsConfigField } from '../../config.js' ;
1821import { commitStartRelease } from './text.js' ;
1922
20- const languageFiles = {
21- csharp : 'guides/csharp/src/saveObjectsMovies.cs' ,
22- go : 'guides/go/src/saveObjectsMovies.go' ,
23- java : 'guides/java/src/test/java/com/algolia/saveObjectsMovies.java' ,
24- javascript : 'guides/javascript/src/saveObjectsMovies.ts' ,
25- kotlin : 'guides/kotlin/src/main/kotlin/com/algolia/snippets/saveObjectsMovies.kt' ,
26- php : 'guides/php/src/saveObjectsMovies.php' ,
27- python : 'guides/python/saveObjectsMovies.py' ,
28- ruby : 'guides/ruby/saveObjectsMovies.rb' ,
29- scala : 'guides/scala/src/main/scala/saveObjectsMovies.scala' ,
30- swift : 'guides/swift/Sources/saveObjectsMovies.swift' ,
31- } ;
32- const generateJSON = async ( outputFile : string ) : Promise < void > => {
33- const filesPromises = Object . entries ( languageFiles ) . map ( async ( p ) => {
34- const snippet = await fsp . readFile ( toAbsolutePath ( p [ 1 ] ) , 'utf-8' ) ;
35-
36- return [
37- [ p [ 0 ] ] ,
38- snippet
23+ async function generateJSON ( outputFile : string ) : Promise < void > {
24+ const guides = { } ;
25+ for ( const language of LANGUAGES ) {
26+ if ( ! ( await exists ( toAbsolutePath ( `docs/guides/${ language } ` ) ) ) ) {
27+ continue ;
28+ }
29+
30+ const pathToGuides = toAbsolutePath (
31+ `docs/guides/${ language } /${ getClientsConfigField ( language , [ 'snippets' , 'outputFolder' ] ) } ` ,
32+ ) ;
33+ const files = await fsp . readdir ( pathToGuides ) ;
34+ for ( const file of files ) {
35+ const extension = getClientsConfigField ( language , [ 'snippets' , 'extension' ] ) ;
36+ if ( ! file . endsWith ( extension ) ) {
37+ continue ;
38+ }
39+
40+ const guideName = file . replaceAll ( extension , '' ) ;
41+ if ( ! guides [ guideName ] ) {
42+ guides [ guideName ] = { } ;
43+ }
44+
45+ guides [ guideName ] [ language ] = ( await fsp . readFile ( `${ pathToGuides } /${ file } ` , 'utf-8' ) )
3946 . replace ( 'ALGOLIA_APPLICATION_ID' , 'YourApplicationID' )
4047 . replace ( 'ALGOLIA_API_KEY' , 'YourWriteAPIKey' )
41- . replace ( '<YOUR_INDEX_NAME>' , 'movies_index' ) ,
42- ] ;
43- } ) ;
44-
45- const files = await Promise . all ( filesPromises ) ;
48+ . replace ( '<YOUR_INDEX_NAME>' , 'movies_index' ) ;
49+ }
50+ }
4651
47- await fsp . writeFile ( outputFile , JSON . stringify ( Object . fromEntries ( files ) , null , 2 ) ) ;
48- } ;
52+ await fsp . writeFile ( outputFile , JSON . stringify ( guides , null , 2 ) ) ;
53+ }
4954
5055async function pushToAlgoliaWeb ( ) : Promise < void > {
5156 const githubToken = ensureGitHubToken ( ) ;
@@ -62,23 +67,25 @@ async function pushToAlgoliaWeb(): Promise<void> {
6267 return ;
6368 }
6469
65- console . log ( `Pushing to ${ OWNER } /${ repository } ` ) ;
66-
6770 const targetBranch = 'feat/automated-update-from-api-clients-automation-repository' ;
6871 const githubURL = `https://${ githubToken } :${ githubToken } @github.com/${ OWNER } /${ repository } ` ;
6972 const tempGitDir = resolve ( process . env . RUNNER_TEMP ! || toAbsolutePath ( 'foo/local/test' ) , repository ) ;
7073 await fsp . rm ( tempGitDir , { force : true , recursive : true } ) ;
7174 await run ( `git clone --depth 1 ${ githubURL } ${ tempGitDir } ` ) ;
75+
76+ const outputFile = toAbsolutePath ( `${ tempGitDir } /_client/src/routes/launchpad/onboarding-snippets.json` ) ;
77+
78+ console . log ( `Generating JSON output file from guides at path ${ outputFile } ` ) ;
79+
80+ await generateJSON ( outputFile ) ;
81+
82+ console . log ( `Pushing to ${ OWNER } /${ repository } ` ) ;
7283 if ( await gitBranchExists ( targetBranch , tempGitDir ) ) {
7384 await run ( `git fetch origin ${ targetBranch } ` , { cwd : tempGitDir } ) ;
7485 await run ( `git push -d origin ${ targetBranch } ` , { cwd : tempGitDir } ) ;
7586 }
7687 await run ( `git checkout -B ${ targetBranch } ` , { cwd : tempGitDir } ) ;
7788
78- const pathToSnippets = toAbsolutePath ( `${ tempGitDir } /_client/src/routes/launchpad/onboarding-snippets.json` ) ;
79-
80- await generateJSON ( pathToSnippets ) ;
81-
8289 if ( ( await getNbGitDiff ( { head : null , cwd : tempGitDir } ) ) === 0 ) {
8390 console . log ( '❎ Skipping push to AlgoliaWeb because there is no change.' ) ;
8491
0 commit comments