Supersonic, Subatomic GitHub
Jason Lee
Principal Software Engineer
Red Hat
https://jasondl.ee - jason@steeplesoft.com
What we'll cover
What is a GitHub App
Why use Java?
Why use Quarkus?
Building an app
GitHub Applications
"GitHub Apps can do things on GitHub like open issues, comment on pull requests,
and manage projects. They can also do things outside of GitHub based on events that happen on GitHub."
Example use cases:
Validate Issue, comment, or PR format/details
Control CI/CD jobs
Interact with issue tracker
Send messages via SMS, email, chat, etc.
Why use Java?
Mature, battle-tested language
Great global community
Immense number of libraries, frameworks, etc
It's not Javascript. :)
Some notes. They are only visible using onstage shell.
Why use Quarkus?
Leverages existing Java/JVM knowledge
Full CDI integration
Easily unit testable
Native compilation
Some notes. They are only visible using onstage shell.
Building a GitHub App
Register the app with GitHub
Install the application in a playground project
Code the Quarkus app
Profit
Register the app with GitHub
Visit https://github.com/settings/apps/new
Only required fields (for an app of this size)
Application name
Homepage URL
Webhook URL
Your app is probably behind a firewall, so we'll need a proxy. More in a minute...
Webhook secret (optional)
Not really needed at this point either, but a good idea
ruby -rsecurerandom -e 'puts SecureRandom.hex(20)'
Keep a copy of this
Notes on the Webhook URL
Your app is probably behind a firewall, so we'll need a proxy.
Smee to the rescue: https://smee.io
Click on Start a new channel
Make a copy of the Webhook Proxy URL
Quarkus GitHub App connects to smee.io automatically in dev mode
Register the app with GitHub (cont)
Repository Permission
Subscribe to events
Issues
Issue comment
Pull request
Final steps on GitHub
Click Create GitHub App
Create a private key
In the Private keys section, click on Generate a private key
and save it
Install the app
Click the Install App
link in the left nav
Select an account into which to install the application
Select the desired repository
Code the Quarkus app
Create the application using the Quarkus CLI
Create .env file
Fire it up
$ quarkus dev
Respond to your first event
Simple Java methods with annotated parameters
Configuration
Your app can be configured per-repository (e.g., .github/bot-config.yml
)
Formats supported
Automatic deserialization and injection supported
Testing
JUnit and Mockito are your friends
Example
Testing (cont)
Add the following dependencies:
Create test/resources/bot-config.yml
Create test/resources/issue-opened.json