fixCache
fixCache copied to clipboard
Github app that keeps track of bug-prone files from commit history.
FixCache
- Introduction
- Installation
- Permissions
- Configuration
- Deploying your own FixCache
Introduction
FixCache is a github app implementation of FixCache with git commit history.
FixCache can be useful for prioritizing verification, validation and testing resources on the most fault-prone files.
It keeps track of bug fix commits pushed to a configurable tracked branch
of a repository and maintains a fix-sized cache of file entities most prone to bugs. The bug fix commits are identified by the fix keywords
provided in the configuration.
On pull requests, it fetches the cache and updates the pull requests with information about the files present in the cache if the pull request updates these files.
- it adds a label
fix cache
to the pull request. - it adds a comment with the filenames present in the cache and the respective number of cache hits.
The algorithm is executed over the commit history of the project. The paper assumes four kinds of localities that bugs occur in:
- Changed-entity locality : if an entity was changed recently, it will tend to introduce faults soon
- New-entity locality: if an entity has been added recently, it will tend to introduce faults soon
- Temporal locality: if an entity introduced a fault recently, it will tend to introduce other faults soon
- Spatial locality: if an entity introduced a fault recently, "nearby" entities will also tend to introduce faults soon
Installation
- Install it to your repositories from here
Permissions
Repository permissions
The app has access to the following repository permissions:
-
Contents:
Read-only
-
Metadata :
Read-only
-
Pull requests:
Read & write
Events
The app is subscribed to the following events:
-
Pull request
-
Push
Configuration
The app (for now) uses a .env
file for configuration. A sample config is shown in env.sample
.
Github config
-
GITHUB_APP_ID
: the github application id -
PRIVATE_KEY_PATH
: the path to the private key -
WEBHOOK_SECRET
: the webhook secret for the app's webhook
Fix cache config
-
CACHE_SIZE
: the size of the fix cache i.e number of files stored in the cache -
HISTORY_SIZE
: the number of days to load commit history from on installation -
FIX_KEY_WORDS
: Keywords in a fix commit eg. fix,fixed -
TRACKED_BRANCH
: the main branch to track pushes on -
SKIP_PATHS
: paths to skip/not store in the fix cache like test files
Default
Following default values are used in the current version of the app:
-
CACHE_SIZE
:25
-
HISTORY_SIZE
:30
-
FIX_KEY_WORDS
:fix
-
TRACKED_BRANCH
:master
-
SKIP_PATHS
:test,.md
If this configuration is not suitable for your repositories, you can deploy your own FixCache with the required configuration.
Deploying your own FixCache
FixCache is deployed on Deta micros. The following steps show how to deploy your own FixCache as a github app with custom configuration.
Clone the repository
- Clone the repository with
git clone https://github.com/aavshr/fixCache.git
.
Deploy on Deta
This deployment is for Deta micros. You will need to have signed up for deta and the deta cli installed.
If you want to deploy on another platform, you will need to modify the code slightly and then set up the respective configuration for deployment to other platforms.
- After you have cloned the repository, change the directory to the cloned directory and enter in your terminal
$ deta new
You should see the output that the application has been created and the dependencies have been installed.
- After installing the app, enter
$ deta details
You should see details about your application in your output. The endpoint
shown will be needed later to add as the webhook url in our github app.
- Lastly disable auth by entering:
$ deta auth disable
We will use a webhook secret to verify that the events are coming from github on our webhook endpoint.
Create a github app
A comprehensive guide on creating a github app is available here.
- Go to your developer settings (it's under settings on the dropdown menu when you click your profile on github) and create a new github app. Provide a name (and description if you want).
Setting up the webhook
In Webhook URL, type the endpoint from the output to deta details
.
Generate a long secure random string (there are services online that do this) and use that as the Webhook Secret. Keep hold of this secret as you will need it to set up the configuration later.
Permissions and Events
When choosing the permissions for the app, you will need to provide the app with following repository permissions:
-
Contents:
Read-only
-
Metadata :
Read-only
-
Pull requests:
Read & write
The app is subscribed to the following events:
-
Pull request
-
Push
Generate the private key
After creating the github app, go to your app's General settings and generate a private key.
Save the private key in the your cloned directory in a file. This is required for authentication.
Make sure you do not commit this file to a public repository.
Configure the app
App configuration (for now) is simply done through environment variables. Create a new file .env
in the cloned directory and provide it with the following variables.
A sample env.sample
is present in the repository to see the format of the file. Make sure you do not expose your .env
file publicly.
-
GITHUB_APP_ID
: the github app id, you can find this in your github app's general settings. -
PRIVATE_KEY_PATH
: the path to the private key file you saved in the earlier step. -
WEBHOOK_SECRET
: the webhook secret for the app's webhook -
CACHE_SIZE
: the size of the fix cache i.e number of files stored in the cache -
HISTORY_SIZE
: the number of days to load commit history from on installation -
FIX_KEY_WORDS
: Keywords in a fix commit separated by commas eg. fix,fixed -
TRACKED_BRANCH
: the main branch to track pushes on -
SKIP_PATHS
: paths to skip/not store in the fix cache like test files
Deploy the changes and the configuration
First change the directory to the root of the cloned directory (if you are not there already) and deploy the changes with,
$ deta deploy
Next, deploy the configuration in the .env
with,
$ deta update -e .env
You should see that the environment variables have been successfully updated.
Install
The FixCache should be now be deployed completely and ready to function. You can install the app to your repositories in the Install App page of your github app.