Get project contribs

This commit is contained in:
Dennis Schoepf 2021-08-05 21:39:18 +02:00
parent 2605bfc16b
commit fd00b10f2e
6 changed files with 1156 additions and 1 deletions

1
.gitignore vendored
View file

@ -3,3 +3,4 @@ node_modules
dist dist
.yarn .yarn
pnp.js pnp.js
sourceproject

997
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -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
View 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
View 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,
};
};