1
1
import { logging } from '@angular-devkit/core' ;
2
-
3
2
import { Schema } from '../deploy/schema' ;
4
3
const Heroku = require ( 'heroku-client' ) ;
5
4
import * as tar from 'tar' ;
6
5
const fetch = require ( "node-fetch" ) ;
7
- import { ensureDir , copy , remove } from 'fs-extra' ;
6
+ import {
7
+ ensureDir , copy , remove , move ,
8
+ copyFileSync , readFileSync , createWriteStream
9
+ } from 'fs-extra' ;
10
+
11
+
8
12
// TODO: add your deployment code here!
9
13
export async function run ( dir : string ,
10
14
options : Schema ,
@@ -18,57 +22,102 @@ export async function run(dir: string,
18
22
const result = await heroku . get ( '/apps' ) ;
19
23
const site = result . find ( ( app => app . name === 'ngx-deploy-demo' ) )
20
24
25
+ // async function download() {
26
+ // const response = await fetch('https://nodejs.org/dist/v10.16.3/node-v10.16.3.tar.gz')
27
+ // if (!response.ok) throw new Error(`unexpected response ${response .statusText}`)
28
+ // await streamPipeline(response.body, fs.createWriteStream('./app'))
29
+ // }
30
+ // download()
31
+
21
32
const slugResult = await heroku . post ( `/apps/${ site . name } /slugs` , {
22
33
body : {
23
34
buildpack_provided_description : "heroku/nodejs" ,
24
- process_types : { "web" : `node-v0.10.20 -linux-x64/bin/node index.js` }
35
+ process_types : { "web" : `node-v10.16.3 -linux-x64/bin/node index.js` }
25
36
}
26
- }
27
- ) ;
28
-
29
- // const upload
30
- // console.log(site);
31
- console . log ( slugResult ) ;
32
- // !fs.existsSync(`${dir}/app`) && fs.mkdirSync(`${dir}/app`);
33
-
37
+ } ) ;
38
+ logger . info ( 'Copying Build Files' ) ;
34
39
await remove ( `${ dir } /app` ) ;
40
+ await remove ( `${ dir } /tmp` ) ;
35
41
await remove ( `${ dir } /slug.tgz` ) ;
36
42
await ensureDir ( `${ dir } /app` ) ;
43
+ await ensureDir ( `${ dir } /tmp` ) ;
44
+ // fetch('https://nodejs.org/dist/v10.16.3/node-v10.16.3.tar.gz')
45
+ // .then(res => {
46
+ // const dest = fs.createWriteStream('./tmp/node-v10.16.3.tar.gz');
47
+ // res.body.pipe(dest);
48
+ // });
49
+ await download ( ) ;
37
50
await copy ( `${ outDir } ` , `${ dir } /app` ) ;
38
- // await copy(`${dir}/index.js`, `${dir}/app`);
51
+ await moveNodeJS ( 'node-v10.16.3-linux-x64' , `${ dir } /app/node-v10.16.3-linux-x64` )
52
+ copyFileSync ( 'index.js' , `${ dir } /app/index.js` ) ;
53
+
54
+ // copyfiles([`${dir}/index.js`, `${dir}/app`], () => {
55
+ // console.log('Files copied');
56
+ // });
57
+
39
58
40
59
console . log ( `${ outDir } outdir` ) ;
41
60
const tarResponse = await tar . c (
42
61
{
43
62
gzip : true ,
44
63
file : 'slug.tgz'
45
64
} ,
46
- [ 'app' ]
65
+ [ './ app' ]
47
66
) ;
48
67
49
- console . log ( `${ tarResponse } response` ) ;
50
68
69
+ const buf = readFileSync ( `slug.tgz` ) ;
51
70
const response = await fetch ( slugResult . blob . url , {
52
71
method : 'PUT' , // or 'PUT'
53
72
// body: JSON.stringify(data), // data can be `string` or {object}!
54
- body : `@ ${ dir } /slug.tgz` ,
73
+ body : buf ,
55
74
headers : {
56
- ' Content-Type' : ''
75
+ " Content-Type" : ""
57
76
}
58
- } ) ;
59
- console . log ( response ) ;
77
+ } )
78
+
79
+ logger . info ( 'Starting deployment' ) ;
60
80
61
81
const release = await heroku . post ( `/apps/${ site . name } /releases` , {
62
82
body : {
63
83
slug : `${ slugResult . id } `
64
84
}
65
85
} ) ;
66
86
67
- console . log ( release ) ;
68
-
87
+ logger . info ( 'Deployment Success!' ) ;
88
+ await remove ( `${ dir } /app` ) ;
89
+ await remove ( `${ dir } /tmp` ) ;
90
+ await remove ( `${ dir } /slug.tgz` ) ;
69
91
}
70
92
catch ( error ) {
71
93
logger . error ( '❌ An error occurred!' ) ;
72
94
throw error ;
73
95
}
74
96
} ;
97
+
98
+
99
+ async function download ( ) {
100
+ const res = await fetch ( 'https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.gz' ) ;
101
+ await new Promise ( ( resolve , reject ) => {
102
+ const fileStream = createWriteStream ( './tmp/node-v10.16.3.tar.gz' ) ;
103
+ res . body . pipe ( fileStream ) ;
104
+ res . body . on ( "error" , ( err ) => {
105
+ reject ( err ) ;
106
+ } ) ;
107
+ fileStream . on ( "finish" , function ( ) {
108
+ tar . x ( {
109
+ file : './tmp/node-v10.16.3.tar.gz'
110
+ } )
111
+ resolve ( ) ;
112
+ } ) ;
113
+ } ) ;
114
+ }
115
+
116
+ async function moveNodeJS ( src , dest ) {
117
+ try {
118
+ await move ( src , dest )
119
+ console . log ( 'success!' )
120
+ } catch ( err ) {
121
+ console . error ( err )
122
+ }
123
+ }
0 commit comments