parent
1416f83246
commit
6a8bde1c1f
@ -1,55 +1,56 @@ |
||||
"use strict"; |
||||
|
||||
//const https = require('https');
|
||||
const realFs = require('fs'); |
||||
const fs = require('graceful-fs'); |
||||
const realFs = require("fs"); |
||||
const fs = require("graceful-fs"); |
||||
|
||||
fs.gracefulify(realFs); |
||||
|
||||
const express = require('express'); |
||||
const routes = require('./routes'); |
||||
const http = require('http'); |
||||
const path = require('path'); |
||||
const serveFavicon = require('serve-favicon'); |
||||
const morgan = require('morgan'); |
||||
const bodyParser = require('body-parser'); |
||||
const methodOverride = require('method-override'); |
||||
const serveStatic = require('serve-static'); |
||||
const errorhandler = require('errorhandler'); |
||||
const express = require("express"); |
||||
const routes = require("./routes"); |
||||
const http = require("http"); |
||||
const path = require("path"); |
||||
const serveFavicon = require("serve-favicon"); |
||||
const morgan = require("morgan"); |
||||
const bodyParser = require("body-parser"); |
||||
const methodOverride = require("method-override"); |
||||
const serveStatic = require("serve-static"); |
||||
const errorhandler = require("errorhandler"); |
||||
|
||||
const settings = require("./settings"); |
||||
|
||||
const app = express(); |
||||
|
||||
// all environments
|
||||
app.set('port', process.env.PORT || 3000); |
||||
app.set('views', path.join(__dirname, 'views')); |
||||
app.set('view engine', 'jade'); |
||||
app.set('gitpath', 'M:/g'); |
||||
app.set('tmpcodepath', 'M:/c'); |
||||
app.set('releasepath', 'M:/r'); |
||||
app.use(serveFavicon(path.join(__dirname, 'public/images/favicon.png'))); |
||||
app.use(morgan('dev')); |
||||
app.use(bodyParser.json({ limit: '10mb' })); |
||||
app.use(bodyParser.urlencoded({ extended: false })); |
||||
// All environments
|
||||
app.set("port", settings.port); |
||||
app.set("views", path.join(__dirname, "views")); |
||||
app.set("view engine", "jade"); |
||||
app.set("gitpath", settings.gitpath); |
||||
app.set("tmpcodepath", settings.tmpcodepath); |
||||
app.set("releasepath", settings.releasepath); |
||||
app.use(serveFavicon(path.join(__dirname, "public/images/favicon.png"))); |
||||
app.use(morgan("dev")); |
||||
app.use(bodyParser.json({ "limit": "10mb" })); |
||||
app.use(bodyParser.urlencoded({ "extended": false })); |
||||
app.use(methodOverride()); |
||||
app.use(serveStatic(path.join(__dirname, 'public'))); |
||||
app.use(serveStatic(path.join(__dirname, "public"))); |
||||
|
||||
// development only
|
||||
if ('development' === app.get('env')) { |
||||
if (app.get("env") === "development") { |
||||
app.use(errorhandler()); |
||||
} |
||||
|
||||
app.route('/').get(routes.index); |
||||
app.route('/github/postreceive') |
||||
app.route("/").get(routes.index); |
||||
app.route("/github/postreceive") |
||||
.post(routes.postreceive) |
||||
.get((req, res) => res.send("Only automated POST requests are allowed for postreceive route")); |
||||
.get((req, res) => res.send("Only automated POST requests are allowed for postreceive route")); |
||||
|
||||
app.route('/manual') |
||||
app.route("/manual") |
||||
.get(routes.manual.get) |
||||
.post(routes.manual.post); |
||||
|
||||
app.route('/status/:owner/:reponame/:branch/:rev?').get(routes.status.page); |
||||
app.route('/pos-github.payonline.ru/*').get(routes.status.pageFromGithub); |
||||
app.route('/status.svg').get(routes.status.image); |
||||
app.route('/release/:owner/:reponame/:branch/:rev').get(routes.release); |
||||
app.route('/artifact/:owner/:reponame/:branch/:rev/*').get(routes.artifact); |
||||
app.route("/status/:owner/:reponame/:branch/:rev?").get(routes.status.page); |
||||
app.route("/pos-github.payonline.ru/*").get(routes.status.pageFromGithub); |
||||
app.route("/status.svg").get(routes.status.image); |
||||
app.route("/release/:owner/:reponame/:branch/:rev").get(routes.release); |
||||
app.route("/artifact/:owner/:reponame/:branch/:rev/*").get(routes.artifact); |
||||
|
||||
http.createServer(app).listen(app.get('port'), () => console.log('Express server listening on port ' + app.get('port'))); |
||||
http.createServer(app).listen(app.get("port"), () => console.log(`Express server listening on port ${app.get("port")}`)); |
||||
|
@ -1,10 +1,11 @@ |
||||
"use strict"; |
||||
|
||||
module.exports = (params, processor) => { |
||||
const condition = (!params.owner || params.owner === processor.context.owner) && (!params.branch || params.branch === processor.context.branch || "refs/heads/" + params.branch === processor.context.branch); |
||||
const task = condition ? params.task : params.otherwise; |
||||
const condition = (!params.owner || params.owner === processor.context.owner) |
||||
&& (!params.branch || params.branch === processor.context.branch || `refs/heads/${params.branch}` === processor.context.branch); |
||||
const task = condition |
||||
? params.task |
||||
: params.otherwise; |
||||
|
||||
return { |
||||
process: () => processor.processTask(task || {type: "noop"}, processor.done.bind(processor)) |
||||
}; |
||||
return { "process": () => processor.processTask(task || { "type": "noop" }, processor.done.bind(processor)) }; |
||||
}; |
||||
|
@ -1,35 +1,37 @@ |
||||
"use strict"; |
||||
|
||||
const fs = require('fs'); |
||||
const path = require('path'); |
||||
const fs = require("fs"); |
||||
const path = require("path"); |
||||
const cssnano = require("cssnano"); |
||||
|
||||
module.exports = (params, processor) => ({ |
||||
process: () => { |
||||
const filePath = path.normalize(processor.context.exported + "/" + params.filename); |
||||
"process": () => { |
||||
const filePath = path.join(processor.context.exported, params.filename); |
||||
|
||||
fs.readFile(filePath, (err, css) => { |
||||
if (err) { |
||||
processor.onError("Unable to read stylesheet " + params.filename + ": " + err); |
||||
processor.onError(`Unable to read stylesheet ${params.filename}: ${err}`); |
||||
|
||||
return processor.done(); |
||||
} |
||||
|
||||
cssnano.process(css) |
||||
return cssnano.process(css) |
||||
.catch((err) => { |
||||
processor.onError("Unable to uglify stylesheet: " + err); |
||||
processor.onError(`Unable to uglify stylesheet: ${err}`); |
||||
processor.done(); |
||||
}) |
||||
.then((result) => { |
||||
fs.writeFile(filePath, result.css, (err) => { |
||||
if (err) { |
||||
processor.onError("Unable to write uglified stylesheet for " + params.filename + ": " + err); |
||||
processor.onError(`Unable to write uglified stylesheet for ${params.filename}: ${err}`); |
||||
} else { |
||||
processor.onInfo("Saved uglified stylesheet for " + params.filename + "; uglified length: " + result.css.length); |
||||
processor.onInfo(`Saved uglified stylesheet for ${params.filename}; uglified length: ${result.css.length}`); |
||||
} |
||||
|
||||
processor.done(); |
||||
}); |
||||
}); |
||||
}); |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
|
@ -1,22 +1,22 @@ |
||||
"use strict"; |
||||
|
||||
const fse = require('fs-extra'); |
||||
const path = require("path"); |
||||
const fse = require("fs-extra"); |
||||
|
||||
module.exports = (params, processor) => { |
||||
return { |
||||
process: () => { |
||||
var sourceFilePath = processor.context.exported + "/" + params.filename; |
||||
module.exports = (params, processor) => ({ |
||||
"process": () => { |
||||
const sourceFilePath = path.join(processor.context.exported, params.filename); |
||||
|
||||
processor.onInfo("Deleting " + sourceFilePath); |
||||
processor.onInfo(`Deleting ${sourceFilePath}`); |
||||
|
||||
fse.remove(sourceFilePath, function(err) { |
||||
if (err) { |
||||
processor.onError("Unable to delete file: " + err); |
||||
} else { |
||||
processor.onInfo("Deleted file"); |
||||
} |
||||
return processor.done(); |
||||
}); |
||||
} |
||||
}; |
||||
}; |
||||
fse.remove(sourceFilePath, (err) => { |
||||
if (err) { |
||||
processor.onError(`Unable to delete file: ${err}`); |
||||
} else { |
||||
processor.onInfo("Deleted file"); |
||||
} |
||||
|
||||
return processor.done(); |
||||
}); |
||||
} |
||||
}); |
||||
|
@ -1,17 +1,17 @@ |
||||
"use strict"; |
||||
|
||||
const sequential = require('./sequential'); |
||||
const sequential = require("./sequential"); |
||||
|
||||
module.exports = (params, processor) => sequential({ |
||||
tasks: [ |
||||
"tasks": [ |
||||
{ |
||||
type: "dotnetbuildwithoutcleanup", |
||||
name: "build", |
||||
params: params |
||||
"name": "build", |
||||
params, |
||||
"type": "dotnetbuildwithoutcleanup" |
||||
}, |
||||
{ |
||||
type: "cleanupafterdotnetbuild", |
||||
name: "cleanup" |
||||
"name": "cleanup", |
||||
"type": "cleanupafterdotnetbuild" |
||||
} |
||||
] |
||||
}, processor); |
||||
|
@ -1,42 +1,40 @@ |
||||
"use strict"; |
||||
|
||||
const sequential = require('./sequential'); |
||||
const sequential = require("./sequential"); |
||||
|
||||
module.exports = (params, processor) => { |
||||
const tasks = []; |
||||
|
||||
if (!params.skipMbsCheckStyle) { |
||||
tasks.push({ |
||||
type: "dotnetcheckstyle", |
||||
params: params |
||||
params, |
||||
"type": "dotnetcheckstyle" |
||||
}); |
||||
} |
||||
|
||||
tasks.push({ |
||||
type: "dotnetrewrite", |
||||
params: params |
||||
params, |
||||
"type": "dotnetrewrite" |
||||
}); |
||||
|
||||
if (!params.skipNugetRestore) { |
||||
tasks.push({ |
||||
type: "dotnetnugetrestore", |
||||
params: params |
||||
params, |
||||
"type": "dotnetnugetrestore" |
||||
}); |
||||
} |
||||
|
||||
tasks.push({ |
||||
type: "dotnetcompile", |
||||
params: { |
||||
solution: params.solution, |
||||
skipCodeSigning: params.skipCodeSigning, |
||||
forceCodeAnalysis: params.forceCodeAnalysis, |
||||
ignoreCodeAnalysis: params.ignoreCodeAnalysis, |
||||
configuration: params.configuration, |
||||
target: "Rebuild" |
||||
} |
||||
"params": { |
||||
"configuration": params.configuration, |
||||
"forceCodeAnalysis": params.forceCodeAnalysis, |
||||
"ignoreCodeAnalysis": params.ignoreCodeAnalysis, |
||||
"skipCodeSigning": params.skipCodeSigning, |
||||
"solution": params.solution, |
||||
"target": "Rebuild" |
||||
}, |
||||
"type": "dotnetcompile" |
||||
}); |
||||
|
||||
return sequential({ |
||||
tasks: tasks |
||||
}, processor); |
||||
return sequential({ tasks }, processor); |
||||
}; |
||||
|
@ -1,33 +1,35 @@ |
||||
"use strict"; |
||||
|
||||
const settings = require('../../settings'); |
||||
const dotnetbuilderwrapper = require('./dotnetbuilderwrapper'); |
||||
const path = require("path"); |
||||
const settings = require("../../settings"); |
||||
const dotnetbuilderwrapper = require("./dotnetbuilderwrapper"); |
||||
|
||||
module.exports = (params, processor) => { |
||||
const compileParams = { |
||||
command: "compile", |
||||
SolutionPath: processor.context.exported + "/" + params.solution, |
||||
Configuration: params.configuration, |
||||
Target: params.target, |
||||
OutputDirectory: params.overrideOutputDirectory |
||||
"Configuration": params.configuration, |
||||
"OutputDirectory": params.overrideOutputDirectory, |
||||
"SolutionPath": path.join(processor.context.exported, params.solution), |
||||
"Target": params.target, |
||||
"command": "compile" |
||||
}; |
||||
|
||||
if (!settings.skipCodeSigning && !params.skipCodeSigning) { |
||||
compileParams.SigningKey = settings.codeSigningKeyFile; |
||||
} |
||||
if (settings.isCodeAnalysisUnsupported) { |
||||
if (params.forceCodeAnalysis) { |
||||
processor.onError("Code analysis is not supported"); |
||||
processor.done(); |
||||
return; |
||||
} |
||||
|
||||
if (settings.isCodeAnalysisUnsupported && params.forceCodeAnalysis) { |
||||
processor.onError("Code analysis is not supported"); |
||||
|
||||
return processor.done(); |
||||
} |
||||
|
||||
if ( |
||||
settings.isCodeAnalysisUnsupported |
||||
|| params.ignoreCodeAnalysis |
||||
|| (settings.ignoreCodeAnalysisByDefault && !params.forceCodeAnalysis) |
||||
) { |
||||
compileParams.SkipCodeAnalysis = true; |
||||
} else { |
||||
if (settings.ignoreCodeAnalysisByDefault && !params.forceCodeAnalysis) { |
||||
compileParams.SkipCodeAnalysis = true; |
||||
} |
||||
if (params.ignoreCodeAnalysis) { |
||||
compileParams.SkipCodeAnalysis = true; |
||||
} |
||||
} |
||||
|
||||
return dotnetbuilderwrapper(compileParams, processor); |
||||
}; |
||||
|
@ -1,30 +1,30 @@ |
||||
"use strict"; |
||||
|
||||
const conditional = require('./conditional'); |
||||
const conditional = require("./conditional"); |
||||
|
||||
module.exports = (params, processor) => conditional({ |
||||
owner: params.masterRepoOwner, |
||||
branch: "master", |
||||
task: { |
||||
name: "nuget-push", |
||||
type: "dotnetnugetpush", |
||||
params: { |
||||
nuspec: params.nuspecName + ".nuspec", |
||||
name: params.nuspecName, |
||||
withoutCommitSha: params.withoutCommitSha, |
||||
version: params.version, |
||||
major: params.major |
||||
} |
||||
"branch": "master", |
||||
"otherwise": { |
||||
"name": "nuget-pack", |
||||
"params": { |
||||
"major": params.major, |
||||
"name": params.nuspecName, |
||||
"nuspec": `${params.nuspecName}.nuspec`, |
||||
"version": params.version, |
||||
"withoutCommitSha": params.withoutCommitSha |
||||
}, |
||||
"type": "dotnetnugetpack" |
||||
}, |
||||
otherwise: { |
||||
name: "nuget-pack", |
||||
type: "dotnetnugetpack", |
||||
params: { |
||||
nuspec: params.nuspecName + ".nuspec", |
||||
name: params.nuspecName, |
||||
withoutCommitSha: params.withoutCommitSha, |
||||
version: params.version, |
||||
major: params.major |
||||
} |
||||
"owner": params.masterRepoOwner, |
||||
"task": { |
||||
"name": "nuget-push", |
||||
"params": { |
||||
"major": params.major, |
||||
"name": params.nuspecName, |
||||
"nuspec": `${params.nuspecName}.nuspec`, |
||||
"version": params.version, |
||||
"withoutCommitSha": params.withoutCommitSha |
||||
}, |
||||
"type": "dotnetnugetpush" |
||||
} |
||||
}, processor); |
||||
|
@ -1,11 +1,12 @@ |
||||
"use strict"; |
||||
|
||||
const dotnetbuilderwrapper = require('./dotnetbuilderwrapper'); |
||||
const path = require("path"); |
||||
const dotnetbuilderwrapper = require("./dotnetbuilderwrapper"); |
||||
const settings = require("../../settings"); |
||||
|
||||
module.exports = (params, processor) => dotnetbuilderwrapper({ |
||||
command: "nugetpush", |
||||
Package: processor.context.exported + "/" + params.Package, |
||||
NugetHost: settings.nugetHost, |
||||
ApiKey: settings.nugetApiKey |
||||
"ApiKey": settings.nugetApiKey, |
||||
"NugetHost": settings.nugetHost, |
||||
"Package": path.join(processor.context.exported, params.Package), |
||||
"command": "nugetpush" |
||||
}, processor); |
||||
|
@ -1,16 +1,17 @@ |
||||
"use strict"; |
||||
|
||||
const sequential = require('./sequential'); |
||||
const path = require("path"); |
||||
const sequential = require("./sequential"); |
||||
|
||||
module.exports = (params, processor) => sequential({ |
||||
tasks: [ |
||||
"tasks": [ |
||||
{ |
||||
type: "dotnetbuilderwrapper", |
||||
params: { |
||||
command: "nugetrestore", |
||||
BaseDirectory: processor.context.exported, |
||||
SolutionPath: processor.context.exported + "/" + params.solution |
||||
} |
||||
"params": { |
||||
"BaseDirectory": processor.context.exported, |
||||
"SolutionPath": path.join(processor.context.exported, params.solution), |
||||
"command": "nugetrestore" |
||||
}, |
||||
"type": "dotnetbuilderwrapper" |
||||
} |
||||
] |
||||
}, processor); |
||||
|
@ -1,9 +1,9 @@ |
||||
"use strict"; |
||||
|
||||
const dotNetBuilderWrapper = require('./dotnetbuilderwrapper'); |
||||
const path = require("path"); |
||||
const dotNetBuilderWrapper = require("./dotnetbuilderwrapper"); |
||||
|
||||
module.exports = (params, processor) => dotNetBuilderWrapper({ |
||||
command: "nunit", |
||||
TestLibraryPath: processor.context.exported + "/" + params.assembly//,
|
||||
// OutputPath: processor.context.release + "/" + params.solution + "/"
|
||||
"TestLibraryPath": path.join(processor.context.exported, params.assembly), |
||||
"command": "nunit" |
||||
}, processor); |
||||
|
@ -1,47 +1,48 @@ |
||||
"use strict"; |
||||
|
||||
const fs = require('fs'); |
||||
const Mustache = require('mustache'); |
||||
const path = require("path"); |
||||
const fs = require("fs"); |
||||
const Mustache = require("mustache"); |
||||
|
||||
const sequential = require('./sequential'); |
||||
const sequential = require("./sequential"); |
||||
|
||||
const msbuildTemplate = fs.readFileSync(__dirname + "/dotnetpackwebapp.template.msbuild", {encoding: "utf8"}); |
||||
const deployTemplate = fs.readFileSync(__dirname + "/dotnetpackwebapp.template.bat", {encoding: "utf8"}); |
||||
const versionTemplate = fs.readFileSync(__dirname + "/dotnetpackwebapp.template.version.aspx", {encoding: "utf8"}); |
||||
const msbuildTemplate = fs.readFileSync(path.join(__dirname, "/dotnetpackwebapp.template.msbuild"), { "encoding": "utf8" }); |
||||
const deployTemplate = fs.readFileSync(path.join(__dirname, "/dotnetpackwebapp.template.bat"), { "encoding": "utf8" }); |
||||
const versionTemplate = fs.readFileSync(path.join(__dirname, "/dotnetpackwebapp.template.version.aspx"), { "encoding": "utf8" }); |
||||
|
||||
module.exports = (params, processor) => sequential({ |
||||
tasks: [ |
||||
"tasks": [ |
||||
{ |
||||
type: "writefile", |
||||
params: { |
||||
filename: "MakePackage.msbuild", |
||||
data: Mustache.render(msbuildTemplate, params) |
||||
} |
||||
"params": { |
||||
"data": Mustache.render(msbuildTemplate, params), |
||||
"filename": "MakePackage.msbuild" |
||||
}, |
||||
"type": "writefile" |
||||
}, |
||||
{ |
||||
type: "writefile", |
||||
params: { |
||||
filename: "Deploy.bat", |
||||
data: Mustache.render(deployTemplate, params) |
||||
} |
||||
"params": { |
||||
"data": Mustache.render(deployTemplate, params), |
||||
"filename": "Deploy.bat" |
||||
}, |
||||
"type": "writefile" |
||||
}, |
||||
{ |
||||
type: "writefile", |
||||
params: { |
||||
filename: "version.aspx", |
||||
data: Mustache.render(versionTemplate, params) |
||||
} |
||||
"params": { |
||||
"data": Mustache.render(versionTemplate, params), |
||||
"filename": "version.aspx" |
||||
}, |
||||
"type": "writefile" |
||||
}, |
||||
{ |
||||
type: "dotnetcompile", |
||||
params: { |
||||
solution: "MakePackage.msbuild", |
||||
skipCodeSigning: params.skipCodeSigning, |
||||
isCodeAnalysisUnsupported: params.isCodeAnalysisUnsupported, |
||||
configuration: params.configuration, |
||||
target: "Package", |
||||
overrideOutputDirectory: processor.context.release |
||||
} |
||||
"params": { |
||||
"configuration": params.configuration, |
||||
"isCodeAnalysisUnsupported": params.isCodeAnalysisUnsupported, |
||||
"overrideOutputDirectory": processor.context.release, |
||||
"skipCodeSigning": params.skipCodeSigning, |
||||
"solution": "MakePackage.msbuild", |
||||
"target": "Package" |
||||
}, |
||||
"type": "dotnetcompile" |
||||
} |
||||
] |
||||
}, processor); |
||||
|
@ -1,5 +1,3 @@ |
||||
"use strict"; |
||||
|
||||
module.exports = (params, processor) => ({ |
||||
process: () => processor.done() |
||||
}); |
||||
module.exports = (params, processor) => ({ "process": () => processor.done() }); |
||||
|
@ -1,34 +1,28 @@ |
||||
"use strict"; |
||||
|
||||
const sequential = require('./sequential'); |
||||
const sequential = require("./sequential"); |
||||
|
||||
module.exports = (params, processor) => sequential({ |
||||
tasks: [ |
||||
"tasks": [ |
||||
{ |
||||
type: "eslintbrowserall", |
||||
params: { |
||||
excludeFiles: params.eslintExcludeFiles |
||||
} |
||||
"params": { "excludeFiles": params.eslintExcludeFiles }, |
||||
"type": "eslintbrowserall" |
||||
}, |
||||
{ "type": "uglifyjsall" }, |
||||
{ "type": "cssnanoall" }, |
||||
{ |
||||
type: "uglifyjsall" |
||||
"params": { |
||||
"data": processor.context.versionInfo, |
||||
"filename": "version.txt" |
||||
}, |
||||
"type": "writefile" |
||||
}, |
||||
{ |
||||
type: "cssnanoall" |
||||
}, |
||||
{ |
||||
type: "writefile", |
||||
params: { |
||||
filename: "version.txt", |
||||
data: processor.context.versionInfo |
||||
} |
||||
}, |
||||
{ |
||||
type: "zip", |
||||
params: { |
||||
directory: "", |
||||
archive: processor.context.reponame + ".zip" |
||||
} |
||||
"params": { |
||||
"archive": `${processor.context.reponame}.zip`, |
||||
"directory": "" |
||||
}, |
||||
"type": "zip" |
||||
} |
||||
] |
||||
}, processor); |
||||
|
@ -1,9 +1,9 @@ |
||||
"use strict"; |
||||
|
||||
exports.index = (req, res) => res.render('index', { title: 'Express' + req + "qq" }); |
||||
exports.index = (req, res) => res.render("index", { "title": `Express<br/>\r\n${req}` }); |
||||
|
||||
exports.postreceive = require('./postreceive'); |
||||
exports.manual = require('./manual'); |
||||
exports.status = require('./status'); |
||||
exports.artifact = require('./artifact'); |
||||
exports.release = require('./release'); |
||||
exports.postreceive = require("./postreceive"); |
||||
exports.manual = require("./manual"); |
||||
exports.status = require("./status"); |
||||
exports.artifact = require("./artifact"); |
||||
exports.release = require("./release"); |
||||
|
@ -1,20 +1,21 @@ |
||||
"use strict"; |
||||
|
||||
const builder = require('../lib/builder'); |
||||
const builder = require("../lib/builder"); |
||||
|
||||
exports.get = (req, res) => res.render('manual'); |
||||
exports.get = (req, res) => res.render("manual"); |
||||
|
||||
exports.post = (req, res) => { |
||||
const options = req.body; |
||||
options.url = "https://pos-github.payonline.ru/" + options.owner + "/" + options.reponame; |
||||
|
||||
options.url = `https://pos-github.payonline.ru/${options.owner}/${options.reponame}`; |
||||
options.app = req.app; |
||||
|
||||
builder.build(options, (err, result) => { |
||||
console.log("Done processing manual request"); |
||||
console.log("Error: " + err); |
||||
//console.log("Result:");
|
||||
//console.log(result);
|
||||
res.render('manual-done', {err: err, result: result}); |
||||
//res.render("manual-done", { err: err, result: result });
|
||||
console.log(`Error: ${err}`); |
||||
res.render("manual-done", { |
||||
err, |
||||
result |
||||
}); |
||||
}); |
||||
}; |
||||
|
Loading…
Reference in new issue