1 | 'use strict'
|
2 |
|
3 | var Promise = require('bluebird')
|
4 | var la = require('lazy-ass')
|
5 | var check = require('check-more-types')
|
6 | var exec = require('./exec')
|
7 |
|
8 | function saveIntoFile (options, id) {
|
9 | if (check.unemptyString(options.file)) {
|
10 | var write = require('fs').writeFileSync
|
11 | var short = id.substr(0, 7)
|
12 | var currentTime = new Date()
|
13 | var data = {
|
14 | id: id,
|
15 | short: short,
|
16 | savedAt: currentTime.toISOString()
|
17 | }
|
18 | var contents = JSON.stringify(data, null, 2) + '\n'
|
19 | write(options.file, contents, 'utf8')
|
20 | console.log(
|
21 | 'saved last commit %s (short %s) in file %s',
|
22 | id,
|
23 | short,
|
24 | options.file
|
25 | )
|
26 | }
|
27 | console.log('last commit:', id)
|
28 | }
|
29 |
|
30 | var env = process.env
|
31 |
|
32 | function getHerokuCommit () {
|
33 | if (env.SOURCE_VERSION && check.unemptyString(env.SOURCE_VERSION)) {
|
34 | return env.SOURCE_VERSION
|
35 | }
|
36 | }
|
37 |
|
38 | function getCircleCiCommit () {
|
39 | if (env.CIRCLE_SHA1 && check.unemptyString(env.CIRCLE_SHA1)) {
|
40 | return env.CIRCLE_SHA1
|
41 | }
|
42 | }
|
43 |
|
44 | function getGitCommit () {
|
45 | var cmd = 'git log --format="%H" -n 1'
|
46 | return exec(cmd)
|
47 | }
|
48 |
|
49 | function findCommit () {
|
50 | var ciSha = getHerokuCommit() || getCircleCiCommit()
|
51 | if (ciSha) {
|
52 | return Promise.resolve(ciSha)
|
53 | }
|
54 | return getGitCommit()
|
55 | }
|
56 |
|
57 | function cleanOutput (str) {
|
58 | la(check.unemptyString(str), 'expected commit id string', str)
|
59 | return str.trim()
|
60 | }
|
61 |
|
62 |
|
63 |
|
64 |
|
65 | function lastCommitId (options) {
|
66 | options = options || {}
|
67 | function saveWithOptions (id) {
|
68 | saveIntoFile(options, id)
|
69 | return id
|
70 | }
|
71 | return findCommit().then(cleanOutput).then(saveWithOptions)
|
72 | }
|
73 |
|
74 | module.exports = lastCommitId
|