beekeeper-util
Version:
CLI utility for managing the beekeeper-service
111 lines (96 loc) • 3.93 kB
text/coffeescript
_ = require 'lodash'
path = require 'path'
fs = require 'fs-extra'
findVersions = require 'find-versions'
gitTopLevel = require 'git-toplevel'
debug = require('debug')('beekeeper-util:config')
TYPE_VERSION_FILE={
golang: 'version.go'
node: 'package.json'
generic: 'VERSION'
}
class Config
constructor: ->
get: (callback) =>
(error, { projectRoot, type }={}) =>
return callback error if error?
{ projectRoot, type }, (error, { name, version }={}) =>
return callback error if error?
owner = ('GITHUB_OWNER', 'octoblu')
config = {
projectRoot,
type,
name,
owner,
version: "v#{version}",
repo: "#{owner}/#{name}",
beekeeperUri: 'BEEKEEPER_URI'
codecovToken: 'CODECOV_TOKEN'
githubToken: 'GITHUB_TOKEN'
codefreshToken: 'CODEFRESH_TOKEN'
quayToken: 'QUAY_TOKEN'
dockerHubToken: 'DOCKER_HUB_LOGIN_TOKEN'
}
debug 'project config', { config }
callback null, config
getNameAndVersion: ({ type, projectRoot }, callback) =>
{ projectRoot, type }, (error, name) =>
return callback error if error?
{ projectRoot, type }, (error, version) =>
return callback error if error?
callback null, { name, version }
getName: ({ type, projectRoot }, callback) =>
return callback null, path.basename(projectRoot) unless type == 'node'
fs.readJSON path.join(projectRoot, 'package.json'), (error, contents) =>
return callback error if error?
callback null, _.get contents, 'name'
getVersion: ({ projectRoot, type }, callback) =>
fileName = _.get TYPE_VERSION_FILE, type
path.join(projectRoot, fileName), (error, version) =>
return callback error if error?
callback null, _.trimStart version, 'v'
getProjectRoot: (callback) =>
gitTopLevel()
.then (dir) =>
callback null, dir
.catch (error) =>
callback error
getProjectRootAndType: (callback) =>
(error, projectRoot) =>
return callback error if error?
projectRoot, (error, type) =>
return callback error if error?
callback null, { projectRoot, type }
getProjectType: (projectRoot, callback) =>
path.join(projectRoot, 'package.json'), (error, hasAccess) =>
return callback error if error?
return callback null, 'node' if hasAccess
path.join(projectRoot, 'version.go'), (error, hasAccess) =>
return callback error if error?
return callback null, 'golang' if hasAccess
path.join(projectRoot, 'main.go'), (error, hasAccess) =>
return callback error if error?
return callback null, 'golang' if hasAccess
callback null, 'generic'
_checkAccess: (filePath, callback) =>
fs.access filePath, fs.constants.R_OK, (error) =>
callback null, !error?
_findVersionInFile: (filePath, callback) =>
filePath, (error, hasAccess) =>
return callback error if error?
return callback null unless hasAccess
fs.readFile filePath, 'utf8', (error, contents) =>
return callback error if error?
try
version = JSON.parse(contents).version
catch
version = _.first findVersions contents
callback null, version
_parseName: (name) => _.last _.split(name, '/')
_getEnv: (envStr, defaultValue) =>
envStr = _.toUpper envStr
envStr = "BEEKEEPER_#{envStr}" if process.env["BEEKEEPER_#{envStr}"]?
debug { envStr, defaultValue }
return process.env[envStr] if process.env[envStr]?
return defaultValue
module.exports = Config