Skip to main content

gitreload

Build Status Coverage Status PyPi Downloads PyPi Version License AGPLv3

gitreload is a Flask/WSGI application for responding to github triggers asynchronously. Out of the box it is primarily intended for use with the edx-platform, but could be used for generally updating local git repositories based on a trigger call from github using its /update url.

The general workflow is that a github trigger is received (push), gitreload checks if the respository and branch are already checked out in the configured location, and then either imports that repository into the edx-platform via a ... manage.py lms --settings=... git_add_course <repo_dir> <repo_name> command, or if the trigger is set to go to /update instead of / or /gitreload, it will simply fetch the newset version of the currently checked out branch from the origin remote. Authorization is generally expected to be provided by the Web server in front of it (using basic authentication), as it currently doesn't support the use of github secrets. An additional layer of security is provided by the fact that a repository must be cloned on gitreload's host before it will accept payloads from github for said repository.

Installation

pip install gitreload

or to use the latest github version it would be:

pip install -e git+https://github.com/mitodl/gitreload

Usage

gitreload is a flask application, and thus can be run either in debug mode by directly using the gitreload command, or by using a wsgi application server. For more information on running a flask app in a production mode, see the excellent flask documentation. We generally have run it using gunicorn and supervisord in a similar manner that edx/configuration roles follow, and eventually we plan on submitting a role to install this via their ansible plays.

Upon running gitreload via command line, you should see that it starts up listening on port 5000. You can verify that it is working by going to the queue status page at http://localhost:5000/queue. If all is well, you should be greeted with some lovely json that looks like:

{"queue_length": 0, "queue": []}

Configuration

Configuration is done via a json file stored in order of precedence:

  • Path in environment variable: GITRELOAD_CONFIG
  • $(pwd)/gr.env.json
  • ~/gr.env.json
  • /etc/gr.env.json

It isn't strictly required, and the defaults are:

{
    "DJANGO_SETTINGS": "aws",
    "EDX_PLATFORM": "/edx/app/edxapp/edx-platform",
    "LOG_LEVEL": null,
    "NUM_THREADS": 1,
    "REPODIR": "/mnt/data/repos",
    "VIRTUAL_ENV": "/edx/app/edxapp/venvs/edxapp"
}

This setup means that it looks for the git repositories to be cloned in /mnt/data/repos, and expects the edx-platform settings to be the current edx/configuration defaults. It also leaves the LOG_LEVEL set to the default which is WARNING, and provides only one worker thread to process the queue of received triggers from github.

Use Cases

This is currently in use at MITx primarily for the following reasons.

Rapid Centralized Course Development

One of our primary uses of this tool is to enable rapid shared XML based edx-platform course development. It is basically the continuous integration piece for our courseware, such that when a commit gets pushed to a github repo on a specific branch (say devel), the changes are quickly and automatically loaded up with the use of this hook consumer.

Course Deployment Management

Along the lines of the rapid course development, we also use this method for controlling which courses get published on our production student facing LMS. For raw github XML developers, this means that we hook up our student facing LMS to a specific branch intended for production (say master or release). We use this to monitor that branch for changes they have vetted in their development branch and are ready to deploy to students.

We don't limit our usage of gitreload to XML development though, as we also gate our Studio course teams with this same method. There is a feature in the platform that allows course teams to export their course to Git. We use this function to control student access, allowing our Studio course authors to push at will to production once the trigger and repositories are setup for their course.

Update of external course graders

We use the regular /update feature to automatically update external code graders that are served via xqueue-watcher or xserver. We use this in a similar vain as the previous two cases and manages a development and production branch for the repository that contains the graders.

Metadata

Release files for gitreload 0.2.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gitreload 0.2.5
File Size Uploaded
gitreload-0.2.5.tar.gz 28.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gitreload 0.2.5
File Interpreter ABI Platform
gitreload-0.2.5-py3-none-any.whl Python 3 none any Details

Total release size: 57.5 kB

Release files / gitreload-0.2.5.tar.gz

Download URL gitreload-0.2.5.tar.gz
Size 28.1 kB
Tags Source
SHA-256 checksum
How to use checksums
72bc1ea7efc4450465d86f29ecf15044906e8fd7264f30b7af5b34b9d902766d
BLAKE2b-256 checksum
How to use checksums
2e2d8ff29ba3f2197cc0932ff9a6b99b4ff7c2742e00c34eee491828bf21b206
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.0.5 CPython/3.8.3 Linux/5.7.2-1-MANJARO

Release files / gitreload-0.2.5-py3-none-any.whl

Download URL gitreload-0.2.5-py3-none-any.whl
Size 29.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c4c8ea309f0509e794aa62ce7285646053af19157f339ae2cc9717a78f576223
BLAKE2b-256 checksum
How to use checksums
8e21ec8bedf40f1744ac54d77834d4378dc5cf57e7e8f5a02dc1323f39f73d78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.0.5 CPython/3.8.3 Linux/5.7.2-1-MANJARO

Release history Release notifications | RSS feed

This release

0.2.5 This release

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page