{"id":19825308,"url":"https://github.com/zerocracy/judges-action","last_synced_at":"2026-01-23T10:28:08.291Z","repository":{"id":239323645,"uuid":"799177290","full_name":"zerocracy/judges-action","owner":"zerocracy","description":"A GitHub Action that scans the entire repository and generates a Factbase for Zerocracy","archived":false,"fork":false,"pushed_at":"2024-10-29T10:58:12.000Z","size":21309,"stargazers_count":12,"open_issues_count":8,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-10-29T12:48:15.152Z","etag":null,"topics":["github-actions","ruby","zerocracy"],"latest_commit_sha":null,"homepage":"https://zerocracy.github.io/judges-action/zerocracy.html","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zerocracy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-11T11:35:25.000Z","updated_at":"2024-10-24T05:34:16.000Z","dependencies_parsed_at":"2024-11-05T16:18:29.971Z","dependency_job_id":"566a4382-d3ca-42ee-9352-c50f94725b5d","html_url":"https://github.com/zerocracy/judges-action","commit_stats":null,"previous_names":["zerocracy/judges-action"],"tags_count":55,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zerocracy%2Fjudges-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zerocracy%2Fjudges-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zerocracy%2Fjudges-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zerocracy%2Fjudges-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zerocracy","download_url":"https://codeload.github.com/zerocracy/judges-action/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224262108,"owners_count":17282267,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["github-actions","ruby","zerocracy"],"created_at":"2024-11-12T11:07:15.463Z","updated_at":"2026-01-23T10:28:08.282Z","avatar_url":"https://github.com/zerocracy.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Judges Zerocracy Action\n\n[![DevOps By Rultor.com](https://www.rultor.com/b/zerocracy/judges-action)](https://www.rultor.com/p/zerocracy/judges-action)\n\n[![make](https://github.com/zerocracy/judges-action/actions/workflows/make.yml/badge.svg)](https://github.com/zerocracy/judges-action/actions/workflows/make.yml)\n[![discipline](https://zerocracy.github.io/judges-action/zerocracy-badge.svg)](https://zerocracy.github.io/judges-action/zerocracy-vitals.html)\n[![Hits-of-Code](https://hitsofcode.com/github/zerocracy/judges-action)](https://hitsofcode.com/view/github/zerocracy/judges-action)\n[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/zerocracy/judges-action/blob/master/LICENSE.txt)\n\nFirst, get a free authentication token from [Zerocracy.com] and add it as\n  `ZEROCRACY_TOKEN` [secret][secrets] to your repository.\n\nThen, create a new [personal access token][PAT]\n  and add it as a `ZEROCRACY_PAT` secret to your repository.\nDon't forget to give it full \"repository access\".\nYou may ignore this, if all your repositories are public.\n\nThen, add this `zerocracy.yml` file to your GitHub repository\n  at the `.github/workflows/` directory\n  (replace `foo` with the name of your team, `yegor256` with the name of the\n  account owner, and `42` with anything between zero and `60`):\n\n```yaml\nname: zerocracy\n'on':\n  schedule:\n    - cron: '42 * * * *'\nconcurrency:\n  group: zerocracy\n  cancel-in-progress: false\njobs:\n  zerocracy:\n    if: github.repository_owner == 'yegor256'\n    runs-on: ubuntu-24.04\n    timeout-minutes: 25\n    steps:\n      - uses: actions/checkout@v4\n      - uses: zerocracy/judges-action@0.17.10\n        with:\n          token: ${{ secrets.ZEROCRACY_TOKEN }}\n          github-token: ${{ secrets.ZEROCRACY_PAT }}\n          repositories: yegor256/foo\n          factbase: foo.fb\n      - uses: zerocracy/pages-action@0.6.4\n        with:\n          github-token: ${{ secrets.ZEROCRACY_PAT }}\n          factbase: foo.fb\n      - uses: JamesIves/github-pages-deploy-action@v4.6.0\n        with:\n          folder: pages\n          clean: false\n```\n\nIn the file, there is only one place that you should configure:\n  the `repositories=...` should have a comma-separated list\n  of repositories where your team works (instead of `...`).\nIf you have more than one repository in your product, list them here.\nThe CI job must only be added to one of them.\n\nOnce the file is added, GitHub starts running this job hourly,\n  collecting information about most important activities of\n  your programmers.\nThe plugin gives them awards for good things\n  they do (like fixing bugs) and also punishes them (by deducting points)\n  for bad things (like stale pull requests).\n\nThe plugin also generates a summary `foo.html` file, which\n  is automatically deployed to the `gh-pages` branch.\nYou can configure your GitHub repository to render the branch\n  as a static website via [GitHub Pages].\nThus, the summary page is updated hourly and you see\n  who is _subjectively_ the best performer in your team, similar to\n  [what we see](https://zerocracy.github.io/judges-action/zerocracy-vitals.html)\n  in our team.\n\n## Configuration\n\nThe following options are expected by the plugin\n  (see how we [configure][ours] it):\n\n* `token` (mandatory) is an authentication token from\n  [Zerocracy.com](https://www.zerocracy.com)\n* `options` (mandatory) is a list of `k=v` pairs, which are explained below\n* `factbase` (mandatory) is the path of the [Factbase][factbase] file\n  (where everything is kept)\n* `repositories` (optional) is a comma-separated list of masks that\n  determine the repositories to manage, where\n  `yegor256/*` means all repos of the user,\n  `yegor256/judges` means a specific repo,\n  and\n  `-yegor256/judges` means an exclusion of the repo from the list.\n* `github-token` (optional) is an authentication GitHub access token\n* `verbose` (optional) makes it print debugging info if set to `true`\n* `timeout` (optional) is how many minutes each judge can spend\n* `lifetime` (optional) is how many minutes the entire update can take\n* `cycles` (optional) is a number of update cycles to run\n* `sqlite-cache` (optional) is a path of SQLite database file with HTTP cache\n* `bots` (optional) is a comma-separated list of GitHub user logins to mark as bots\n\nThe following `k=v` pairs inside the `options` may be important:\n\n* `github_token=...` is a default GitHub token, usually to be set to\n  `${{ secrets.GITHUB_TOKEN }}`\n* `repositories=..` is a comma-separated list of masks that\n  determine the repositories to manage, where\n  `yegor256/*` means all repos of the user,\n  `yegor256/judges` means a specific repo,\n  and\n  `-yegor256/judges` means an exclusion of the repo from the list.\n* `sqlite_cache_maxsize=10M` is the maximum size of HTTP cache file\n* `sqlite_cache_maxsize=10K` is the maximum size of a single HTTP entry to cache\n\nThe `zerocracy/pages-action` plugin is responsible for rendering\n  the summary HTML page: its configuration is not explained here,\n  check its [own repository](https://github.com/zerocracy/pages-action).\n\n## How to Contribute\n\nYou need to have\n  [GNU Bash] 5+,\n  [GNU Make] 4+,\n  [Ruby] 3+,\n  [Bundler],\n  and\n  [GNU parallel] installed.\n\nThen, just run:\n\n```bash\nbundle update\nmake\n```\n\nThis should build a new Docker image named `judges-action`\n  and then run the entire cycle\n  inside a new Docker container.\nObviously, you need to have [Docker] installed.\nThe Docker image is deleted by the end of the build\n  (either success or failure).\n\nIn order to run \"live\" tests of some judges, do this:\n\n```bash\nbundle exec rake -- --live\n```\n\nIn order to run a single test, try this:\n\n```bash\nbundle exec ruby test/judges/test-dimensions-of-terrain.rb -n test_total_repositories\n```\n\n[factbase]: https://github.com/yegor256/factbase\n[secrets]: https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions\n[ours]: https://github.com/zerocracy/judges-action/blob/master/.github/workflows/zerocracy.yml\n[PAT]: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens\n[Ruby]: https://www.ruby-lang.org/en/\n[Bundler]: https://bundler.io/\n[GNU Parallel]: https://www.gnu.org/software/parallel/\n[GNU Make]: https://www.gnu.org/software/make/\n[GNU Bash]: https://www.gnu.org/software/bash/\n[Docker]: https://docs.docker.com/get-docker/\n[GitHub Pages]: https://pages.github.com/\n[Zerocracy.com]: https://www.zerocracy.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzerocracy%2Fjudges-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzerocracy%2Fjudges-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzerocracy%2Fjudges-action/lists"}