Automatic course provisioning for the edx-platform using github and zendesk.
To get started, clone the repository, and run pip install . or just install directory from github.com with pip install git+https://github.com/mitodl/orcoursetrion.
Once installed, create or acquire an OAUTH2 token from github. That at least has the repo, write:repo_hook, and write:org permissions.
Add the environment variable ORC_GH_OAUTH2_TOKEN=<your token> to your environment, and run orcoursetrion --help for available commands and actions.
If you are adding an XML course, you will also need to define ORC_STAGING_GITRELOAD in your environment for where Web hooks should be sent for push events.
There is an exposed command line interface that is available upon installation of the repository. It can be run with orcoursetrion, and orcoursetrion --help will provide the most up to date help information.
The command allows you to run commands that correspond to actions, currently the only supported action is create_export_repo, and if your configuration is setup correctly (see Configuration), and at least minimally have set ORC_GH_OAUTH2_TOKEN and you run orcoursetrion create_export_repo -t Spring_2030 -c DevOps.001 -d 'My awesome class repo' you should see it respond with the URL of the repo that it just created for you.
create_export_repo: | |
---|---|
This will create a new repository with the content deployment team from ORC_STUDIO_DEPLOY_TEAM added to the repository. | |
create_xml_repo: | |
This will create a new repository with the ORC_XML_DEPLOY_TEAM and a command line specified team added to repository. It will also set up a git hook to the URL specified with ORC_STAGING_GITRELOAD. |
Quite some time is lost to course provisioning and request management. This document both defines what course provisioning is, and is a design for how to create software to assist in automating this process.
There are three major stories/workflows that occur in our course production/publishing architecture. While all three occur for residential MITx, some of them also apply and could be used for use with MOOC/Open Education.
The three major process flows are:
New Course
Moving a Course
Rerunning a Course
System Architecture diagram
Below is an Oracle style ERD diagram, but I do not presuppose the database choice, and do not think it is neccessary to use a traditional RDBMS as the persistance layer in the application. The persistence area is a flexible area within the architecture since even a simple document store would likely be adequate.
Entity Relationship Diagram
For convenient reference in development, here are the Orcoursetrion API docs.
The actions that are available to use.
Action library access
Creates a course repo at ORC_GH_API_URL with key ORC_GH_OAUTH2_TOKEN, at organization ORC_STUDIO_ORG, and with collabarator ORC_STUDIO_DEPLOY_TEAM
Parameters: |
|
---|---|
Returns: | Github dictionary of a repo (https://developer.github.com/v3/repos/#create) |
Return type: | dict |
Creates a course repo at ORC_GH_API_URL with key ORC_GH_OAUTH2_TOKEN and at organization ORC_XML_ORG, and with team as a collaborator (Along with ORC_XML_DEPLOY_TEAM).
This also adds a github Web hook to the course development environment gitreload server via ORC_STAGING_GITRELOAD.
Parameters: |
|
---|---|
Returns: | Github dictionary of a repo (https://developer.github.com/v3/repos/#create) |
Return type: | dict |
API libraries.
Orchestrion library
Bases: object
API class for handling calls to github
Initialize a requests session for use with this class by specifying the base API endpoint and key.
Parameters: |
|
---|
Add a repo to an existing team (by name) in the specified org.
We first look up the team to get its ID (https://developer.github.com/v3/orgs/teams/#list-teams), and then add the repo to that team (https://developer.github.com/v3/orgs/teams/#add-team-repo).
Parameters: |
|
---|---|
Raises: |
|
Adds an active hook to a github repository.
This utilizes https://developer.github.com/v3/repos/hooks/#create-a-hook to create a form type Web hook that responds to push events (basically all the defaults).
Parameters: |
|
---|---|
Raises: |
|
Returns: | Github dictionary of a hook (https://developer.github.com/v3/repos/hooks/#response-2) |
Return type: | dict |
Creates a new github repository or raises exceptions
Parameters: |
|
---|---|
Raises: |
|
Returns: | Github dictionary of a repo (https://developer.github.com/v3/repos/#create) |
Return type: | dict |
Bases: exceptions.Exception
Base exception class others inherit.
Bases: orcoursetrion.lib.github.GitHubException
Repo exists, and thus cannot be created.
Bases: orcoursetrion.lib.github.GitHubException
Unexpected status code exception
Bases: orcoursetrion.lib.github.GitHubException
Name team not found in list
Configuration options
Configuration needed for Orchestrion to function (i.e. API keys)