Fetch Issues from GitHub

Understand the idea of GitHub issues and how they’re fetched and passed through the code process.

We'll cover the following

We’ll want to organize our source code, write tests, and handle any dependencies. And we’ll want to follow Elixir conventions because that way, we’ll get support from the tools.

In this chapter, we’ll look at Mix (often mix in code), the Elixir build tool. We’ll investigate the directory structure it uses and see how to manage external dependencies. We’ll end up using ExUnit to write tests for our code and to validate the examples in our code’s documentation. To motivate this, we’ll write a tool that downloads and lists the n oldest issues from a GitHub project. Along the way, we’ll need to find some libraries and make some design decisions typical of an Elixir project. We’ll call our project issues.

Fetch issues

GitHub provides a nice web API for fetching issues. We simply issue a GET request to https://api.github.com/repos/user/project/issues and we get back a JSON list of issues. We’ll reformat this, sort it, and filter out the oldest n, presenting the result as a table:

# created_at title
889 2013-03-16T22:03:13Z MIX_PATH environment variable (of sorts)
882 2013-03-20T19:22:07Z Enhanced mix test --cover
893 2013-03-21T06:23:00Z mix test time reports
898 2013-03-23T19:19:08Z Add mix compile --warnings-as-errors

How will our code do it?

Our program will run from the command line. We’ll need to pass in a GitHub username, a project name, and an optional count. This means we’ll need some basic command-line parsing.

  • We’ll need to access GitHub as an HTTP client, so we have to find a library that gives us the client side of HTTP.
  • The response that comes back will be in JSON, so we’ll need a library that handles JSON too.
  • We’ll need to be able to sort the resulting structure.
  • Finally, we’ll need to lay out selected fields in a table.

We can think of this data transformation in terms of a production line. Raw data enters at one end and is transformed by each of the stations in turn.

Get hands-on with 1400+ tech skills courses.