1+ import { BuilderOutput } from '@angular-devkit/architect' ;
12import { logging } from '@angular-devkit/core' ;
3+ import {
4+ copy ,
5+ copyFileSync , ensureDir , move ,
6+ readFileSync , remove
7+ } from 'fs-extra' ;
8+ import * as tar from 'tar' ;
29import { Schema } from '../deploy/schema' ;
310const Heroku = require ( 'heroku-client' ) ;
4- import * as tar from 'tar' ;
511const fetch = require ( "node-fetch" ) ;
6- import {
7- ensureDir , copy , remove , move ,
8- copyFileSync , readFileSync , createWriteStream
9- } from 'fs-extra' ;
1012
13+ const path = require ( "path" ) ;
1114
1215// TODO: add your deployment code here!
1316export async function run ( dir : string ,
1417 options : Schema ,
1518 outDir : string ,
16- logger : logging . LoggerApi ) {
19+ logger : logging . LoggerApi ) : Promise < BuilderOutput > {
1720
1821 try {
19-
20- const heroku = new Heroku ( { token : '' } ) ;
21-
22+ const heroku = new Heroku ( { token : options . herokuApiToken } ) ;
2223 const result = await heroku . get ( '/apps' ) ;
23- const site = result . find ( ( app => app . name === 'ngx-deploy-demo' ) )
24+ let site : any = null ;
25+ const nodeVersion : string = 'node-v14.0.0-linux-x64' ;
26+ if ( result && result . length > 0 ) {
27+ site = result . find ( ( app => app . name === options . appName ) ) ;
28+ }
29+
30+ if ( ! site ) {
31+ logger . error ( `🚨 ${ options . appName } application not found in Heroku!` ) ;
32+ return { success : false } ;
33+ }
2434
2535 const slugResult = await heroku . post ( `/apps/${ site . name } /slugs` , {
2636 body : {
2737 buildpack_provided_description : "heroku/nodejs" ,
28- process_types : { "web" : `node-v12.12.0-linux-x64 /bin/node index .js` }
38+ process_types : { "web" : `${ nodeVersion } /bin/node server .js` }
2939 }
3040 } ) ;
41+
3142 logger . info ( 'Copying Build Files' ) ;
3243 await remove ( `${ dir } /app` ) ;
3344 await remove ( `${ dir } /tmp` ) ;
3445 await remove ( `${ dir } /slug.tgz` ) ;
3546 await ensureDir ( `${ dir } /app` ) ;
3647 await ensureDir ( `${ dir } /tmp` ) ;
37-
38- await download ( ) ;
48+
3949 await copy ( `${ outDir } ` , `${ dir } /app` ) ;
40- await moveNodeJS ( 'node-v12.12.0-linux-x64' , `${ dir } /app/node-v12.12.0-linux-x64` )
41- copyFileSync ( 'index.js' , `${ dir } /app/index.js` ) ;
50+ await tar . x ( {
51+ file : path . join ( __dirname , "../" , `${ nodeVersion } .tar` )
52+ } )
53+ await moveNodeJS ( nodeVersion , `${ dir } /app/${ nodeVersion } ` )
54+ copyFileSync ( path . join ( __dirname , "../" , 'server.js' ) , `${ dir } /app/server.js` ) ;
55+ copyFileSync ( path . join ( __dirname , "../" , 'Procfile' ) , `${ dir } /app/Procfile` ) ;
4256
4357 const tarResponse = await tar . c (
4458 {
@@ -68,6 +82,7 @@ export async function run(dir: string,
6882 } ) ;
6983
7084 logger . info ( 'Deployment Success!' ) ;
85+ return { success : true } ;
7186 // await remove(`${dir}/app`);
7287 // await remove(`${dir}/tmp`);
7388 // await remove(`${dir}/slug.tgz`);
@@ -79,23 +94,6 @@ export async function run(dir: string,
7994} ;
8095
8196
82- async function download ( ) {
83- const res = await fetch ( 'http://nodejs.org/dist/latest-v12.x/node-v12.12.0-linux-x64.tar.gz' ) ;
84- await new Promise ( ( resolve , reject ) => {
85- const fileStream = createWriteStream ( './tmp/node-v12.12.0-linux-x64.tar.gz' ) ;
86- res . body . pipe ( fileStream ) ;
87- res . body . on ( "error" , ( err ) => {
88- reject ( err ) ;
89- } ) ;
90- fileStream . on ( "finish" , function ( ) {
91- tar . x ( {
92- file : './tmp/node-v12.12.0-linux-x64.tar.gz'
93- } )
94- resolve ( ) ;
95- } ) ;
96- } ) ;
97- }
98-
9997async function moveNodeJS ( src , dest ) {
10098 try {
10199 await move ( src , dest )
0 commit comments