Skip to content

Commit

Permalink
Make it possible confire sitespeed.io in the default yaml file. (#92)
Browse files Browse the repository at this point in the history
This also removes the usage of config/sitespeed.json, so this needs to
go in the next major release.

This also opens up for adding siteseed.io configuration through
the CLI when you start the server/testrunner.
  • Loading branch information
soulgalore authored Oct 15, 2024
1 parent 92b2ff0 commit 06f9588
Show file tree
Hide file tree
Showing 10 changed files with 56 additions and 27 deletions.
12 changes: 11 additions & 1 deletion server/config/default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,14 @@ admin:
# you have on your Redis/KeyDb instance you can tune this
queue:
removeOnComplete: 50
removeOnFail: 50
removeOnFail: 50

sitespeed.io:
s3:
endpoint: "http://127.0.0.1:9000"
bucketname: "sitespeedio"
key: "sitespeedio"
secret: "tracksofmytears"
region: "motown"

resultBaseURL: "http://127.0.0.1:9000/sitespeedio"
10 changes: 0 additions & 10 deletions server/config/sitespeed.json

This file was deleted.

1 change: 1 addition & 0 deletions server/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@
"error.validation.missinglocation": "Missing location",
"error.validation.missingtesttype": "Missing testType",
"error.validation.nomatchingtestwithid": "There are no test with id %s",
"error.missingresultbaseurl":"Missing resultBaseURL setup for sitespeeed.io. You need to fix that in your configuration.",
"error.testfailed": "The test failed to run",
"error.parsingscript": "Could not parse the script",
"error.urlnotvalid": "The URL %s is not a valid URL",
Expand Down
26 changes: 24 additions & 2 deletions server/src/routes/html/result.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import nconf from 'nconf';
import log from 'intel';

import { Router } from 'express';
import { getConfigByTestId } from '../../configs.js';
Expand All @@ -8,6 +9,7 @@ import { getText } from '../../util/text.js';
import { getTest } from '../../database/index.js';

export const result = Router();
const logger = log.getLogger('sitespeedio.server');

result.get('/:id', async function (request, response) {
const id = request.params.id;
Expand All @@ -17,7 +19,17 @@ result.get('/:id', async function (request, response) {
if (job) {
const status = await job.getState();
if (status === 'completed') {
return response.redirect(job.returnvalue.pageSummaryUrl);
if (job.returnvalue.pageSummaryUrl) {
return response.redirect(job.returnvalue.pageSummaryUrl);
} else {
logger.error('Missing resultBaseURL setup for sitespeeed.io');
return response.render('error', {
id: id,
nconf,
message: getText('error.missingresultbaseurl'),
getText
});
}
} else if (status === 'failed') {
const { logs } = await workQueue.getJobLogs(id);
return response.render('error', {
Expand Down Expand Up @@ -75,7 +87,17 @@ result.get('/:id', async function (request, response) {
getText
});
} else if (testResult.status === 'completed') {
return response.redirect(testResult.result_url);
if (testResult.result_url) {
return response.redirect(testResult.result_url);
} else {
logger.error('Missing resultBaseURL setup for sitespeeed.io');
return response.render('error', {
id: id,
nconf,
message: getText('error.missingresultbaseurl'),
getText
});
}
} else if (testResult.status === 'failed') {
return response.render('error', {
status: testResult,
Expand Down
8 changes: 2 additions & 6 deletions server/src/util/add-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import {
getDeviceQueue
} from '../queuehandler.js';
import { setConfigById } from '../configs.js';
import { getBaseFilePath } from './fileutil.js';

import { updateStatus } from '../database/index.js';

Expand All @@ -30,12 +29,9 @@ async function getDefaultSitespeedConfiguration() {
const result = await readFile(
path.resolve(nconf.get('defaultSitespeedioConfigFile'))
);
log.info('Using configiguration from defaultSitespeedioConfigFile');
return JSON.parse(result.toString());
}
const result = await readFile(
path.resolve(getBaseFilePath('./config/sitespeed.json'))
);
return JSON.parse(result.toString());
} else return nconf.get('sitespeed.io') || {};
}

const uniqueNamesConfig = {
Expand Down
4 changes: 2 additions & 2 deletions testrunner/npm-shrinkwrap.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions testrunner/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
"nconf": "0.12.1",
"execa": "9.4.0",
"lodash.get": "4.4.2",
"lodash.merge": "4.6.2",
"intel": "1.2.0",
"joi": "17.13.3",
"js-yaml": "4.1.0"
Expand Down
12 changes: 8 additions & 4 deletions testrunner/src/testrunners/docker-testrunner.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import os from 'node:os';
import { execa } from 'execa';
import log from 'intel';
import nconf from 'nconf';
import merge from 'lodash.merge';

import { queueHandler } from '../queue/queuehandler.js';

Expand Down Expand Up @@ -47,24 +48,27 @@ export default async function runJob(job) {
job.data.config.extends = nconf.get('sitespeedioConfigFile');
}

const testrunnerConfig = nconf.get('sitespeed.io') || {};
const config = merge({}, testrunnerConfig, job.data.config);

// If we use baseline setup the directory by default
if (
(job.data.extras && job.data.extras.includes('--compare.')) ||
job.data.config.compare
config.compare
) {
// This is inside the container and we always use /baseline
if (job.data.config.compare) {
job.data.config.compare.baselinePath = '/baseline';
config.compare.baselinePath = '/baseline';
} else {
job.data.config.compare = {
config.compare = {
baselinePath: '/baseline'
};
}
}

await writeFile(
join(workingDirectory, configFileName),
JSON.stringify(job.data.config)
JSON.stringify(config)
);

const parameters = setupDockerParameters(
Expand Down
6 changes: 5 additions & 1 deletion testrunner/src/testrunners/testrunner.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { execa } from 'execa';
import log from 'intel';
import nconf from 'nconf';
import get from 'lodash.get';
import merge from 'lodash.merge';

import { queueHandler } from '../queue/queuehandler.js';
import { getBaseFilePath } from '../util.js';
Expand Down Expand Up @@ -117,7 +118,10 @@ function prepareSitespeedConfig(job) {
nconf.get('sitespeedioConfigFile') === undefined
? getBaseFilePath('./config/sitespeedDefault.json')
: path.resolve(nconf.get('sitespeedioConfigFile'));
return jobConfig;

const testrunnerConfig = nconf.get('sitespeed.io') || {};
const config = merge({}, testrunnerConfig, jobConfig);
return config;
}

async function runTest(job, workingDirectory, configFileName, logger) {
Expand Down
3 changes: 2 additions & 1 deletion testrunner/src/validateconfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ const configSchema = Joi.object({
workingDirectory: Joi.string().optional(),
executable: Joi.string().required(),
docker: dockerSchema.required(),
queue: queueSchema.optional()
queue: queueSchema.optional(),
sitespeedio: Joi.object().optional().unknown(true)
});

export function validate(config) {
Expand Down

0 comments on commit 06f9588

Please sign in to comment.