@@ -1351,6 +1351,13 @@ const getExistingServices = ({ currentDir }) => {
13511351 const { services } = readFileContent ( { currentDir } )
13521352 return services
13531353}
1354+
1355+ const getExistingApps = ( { currentDir } ) => {
1356+ const { apps } = readFileContent ( { currentDir } ) ;
1357+
1358+ return apps
1359+ }
1360+
13541361const registerServiceWithSuiteJson = ( { root_dir, name, port } ) => {
13551362 // Read the project configuration file
13561363 const configPath = resolve ( root_dir , 'suite.json' ) ;
@@ -1365,6 +1372,20 @@ const registerServiceWithSuiteJson = ({ root_dir, name, port }) => {
13651372 writeFile ( configPath , JSON . stringify ( config , null , 2 ) , 'utf8' ) ;
13661373}
13671374
1375+ const registerAppWithSuiteJson = ( { root_dir, name, services } ) => {
1376+ // Read the project configuration file
1377+ const configPath = resolve ( root_dir , 'suite.json' ) ;
1378+ const config = JSON . parse ( readFileSync ( configPath , 'utf8' ) ) ;
1379+ const services_names = services . map ( ( s ) => s . name ) ;
1380+ if ( ! config . apps ) {
1381+ config . apps = [ ] ;
1382+ }
1383+ config . apps . push ( { name, services : services_names } ) ;
1384+
1385+ // keep the apps ordered by names
1386+ config . apps . sort ( ( a , b ) => a . name - b . name ) ;
1387+ writeFile ( configPath , JSON . stringify ( config , null , 2 ) , 'utf8' ) ;
1388+ }
13681389/**
13691390 * Releases a package or generates a release for the workspace.
13701391 * @async
@@ -1395,20 +1416,35 @@ const test = async ({ package }) => {
13951416
13961417const scaffoldApp = ( { answers } ) => {
13971418
1398- const { webserver } = readFileContent ( { currentDir : cwd ( ) } )
1399- const project_root = generatRootPath ( { currentDir : cwd ( ) } )
1400- const app_directory = join ( project_root , 'gateways/apps' , answers . app_name )
1401- const webserver_dir = join ( app_directory , webserver )
1402- const data_dir = join ( app_directory , 'data' )
1419+ const { webserver } = readFileContent ( { currentDir : cwd ( ) } ) ;
1420+ const { projectName } = readFileContent ( { currentDir : cwd ( ) } ) ;
1421+ const project_root = generatRootPath ( { currentDir : cwd ( ) } ) ;
1422+ const app_directory = join ( project_root , 'gateways/apps' , answers . app_name ) ;
1423+ const webserver_dir = join ( app_directory , webserver ) ;
1424+ const krakend_dir = join ( app_directory , 'krakend' ) ;
1425+ const data_dir = join ( app_directory , 'data' ) ;
14031426
14041427 // Remove the directory if it already exists
14051428 if ( existsSync ( app_directory ) ) {
14061429 rmSync ( app_directory , { recursive : true } ) ;
14071430 }
14081431 mkdirSync ( webserver_dir , { recursive : true } ) ;
1432+ mkdirSync ( krakend_dir , { recursive : true } ) ;
14091433 mkdirSync ( data_dir , { recursive : true } ) ;
1410- writeFileSync ( join ( app_directory , 'docker-compose.dev.yml' ) , assets . dockerComposeContent ( { services : answers . services , app_name : answers . app_name , webserver } ) ) ;
1411- writeFileSync ( join ( app_directory , 'docker-compose.yml' ) , assets . dockerComposeContent ( { services : answers . services , app_name : answers . app_name , webserver } ) ) ;
1434+ writeFileSync ( join ( app_directory , 'docker-compose.dev.yml' ) , assets . dockerComposeContent ( {
1435+ services : answers . services ,
1436+ app_name : answers . app_name ,
1437+ webserver,
1438+ krakend_port : answers . gateway_port ,
1439+ env : 'dev'
1440+ } ) ) ;
1441+ writeFileSync ( join ( app_directory , 'docker-compose.yml' ) , assets . dockerComposeContent ( {
1442+ services : answers . services ,
1443+ app_name : answers . app_name ,
1444+ webserver,
1445+ krakend_port : answers . gateway_port ,
1446+ env : 'prod'
1447+ } ) ) ;
14121448 ora ( ) . succeed ( `Generated docker-compose configs at: ${ app_directory } ` )
14131449 switch ( webserver ) {
14141450 case 'nginx' :
@@ -1418,6 +1454,17 @@ const scaffoldApp = ({ answers }) => {
14181454
14191455 ora ( ) . info ( 'Handling other webservers' ) ;
14201456 }
1457+ generateKrakendConfiguration ( {
1458+ services : answers . services ,
1459+ krakend_dir,
1460+ projectName,
1461+ gateway_port : answers . gateway_port ,
1462+ api_version : answers . api_version ,
1463+ gateway_cache_period : answers . gateway_cache_period ,
1464+ gateway_timeout : answers . gateway_timeout
1465+ } ) ;
1466+ registerAppWithSuiteJson ( { root_dir : project_root , name : answers . app_name , services : answers . services } )
1467+
14211468}
14221469const readFileContent = ( { currentDir } ) => {
14231470 const root_dir = generatRootPath ( { currentDir, height : 5 } )
@@ -1433,6 +1480,27 @@ const generateNginxConfiguration = ({ services, webserver_dir }) => {
14331480 writeFile ( join ( webserver_dir , 'Dockerfile.dev' ) , assets . nginxDockerfileContent ( ) ) ;
14341481 ora ( ) . succeed ( `Generated webserver configs at: ${ webserver_dir } ` )
14351482}
1483+ const generateKrakendConfiguration = ( {
1484+ services,
1485+ krakend_dir,
1486+ projectName,
1487+ gateway_port,
1488+ api_version,
1489+ gateway_cache_period,
1490+ gateway_timeout
1491+ } ) => {
1492+ writeFile ( join ( krakend_dir ,
1493+ 'krakend.json' ) ,
1494+ assets . krakendConfigContent ( {
1495+ services,
1496+ projectName,
1497+ gateway_port,
1498+ api_version,
1499+ gateway_cache_period,
1500+ gateway_timeout
1501+ } ) ) ;
1502+ ora ( ) . succeed ( `Generated krakend gateway configs at: ${ krakend_dir } ` )
1503+ }
14361504const installDependencies = async ( { project_base, workspace, spinner, deps, flags } ) => {
14371505
14381506
@@ -1549,6 +1617,66 @@ const getDependencies = ({ type, workspace }) => {
15491617 break
15501618 }
15511619}
1620+
1621+
1622+ const scaffoldGateways = async ( { answers } ) => {
1623+ console . log ( { answers} )
1624+ const { webserver } = readFileContent ( { currentDir : cwd ( ) } ) ;
1625+ const { projectName } = readFileContent ( { currentDir : cwd ( ) } ) ;
1626+ const { apps } = answers ;
1627+ const project_root = generatRootPath ( { currentDir : cwd ( ) } ) ;
1628+
1629+ await Promise . all ( apps . map ( async ( app ) => {
1630+ return scaffoldGateway ( { project_root, app, webserver, projectName } )
1631+ } ) )
1632+ }
1633+
1634+ const scaffoldGateway = ( { project_root, app, webserver, projectName } ) => {
1635+ const app_directory = join ( project_root , 'gateways/apps' , app . name ) ;
1636+ const webserver_dir = join ( app_directory , webserver ) ;
1637+ const krakend_dir = join ( app_directory , 'krakend' ) ;
1638+ const services = app . services ;
1639+
1640+ // Remove the directory if it already exists
1641+ if ( existsSync ( krakend_dir ) ) {
1642+ rmSync ( krakend_dir , { recursive : true } ) ;
1643+ }
1644+ mkdirSync ( webserver_dir , { recursive : true } ) ;
1645+ mkdirSync ( krakend_dir , { recursive : true } ) ;
1646+ writeFileSync ( join ( app_directory , 'docker-compose.dev.yml' ) , assets . dockerComposeContent ( {
1647+ services,
1648+ app_name : app . name ,
1649+ webserver,
1650+ krakend_port : answers . gateway_port ,
1651+ env : 'dev'
1652+ } ) ) ;
1653+ writeFileSync ( join ( app_directory , 'docker-compose.yml' ) , assets . dockerComposeContent ( {
1654+ services,
1655+ app_name : app . name ,
1656+ webserver,
1657+ krakend_port : answers . gateway_port ,
1658+ env : 'prod'
1659+ } ) ) ;
1660+ ora ( ) . succeed ( `Generated docker-compose configs at: ${ app_directory } ` )
1661+ switch ( webserver ) {
1662+ case 'nginx' :
1663+ generateNginxConfiguration ( { services, webserver_dir } ) ;
1664+ break
1665+ default :
1666+ ora ( ) . info ( 'Handling other webservers' ) ;
1667+ }
1668+ generateKrakendConfiguration ( {
1669+ services,
1670+ krakend_dir,
1671+ projectName,
1672+ gateway_port : answers . gateway_port ,
1673+ api_version : answers . api_version ,
1674+ gateway_cache_period : answers . gateway_cache_period ,
1675+ gateway_timeout : answers . gateway_timeout
1676+ } ) ;
1677+
1678+ }
1679+
15521680module . exports = {
15531681 generateDirectoryPath,
15541682 changeDirectory,
@@ -1578,5 +1706,7 @@ module.exports = {
15781706 getNextAvailablePort,
15791707 getExistingServices,
15801708 test,
1581- scaffoldApp
1709+ scaffoldApp,
1710+ scaffoldGateways,
1711+ getExistingApps
15821712}
0 commit comments