mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Add simplified git workflow to auto-commit changes
This commit is contained in:
@@ -88,7 +88,7 @@ var api = module.exports = {
|
||||
return reject(err);
|
||||
}
|
||||
}
|
||||
apiPromise = runtime.nodes.setFlows(flows.flows,flows.credentials,deploymentType);
|
||||
apiPromise = runtime.nodes.setFlows(flows.flows,flows.credentials,deploymentType,null,null,opts.user);
|
||||
}
|
||||
apiPromise.then(function(flowId) {
|
||||
return resolve({rev:flowId});
|
||||
@@ -98,7 +98,7 @@ var api = module.exports = {
|
||||
return reject(err);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -114,7 +114,7 @@ var api = module.exports = {
|
||||
return mutex.runExclusive(function() {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var flow = opts.flow;
|
||||
runtime.nodes.addFlow(flow).then(function (id) {
|
||||
runtime.nodes.addFlow(flow,opts.user).then(function (id) {
|
||||
runtime.log.audit({event: "flow.add", id: id}, opts.req);
|
||||
return resolve(id);
|
||||
}).catch(function (err) {
|
||||
@@ -170,7 +170,7 @@ var api = module.exports = {
|
||||
var flow = opts.flow;
|
||||
var id = opts.id;
|
||||
try {
|
||||
runtime.nodes.updateFlow(id, flow).then(function () {
|
||||
runtime.nodes.updateFlow(id, flow, opts.user).then(function () {
|
||||
runtime.log.audit({event: "flow.update", id: id}, opts.req);
|
||||
return resolve(id);
|
||||
}).catch(function (err) {
|
||||
@@ -216,7 +216,7 @@ var api = module.exports = {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var id = opts.id;
|
||||
try {
|
||||
runtime.nodes.removeFlow(id).then(function () {
|
||||
runtime.nodes.removeFlow(id, opts.user).then(function () {
|
||||
runtime.log.audit({event: "flow.remove", id: id}, opts.req);
|
||||
return resolve();
|
||||
}).catch(function (err) {
|
||||
|
@@ -115,7 +115,7 @@ function load(forceStart) {
|
||||
* type - full/nodes/flows/load (default full)
|
||||
* muteLog - don't emit the standard log messages (used for individual flow api)
|
||||
*/
|
||||
function setFlows(_config,_credentials,type,muteLog,forceStart) {
|
||||
function setFlows(_config,_credentials,type,muteLog,forceStart,user) {
|
||||
if (typeof _credentials === "string") {
|
||||
type = _credentials;
|
||||
_credentials = null;
|
||||
@@ -186,7 +186,7 @@ function setFlows(_config,_credentials,type,muteLog,forceStart) {
|
||||
credentialsDirty:credsDirty,
|
||||
credentials: creds
|
||||
}
|
||||
return storage.saveFlows(saveConfig);
|
||||
return storage.saveFlows(saveConfig, user);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -481,7 +481,7 @@ function updateMissingTypes() {
|
||||
}
|
||||
}
|
||||
|
||||
function addFlow(flow) {
|
||||
function addFlow(flow, user) {
|
||||
var i,node;
|
||||
if (!flow.hasOwnProperty('nodes')) {
|
||||
throw new Error('missing nodes property');
|
||||
@@ -531,7 +531,7 @@ function addFlow(flow) {
|
||||
var newConfig = clone(activeConfig.flows);
|
||||
newConfig = newConfig.concat(nodes);
|
||||
|
||||
return setFlows(newConfig,null,'flows',true).then(function() {
|
||||
return setFlows(newConfig, null, 'flows', true, null, user).then(function() {
|
||||
log.info(log._("nodes.flows.added-flow",{label:(flow.label?flow.label+" ":"")+"["+flow.id+"]"}));
|
||||
return flow.id;
|
||||
});
|
||||
@@ -607,7 +607,7 @@ function getFlow(id) {
|
||||
return result;
|
||||
}
|
||||
|
||||
function updateFlow(id,newFlow) {
|
||||
function updateFlow(id,newFlow, user) {
|
||||
var label = id;
|
||||
if (id !== 'global') {
|
||||
if (!activeFlowConfig.flows[id]) {
|
||||
@@ -662,12 +662,12 @@ function updateFlow(id,newFlow) {
|
||||
}
|
||||
|
||||
newConfig = newConfig.concat(nodes);
|
||||
return setFlows(newConfig,null,'flows',true).then(function() {
|
||||
return setFlows(newConfig, null, 'flows', true, null, user).then(function() {
|
||||
log.info(log._("nodes.flows.updated-flow",{label:(label?label+" ":"")+"["+id+"]"}));
|
||||
})
|
||||
}
|
||||
|
||||
function removeFlow(id) {
|
||||
function removeFlow(id, user) {
|
||||
if (id === 'global') {
|
||||
// TODO: nls + error code
|
||||
throw new Error('not allowed to remove global');
|
||||
@@ -684,7 +684,7 @@ function removeFlow(id) {
|
||||
return node.z !== id && node.id !== id;
|
||||
});
|
||||
|
||||
return setFlows(newConfig,null,'flows',true).then(function() {
|
||||
return setFlows(newConfig, null, 'flows', true, null, user).then(function() {
|
||||
log.info(log._("nodes.flows.removed-flow",{label:(flow.label?flow.label+" ":"")+"["+flow.id+"]"}));
|
||||
});
|
||||
}
|
||||
|
@@ -82,7 +82,7 @@ var storageModuleInterface = {
|
||||
})
|
||||
});
|
||||
},
|
||||
saveFlows: function(config) {
|
||||
saveFlows: function(config, user) {
|
||||
var flows = config.flows;
|
||||
var credentials = config.credentials;
|
||||
var credentialSavePromise;
|
||||
@@ -94,7 +94,7 @@ var storageModuleInterface = {
|
||||
delete config.credentialsDirty;
|
||||
|
||||
return credentialSavePromise.then(function() {
|
||||
return storageModule.saveFlows(flows).then(function() {
|
||||
return storageModule.saveFlows(flows, user).then(function() {
|
||||
return crypto.createHash('md5').update(JSON.stringify(config.flows)).digest("hex");
|
||||
})
|
||||
});
|
||||
|
@@ -40,16 +40,22 @@ function getSSHKeyUsername(userObj) {
|
||||
}
|
||||
return username;
|
||||
}
|
||||
function getGitUser(user) {
|
||||
|
||||
function getUserGitSettings(user) {
|
||||
var username;
|
||||
if (!user) {
|
||||
username = "_";
|
||||
} else {
|
||||
username = user.username;
|
||||
}
|
||||
var userSettings = settings.getUserSettings(username);
|
||||
if (userSettings && userSettings.git) {
|
||||
return userSettings.git.user;
|
||||
var userSettings = settings.getUserSettings(username)||{};
|
||||
return userSettings.git;
|
||||
}
|
||||
|
||||
function getGitUser(user) {
|
||||
var gitSettings = getUserGitSettings(user);
|
||||
if (gitSettings) {
|
||||
return gitSettings.user;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -172,7 +178,7 @@ Project.prototype.initialise = function(user,data) {
|
||||
}
|
||||
}
|
||||
|
||||
return when.all(promises).then(function() {
|
||||
return Promise.all(promises).then(function() {
|
||||
return gitTools.stageFile(project.path,files);
|
||||
}).then(function() {
|
||||
return gitTools.commit(project.path,"Create project files",getGitUser(user));
|
||||
@@ -390,11 +396,15 @@ Project.prototype.update = function (user, data) {
|
||||
if (saveSettings) {
|
||||
promises.push(settings.set("projects",globalProjectSettings));
|
||||
}
|
||||
|
||||
var modifiedFiles = [];
|
||||
|
||||
if (saveREADME) {
|
||||
promises.push(util.writeFile(fspath.join(this.path,this.paths['README.md']), this.description));
|
||||
modifiedFiles.push('README.md');
|
||||
}
|
||||
if (savePackage) {
|
||||
promises.push(fs.readFile(fspath.join(project.path,project.paths['package.json']),"utf8").then(content => {
|
||||
promises.push(fs.readFile(fspath.join(this.path,this.paths['package.json']),"utf8").then(content => {
|
||||
var currentPackage = {};
|
||||
try {
|
||||
currentPackage = util.parseJSON(content);
|
||||
@@ -403,12 +413,22 @@ Project.prototype.update = function (user, data) {
|
||||
this.package = Object.assign(currentPackage,this.package);
|
||||
return util.writeFile(fspath.join(project.path,this.paths['package.json']), JSON.stringify(this.package,"",4));
|
||||
}));
|
||||
modifiedFiles.push('package.json');
|
||||
}
|
||||
return when.settle(promises).then(res => {
|
||||
return when.settle(promises).then(function(res) {
|
||||
var gitSettings = getUserGitSettings(user) || {};
|
||||
var workflowMode = (gitSettings.workflow||{}).mode || "manual";
|
||||
if (workflowMode === 'auto') {
|
||||
return project.stageFile(modifiedFiles.map(f => project.paths[f])).then(() => {
|
||||
return project.commit(user,{message:"Update "+modifiedFiles.join(", ")})
|
||||
})
|
||||
}
|
||||
}).then(res => {
|
||||
if (reloadProject) {
|
||||
return this.load()
|
||||
}
|
||||
}).then(() => { return {
|
||||
}).then(function() {
|
||||
return {
|
||||
flowFilesChanged: flowFilesChanged,
|
||||
credentialSecretChanged: credentialSecretChanged
|
||||
}})
|
||||
@@ -910,7 +930,7 @@ function createDefaultProject(user, project) {
|
||||
}
|
||||
}
|
||||
|
||||
return when.all(promises).then(function() {
|
||||
return Promise.all(promises).then(function() {
|
||||
return gitTools.stageFile(projectPath,files);
|
||||
}).then(function() {
|
||||
return gitTools.commit(projectPath,"Create project",getGitUser(user));
|
||||
|
@@ -190,7 +190,13 @@ function listProjects() {
|
||||
}
|
||||
|
||||
function getUserGitSettings(user) {
|
||||
var userSettings = settings.getUserSettings(user)||{};
|
||||
var username;
|
||||
if (!user) {
|
||||
username = "_";
|
||||
} else {
|
||||
username = user.username;
|
||||
}
|
||||
var userSettings = settings.getUserSettings(username)||{};
|
||||
return userSettings.git;
|
||||
}
|
||||
|
||||
@@ -362,7 +368,6 @@ function reloadActiveProject(action) {
|
||||
});
|
||||
}
|
||||
function createProject(user, metadata) {
|
||||
// var userSettings = getUserGitSettings(user);
|
||||
if (metadata.files && metadata.migrateFiles) {
|
||||
// We expect there to be no active project in this scenario
|
||||
if (activeProject) {
|
||||
@@ -549,7 +554,7 @@ function getFlows() {
|
||||
});
|
||||
}
|
||||
|
||||
function saveFlows(flows) {
|
||||
function saveFlows(flows, user) {
|
||||
if (settings.readOnly) {
|
||||
return when.resolve();
|
||||
}
|
||||
@@ -569,7 +574,15 @@ function saveFlows(flows) {
|
||||
} else {
|
||||
flowData = JSON.stringify(flows);
|
||||
}
|
||||
return util.writeFile(flowsFullPath, flowData, flowsFileBackup);
|
||||
return util.writeFile(flowsFullPath, flowData, flowsFileBackup).then(() => {
|
||||
var gitSettings = getUserGitSettings(user) || {};
|
||||
var workflowMode = (gitSettings.workflow||{}).mode || "manual";
|
||||
if (activeProject && workflowMode === 'auto') {
|
||||
return activeProject.stageFile([flowsFullPath, credentialsFile]).then(() => {
|
||||
return activeProject.commit(user,{message:"Update flow files"})
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function getCredentials() {
|
||||
|
Reference in New Issue
Block a user