Classroom for GitHub is a Ruby on Rails application designed to automate repository creation and access control, making it easy for teachers to distribute starter code and collect assignments on GitHub
Assignments are the core of Classroom for GitHub. Teachers can easily create an assignment and distribute it to students using a private invitation URL. Optional starter code can be provided for individual or group work. It's even possible to delegate assignment creation and management to co-teachers and teaching assistants by adding them as organization administrators.
New to Ruby? No worries! You can follow these instructions to install a local server.
First things first, you'll need to install Ruby 2.2.3. We recommend using the excellent rbenv, and ruby-build
rbenv install 2.2.3
rbenv global 2.2.3
Next, you'll need to make sure that you have PostgreSQL, Redis, and Memcached installed. This can be done easily on OSX using Homebrew
brew install postgresql redis memcached
You will want to set postgresql to autostart at login via launchctl, if not already. See brew info postgresql
. Redis and memcached may be setup similarly via launchctl or setup project wide by using foreman, described below.
Now, let's install the gems from the Gemfile
("Gems" are synonymous with libraries in other
languages).
gem install bundler && rbenv rehash
Once bundler is installed go ahead and run the setup
script
script/setup
These values must be present in your .env
file (created by script/setup
).
ENV Variable | Description |
---|---|
GITHUB_CLIENT_ID |
the GitHub Application Client ID. |
GITHUB_CLIENT_SECRET |
the GitHub Application Client Secret. |
NON_STAFF_GITHUB_ADMIN_IDS |
GitHub user_ids of users to be granted staff level access. |
Classroom for GitHub uses VCR for recording and playing back API fixtures during test runs. These cassettes (fixtures) are part of the Git project in the spec/support/cassettes
folder. If you're not recording new cassettes you can run the specs with existing cassettes with:
script/test
Classroom for GitHub uses environmental variables for storing credentials used in testing, these values are located in your .env
file (created by script/setup
).
If you are recording new cassettes, you need to make sure all of these values are present.
ENV Variable | Description |
---|---|
TEST_CLASSROOM_OWNER_ID |
The GitHub user_id of an organization admin. |
TEST_CLASSROOM_OWNER_GITHUB_TOKEN |
The Personal Access Token for the classroom owner |
TEST_CLASSROOM_STUDENT_ID |
Test OAuth application client ID. |
TEST_CLASSROOM_STUDENT_GITHUB_TOKEN |
The Personal Access Token for the student |
TEST_CLASSROOM_OWNER_ORGANIZATION_ID |
GitHub ID (preferably one created specifically for testing against). |
TEST_CLASSROOM_OWNER_ORGANIZATION_LOGIN |
GitHub login (preferably one created specifically for testing against). |
Foreman is setup to manage redis, memcached, and sidekiq in development mode. Postgresql must be running prior executing foreman. It assumes that redis and memcached are not already running on the system. Alternatively, you may run script/sidekiq
, if you you to have redis and memcached always running system wide. To execute foreman, and this application's dependencies, run:
script/workers
After that, you may start the rails server in a seperate terminal with:
script/server
And that's it! You should have a working instance of Classroom for GitHub located here
We strongly encourage you to use https://classroom.github.com, but if you would like your own version Classroom for GitHub can be easily deployed to Heroku.
We'd love to have you participate. Please check out contributing guidelines.
Classroom is developed by these contributors.
Shout out to GitHub Summer of Code student, Mark Tareshawty, from The Ohio State University for his work on Classroom for GitHub.