forked from ionic-team/ionic-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrelease.ts
More file actions
120 lines (96 loc) · 4.19 KB
/
release.ts
File metadata and controls
120 lines (96 loc) · 4.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import { spawn, exec } from 'child_process';
import { writeFileSync } from 'fs';
import { dest, src, task } from 'gulp';
import * as runSequence from 'run-sequence';
import { DIST_BUILD_ROOT, SRC_ROOT, PROJECT_ROOT } from '../constants';
import { compileSass, copyFonts, createTimestamp, setSassIonicVersion, writePolyfills } from '../util';
task('nightly', (done: (err: any) => void) => {
runSequence('release.nightlyPackage', 'release.publishNightly', done);
});
task('release.prepareNightly', (done: (err: any) => void) => {
runSequence(/*'release.pullLatest', 'validate',*/ 'release.copyTools', 'release.copyNpmInfo', 'release.preparePackageJsonTemplate', 'release.nightlyPackageJson', done);
});
task('release.nightlyPackage', (done: (err: any) => void) => {
runSequence('clean', 'release.polyfill', 'compile.release', 'release.prepareNightly', 'release.compileSass', 'release.fonts', 'release.scss', done);
});
task('release.polyfill', (done: Function) => {
writePolyfills('dist/ionic-angular/polyfills').then(() => {
done();
}).catch(err => {
done(err);
});
});
task('release.publishNightly', (done: Function) => {
const npmCmd = spawn('npm', ['publish', '--tag=nightly', DIST_BUILD_ROOT]);
npmCmd.stdout.on('data', function (data) {
console.log(data.toString());
});
npmCmd.stderr.on('data', function (data) {
console.log('npm err: ' + data.toString());
});
npmCmd.on('close', function() {
done();
});
});
task('release.compileSass', () => {
return compileSass(`${DIST_BUILD_ROOT}/css`);
});
task('release.fonts', () => {
return copyFonts(`${DIST_BUILD_ROOT}/fonts`);
});
task('release.scss', () => {
return src([`${SRC_ROOT}/**/*.scss`, `!${SRC_ROOT}/components/*/test/**/*`, `!${SRC_ROOT}/util/test/*`]).pipe(dest(`${DIST_BUILD_ROOT}`));
});
task('release.pullLatest', (done: Function) => {
exec('git pull origin master', (err: Error, stdout: string, stderr: string) => {
console.log(stdout);
console.log(stderr);
if (err) {
done(err);
} else if (stderr && stderr.length > 0) {
done(new Error('There are outstanding changes. Commit changes in order to perform a release.'));
} else {
done();
}
});
});
task('release.prepareChangelog', () => {
const changelog = require('gulp-conventional-changelog');
return src(`${PROJECT_ROOT}/CHANGELOG.md`)
.pipe(changelog({
preset: 'angular'
}))
.pipe(dest(`${PROJECT_ROOT}`));
});
task('release.copyTools', () => {
return src([`${PROJECT_ROOT}/tooling/**/*`]).pipe(dest(`${DIST_BUILD_ROOT}/tooling`));
});
task('release.copyNpmInfo', () => {
return src([`${PROJECT_ROOT}/scripts/npm/.npmignore`, `${PROJECT_ROOT}/scripts/npm/README.md`]).pipe(dest(DIST_BUILD_ROOT));
});
task('release.preparePackageJsonTemplate', () => {
let templatePackageJSON = require(`${PROJECT_ROOT}/scripts/npm/package.json`);
const sourcePackageJSON = require(`${PROJECT_ROOT}/package.json`);
// copy source package.json data to template
templatePackageJSON.version = sourcePackageJSON.version;
templatePackageJSON.description = sourcePackageJSON.description;
templatePackageJSON.keywords = sourcePackageJSON.keywords;
// copy source dependencies versions to the template's peerDependencies
// only copy dependencies that show up as peerDependencies in the template
for (let dependency in sourcePackageJSON.dependencies) {
// if the dependency is in both, AND the value of the entry is empty, copy it over
if (dependency in templatePackageJSON.dependencies && templatePackageJSON.dependencies[dependency] === '') {
templatePackageJSON.dependencies[dependency] = sourcePackageJSON.dependencies[dependency];
}
}
writeFileSync(`${DIST_BUILD_ROOT}` + '/package.json', JSON.stringify(templatePackageJSON, null, 2));
});
task('release.nightlyPackageJson', () => {
const packageJson: any = require(`${DIST_BUILD_ROOT}/package.json`);
packageJson.version = packageJson.version.split('-')
.slice(0, 2)
.concat(createTimestamp())
.join('-');
writeFileSync(`${DIST_BUILD_ROOT}/package.json`, JSON.stringify(packageJson, null, 2));
setSassIonicVersion(packageJson.version);
});