Skip to content

Commit

Permalink
Merge branch 'maxam2017:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
thomasmerz committed Dec 22, 2023
2 parents e7ac622 + f39896b commit 0a2dba4
Show file tree
Hide file tree
Showing 9 changed files with 1,331 additions and 1,179 deletions.
63 changes: 24 additions & 39 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,41 +1,26 @@
module.exports = {
"env": {
"browser": true,
"es6": true
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended"
],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module"
},
"plugins": [
"@typescript-eslint"
],
"rules": {
"indent": [
"error",
2
],
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"error",
"single"
],
"semi": [
"error",
"always"
]
},
"ignorePatterns": ["dist/", "node_modules/"],
env: {
browser: true,
es6: true,
node: true,
},
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/eslint-recommended',
'plugin:prettier/recommended',
],
globals: {
Atomics: 'readonly',
SharedArrayBuffer: 'readonly',
},
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
},
plugins: ['@typescript-eslint'],
rules: {
'prettier/prettier': ['error', { singleQuote: true }],
},
ignorePatterns: ['dist/', 'node_modules/'],
};
3 changes: 3 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ on:
branches:
- '*'

permissions:
contents: write

jobs:
build:
runs-on: ubuntu-latest
Expand Down
6 changes: 6 additions & 0 deletions .prettierrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
arrowParens: 'avoid',
tabWidth: 2,
useTabs: false,
singleQuote: true,
};
2 changes: 1 addition & 1 deletion dist/index.js

Large diffs are not rendered by default.

