{"id":13522781,"url":"https://github.com/dhth/prs","last_synced_at":"2025-04-06T02:07:19.042Z","repository":{"id":230442600,"uuid":"779329820","full_name":"dhth/prs","owner":"dhth","description":"Stay updated on PRs from your terminal","archived":false,"fork":false,"pushed_at":"2025-03-01T21:02:13.000Z","size":1543,"stargazers_count":126,"open_issues_count":5,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-30T01:05:34.630Z","etag":null,"topics":["bubbletea","github","pull-requests","tui"],"latest_commit_sha":null,"homepage":"https://tools.dhruvs.space/prs","language":"Go","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/dhth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-03-29T15:26:19.000Z","updated_at":"2025-03-22T09:22:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"6be61486-79ea-4b30-8c45-3d9d219b2a6b","html_url":"https://github.com/dhth/prs","commit_stats":null,"previous_names":["dhth/prs"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhth%2Fprs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhth%2Fprs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhth%2Fprs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhth%2Fprs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dhth","download_url":"https://codeload.github.com/dhth/prs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247423512,"owners_count":20936626,"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":["bubbletea","github","pull-requests","tui"],"created_at":"2024-08-01T06:00:52.247Z","updated_at":"2025-04-06T02:07:19.013Z","avatar_url":"https://github.com/dhth.png","language":"Go","readme":"# prs\n\n[![Build Workflow Status](https://img.shields.io/github/actions/workflow/status/dhth/prs/build.yml?style=flat-square)](https://github.com/dhth/prs/actions/workflows/build.yml)\n[![Vulncheck Workflow Status](https://img.shields.io/github/actions/workflow/status/dhth/prs/vulncheck.yml?style=flat-square\u0026label=vulncheck)](https://github.com/dhth/prs/actions/workflows/vulncheck.yml)\n[![Latest Release](https://img.shields.io/github/release/dhth/prs.svg?style=flat-square)](https://github.com/dhth/prs/releases/latest)\n[![Commits Since Latest Release](https://img.shields.io/github/commits-since/dhth/prs/latest?style=flat-square)](https://github.com/dhth/prs/releases)\n\n`prs` lets you stay updated on pull requests from your terminal.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://tools.dhruvs.space/images/prs/v1-0-0/prs.gif\" alt=\"Usage\" /\u003e\n\u003c/p\u003e\n\n[source video](https://youtu.be/H81ru9cQhDo)\n\n🤔 Motivation\n---\n\nFor my day job as a tech lead, I need to stay updated on several PRs, and my\nhope is that `prs` will let me do that faster than the Github web UI (or other\ntools for that matter).\n\n💾 Installation\n---\n\n**homebrew**:\n\n```sh\nbrew install dhth/tap/prs\n```\n\n**go**:\n\n```sh\ngo install github.com/dhth/prs@latest\n```\n\nOr get the binaries directly from a [release][3]. Read more about verifying the\nauthenticity of released artifacts [here](#-verifying-release-artifacts).\n\n🔑 Authentication\n---\n\nYou can have `prs` make authenticated calls to GitHub on your behalf in either\nof two ways:\n\n- Have an authenticated instance of [gh](https://github.com/cli/cli) available\n    (recommended).\n- Provide a valid Github token via `$GH_TOKEN`.\n\n⚡️ Usage\n---\n\n`prs` has two modes:\n\n- **Query mode** (default): lets you search PRs based on a query you provide (based\n  on github's [search\n  syntax](https://docs.github.com/en/search-github/searching-on-github/searching-issues-and-pull-requests))\n- **Repos mode**: let you pick a repository from a predefined list\n\n### Query Mode\n\n```shell\nprs --query='type:pr repo:neovim/neovim state:open label:lua linked:issue'\n\n# view open PRs where you're the author\nprs -q 'type:pr author:@me state:open'\n\n# view open PRs where a review has been requested from you\nPRS_QUERY='type:pr user-review-requested:@me state:open' prs\n\n# read query from prs' config file\nprs\n```\n\n### Repos Mode\n\n```shell\nprs --mode=repos --repos='dhth/prs,dhth/omm,dhth/hours'\n\nPRS_REPOS='dhth/prs,dhth/omm,dhth/hours' prs --mode=repos\n\n# read repos from prs' config file\nprs -m repos\n```\n\n🛠️ Configuration\n---\n\n`prs` accepts configuration from any of the following:\n\n- Command line flags (run `prs -h` for details)\n- Environment variables (eg. `PRS_QUERY`)\n- `prs`'s config file, which looks like this:\n\n    ```yaml\n    num: 20\n    repos:\n      - dhth/omm\n      - dhth/hours\n      - dhth/prs\n      - neovim/neovim\n      - junegunn/fzf\n      - BurntSushi/ripgrep\n      - charmbracelet/bubbletea\n      - goreleaser/goreleaser\n      - dandavison/delta\n    query: 'type:pr repo:neovim/neovim state:open label:lua linked:issue'\n    ```\n\nFor every configuration property, the order of priority is: `flag \u003e\u003e\nenvironment variables \u003e\u003e config file`, ie, flags take the highest priority.\n\n**[`^ back to top ^`](#prs)**\n\nScreenshots\n---\n\n### PR List View\n\n![Screen 1](https://tools.dhruvs.space/images/prs/v1-0-0/prs-1.png)\n\n### PR Timeline List View\n\n![Screen 2](https://tools.dhruvs.space/images/prs/v1-0-0/prs-2.png)\n\n### PR Timeline Item Detail View\n![Screen 3](https://tools.dhruvs.space/images/prs/v1-0-0/prs-3.png)\n\n### PR Details View\n\n![Screen 4](https://tools.dhruvs.space/images/prs/v1-0-0/prs-4.png)\n\n![Screen 5](https://tools.dhruvs.space/images/prs/v1-0-0/prs-5.png)\n\n![Screen 6](https://tools.dhruvs.space/images/prs/v1-0-0/prs-6.png)\n\n![Screen 7](https://tools.dhruvs.space/images/prs/v1-0-0/prs-7.png)\n\n**[`^ back to top ^`](#prs)**\n\nKeyboard Shortcuts\n---\n\n### General\n\n```text\n  q/esc/ctrl+c                      go back\n  Q                                 quit from anywhere\n  ?                                 Open Help View\n  d                                 Open PR Details View\n  ctrl+v                            Show PR details using gh\n```\n\n### PR List View\n\n```text\n  Indicators for current review decision:\n\n  ±  implies                        CHANGES_REQUESTED\n  🟡 implies                        REVIEW_REQUIRED\n  ✅ implies                        APPROVED\n\n  ⏎/tab/shift+tab/2                 Switch focus to PR Timeline View\n  ctrl+s                            Switch focus to Repo List View (when --mode=repos)\n  ctrl+d                            Show PR diff\n  ctrl+r                            Reload PR list\n  ctrl+b                            Open PR in browser\n```\n\n### PR Details View\n\n```text\n  h/N/←                             Go to previous section\n  l/n/→                             Go to next section\n  1/2/3...                          Go to specific section\n  J/]                               Go to next PR\n  K/[                               Go to previous PR\n  d                                 Go back to last view\n  ctrl+b                            Open PR in browser\n```\n\n### Timeline List View\n\n\n```text\n  tab/shift+tab/1                   Switch focus to PR List View\n  ⏎/3                               Show details for PR timeline item (when applicable)\n  ctrl+d                            Show PR diff\n  ctrl+b                            Open timeline item in browser\n  ctrl+r                            Reload PR timeline\n```\n\n### Timeline Item Detail View\n\n\n```text\n  1                                 Switch focus to PR List View\n  2                                 Switch focus to PR Timeline List View\n  ctrl+d                            Show PR diff\n  ctrl+b                            Open timeline item in browser\n  h/N/←                             Go to previous section\n  l/n/→                             Go to next section\n```\n\n### 🔐 Verifying release artifacts\n\nIn case you get the `prs` binary directly from a [release][3], you may want to\nverify its authenticity. Checksums are applied to all released artifacts, and\nthe resulting checksum file is signed using\n[cosign](https://docs.sigstore.dev/cosign/installation/).\n\nSteps to verify (replace the version in the commands listed with the one you\nwant):\n\n1. Download the following files from the release:\n\n   - prs_1.0.0_checksums.txt\n   - prs_1.0.0_checksums.txt.pem\n   - prs_1.0.0_checksums.txt.sig\n\n2. Verify the signature:\n\n   ```shell\n   cosign verify-blob prs_1.0.0_checksums.txt \\\n       --certificate prs_1.0.0_checksums.txt.pem \\\n       --signature prs_1.0.0_checksums.txt.sig \\\n       --certificate-identity-regexp 'https://github\\.com/dhth/prs/\\.github/workflows/.+' \\\n       --certificate-oidc-issuer \"https://token.actions.githubusercontent.com\"\n   ```\n\n3. Download the compressed archive you want, and validate its checksum:\n\n   ```shell\n   curl -sSLO https://github.com/dhth/prs/releases/download/v1.0.0/prs_1.0.0_linux_amd64.tar.gz\n   sha256sum --ignore-missing -c prs_1.0.0_checksums.txt\n   ```\n\n3. If checksum validation goes through, uncompress the archive:\n\n   ```shell\n   tar -xzf prs_1.0.0_linux_amd64.tar.gz\n   ./prs\n   # profit!\n   ```\n\nAcknowledgements\n---\n\n`prs` is built using [bubbletea][1], and released via [goreleaser][2].\n\n[1]: https://github.com/charmbracelet/bubbletea\n[2]: https://github.com/goreleaser/goreleaser\n[3]: https://github.com/dhth/prs/releases\n\n**[`^ back to top ^`](#prs)**\n","funding_links":[],"categories":["Applications","Go","Table of Contents","\u003ca name=\"git\"\u003e\u003c/a\u003eGit and accessories"],"sub_categories":["Development Tools"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhth%2Fprs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdhth%2Fprs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhth%2Fprs/lists"}