2020-01-10 16:48:46 +00:00
|
|
|
import core from '@actions/core';
|
2020-01-18 13:27:15 +00:00
|
|
|
import { getMasterData, Schema, getStatusCode } from './utils.js';
|
|
|
|
|
import srcData from '../src/data.js';
|
2020-01-10 16:48:46 +00:00
|
|
|
|
2020-01-18 13:27:15 +00:00
|
|
|
(async () => {
|
|
|
|
|
// on master branch will be empty array
|
|
|
|
|
const masterDataUrls = (await getMasterData()).map(d => d.url);
|
|
|
|
|
// so here data will be an array with all users
|
|
|
|
|
const data = srcData.filter(d => !masterDataUrls.includes(d.url));
|
|
|
|
|
|
|
|
|
|
const errors = data
|
|
|
|
|
.map(person => Schema.validate(person))
|
|
|
|
|
.filter(v => v.error)
|
|
|
|
|
.map(v => v.error);
|
|
|
|
|
|
|
|
|
|
errors.forEach(e => {
|
|
|
|
|
core.error(e._original.name || e._original.url);
|
|
|
|
|
e.details.forEach(d => core.error(d.message));
|
2020-01-13 15:38:23 +00:00
|
|
|
});
|
|
|
|
|
|
2020-01-18 13:27:15 +00:00
|
|
|
let failedUrlsCount = 0;
|
|
|
|
|
for await (const { url } of data) {
|
|
|
|
|
try {
|
|
|
|
|
const statusCode = await getStatusCode(url);
|
|
|
|
|
if (statusCode < 200 || statusCode >= 400) {
|
|
|
|
|
core.error(`Ping to "${url}" failed with status: ${statusCode}`);
|
|
|
|
|
failedUrlsCount += 1;
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
core.error(`Ping to "${url}" failed with error: ${e}`);
|
|
|
|
|
failedUrlsCount += 1;
|
2020-01-13 15:38:23 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-18 13:27:15 +00:00
|
|
|
if (failedUrlsCount) {
|
|
|
|
|
core.error(`Action failed with ${failedUrlsCount} URL fetch failures`);
|
2020-01-13 15:38:23 +00:00
|
|
|
}
|
2020-01-18 13:27:15 +00:00
|
|
|
|
|
|
|
|
if (errors.length || failedUrlsCount) {
|
|
|
|
|
core.setFailed('Action failed with errors, see logs');
|
2020-01-13 18:04:04 +00:00
|
|
|
}
|
2020-01-13 15:38:23 +00:00
|
|
|
})();
|