Get project contribs
This commit is contained in:
parent
2605bfc16b
commit
fd00b10f2e
6 changed files with 1156 additions and 1 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -3,3 +3,4 @@ node_modules
|
||||||
dist
|
dist
|
||||||
.yarn
|
.yarn
|
||||||
pnp.js
|
pnp.js
|
||||||
|
sourceproject
|
||||||
|
|
|
||||||
997
package-lock.json
generated
997
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -5,15 +5,21 @@
|
||||||
"repository": "git@github.com:dennisschoepf/codewanderer.git",
|
"repository": "git@github.com:dennisschoepf/codewanderer.git",
|
||||||
"author": "Dennis Schoepf <dennis@schoepf.co>",
|
"author": "Dennis Schoepf <dennis@schoepf.co>",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "parcel index.html",
|
"dev": "parcel index.html",
|
||||||
"build": "parcel build index.html",
|
"build": "parcel build index.html",
|
||||||
"deploy": "./deploy.sh"
|
"deploy": "./deploy.sh",
|
||||||
|
"dev:meta": "nodemon ./scripts/get-metadata.js "
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@octokit/core": "^3.5.1",
|
||||||
"@types/animejs": "^3.1.4",
|
"@types/animejs": "^3.1.4",
|
||||||
"@types/lodash": "^4.14.171",
|
"@types/lodash": "^4.14.171",
|
||||||
"@types/p5": "^1.3.0",
|
"@types/p5": "^1.3.0",
|
||||||
|
"get-folder-size": "^3.1.0",
|
||||||
|
"node-fetch": "^2.6.1",
|
||||||
|
"nodemon": "^2.0.12",
|
||||||
"parcel-bundler": "^1.12.5",
|
"parcel-bundler": "^1.12.5",
|
||||||
"prettier": "^2.3.2",
|
"prettier": "^2.3.2",
|
||||||
"sass": "^1.35.2",
|
"sass": "^1.35.2",
|
||||||
|
|
|
||||||
54
scripts/get-metadata.js
Normal file
54
scripts/get-metadata.js
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
import { resolve } from 'path';
|
||||||
|
import { readdir } from 'fs/promises';
|
||||||
|
import getItemSize from 'get-folder-size';
|
||||||
|
import { getProjectContributors } from './helpers.js';
|
||||||
|
|
||||||
|
const main = async () => {
|
||||||
|
/* CONSTANTS */
|
||||||
|
const __dirname = resolve();
|
||||||
|
const PROJECT_PATH = resolve(__dirname, 'sourceproject/ethereumjs-monorepo');
|
||||||
|
const SUBPACKAGE_PATH = resolve(PROJECT_PATH, 'packages');
|
||||||
|
|
||||||
|
const subprojectPaths = await readdir(SUBPACKAGE_PATH);
|
||||||
|
const subprojectOverviewData = await Promise.all(
|
||||||
|
subprojectPaths.map(async (subprojectPath) => {
|
||||||
|
const size = await getItemSize.loose(resolve(PROJECT_PATH, SUBPACKAGE_PATH, subprojectPath));
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: subprojectPath,
|
||||||
|
path: `packages/${subprojectPath}`,
|
||||||
|
filePath: resolve(PROJECT_PATH, SUBPACKAGE_PATH, subprojectPath),
|
||||||
|
size: Math.floor(size * 0.001),
|
||||||
|
};
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
const subprojects = subprojectOverviewData.filter(
|
||||||
|
(subprojectData) => subprojectData.name !== 'vm' && subprojectData.name !== 'ethereum-tests'
|
||||||
|
);
|
||||||
|
|
||||||
|
/*const subprojectsWithRevealables = await Promise.all(
|
||||||
|
subprojects.map(async (subproject) => {
|
||||||
|
const contributors = await getContributorsForSubproject(subproject);
|
||||||
|
const revealables = [...contributors];
|
||||||
|
const subprojectWithRevealables = {
|
||||||
|
...subproject,
|
||||||
|
revealables,
|
||||||
|
};
|
||||||
|
console.log(revealables);
|
||||||
|
|
||||||
|
return subprojectWithRevealables;
|
||||||
|
})
|
||||||
|
);*/
|
||||||
|
|
||||||
|
const projectContributors = await getProjectContributors();
|
||||||
|
|
||||||
|
console.log('overall contribs', projectContributors);
|
||||||
|
|
||||||
|
// console.log('Resulting metadata:');
|
||||||
|
/* console.log({
|
||||||
|
subprojects: subprojectsWithRevealables,
|
||||||
|
});*/
|
||||||
|
};
|
||||||
|
|
||||||
|
main();
|
||||||
97
scripts/helpers.js
Normal file
97
scripts/helpers.js
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
import { resolve } from 'path';
|
||||||
|
import { readFile } from 'fs/promises';
|
||||||
|
import { Octokit } from '@octokit/core';
|
||||||
|
|
||||||
|
const octokit = new Octokit({
|
||||||
|
auth: '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',
|
||||||
|
});
|
||||||
|
|
||||||
|
export async function getProjectContributors() {
|
||||||
|
const contribs = await octokit.request('/repos/ethereumjs/ethereumjs-monorepo/contributors');
|
||||||
|
const contributors = await Promise.all(
|
||||||
|
contribs.data.map(async (contrib) => createContributor(contrib))
|
||||||
|
);
|
||||||
|
|
||||||
|
return contributors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*export async function getContributorsForSubproject(subproject) {
|
||||||
|
const subprojectPackageJson = await readFile(
|
||||||
|
resolve(subproject.filePath, 'package.json'),
|
||||||
|
'utf8'
|
||||||
|
);
|
||||||
|
const parsedPackageJson = JSON.parse(subprojectPackageJson);
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (parsedPackageJson.contributors && parsedPackageJson.contributors.length > 0) {
|
||||||
|
const contributors = await Promise.all(
|
||||||
|
parsedPackageJson.contributors.map(async (cntrb) => await createContributor(cntrb))
|
||||||
|
);
|
||||||
|
|
||||||
|
return contributors.filter((contributor) => !!contributor);
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
const createContributor = async (contrib) => {
|
||||||
|
if (!contrib) return;
|
||||||
|
|
||||||
|
let commits;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const rawCommits = await octokit.request(`/repos/ethereumjs/ethereumjs-monorepo/commits`, {
|
||||||
|
per_page: 3,
|
||||||
|
author: contrib.name,
|
||||||
|
});
|
||||||
|
|
||||||
|
commits = rawCommits.data.map((commit) => ({
|
||||||
|
url: commit.html_url,
|
||||||
|
message: commit.commit.message,
|
||||||
|
time: commit.commit.author.date,
|
||||||
|
}));
|
||||||
|
} catch (e) {}
|
||||||
|
|
||||||
|
return {
|
||||||
|
type: 'CONTRIBUTOR',
|
||||||
|
name: contrib.login,
|
||||||
|
url: contrib.html_url,
|
||||||
|
size: contrib.contributions,
|
||||||
|
imageUrl: contrib.avatar_url,
|
||||||
|
commits,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const createPackage = (pkg) => {
|
||||||
|
const path = 'path.to.package.json';
|
||||||
|
const size = 0;
|
||||||
|
const contents = '';
|
||||||
|
const url = '';
|
||||||
|
|
||||||
|
return {
|
||||||
|
type: 'PACKAGE',
|
||||||
|
name: pkg,
|
||||||
|
path,
|
||||||
|
size,
|
||||||
|
contents,
|
||||||
|
url,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const createLegacy = (lgcy) => {
|
||||||
|
const size = 0;
|
||||||
|
const contents = '';
|
||||||
|
const url = '';
|
||||||
|
|
||||||
|
return {
|
||||||
|
type: 'LEGACY',
|
||||||
|
name: 'filename',
|
||||||
|
path: 'filePath',
|
||||||
|
size,
|
||||||
|
contents,
|
||||||
|
url,
|
||||||
|
};
|
||||||
|
};
|
||||||
Reference in a new issue