1 | #!/usr/bin/env node
|
2 | 'use strict';
|
3 |
|
4 | const infer = require('./');
|
5 | const spawn = require('cross-spawn-promise');
|
6 | const path = require('path');
|
7 | const logPromise = require('@quarterto/log-promise');
|
8 |
|
9 | const packagePath = path.resolve('package.json');
|
10 | const p = require(packagePath);
|
11 |
|
12 | if(process.env.npm_lifecycle_event && process.env.npm_lifecycle_event !== 'heroku-postbuild') {
|
13 | console.log('⤼ not a Heroku automatic deploy, skipping version inference');
|
14 | process.exit(0);
|
15 | } else if(!p.repository) {
|
16 | console.log('⊶ expected a repository field in your package.json');
|
17 | process.exit(1);
|
18 | } else if(typeof p.repository !== 'string' && !p.repository.url) {
|
19 | console.log('⊶ invalid repository entry in package.json, no url:', p.repository);
|
20 | process.exit(1);
|
21 | } else if(!p.repository.type === 'git') {
|
22 | console.log('⊶ non-git repositories not supported');
|
23 | process.exit(1);
|
24 | } else if(!process.env.SOURCE_VERSION) {
|
25 | console.log('⁈ supposedly this is a Heroku automatic deploy but there\'s no SOURCE_VERSION. Here\'s your env:');
|
26 | console.log(process.env);
|
27 | process.exit(1);
|
28 | } else {
|
29 | const repo = typeof p.repository === 'string' ? p.repository : p.repository.url;
|
30 | logPromise(
|
31 | version => `inferred version ${version}`,
|
32 | err => err.stack
|
33 | )(infer(repo.replace(/^git\+/i, ''), process.env.SOURCE_VERSION, p.name.replace('/', '-')).then(version => {
|
34 | return spawn('npm', ['version', '--git-tag-version=false', version]).then(() => version);
|
35 | })).catch(() => process.exit(1));
|
36 | }
|