13 changes: 8 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,17 @@
"@types/dotenv": "^8.2.0",
"@types/node": "^13.11.1",
"@types/node-fetch": "^2.5.6",
"@typescript-eslint/eslint-plugin": "^2.28.0",
"@typescript-eslint/parser": "^2.28.0",
"@typescript-eslint/eslint-plugin": "^6.4.1",
"@typescript-eslint/parser": "^6.4.1",
"@zeit/ncc": "^0.22.1",
"eslint": "^6.8.0",
"eslint": "^8.48.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-prettier": "^5.0.0",
"husky": "^4.2.5",
"lint-staged": "^10.1.3",
"ts-node": "^8.8.2",
"typescript": "^3.8.3"
"prettier": "^3.0.2",
"ts-node": "^10.9.1",
"typescript": "5.1.6"
},
"husky": {
"hooks": {
Expand Down
18 changes: 8 additions & 10 deletions src/githubQuery.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import fetch from 'node-fetch';

export default async function(query: string) {
const res = await fetch(
'https://api.github.com/graphql', {
method: 'POST',
headers: {
Authorization: `bearer ${process.env.GH_TOKEN}`,
},
body: JSON.stringify({ query }).replace(/\\n/g, ''),
}
);
export default async function (query: string) {
const res = await fetch('https://api.github.com/graphql', {
method: 'POST',
headers: {
Authorization: `bearer ${process.env.GH_TOKEN}`,
},
body: JSON.stringify({ query }).replace(/\\n/g, ''),
});

return res.json();
}
86 changes: 52 additions & 34 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@ import { Octokit } from '@octokit/rest';

import githubQuery from './githubQuery';
import generateBarChart from './generateBarChart';
import { userInfoQuery, createContributedRepoQuery, createCommittedDateQuery } from './queries';
import {
userInfoQuery,
createContributedRepoQuery,
createCommittedDateQuery,
} from './queries';
/**
* get environment variable
*/
Expand All @@ -15,32 +19,37 @@ interface IRepo {
owner: string;
}

(async() => {
(async () => {
/**
* First, get user id
*/
const userResponse = await githubQuery(userInfoQuery)
.catch(error => console.error(`Unable to get username and id\n${error}`));
const { login: username, id } = userResponse?.data?.viewer;
const userResponse = await githubQuery(userInfoQuery).catch(error =>
console.error(`Unable to get username and id\n${error}`),
);
const { login: username, id } = userResponse?.data?.viewer ?? {};

/**
* Second, get contributed repos
*/
const contributedRepoQuery = createContributedRepoQuery(username);
const repoResponse = await githubQuery(contributedRepoQuery)
.catch(error => console.error(`Unable to get the contributed repo\n${error}`));
const repos: IRepo[] = repoResponse?.data?.user?.repositoriesContributedTo?.nodes
.filter(repoInfo => (!repoInfo?.isFork))
.map(repoInfo => ({
name: repoInfo?.name,
owner: repoInfo?.owner?.login,
}));
const repoResponse = await githubQuery(contributedRepoQuery).catch(error =>
console.error(`Unable to get the contributed repo\n${error}`),
);
const repos: IRepo[] =
repoResponse?.data?.user?.repositoriesContributedTo?.nodes
.filter(repoInfo => !repoInfo?.isFork)
.map(repoInfo => ({
name: repoInfo?.name,
owner: repoInfo?.owner?.login,
}));

/**
* Third, get commit time and parse into commit-time/hour diagram
*/
const committedTimeResponseMap = await Promise.all(
repos.map(({name, owner}) => githubQuery(createCommittedDateQuery(id, name, owner)))
repos.map(({ name, owner }) =>
githubQuery(createCommittedDateQuery(id, name, owner)),
),
).catch(error => console.error(`Unable to get the commit info\n${error}`));

if (!committedTimeResponseMap) return;
Expand All @@ -51,19 +60,24 @@ interface IRepo {
let night = 0; // 0 - 6

committedTimeResponseMap.forEach(committedTimeResponse => {
committedTimeResponse?.data?.repository?.defaultBranchRef?.target?.history?.edges.forEach(edge => {
const committedDate = edge?.node?.committedDate;
const timeString = new Date(committedDate).toLocaleTimeString('en-US', { hour12: false, timeZone: process.env.TIMEZONE });
const hour = +(timeString.split(':')[0]);
committedTimeResponse?.data?.repository?.defaultBranchRef?.target?.history?.edges.forEach(
edge => {
const committedDate = edge?.node?.committedDate;
const timeString = new Date(committedDate).toLocaleTimeString('en-US', {
hour12: false,
timeZone: process.env.TIMEZONE,
});
const hour = +timeString.split(':')[0];

/**
* voting and counting
*/
if (hour >= 6 && hour < 12) morning++;
if (hour >= 12 && hour < 18) daytime++;
if (hour >= 18 && hour < 24) evening++;
if (hour >= 0 && hour < 6) night++;
});
/**
* voting and counting
*/
if (hour >= 6 && hour < 12) morning++;
if (hour >= 12 && hour < 18) daytime++;
if (hour >= 18 && hour < 24) evening++;
if (hour >= 0 && hour < 6) night++;
},
);
});

/**
Expand All @@ -80,7 +94,7 @@ interface IRepo {
];

const lines = oneDay.reduce((prev, cur) => {
const percent = cur.commits / sum * 100;
const percent = (cur.commits / sum) * 100;
const line = [
`${cur.label}`.padEnd(10),
`${cur.commits.toString().padStart(5)} commits`.padEnd(14),
Expand All @@ -89,24 +103,28 @@ interface IRepo {
];

return [...prev, line.join(' ')];
}, []);
}, [] as string[]);

/**
* Finally, write into gist
*/
const octokit = new Octokit({ auth: `token ${process.env.GH_TOKEN}` });
const gist = await octokit.gists.get({
gist_id: process.env.GIST_ID
}).catch(error => console.error(`Unable to update gist\n${error}`));
const gist = await octokit.gists
.get({
gist_id: `${process.env.GIST_ID}`,
})
.catch(error => console.error(`Unable to update gist\n${error}`));
if (!gist) return;

const filename = Object.keys(gist.data.files)[0];
await octokit.gists.update({
gist_id: process.env.GIST_ID,
gist_id: `${process.env.GIST_ID}`,
files: {
[filename]: {
// eslint-disable-next-line quotes
filename: (morning + daytime) > (evening + night) ? "I'm an early 🐤" : "I'm a night 🦉",
filename:
morning + daytime > evening + night
? "I'm an early 🐤"
: "I'm a night 🦉",
content: lines.join('\n'),
},
},
Expand Down
6 changes: 5 additions & 1 deletion src/queries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@ export const createContributedRepoQuery = (username: string) => `
}
`;

export const createCommittedDateQuery = (id: string, name: string, owner: string) => `
export const createCommittedDateQuery = (
id: string,
name: string,
owner: string,
) => `
query {
repository(owner: "${owner}", name: "${name}") {
defaultBranchRef {
Expand Down
Loading

0 comments on commit 0a2dba4

Please sign in to comment.