If you work with a large codebase that spans multiple repositories, you might have encountered the problem of finding all the places where a certain contract or interface is used. For example, I wanted to find out which other repos reference
MyProduct.Business.Contracts.MyContract and the GitHub web UI wasn’t cutting it.
Sure, you can use the web UI to search for code, but it has some limitations. You can only see 10 results per page, and you have to click through each result to see the repository name. Also, you might get some false positives from forks or archived repos that are not relevant.
So I decided to try a different approach: using the GitHub CLI tool. The GitHub CLI is a command-line interface that lets you interact with GitHub from your terminal. You can do things like create issues, pull requests, releases, and more. But you can also use it to query the GitHub API and get JSON data back.
One of the commands that the GitHub CLI supports is
gh api, which allows you to make arbitrary requests to the GitHub API. You can pass in any endpoint and parameters, and get the response as JSON. You can also use the
--paginate flag to automatically fetch all pages of results.
So I installed the gh command line app, auth’d using
gh auth login and then ran this command:
gh api --paginate search/code?q=MyProduct.Business.Contracts.MyContract | jq .items.repository.full_name | sort | uniq
This command does the following:
- It uses the
search/codeendpoint to search for code that matches
- It pipes the JSON output to
jq, a command-line tool for processing JSON data.
- It extracts the
full_nameproperty of each repository from the
- It sorts the results alphabetically using
- It removes any duplicates using
The result is a sorted list of repos that mention that contract in the code. Here’s an example output:
This way, I can quickly see all the repos that depend on that contract, and make any changes or updates accordingly. I can also use other filters or modifiers in the query string, such as
I hope you found this tip useful. If you want to learn more about the GitHub CLI, check out their documentation. And if you have any questions or feedback, feel free to leave a comment below or reach out to me on Twitter.