Skip to content

Commit 7e9197f

Browse files
Merge pull request #1 from ngx-builders/feature/create-tar-file
Feature/create tar file
2 parents 4e812ef + 2e41276 commit 7e9197f

File tree

5 files changed

+156
-178
lines changed

5 files changed

+156
-178
lines changed

src/deploy/actions.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ import { Schema } from './schema';
55

66

77
export default async function deploy(
8-
engine: { run: (dir: string, options: Schema, logger: logging.LoggerApi) => Promise<void> },
8+
engine: { run: (dir: string, options: Schema, outDir: string, logger: logging.LoggerApi) => Promise<void> },
99
context: BuilderContext,
1010
projectRoot: string,
11+
outDir: string,
1112
options: Schema
1213
) {
1314

@@ -38,6 +39,7 @@ export default async function deploy(
3839
await engine.run(
3940
projectRoot,
4041
options,
42+
outDir,
4143
context.logger as unknown as logging.LoggerApi
4244
);
4345
}

src/deploy/builder.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ export default createBuilder<any>(
5151
await deploy(
5252
engine,
5353
context,
54-
path.join(workspaceRoot, targets.build.options.outputPath),
54+
path.join(workspaceRoot),
55+
targets.build.options.outputPath,
5556
options
5657
);
5758
} catch (e) {

src/engine/engine.ts

Lines changed: 69 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
import { logging } from '@angular-devkit/core';
2-
32
import { Schema } from '../deploy/schema';
43
const Heroku = require('heroku-client');
5-
var url = require('url');
4+
import * as tar from 'tar';
65
const 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

Comments
 (0)