Potentially use sourcecred for contribution leaderboard, including all GitHub interactions
Nobody has claimed this yet.
- Dominant language
- MDX
- Stars
- 98
- Forks
- 298
- Avg merge
- 14h 38m
- Merged PRs (30d)
- 38
Description
SourceCred is a system that tracks contributions to an open-source project that is beyond code commits, e.g. issues, PRs, comments, references etc, in the form of "Cred" units. There is a GitHub Action in progress that could be used. Each organization can set weights for how much each interaction matters, as described in their Gentle Introduction to Cred. Here is an example in action on SourceCred itself: https://sourcecred.io/cred/timeline/@sourcecred/
(h/t to @luilzirber who used it here: https://github.com/dib-lab/sourmash/pull/837#issuecomment-585400941)
1. Set up SourceCred
Set up the SourceCred prototype
Mon 17 Feb - 13:12 ~/code
@olgabot git clone https://github.com/sourcecred/sourcecred.git
cd sourcecred
yarn install
yarn backend
zsh: correct 'yarn' to 'tar' [nyae]? n
Cloning into 'sourcecred'...
remote: Enumerating objects: 78, done.
remote: Counting objects: 100% (78/78), done.
remote: Compressing objects: 100% (38/38), done.
remote: Total 12815 (delta 47), reused 60 (delta 40), pack-reused 12737
Receiving objects: 100% (12815/12815), 6.44 MiB | 11.94 MiB/s, done.
Resolving deltas: 100% (9070/9070), done.
yarn install v1.22.0
[1/4] 🔍 Resolving packages...
[2/4] 🚚 Fetching packages...
[3/4] 🔗 Linking dependencies...
[4/4] 🔨 Building fresh packages...
✨ Done in 58.40s.
yarn run v1.22.0
$ NODE_ENV=development webpack --config config/webpack.config.backend.js
Removing contents of build directory: /Users/olgabot/code/sourcecred/bin
(node:25729) DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` instead
Hash: e5c10d955bf5293d64c1
Version: webpack 4.41.2
Time: 2326ms
Built at: 02/17/2020 1:13:26 PM
Asset Size Chunks Chunk Names
createExampleRepo.js 21.8 KiB createExampleRepo [emitted] createExampleRepo
fetchAndPrintGithubOrg.js 150 KiB fetchAndPrintGithubOrg [emitted] fetchAndPrintGithubOrg
fetchAndPrintGithubRepo.js 149 KiB fetchAndPrintGithubRepo [emitted] fetchAndPrintGithubRepo
generateGithubGraphqlFlowTypes.js 25 KiB generateGithubGraphqlFlowTypes [emitted] generateGithubGraphqlFlowTypes
sourcecred.js 503 KiB sourcecred [emitted] sourcecred
Entrypoint sourcecred = sourcecred.js
Entrypoint generateGithubGraphqlFlowTypes = generateGithubGraphqlFlowTypes.js
Entrypoint fetchAndPrintGithubRepo = fetchAndPrintGithubRepo.js
Entrypoint fetchAndPrintGithubOrg = fetchAndPrintGithubOrg.js
Entrypoint createExampleRepo = createExampleRepo.js
[./src/backend/memoryCacheProvider.js] 924 bytes {fetchAndPrintGithubRepo} [built]
[./src/cli/command.js] 242 bytes {sourcecred} [built]
[./src/cli/main.js] 521 bytes {sourcecred} [built]
[./src/cli/sourcecred.js] 914 bytes {sourcecred} [built]
[./src/plugins/git/bin/createExampleRepo.js] 1.13 KiB {createExampleRepo} [built]
[./src/plugins/git/example/exampleRepo.js] 3.66 KiB {createExampleRepo} [built]
[./src/plugins/github/bin/fetchAndPrintGithubOrg.js] 1.27 KiB {fetchAndPrintGithubOrg} [built]
[./src/plugins/github/bin/fetchAndPrintGithubRepo.js] 1.36 KiB {fetchAndPrintGithubRepo} [built]
[./src/plugins/github/bin/generateGraphqlFlowTypes.js] 115 bytes {generateGithubGraphqlFlowTypes} [built]
[./src/plugins/github/fetchGithubOrg.js] 2.37 KiB {sourcecred} {fetchAndPrintGithubOrg} [built]
[./src/plugins/github/fetchGithubRepo.js] 7.18 KiB {sourcecred} {fetchAndPrintGithubRepo} {fetchAndPrintGithubOrg} [built]
[./src/plugins/github/generateGraphqlFlowTypes.js] 1.27 KiB {generateGithubGraphqlFlowTypes} [built]
[./src/plugins/github/repoId.js] 858 bytes {sourcecred} {fetchAndPrintGithubRepo} {fetchAndPrintGithubOrg} [built]
[./src/plugins/github/token.js] 1.37 KiB {sourcecred} {fetchAndPrintGithubRepo} {fetchAndPrintGithubOrg} [built]
[./src/tools/entry.js] 509 bytes {sourcecred} [built]
+ 96 hidden modules
✨ Done in 3.54s.
2. Run SourceCred on all nf-core repos
Ran sourcedcred on all repos using a modified one-liner from a comment on how to clone all repos of an organization
curl -s https://api.github.com/orgs/nf-core/repos | grep full_name | cut -d \" -f 4 | grep -vE 'configs|tools' | xargs node bin/sourcecred.js load
Ran into some issues with the tools and configs repos that was supposedly fixed (https://github.com/sourcecred/sourcecred/pull/1337) so I didn't debug:
✘ Mon 17 Feb - 13:25 ~/code/sourcecred origin ☊ master ✔
@olgabot curl -s https://api.github.com/orgs/nf-core/repos | grep full_name | cut -d \" -f 4 | xargs node bin/sourcecred.js load
GO github/nf-core/cookiecutter
DONE github/nf-core/cookiecutter: 14s
GO compute-cred
DONE compute-cred: 128ms
GO github/nf-core/nf-core.github.io
DONE github/nf-core/nf-core.github.io: 14s
GO compute-cred
DONE compute-cred: 66ms
GO github/nf-core/tools
Warning: when setting Reaction["MDg6UmVhY3Rpb24zMDY0NTMwMw=="].user: object "MDEyOk9yZ2FuaXphdGlvbjIyOTA4NDM4" looks like it should have type "Organization", but the server claims that it has type "User"
Error: Unknown type: undefined
at Mirror._nontransactionallyUpdateOwnData (webpack:///./src/graphql/mirror.js?:428:176)
at Mirror._nontransactionallyUpdateData (webpack:///./src/graphql/mirror.js?:249:235)
at eval (webpack:///./src/graphql/mirror.js?:262:821)
at _inTransaction (webpack:///./src/graphql/mirror.js?:577:142)
at Mirror._updateStep (webpack:///./src/graphql/mirror.js?:262:690)
at runMicrotasks (<anonymous>)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async Mirror.update (webpack:///./src/graphql/mirror.js?:292:44)
at async fetchGithubRepo (webpack:///./src/plugins/github/fetchGithubRepo.js?:57:74)
at async Object.updateMirror (webpack:///./src/plugins/github/loader.js?:12:377)
Similar issue with configs:
✘ Mon 17 Feb - 13:28 ~/code/sourcecred origin ☊ master ✔
@olgabot curl -s https://api.github.com/orgs/nf-core/repos | grep full_name | cut -d \" -f 4 | sort | xargs node bin/sourcecred.js load
GO github/nf-core/ampliseq
DONE github/nf-core/ampliseq: 32s
GO compute-cred
DONE compute-cred: 521ms
GO github/nf-core/atacseq
DONE github/nf-core/atacseq: 1m 59s
GO compute-cred
DONE compute-cred: 563ms
GO github/nf-core/bacass
DONE github/nf-core/bacass: 46s
GO compute-cred
DONE compute-cred: 153ms
GO github/nf-core/bcellmagic
DONE github/nf-core/bcellmagic: 1m 6s
GO compute-cred
DONE compute-cred: 285ms
GO github/nf-core/chipseq
DONE github/nf-core/chipseq: 53s
GO compute-cred
DONE compute-cred: 2s
GO github/nf-core/clinvap
DONE github/nf-core/clinvap: 7s
GO compute-cred
DONE compute-cred: 6ms
GO github/nf-core/configs
Warning: when setting Reaction["MDg6UmVhY3Rpb24zODM2NzQxNg=="].user: object "MDEyOk9yZ2FuaXphdGlvbjM3MTQ3NjU0" looks like it should have type "Organization", but the server claims that it has type "User"
Error: Unknown type: undefined
at Mirror._nontransactionallyUpdateOwnData (webpack:///./src/graphql/mirror.js?:428:176)
at Mirror._nontransactionallyUpdateData (webpack:///./src/graphql/mirror.js?:249:235)
at eval (webpack:///./src/graphql/mirror.js?:262:821)
at _inTransaction (webpack:///./src/graphql/mirror.js?:577:142)
at Mirror._updateStep (webpack:///./src/graphql/mirror.js?:262:690)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async Mirror.update (webpack:///./src/graphql/mirror.js?:292:44)
at async fetchGithubRepo (webpack:///./src/plugins/github/fetchGithubRepo.js?:57:74)
at async Object.updateMirror (webpack:///./src/plugins/github/loader.js?:12:377)
at async Promise.all (index 0)
So instead of fixing it, I ignored the tools and config repos 🙃
Example output
Timeline

Example weights

(I tried building an interactive version on Netlify but building the site took over 20min which exceeds Netlify's limit)
Could be an interesting way to recognize the contributions of the community at large!
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the SourceCred prototype setup and the linked GitHub Action, then reproduce the documented node bin/sourcecred.js load workflow against the nf-core repositories. Pay particular attention to the reported failures for the tools and configs repositories. Done means there is a decided, working approach for displaying contribution credits across GitHub interactions.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- github, github-actions, javascript, node.js
- Domain
- analytics, web-dev
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100