# Tango **Repository Path**: stonezheng/Tango ## Basic Information - **Project Name**: Tango - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-01-17 - **Last Updated**: 2024-02-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Tango ====== Tango is a standalone RESTful Web service that runs and manages jobs. A job is a set of files that must satisfy the following constraints: 1. There must be exactly one `Makefile` that runs the job. 2. The output for the job should be printed to stdout. Example jobs are provided for the user to peruse in `clients/`. Tango has a [REST API](https://docs.autolabproject.com/tango-rest/) which is used for job submission. Upon receiving a job, Tango will copy all of the job's input files into a VM, run `make`, and copy the resulting output back to the host machine. Tango jobs are run in pre-configured VMs. Support for various Virtual Machine Management Systems (VMMSs) like KVM, Docker, or Amazon EC2 can be added by implementing a high level [VMMS API](https://docs.autolabproject.com/tango-vmms/) that Tango provides. A brief overview of the Tango respository: * `tango.py` - Main tango server * `jobQueue.py` - Manages the job queue * `jobManager.py` - Assigns jobs to free VMs * `worker.py` - Shepherds a job through its execution * `preallocator.py` - Manages pools of VMs * `vmms/` - VMMS library implementations * `restful_tango/` - HTTP server layer on the main Tango Tango was developed as a distributed grading system for [Autolab](https://github.com/autolab/Autolab) at Carnegie Mellon University and has been extensively used for autograding programming assignments in CMU courses. ## Using Tango Please feel free to use Tango at your school/organization. If you run into any problems with the steps below, you can reach the core developers at `autolab-dev@andrew.cmu.edu` and we would be happy to help. 1. [Follow the steps to set up Tango](https://docs.autolabproject.com/installation/tango/). 2. [Read the documentation for the REST API](https://docs.autolabproject.com/tango-rest/). 3. [Read the documentation for the VMMS API](https://docs.autolabproject.com/tango-vmms/). 4. [Test whether Tango is set up properly and can process jobs](https://docs.autolabproject.com/tango-cli/). ## Python 2 Support Tango now runs on Python 3. However, there is a legacy branch [master-python2](https://github.com/autolab/Tango/tree/master-python2) which is a snapshot of the last Python 2 Tango commit for legacy reasons. You are strongly encouraged to upgrade to the current Python 3 version of Tango if you are still on the Python 2 version, as future enhancements and bug fixes will be focused on the current master. We will not be backporting new features from `master` to `master-python2`. ## Contributing to Tango 1. [Fork the Tango repository](https://github.com/autolab/Tango). 2. Create a local clone of the forked repo. 3. Install [pre-commit](https://pre-commit.com/) from pip, and run `pre-commit install` to set up Git pre-commit linting scripts. 4. Make a branch for your feature and start committing changes. 5. Create a pull request (PR). 6. Address any comments by updating the PR and wait for it to be accepted. 7. Once your PR is accepted, a reviewer will ask you to squash the commits on your branch into one well-worded commit. 8. Squash your commits into one and push to your branch on your forked repo. 9. A reviewer will fetch from your repo, rebase your commit, and push to Tango. Please see [the git linear development guide](https://github.com/edx/edx-platform/wiki/How-to-Rebase-a-Pull-Request) for a more in-depth explanation of the version control model that we use. ## License Tango is released under the [Apache License 2.0](http://opensource.org/licenses/Apache-2.0).