mirror of
https://github.com/BradNut/awesome-uses
synced 2025-09-08 17:40:31 +00:00
From start scripts needed to be run with node 13 (esm support) Because data.js was a esm export, and needed to be compiled Moved all scripts to commontjs, and data.js file So can be imported by scripts without compiling
86 lines
2.6 KiB
JavaScript
86 lines
2.6 KiB
JavaScript
const exec = require('@actions/exec');
|
|
const core = require('@actions/core');
|
|
const Joi = require('@hapi/joi');
|
|
const http = require('http');
|
|
const https = require('https');
|
|
const flags = require('./flags.js');
|
|
|
|
async function getCurrentBranchName() {
|
|
let myOutput = '';
|
|
let myError = '';
|
|
|
|
const options = {
|
|
silent: true,
|
|
listeners: {
|
|
stdout: data => (myOutput += data.toString()),
|
|
stderr: data => (myError += data.toString()),
|
|
},
|
|
};
|
|
|
|
await exec.exec('git rev-parse --abbrev-ref HEAD', [], options);
|
|
return myOutput.trim();
|
|
}
|
|
|
|
/** on master branch will return an empty array */
|
|
module.exports.getMasterData = async function() {
|
|
const options = { silent: true };
|
|
const curentBranchName = await getCurrentBranchName();
|
|
// when on a branch/PR different from master
|
|
// will populate scripts/masterData.js with src/data.js from master
|
|
if (curentBranchName !== 'master') {
|
|
core.info('Executing action on branch different from master');
|
|
await exec.exec('mv src/data.js src/tmpData.js', [], options);
|
|
await exec.exec('git fetch origin master', [], options);
|
|
await exec.exec('git restore --source=FETCH_HEAD src/data.js', [], options);
|
|
await exec.exec('mv src/data.js scripts/masterData.js', [], options);
|
|
await exec.exec('mv src/tmpData.js src/data.js', [], options);
|
|
} else {
|
|
core.info('Executing action on master branch');
|
|
}
|
|
|
|
// eslint-disable-next-line global-require
|
|
const masterData = require('./masterData.js');
|
|
|
|
// restore `scripts/masterData.js` after was loaded
|
|
if (curentBranchName !== 'master') {
|
|
await exec.exec('git restore scripts/masterData.js', [], options);
|
|
}
|
|
|
|
return masterData;
|
|
};
|
|
|
|
module.exports.Schema = Joi.object({
|
|
name: Joi.string().required(),
|
|
description: Joi.string().required(),
|
|
url: Joi.string()
|
|
.uri()
|
|
.required()
|
|
.pattern(/(use|uses|using|setup|environment|^https:\/\/gist.github.com\/)/),
|
|
country: Joi.string()
|
|
.valid(...flags)
|
|
.required(),
|
|
twitter: Joi.string().pattern(new RegExp(/^@?(\w){1,15}$/)),
|
|
emoji: Joi.string().allow(''),
|
|
computer: Joi.string().valid('apple', 'windows', 'linux'),
|
|
phone: Joi.string().valid('iphone', 'android'),
|
|
tags: Joi.array().items(Joi.string()),
|
|
});
|
|
|
|
module.exports.getStatusCode = function(url) {
|
|
const client = url.startsWith('https') ? https : http;
|
|
return new Promise((resolve, reject) => {
|
|
const REQUEST_TIMEOUT = 10000;
|
|
const timeoutId = setTimeout(
|
|
reject,
|
|
REQUEST_TIMEOUT,
|
|
new Error('Request timed out')
|
|
);
|
|
|
|
client
|
|
.get(url, res => {
|
|
clearTimeout(timeoutId);
|
|
resolve(res.statusCode);
|
|
})
|
|
.on('error', err => reject(err));
|
|
});
|
|
};
|