add auto deploy process
This commit is contained in:
		
							
								
								
									
										81
									
								
								deploy/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								deploy/index.js
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
| }) | ||||
							
								
								
									
										99
									
								
								deploy/plugin/ftp.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								deploy/plugin/ftp.js
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
| } | ||||
							
								
								
									
										13
									
								
								deploy/plugin/nodeParams.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								deploy/plugin/nodeParams.js
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
							
								
								
									
										22
									
								
								deploy/plugin/print.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								deploy/plugin/print.js
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
		Reference in New Issue
	
	Block a user
	 jiaming743
					jiaming743