Files
fleet/website/config/bootstrap.js
T
Eric 21c11220a7 Website: cache workshop details in platform record (#48882)
Closes: https://github.com/fleetdm/fleet/issues/48142

Changes:
- Added two new attributes to the website's platform record:
`workshopDetails`, an array containing formatted event details to be
used on the /workshops page, and `workshopDetailsLastUpdatedAt`, a JS
timestamp representing when workshop event details were last retrieved
from the EventBrite API
- Update the website's bootstrap configuration to create a platform
record
- Updated the view action for the workshops page to load workshop event
details from the database if they were updated less than two hours ago.
2026-07-07 17:31:08 -05:00

115 lines
5.3 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 = 2;
// 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'),
fleetPremiumTrialType: 'local trial',
fleetPremiumTrialLicenseKey: await sails.helpers.strings.uuid(),
fleetPremiumTrialLicenseKeyExpiresAt: Date.now() + (60 * 60 * 24 * 30 * 1000),
}).fetch();
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
});
}
// Create a platform record.
await Platform.create({
currentUnfrozenGitHubPrNumbers: [],
workshopDetails: [],
workshopDetailsLastUpdatedAt: Date.now()
});
// 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...)');
});
};