11import { logging } from '@angular-devkit/core' ;
2-
32import { Schema } from '../deploy/schema' ;
43const Heroku = require ( 'heroku-client' ) ;
5- var url = require ( 'url' ) ;
4+ import * as tar from 'tar' ;
65const fetch = require ( "node-fetch" ) ;
6+ import {
7+ ensureDir , copy , remove , move ,
8+ copyFileSync , readFileSync , createWriteStream
9+ } from 'fs-extra' ;
10+
711
812// TODO: add your deployment code here!
9- export async function run ( dir : string , options : Schema , logger : logging . LoggerApi ) {
13+ export async function run ( dir : string ,
14+ options : Schema ,
15+ outDir : string ,
16+ logger : logging . LoggerApi ) {
1017
1118 try {
1219
@@ -17,40 +24,83 @@ export async function run(dir: string, options: Schema, logger: logging.LoggerAp
1724
1825 const slugResult = await heroku . post ( `/apps/${ site . name } /slugs` , {
1926 body : {
20- process_types : { "web" : "node-v0.10.20-linux-x64/bin/node index.js" }
27+ buildpack_provided_description : "heroku/nodejs" ,
28+ process_types : { "web" : `node-v10.16.3-linux-x64/bin/node index.js` }
2129 }
22- }
23- ) ;
30+ } ) ;
31+ logger . info ( 'Copying Build Files' ) ;
32+ await remove ( `${ dir } /app` ) ;
33+ await remove ( `${ dir } /tmp` ) ;
34+ await remove ( `${ dir } /slug.tgz` ) ;
35+ await ensureDir ( `${ dir } /app` ) ;
36+ await ensureDir ( `${ dir } /tmp` ) ;
2437
25- // const upload
26- // console.log(site);
27- console . log ( slugResult ) ;
28- const apiUrl = slugResult . blob . url . replace ( '%3D' , '=' ) ;
29- console . log ( apiUrl ) ;
38+ await download ( ) ;
39+ await copy ( `${ outDir } ` , `${ dir } /app` ) ;
40+ await moveNodeJS ( 'node-v10.16.3-linux-x64' , `${ dir } /app/node-v10.16.3-linux-x64` )
41+ copyFileSync ( 'index.js' , `${ dir } /app/index.js` ) ;
42+
43+ const tarResponse = await tar . c (
44+ {
45+ gzip : true ,
46+ file : 'slug.tgz'
47+ } ,
48+ [ './app' ]
49+ ) ;
3050
3151
52+ const buf = readFileSync ( `slug.tgz` ) ;
3253 const response = await fetch ( slugResult . blob . url , {
33- method : ` ${ slugResult . blob . method } ` , // or 'PUT'
54+ method : 'PUT' , // or 'PUT'
3455 // body: JSON.stringify(data), // data can be `string` or {object}!
35- body : '@E:\ngx-deploy-heroku\ngx-deploy-sample\ngx-deploy-sample-0.0.0.tgz' ,
56+ body : buf ,
3657 headers : {
37- ' Content-Type' : ''
58+ " Content-Type" : ""
3859 }
39- } ) ;
40- console . log ( response ) ;
41- console . log ( slugResult . id ) ;
60+ } )
61+
62+ logger . info ( 'Starting deployment' ) ;
4263
4364 const release = await heroku . post ( `/apps/${ site . name } /releases` , {
4465 body : {
4566 slug : `${ slugResult . id } `
4667 }
4768 } ) ;
4869
49- console . log ( release ) ;
50-
70+ logger . info ( 'Deployment Success!' ) ;
71+ await remove ( `${ dir } /app` ) ;
72+ await remove ( `${ dir } /tmp` ) ;
73+ await remove ( `${ dir } /slug.tgz` ) ;
5174 }
5275 catch ( error ) {
5376 logger . error ( '❌ An error occurred!' ) ;
5477 throw error ;
5578 }
5679} ;
80+
81+
82+ async function download ( ) {
83+ const res = await fetch ( 'https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.gz' ) ;
84+ await new Promise ( ( resolve , reject ) => {
85+ const fileStream = createWriteStream ( './tmp/node-v10.16.3.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-v10.16.3.tar.gz'
93+ } )
94+ resolve ( ) ;
95+ } ) ;
96+ } ) ;
97+ }
98+
99+ async function moveNodeJS ( src , dest ) {
100+ try {
101+ await move ( src , dest )
102+ console . log ( 'success!' )
103+ } catch ( err ) {
104+ console . error ( err )
105+ }
106+ }
0 commit comments