add auto deploy process
This commit is contained in:
parent
5796c92fc6
commit
8ad8298c6f
|
@ -0,0 +1,81 @@
|
||||||
|
const { fileForEach } = require('@jiaminghi/fs')
|
||||||
|
const Client = require('ftp')
|
||||||
|
const print = require('./plugin/print')
|
||||||
|
const { emptyDir, put } = require('./plugin/ftp')
|
||||||
|
const getNodeParams = require('./plugin/nodeParams')
|
||||||
|
|
||||||
|
let config = null
|
||||||
|
|
||||||
|
try {
|
||||||
|
config = require('./config')
|
||||||
|
} catch (err) {
|
||||||
|
void 0
|
||||||
|
}
|
||||||
|
|
||||||
|
const DIST_PATH = './dist/'
|
||||||
|
const FTP_PATH = './datav/'
|
||||||
|
|
||||||
|
const ftp = new Client()
|
||||||
|
|
||||||
|
ftp.on('ready', async foo => {
|
||||||
|
print.tip('FTP connected!')
|
||||||
|
|
||||||
|
const isEmpty = await emptyDir(ftp, FTP_PATH)
|
||||||
|
|
||||||
|
if (!isEmpty) {
|
||||||
|
print.error('Exception in emptyDir!')
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
let status = true
|
||||||
|
|
||||||
|
await fileForEach(DIST_PATH, async src => {
|
||||||
|
const destPath = FTP_PATH + src.split('/').slice(-1)[0]
|
||||||
|
|
||||||
|
print.tip('Upload: ' + destPath)
|
||||||
|
|
||||||
|
if (!await put(ftp, src, destPath)) {
|
||||||
|
status = false
|
||||||
|
|
||||||
|
print.error('Exception in upload ' + destPath)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if (status) {
|
||||||
|
print.yellow('-------------------------------------')
|
||||||
|
print.success(' Automatic Deployment Success! ')
|
||||||
|
print.yellow('-------------------------------------')
|
||||||
|
}
|
||||||
|
|
||||||
|
ftp.destroy()
|
||||||
|
})
|
||||||
|
|
||||||
|
ftp.on('greeting', foo => {
|
||||||
|
print.tip('FTP greeting')
|
||||||
|
})
|
||||||
|
ftp.on('close', foo => {
|
||||||
|
print.tip('FTP close')
|
||||||
|
})
|
||||||
|
ftp.on('end', foo => {
|
||||||
|
print.tip('FTP end')
|
||||||
|
})
|
||||||
|
ftp.on('error', foo => {
|
||||||
|
print.tip('FTP error')
|
||||||
|
})
|
||||||
|
|
||||||
|
const { host, user, pass } = config || getNodeParams()
|
||||||
|
|
||||||
|
if (!host || !user || !pass) {
|
||||||
|
print.error('Upload Dist to FTP Missing Parameters!')
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
print.tip('Start Upload!')
|
||||||
|
|
||||||
|
ftp.connect({
|
||||||
|
host,
|
||||||
|
user,
|
||||||
|
password: pass
|
||||||
|
})
|
|
@ -0,0 +1,99 @@
|
||||||
|
async function getList (ftp, src) {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
ftp.list(src, (err, list) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err)
|
||||||
|
|
||||||
|
resolve(false)
|
||||||
|
} else {
|
||||||
|
resolve(list)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function rmDir (ftp, src, recusive = true) {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
ftp.rmdir(src, recusive, err => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err)
|
||||||
|
|
||||||
|
resolve(false)
|
||||||
|
} else {
|
||||||
|
resolve(true)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function deleteFile (ftp, src) {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
ftp.delete(src, err => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err)
|
||||||
|
|
||||||
|
resolve(false)
|
||||||
|
} else {
|
||||||
|
resolve(true)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function emptyDir (ftp, src, except = []) {
|
||||||
|
const list = await getList(ftp, src)
|
||||||
|
|
||||||
|
for (let i = 0, listNum = list.length; i < listNum; i++) {
|
||||||
|
const { type, name } = list[i]
|
||||||
|
|
||||||
|
if (type === 'd' && (name === '.' || name === '..')) continue
|
||||||
|
if (except.find(n => n === name)) continue
|
||||||
|
|
||||||
|
const fullSrc = `${src}${name}`
|
||||||
|
|
||||||
|
if (type === 'd') {
|
||||||
|
if (!await rmDir(ftp, fullSrc, true)) return false
|
||||||
|
} else {
|
||||||
|
if (!await deleteFile(ftp, fullSrc)) return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
async function put (ftp, src, dest) {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
ftp.put(src, dest, err => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err)
|
||||||
|
|
||||||
|
resolve(false)
|
||||||
|
} else {
|
||||||
|
resolve(true)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function mkDir (ftp, src, recusive = true) {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
ftp.mkdir(src, recusive, err => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err)
|
||||||
|
|
||||||
|
resolve(false)
|
||||||
|
} else {
|
||||||
|
resolve(true)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
put,
|
||||||
|
rmDir,
|
||||||
|
mkDir,
|
||||||
|
getList,
|
||||||
|
emptyDir,
|
||||||
|
deleteFile
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
function getNodeParams () {
|
||||||
|
const params = {}
|
||||||
|
|
||||||
|
process.argv.slice(2).forEach(param => {
|
||||||
|
param = param.split('=')
|
||||||
|
|
||||||
|
params[param[0]] = param[1]
|
||||||
|
})
|
||||||
|
|
||||||
|
return params
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = getNodeParams
|
|
@ -0,0 +1,22 @@
|
||||||
|
const print = {
|
||||||
|
log (info) {
|
||||||
|
console.log(info)
|
||||||
|
},
|
||||||
|
warn (info) {
|
||||||
|
console.log('\033[31;33m' + info + '\033[0m')
|
||||||
|
},
|
||||||
|
error (info) {
|
||||||
|
console.log('\033[31;40m' + info + '\033[0m')
|
||||||
|
},
|
||||||
|
tip (info) {
|
||||||
|
console.log('\033[40;32m' + info + '\033[0m')
|
||||||
|
},
|
||||||
|
success (info) {
|
||||||
|
console.log('\033[42;30m' + info + '\033[0m')
|
||||||
|
},
|
||||||
|
yellow (info) {
|
||||||
|
console.log('\033[31;33m' + info + '\033[0m')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = print
|
Loading…
Reference in New Issue