Skip to content

rkclark/pullp

Repository files navigation

Pullp pullp ci badge

NOTICE: App is no longer in working state as the domain hosting for its oAuth proxy has expired and there are currently no plans to re-host it. (My current employer uses Gitlab rather than Github 😢)

Pullp is a tool to help you manage pull requests and reviews on your Github repositories, available for Mac, Linux and Windows.

An interactive dashboard shows all the open pull requests for your chosen repositories and highlights where your review has been requested. This information syncs with Github every minute! To help you keep track of things, Pullp has configurable desktop notifications to keep you in the loop.

pullp example

Want to find out more about the pull requests on a particular repository? Selecting a repository shows a full summary of each pull request, including all of the requested reviewers and submitted reviews. If you need to action anything, a click will take you directly to the pull request in Github.

pullp example

You are also shown the five most recently closed pull requests:

pullp example

Want to change the way that Pullp notifies you of changes? On the settings screen you can toggle a number of different options:

pullp example

Pullp is an Electron application built with React.

⚡ Getting Started

  • Download and install the latest release. You'll want the .dmg file for MacOS or the .AppImage file for Linux
  • Open the app
  • On MacOS, if your security settings block you from opening the app, right-click it and select Open. You can then click Open on the warning dialogue that opens up.
  • Follow the on screen instructions to sign in with Github
  • Select the repositories you want to monitor with Pullp (you are able to choose from all the ones that you watch on Github
  • Click Monitor to go to the dashboard screen.
  • Pullp will refresh the dashboard every minute!

❔ FAQs

❓ Why does my repository only show a maximum of 50 open pull requests?

💡 Github applies a cost in points to each request Pullp makes for data. Each hour you are permitted to spend 5000 points. By restricting the maximum pull requests to 50, the cost of each request is manageable. This means Pullp can make more frequent requests, giving you a more "near-time" experience. Allowing this maximum limit to be configurable by the user could be a feature in the future.

❓ I am seeing an error saying The amount of pull request data for your selected repositories exceeds Github's maximum limit.

💡 Github places a limit on the maximum number of data nodes that can be returned from a single request. This limit may be breached if you have selected a large number of repositories that have many pull requests. The only solution to this currently is to select fewer repositories.

❓ Can I access the console/Chrome dev tools inside the app?

💡 Yes! Just use the normal Chrome shortcut to open them, e.g. cmd + opt + i on Mac. React and Redux dev tools are not available in the production app, but are enabled if you are running the app in the dev environment.

❓ I can't see my repository on the Select screen.

💡 Make sure you are watching the repository in Github, otherwise it won't appear on the select screen.


🏁 Developer Instructions 🏁

🚀 Running dev environment - The simplest way

After npm install, run npm start to start the webpack dev server and electron app.

React and Apollo dev tools will be available inside the Chrome dev tools.

✅ Running the tests

  • Run npm test.
  • To run the tests without the file watcher, run npm run test:no-watcher

💫 Optional - Running a local oAuth server

Pullp uses an external auth server to complete Github sign in and receive a token for the Github API. You may want to host a local version of this server. Clone it from https://github.com/rkclark/pullp-oauth-gatekeeper, run it on the port of your choosing and then add the server URL to REACT_APP_OAUTH_GATEKEEPER_URL in the /env/.env.development file inside of Pullp.

If you are connecting to a different GitHub domain than github.com, you can set REACT_APP_GITHUB_DOMAIN to that domain such as github.mycompany.com

Your oauth server will need set of Github oAuth app credentials. To make these:

  • In Github, go to your settings
  • Go to Developer Settings, select oAuth Apps (usually selected by default)
  • Click New oAuth App
  • Give the app a name, this will be seen when/if your app requests access to any organisations that you are a part of. I suggest pullp!
  • Set the homepage to whatever you like
  • The authorization callback URL is not actually used by Pullp, I'd suggest just setting it to http://localhost:3001/auth/github/callback
  • Click to register the app
  • Make a note of the client ID and client secret that you are shown on the next screen

Once you have the credentials, create a new .env file in the server project root and add them as

OAUTH_CLIENT_ID=xxx
OAUTH_CLIENT_SECRET=xxx

:octocat: Optional - Stubbing Github

The project includes a server that provides stub responses for all external dependencies:

  • Github login page
  • Github oAuth flow
  • Github GraphQl server

To run the stub server run npm run stub. This will start the server along with the webpack dev server. Then just run npm run electron:start:dev in another terminal window.

This can be used if you want to work offline or have finer control over the data being received by the app.

Limitations:

  • The GraphQl endpoint is not a real GraphQl implementation! If you change any queries then they will not work without updating the stub endpoint to watch for them.
  • To have repos appear on the dashboard, do not select any on the Select screen
  • Images are not currently stubbed so will simply not be loaded

🔮 Other developer scripts

  • npm run serve: Run a server that hosts the production files
  • npm run react:build: Build the React/CSS production files
  • npm run style: Run the linter report
  • npm run style-fix: Fix all auto-fixable lint errors
  • npm run precommit: Runs the linter and test suite - used by Husky whenever a git commit is created
  • npm run electron: Runs electron against the built production files,
  • npm run pack: Packages distributable for the current OS and leaves unpackaged files available for inspection for debugging
  • npm run dist: Builds the production files and then packages them into a distributable for the current OS
  • npm run ship: Builds the production files, packages them for the current OS, and then pushes them to a draft Github release on the Pullp repository. For this to work, you must have the relevant access rights on the Pullp repository. In addition, you must create a personal token on Github and add it as GH_TOKEN=**YOURTOKEN** in a new file electron-builder.env in the project root. See electron-builder.example.env for an example.
  • npm run install-wsl: Installs linux versions of all packages except for Electron which is installed as the Windows version. For use when developing using Windows Subsystem for Linux (WSL). This is currently the best workaround available.

:shipit: CI/CD and Releasing

Pullp uses Github Actions for CI/CD. This is configured so that any branch that is pushed with a name in the format vX.X.X will be automatically packaged for Mac and Linux and uploaded to Github as a draft release.

e.g.

  • a branch with a name v1.9.70 will be created as a draft release with the Windows, Mac and Linux installation files attached.

Once the draft release is on Github it can have release notes added and then be published! 👌