1
1
import { logging } from '@angular-devkit/core' ;
2
-
3
2
import { Schema } from '../deploy/schema' ;
4
3
const Heroku = require ( 'heroku-client' ) ;
5
- var url = require ( 'url' ) ;
4
+ import * as tar from 'tar' ;
6
5
const fetch = require ( "node-fetch" ) ;
6
+ import {
7
+ ensureDir , copy , remove , move ,
8
+ copyFileSync , readFileSync , createWriteStream
9
+ } from 'fs-extra' ;
10
+
7
11
8
12
// 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 ) {
10
17
11
18
try {
12
19
@@ -17,40 +24,83 @@ export async function run(dir: string, options: Schema, logger: logging.LoggerAp
17
24
18
25
const slugResult = await heroku . post ( `/apps/${ site . name } /slugs` , {
19
26
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` }
21
29
}
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` ) ;
24
37
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
+ ) ;
30
50
31
51
52
+ const buf = readFileSync ( `slug.tgz` ) ;
32
53
const response = await fetch ( slugResult . blob . url , {
33
- method : ` ${ slugResult . blob . method } ` , // or 'PUT'
54
+ method : 'PUT' , // or 'PUT'
34
55
// 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 ,
36
57
headers : {
37
- ' Content-Type' : ''
58
+ " Content-Type" : ""
38
59
}
39
- } ) ;
40
- console . log ( response ) ;
41
- console . log ( slugResult . id ) ;
60
+ } )
61
+
62
+ logger . info ( 'Starting deployment' ) ;
42
63
43
64
const release = await heroku . post ( `/apps/${ site . name } /releases` , {
44
65
body : {
45
66
slug : `${ slugResult . id } `
46
67
}
47
68
} ) ;
48
69
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` ) ;
51
74
}
52
75
catch ( error ) {
53
76
logger . error ( '❌ An error occurred!' ) ;
54
77
throw error ;
55
78
}
56
79
} ;
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