1 | #!/usr/bin/env node
|
2 |
|
3 | var exec = require('child_process').exec
|
4 | var spawn = require('cross-spawn')
|
5 | var npmRunPath = require('npm-run-path-compat')
|
6 | var log = require('npmlog')
|
7 | var version = require('./package').version
|
8 | var getTarget = require('node-abi').getTarget
|
9 |
|
10 | if (!process.env.CI) process.exit()
|
11 |
|
12 | log.heading = 'prebuild-ci'
|
13 | log.level = 'verbose'
|
14 |
|
15 | var token = process.env.PREBUILD_TOKEN
|
16 | if (!token) {
|
17 | log.error('PREBUILD_TOKEN required')
|
18 | process.exit(0)
|
19 | }
|
20 |
|
21 | function getPackageVersion (rev, cb) {
|
22 | exec('git show ' + rev + ':package.json', {
|
23 | encoding: 'utf8'
|
24 | }, function (err, diff) {
|
25 | cb(err, diff && JSON.parse(diff).version)
|
26 | })
|
27 | }
|
28 |
|
29 | function prebuild (runtime, target, cb) {
|
30 | log.info('build', runtime, 'abi', target)
|
31 | var ps = spawn('prebuild', [
|
32 | '-r', runtime,
|
33 | '-t', target,
|
34 | '-u', token,
|
35 | '--verbose'
|
36 | ], {
|
37 | env: npmRunPath.env()
|
38 | })
|
39 | ps.stdout.pipe(process.stdout)
|
40 | ps.stderr.pipe(process.stderr)
|
41 | ps.on('exit', function (code) {
|
42 | if (code) return cb(Error(), code)
|
43 | cb()
|
44 | })
|
45 | }
|
46 |
|
47 | log.info('begin', 'Prebuild-CI version', version)
|
48 |
|
49 | getPackageVersion('HEAD', function (err, head) {
|
50 | if (err) throw err
|
51 |
|
52 | getPackageVersion('HEAD~1', function (err, prev) {
|
53 | if (err) throw err
|
54 | if (head === prev) {
|
55 | log.info('No version bump, exiting')
|
56 | process.exit(0)
|
57 | }
|
58 |
|
59 | prebuild('node', process.versions.modules, function (err, code) {
|
60 | if (err) process.exit(code)
|
61 |
|
62 | try {
|
63 | getTarget(process.versions.modules, 'electron')
|
64 | } catch (err) {
|
65 | log.info('No matching electron version, exiting')
|
66 | process.exit(0)
|
67 | }
|
68 |
|
69 | prebuild('electron', process.versions.modules, function (err, code) {
|
70 | if (err) process.exit(code)
|
71 | log.info('All done!')
|
72 | process.exit(code)
|
73 | })
|
74 | })
|
75 | })
|
76 | })
|