Search GitHub stars with Octokit and fzf
- github ruby cli api
Search GitHub stars with Octokit and fzf
If you are anything like me, you’re using Github’s repository stars as bookmarks for interesting projects you want to check out at a later date. And if you’re really like me (generally not advised) you love the command line and think it would be awesome if you had an easy way to search your stars from there. Today I had a spare hour, so I finally got around to build a solution that really fits my workflow, maybe it will appeal to you too.
Fetching starred repositories with Octokit
Octokit is “the simple and official way to build amazing experiences using the GitHub API”, written by the GitHub team. It’s extremely convenient and I used it for writing myself a small utitlity called stars
, which will fetch my starred repositories and output their full name, description and URL, separated by tabs. By default it will only return the latest 30 repositories (the first page of the API response), but can also retrieve all of them when called as stars all
.
This is the self-explanotary script in all its non-glory:
#!/usr/bin/env ruby
require 'octokit'
Octokit.auto_paginate = true if ARGV[0] == 'all'
client = Octokit::Client.new(access_token: 'your_access_token')
starred = client.starred('your_username')
starred.each do |star|
puts "#{star.full_name}\t#{star.description}\t#{star.html_url}"
end
(Note: the access token is optional, but allows for more API requests which was useful while developing)
This generates the following output (abbreviated):
→ stars
tagomoris/deferral Golang-style defer in Ruby https://github.com/tagomoris/deferral
iridakos/duckrails A development tool to quickly & dynamically mock API endpoints :duck: https://github.com/iridakos/duckrails
baweaver/qo Qo - Query Object - Pattern matching and fluent querying in Ruby https://github.com/baweaver/qo
trailofbits/ethersplay EVM dissassembler https://github.com/trailofbits/ethersplay
letsgetrandy/brototype Bro, do you even? https://github.com/letsgetrandy/brototype
devise-security/devise-security A security extension for devise, meeting industrial standard security demands for web applications. https://github.com/devise-security/devise-security
Finding repositories with fzf
If you don’t know about fzf, do yourself a favor and check it out immediately. It’s an awesome command-line fuzzy finder written in Go, which is not only fast but also offers a pretty comprehensive feature set.
To integrate my stars
utility with fzf
I added a function named sstars
(for “search stars”, no awards for originality there) to my .zshrc
:
function sstars() {
local url
url=$(stars "$1" | fzf -e | cut -f3)
open $url
}
This expect stars
to be available on your path. It will then pipe its output into fzf
, assign the third field of the line (the URL) to a variable and let macOS’ open
utility take care of the rest.
Here’s a screenshot of the tool in action:
That’s all folks!
Scratching a personal itch is always the best motivation to get started on a little weekend project and I did learn about Octokit in the process, so that’s a nice side-effect.