Skip to content

Commit

Permalink
feat: log with winston taking log level into account
Browse files Browse the repository at this point in the history
  • Loading branch information
citizensas committed Nov 3, 2019
1 parent 3a97bfe commit 00e7eb6
Show file tree
Hide file tree
Showing 13 changed files with 413 additions and 280 deletions.
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,21 +28,21 @@
"dependencies": {
"commander": "2.20.1",
"git-url-parse": "11.1.2",
"ora": "3.4.0",
"rimraf": "2.7.1",
"simple-git": "1.126.0",
"tar": "4.4.13",
"tempy": "0.3.0"
"tempy": "0.3.0",
"winston": "3.2.1"
},
"devDependencies": {
"@types/git-url-parse": "^9.0.0",
"@types/node": "^12.7.11",
"@types/rimraf": "^2.0.2",
"@types/tar": "^4.0.3",
"husky": "^1.2.0",
"husky": "^3.0.9",
"prettier": "^1.15.2",
"pretty-quick": "^1.6.0",
"typescript": "^3.6.3"
"typescript": "^3.6.4"
},
"engines": {
"node": ">=8",
Expand Down
26 changes: 4 additions & 22 deletions src/cleanup.ts
Original file line number Diff line number Diff line change
@@ -1,40 +1,22 @@
import * as ora from 'ora'
import * as rimraf from 'rimraf'
import {getFlags} from './cliFlags'
import {logger} from './logger'

export function cleanup(pathsToRemove: string[]) {
const {verbose} = getFlags()
const spinner = ora()
verbose && spinner.start('Cleaning up')
logger.info('Cleaning up')
const promises: Array<Promise<void>> = []
const rimrafSpinner = ora()
verbose && (rimrafSpinner.indent = 2)
verbose && rimrafSpinner.start()
pathsToRemove.forEach(path => {
verbose && (rimrafSpinner.text = `Removing ${path}`)
logger.verbose(`Removing ${path}`)
promises.push(
new Promise((resolve, reject) => {
rimraf(path, err => {
if (err) {
verbose && rimrafSpinner.fail(err.toString())
reject(err)
} else {
verbose && rimrafSpinner.stop()
verbose && rimrafSpinner.clear()
resolve()
}
})
})
)
})
return Promise.all(promises).then(
() => {
verbose && spinner.succeed()
return Promise.resolve()
},
err => {
verbose && spinner.fail()
throw err
}
)
return Promise.all(promises)
}
1 change: 0 additions & 1 deletion src/cliFlags.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
export interface IFlags {
verbose: boolean
remoteName: string
protocol: string
}
Expand Down
12 changes: 5 additions & 7 deletions src/generate-preview.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import {MODULE_DIR, TMP_DIR} from './constants'

import * as path from 'path'
import * as ora from 'ora'

import {getBranchName} from './getBranchName'
import {getRemoteUrl} from './getRemoteUrl'
Expand All @@ -11,8 +10,7 @@ import {unpack} from './unpack'
import {pushToRemote} from './pushToRemote'
import {cleanup} from './cleanup'
import {IFlags, setFlags} from './cliFlags'

const spinner = ora()
import {logger} from './logger'

export function generatePreview(flags: IFlags) {
setFlags(flags)
Expand All @@ -35,18 +33,18 @@ export function generatePreview(flags: IFlags) {
})
)
})
.then(res => {
.then(res =>
cleanup(res.pathsToRemove).then(() => {
spinner.info(
logger.info(
`Now you can install generated URL in you module using Yarn or NPM. Just run the following command.`
)
console.log(`npm install ${res.remoteUrl}#${res.distBranchName}`)
console.log(' OR ')
console.log(`yarn add ${res.remoteUrl}#${res.distBranchName}`)
})
})
)
.catch(err => {
console.error(err)
logger.error(err)
process.exit(1)
})
}
13 changes: 3 additions & 10 deletions src/getBranchName.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,16 @@
import * as gitP from 'simple-git/promise'
import * as ora from 'ora'
import {MODULE_DIR} from './constants'
import {getFlags} from './cliFlags'
import {logger} from './logger'

const moduleGit = gitP(MODULE_DIR)

