|
|
|
// Thanks to material-ui ❤️
|
|
|
|
// Create chunks for Argos: https://github.com/mui/material-ui/pull/23518
|
|
|
|
// https://github.com/mui/material-ui/blob/af81aae3b292ed180e7652a665fad1be2b38a7b3/scripts/pushArgos.js
|
|
|
|
const util = require('util');
|
|
|
|
const glob = require('fast-glob');
|
|
|
|
const lodashChunk = require('lodash/chunk');
|
|
|
|
const childProcess = require('child_process');
|
|
|
|
|
|
|
|
const execFileNode = util.promisify(childProcess.execFile);
|
|
|
|
|
|
|
|
function execFile(command, args) {
|
|
|
|
return execFileNode(command, args, {
|
|
|
|
cwd: process.cwd(),
|
|
|
|
env: process.env,
|
|
|
|
encoding: 'utf-8',
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
const screenshotsBase = 'imageSnapshots';
|
|
|
|
const screenshotsTmp = `${screenshotsBase}/temp`;
|
|
|
|
const BATCH_SIZE = 200;
|
|
|
|
|
|
|
|
async function move2Temp(screenshot, target) {
|
|
|
|
await execFile('mkdir', ['-p', target]);
|
|
|
|
await execFile('mv', [screenshot, target]);
|
|
|
|
}
|
|
|
|
|
|
|
|
async function run() {
|
|
|
|
const screenshots = await glob(`${screenshotsBase}/**/*`);
|
|
|
|
const chunks = lodashChunk(screenshots, BATCH_SIZE);
|
|
|
|
|
|
|
|
await Promise.all(
|
|
|
|
chunks.map((chunk, chunkIndex) =>
|
|
|
|
Promise.all(
|
|
|
|
chunk.map(screenshot => move2Temp(screenshot, `${screenshotsTmp}/${chunkIndex}`)),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
for (let i = 0; i < chunks.length; i += 1) {
|
|
|
|
// eslint-disable-next-line no-await-in-loop
|
|
|
|
const argosResults = await execFile('argos', [
|
|
|
|
'upload',
|
|
|
|
`${screenshotsTmp}/${i}`,
|
|
|
|
'--token',
|
|
|
|
process.env.ARGOS_TOKEN,
|
|
|
|
'--batchCount',
|
|
|
|
chunks.length,
|
|
|
|
'--branch',
|
|
|
|
process.env.GITHUB_REF_NAME,
|
|
|
|
'--commit',
|
|
|
|
process.env.GITHUB_SHA,
|
|
|
|
'--external-build-id',
|
|
|
|
process.env.GITHUB_SHA,
|
|
|
|
]);
|
|
|
|
// eslint-disable-next-line no-console -- pipe stdout
|
|
|
|
console.log(argosResults.stdout);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
run().catch(error => {
|
|
|
|
// eslint-disable-next-line no-console
|
|
|
|
console.error(error);
|
|
|
|
process.exit(1);
|
|
|
|
});
|