mirror of
https://github.com/empayre/fleet.git
synced 2024-11-06 17:05:18 +00:00
ac8150a319
Closes: #11755 Changes: - Created a new model: `Platform` that has a single attribute: `currentUnfrozenGitHubPrNumbers` - Updated bootstrap.js to throw an error if more than one platform record exists, and to create a platform record when the server is lifted with the `--drop` flag. - Updated the receive-from-github webhook to use a Platform record to track the PRs that are currently unfrozen in the fleetdm/fleet repo. Before this Pr is merged, we will need to: - [x] Migrate the Fleet website's database to add the new database table. - [x] Create a single platform record.
107 lines
5.1 KiB
JavaScript
Vendored
107 lines
5.1 KiB
JavaScript
Vendored
/**
|
|
* Seed Function
|
|
* (sails.config.bootstrap)
|
|
*
|
|
* A function that runs just before your Sails app gets lifted.
|
|
* > Need more flexibility? You can also create a hook.
|
|
*
|
|
* For more information on seeding your app with fake data, check out:
|
|
* https://sailsjs.com/config/bootstrap
|
|
*/
|
|
|
|
module.exports.bootstrap = async function() {
|
|
|
|
// Import dependencies
|
|
var path = require('path');
|
|
|
|
// This bootstrap version indicates what version of fake data we're dealing with here.
|
|
var HARD_CODED_DATA_VERSION = 1;
|
|
|
|
// This path indicates where to store/look for the JSON file that tracks the "last run bootstrap info"
|
|
// locally on this development computer (if we happen to be on a development computer).
|
|
var bootstrapLastRunInfoPath = path.resolve(sails.config.appPath, '.tmp/bootstrap-version.json');
|
|
|
|
// Whether or not to continue doing the stuff in this file (i.e. wiping and regenerating data)
|
|
// depends on some factors:
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
// If the hard-coded data version has been incremented, or we're being forced
|
|
// (i.e. `--drop` or `--environment=test` was set), then run the meat of this
|
|
// bootstrap script to wipe all existing data and rebuild hard-coded data.
|
|
if (sails.config.models.migrate !== 'drop' && sails.config.environment !== 'test') {
|
|
// If this is _actually_ a production environment (real or simulated), or we have
|
|
// `migrate: safe` enabled, then prevent accidentally removing all data!
|
|
if (process.env.NODE_ENV==='production' || sails.config.models.migrate === 'safe') {
|
|
sails.log('Since we are running with migrate: \'safe\' and/or NODE_ENV=production (in the "'+sails.config.environment+'" Sails environment, to be precise), skipping the rest of the bootstrap to avoid data loss...');
|
|
return;
|
|
}//•
|
|
|
|
// Compare bootstrap version from code base to the version that was last run
|
|
var lastRunBootstrapInfo = await sails.helpers.fs.readJson(bootstrapLastRunInfoPath)
|
|
.tolerate('doesNotExist');// (it's ok if the file doesn't exist yet-- just keep going.)
|
|
|
|
let numberOfPlatformRecords = await Platform.count();
|
|
if(numberOfPlatformRecords > 1) {
|
|
throw new Error('Consistency error: More than one platform record exists. To accurately freeze and unfreeze GitHub pull requests when the main branch is frozen, only one of these records should exist. Number of platform records found'+numberOfPlatformRecords);
|
|
}
|
|
|
|
if (lastRunBootstrapInfo && lastRunBootstrapInfo.lastRunVersion === HARD_CODED_DATA_VERSION) {
|
|
sails.log('Skipping v'+HARD_CODED_DATA_VERSION+' bootstrap script... (because it\'s already been run)');
|
|
sails.log('(last run on this computer: @ '+(new Date(lastRunBootstrapInfo.lastRunAt))+')');
|
|
return;
|
|
}//•
|
|
|
|
sails.log('Running v'+HARD_CODED_DATA_VERSION+' bootstrap script... ('+(lastRunBootstrapInfo ? 'before this, the last time the bootstrap ran on this computer was for v'+lastRunBootstrapInfo.lastRunVersion+' @ '+(new Date(lastRunBootstrapInfo.lastRunAt)) : 'looks like this is the first time the bootstrap has run on this computer')+')');
|
|
}
|
|
else {
|
|
sails.log('Running bootstrap script because it was forced... (either `--drop` or `--environment=test` was used)');
|
|
}
|
|
|
|
// Since the hard-coded data version has been incremented, and we're running in
|
|
// a "throwaway data" environment, delete all records from all models.
|
|
for (let identity in sails.models) {
|
|
await sails.models[identity].destroy({});
|
|
}//∞
|
|
|
|
// By convention, this is a good place to set up fake data during development.
|
|
let adminUser = await User.create({
|
|
emailAddress: 'admin@example.com',
|
|
firstName: 'Ryan',
|
|
lastName: 'Dahl',
|
|
organization: 'Golaith Industries',
|
|
isSuperAdmin: true,
|
|
fleetSandboxURL: 'http://example.com',
|
|
fleetSandboxExpiresAt: 1,
|
|
fleetSandboxDemoKey: await sails.helpers.strings.uuid(),
|
|
password: await sails.helpers.passwords.hashPassword('abc123')
|
|
}).fetch();
|
|
|
|
// Note: We do not create a platform record to avoid potential consistency violations.
|
|
|
|
if (sails.config.custom.enableBillingFeatures) {
|
|
let stripeCustomerId = await sails.helpers.stripe.saveBillingInfo.with({
|
|
emailAddress: adminUser.emailAddress
|
|
}).timeout(5000).retry();
|
|
|
|
await User.updateOne({id: adminUser.id})
|
|
.set({
|
|
stripeCustomerId
|
|
});
|
|
}
|
|
|
|
|
|
// Save new bootstrap version
|
|
await sails.helpers.fs.writeJson.with({
|
|
destination: bootstrapLastRunInfoPath,
|
|
json: {
|
|
lastRunVersion: HARD_CODED_DATA_VERSION,
|
|
lastRunAt: Date.now()
|
|
},
|
|
force: true
|
|
})
|
|
.tolerate((err)=>{
|
|
sails.log.warn('For some reason, could not write bootstrap version .json file. This could be a result of a problem with your configured paths, or, if you are in production, a limitation of your hosting provider related to `pwd`. As a workaround, try updating app.js to explicitly pass in `appPath: __dirname` instead of relying on `chdir`. Current sails.config.appPath: `'+sails.config.appPath+'`. Full error details: '+err.stack+'\n\n(Proceeding anyway this time...)');
|
|
});
|
|
|
|
};
|