export function getBranchName() {
const {verbose} = getFlags()
const spinner = ora()
verbose && spinner.start('Getting branch name')
logger.verbose('Getting branch name')
return moduleGit
.branchLocal()
.then(branchSummary => branchSummary.current)
.then(branchName => {
verbose && spinner.succeed(`Branch name: ${branchName}-dist`)
logger.info(`Branch name: ${branchName}-dist`)
return branchName + '-dist'
})
.catch(err => {
verbose && spinner.fail(err)
throw err
})
}
13 changes: 4 additions & 9 deletions src/getRemoteUrl.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import * as gitP from 'simple-git/promise'
import * as GitUrlParse from 'git-url-parse'
import * as ora from 'ora'
import {MODULE_DIR} from './constants'
import {RemoteWithRefs} from 'simple-git/typings/response'
import {getFlags} from './cliFlags'
import {logger} from './logger'

export function getRemoteUrl() {
const {remoteName, protocol, verbose} = getFlags()
const spinner = ora()
const {remoteName, protocol} = getFlags()
const moduleGit = gitP(MODULE_DIR)
verbose && spinner.start('Getting remote url')
logger.verbose('Getting remote url')
return moduleGit
.getRemotes(true)
.then(
Expand All @@ -29,11 +28,7 @@ export function getRemoteUrl() {
)
.then(remote => {
const remoteUrl = GitUrlParse(remote.refs.fetch).toString(protocol)
verbose && spinner.succeed(`Remote URL for ${remoteName} is ${remoteUrl}`)
logger.verbose(`Remote URL for ${remoteName} is ${remoteUrl}`)
return remoteUrl
})
.catch(err => {
verbose && spinner.fail(err)
throw err
})
}
11 changes: 7 additions & 4 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,23 @@
#! /usr/bin/env node

import * as program from 'commander'
import {PACKAGE_JSON, REMOTE_NAME} from './constants'
import {REMOTE_NAME} from './constants'
import {generatePreview} from './generate-preview'
import {initLogger} from './logger'
const pkg = require('../package.json')

program
.version(PACKAGE_JSON.version)
.version(pkg.version)
.name('npx generate-preview')
.option('-r, --remote [name]', 'git remote name to use', REMOTE_NAME)
.option('-p, --protocol [protocol]', 'git protocol (i.e. git+ssh, https)', 'git+ssh')
.option('--verbose', 'prints higher level of logs')

program.parse(process.argv)

initLogger(!!program.verbose ? 'verbose' : 'info')

generatePreview({
remoteName: program.remote,
protocol: program.protocol,
verbose: !!program.verbose
protocol: program.protocol
})
23 changes: 8 additions & 15 deletions src/initializeGit.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import * as fs from 'fs'
import * as gitP from 'simple-git/promise'
import * as ora from 'ora'
import {TMP_PACKAGE_DIR} from './constants'
import {getFlags} from './cliFlags'
import {logger} from './logger'

function createTempDirectory(dir: string) {
return new Promise<void>((resolve, reject) => {
Expand All @@ -17,36 +17,29 @@ function createTempDirectory(dir: string) {
}

export function initializeGit(distBranchName: string, remoteUrl: string) {
const {remoteName, verbose} = getFlags()
const spinner = ora()
verbose && spinner.start(`Creating temp directory`)
const {remoteName} = getFlags()
logger.verbose(`Creating temp directory`)
return createTempDirectory(TMP_PACKAGE_DIR).then(() => {
const git = gitP(TMP_PACKAGE_DIR)
verbose && spinner.info(`Initializing Git in temp directory (${TMP_PACKAGE_DIR})`)
verbose && spinner.start('Git init')
logger.verbose(`Initializing Git in temp directory (${TMP_PACKAGE_DIR})`)
logger.verbose('Git init')
return git
.silent(true)
.init()
.then(() => verbose && spinner.start(`Checking out branch "${distBranchName}"`))
.then(() => logger.verbose(`Checking out branch "${distBranchName}"`))
.then(() => git.addRemote(remoteName, remoteUrl))
.then(() =>
git
.fetch(remoteName, distBranchName)
.then(() => {
verbose && spinner.start('Fetching existing branch')
logger.verbose('Fetching existing branch')
return git
.checkout(`${remoteName}/${distBranchName}`)
.then(() => verbose && spinner.start('Prepare for staging'))
.then(() => logger.verbose('Prepare for staging'))
.then(() => git.raw(['rm', '.', '-r']))
.then(() => verbose && spinner.succeed())
})
.catch(() => {})
)
.then(() => git.checkoutLocalBranch(distBranchName))
.then(() => verbose && spinner.succeed())
.catch(err => {
verbose && spinner.fail()
throw err
})
})
}
15 changes: 15 additions & 0 deletions src/logger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import {createLogger, format, transports, Logger} from 'winston'

type TLoglevels = 'error' | 'warn' | 'info' | 'verbose' | 'debug' | 'silly'

let logger: Logger

export function initLogger(level: TLoglevels) {
logger = createLogger({
level: level,
format: format.cli(),
transports: [new transports.Console()]
})
}

export {logger}
10 changes: 3 additions & 7 deletions src/npmPack.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
import * as child_process from 'child_process'
import * as ora from 'ora'
import {MODULE_DIR, PACKAGE_JSON} from './constants'
import {getFlags} from './cliFlags'
import {logger} from './logger'

export function npmPack() {
const {verbose} = getFlags()
const spinner = ora()
verbose && spinner.start(`Packing ${PACKAGE_JSON.name}`)
logger.verbose(`Packing ${PACKAGE_JSON.name}`)
return new Promise<string>((resolve, reject) =>
child_process.exec(`npm pack`, {cwd: MODULE_DIR}, function(err, stdout) {
if (err) {
verbose && spinner.fail(err.toString())
reject(err)
} else {
const filename = stdout.trim()
verbose && spinner.succeed(`Packed into ${filename}`)
logger.verbose(`Packed into ${filename}`)
resolve(filename)
}
})
Expand Down
18 changes: 5 additions & 13 deletions src/pushToRemote.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,17 @@
import * as gitP from 'simple-git/promise'
import * as ora from 'ora'
import {TMP_PACKAGE_DIR} from './constants'
import {getFlags} from './cliFlags'
import {logger} from './logger'

export function pushToRemote(distBranchName: string) {
const {remoteName, verbose} = getFlags()
const spinner = ora()
const {remoteName} = getFlags()
const git = gitP(TMP_PACKAGE_DIR)
verbose && spinner.start(`Adding files to stage`)
logger.verbose(`Adding files to stage`)
return git
.silent(true)
.add(['.'])
.then(() => verbose && spinner.succeed())
.then(() => verbose && spinner.start(`Committing changes`))
.then(() => logger.verbose(`Committing changes`))
.then(() => git.commit('bundle update'))
.then(() => verbose && spinner.succeed())
.then(() => verbose && spinner.start(`Pushing to ${remoteName}/${distBranchName}`))
.then(() => logger.verbose(`Pushing to ${remoteName}/${distBranchName}`))
.then(() => git.push(remoteName, distBranchName))
.then(() => verbose && spinner.succeed())
.catch((err: unknown) => {
verbose && spinner.fail()
throw err
})
}
21 changes: 6 additions & 15 deletions src/unpack.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,16 @@
import * as tar from 'tar'
import * as ora from 'ora'
import {PACKAGE_JSON, TMP_DIR, TMP_PACKAGE_DIR} from './constants'
import {getFlags} from './cliFlags'
import {logger} from './logger'

export function unpack(packedFilename: string) {
const {verbose} = getFlags()
const spinner = ora()
verbose && spinner.start(`Unpacking ${packedFilename} into ${TMP_DIR}`)
logger.verbose(`Unpacking ${packedFilename} into ${TMP_DIR}`)
return tar
.x({
file: packedFilename,
cwd: TMP_DIR
})
.then(
result => {
verbose && spinner.succeed(`Package "${PACKAGE_JSON.name}" unpacked in ${TMP_PACKAGE_DIR}`)
return result
},
err => {
verbose && spinner.fail(err)
throw err
}
)
.then(result => {
logger.verbose(`Package "${PACKAGE_JSON.name}" unpacked in ${TMP_PACKAGE_DIR}`)
return result
})
}
Loading

0 comments on commit 00e7eb6

Please sign in to comment.