{"id":23999193,"url":"https://github.com/autolab/tango","last_synced_at":"2025-04-05T13:07:36.025Z","repository":{"id":22451244,"uuid":"25789674","full_name":"autolab/Tango","owner":"autolab","description":"Standalone RESTful autograding service","archived":false,"fork":false,"pushed_at":"2025-03-17T19:51:59.000Z","size":3377,"stargazers_count":48,"open_issues_count":41,"forks_count":61,"subscribers_count":21,"default_branch":"master","last_synced_at":"2025-03-29T12:07:57.015Z","etag":null,"topics":["autograding","autolab","python","tango"],"latest_commit_sha":null,"homepage":"http://www.autolabproject.com/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/autolab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-10-26T20:29:15.000Z","updated_at":"2025-02-21T20:47:54.000Z","dependencies_parsed_at":"2023-11-17T20:30:48.350Z","dependency_job_id":"4e13ca42-af32-4c18-b9ab-edb0bdfadf09","html_url":"https://github.com/autolab/Tango","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/autolab%2FTango","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/autolab%2FTango/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/autolab%2FTango/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/autolab%2FTango/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/autolab","download_url":"https://codeload.github.com/autolab/Tango/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247339158,"owners_count":20923014,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autograding","autolab","python","tango"],"created_at":"2025-01-07T23:57:13.331Z","updated_at":"2025-04-05T13:07:36.009Z","avatar_url":"https://github.com/autolab.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"http://autolabproject.com\"\u003e\n  \u003cimg src=\"images/autolab_banner.svg\" width=\"380px\" height=\"100px\"\u003e\n\u003c/a\u003e\n\nTango\n======\n\nTango is a standalone RESTful Web service that runs and manages jobs. A job is a set of files that must satisfy the following constraints:\n\n1. There must be exactly one `Makefile` that runs the job.\n2. The output for the job should be printed to stdout.\n\nExample 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.\n\nUpon 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.\n\nA brief overview of the Tango respository:\n\n* `tango.py` - Main tango server\n* `jobQueue.py` - Manages the job queue\n* `jobManager.py` - Assigns jobs to free VMs\n* `worker.py` - Shepherds a job through its execution\n* `preallocator.py` - Manages pools of VMs\n* `vmms/` - VMMS library implementations\n* `restful_tango/` - HTTP server layer on the main Tango\n\nTango 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.\n\n## Using Tango\n\nPlease 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.\n\n1. [Follow the steps to set up Tango](https://docs.autolabproject.com/installation/tango/).\n2. [Read the documentation for the REST API](https://docs.autolabproject.com/tango-rest/).\n3. [Read the documentation for the VMMS API](https://docs.autolabproject.com/tango-vmms/).\n4. [Test whether Tango is set up properly and can process jobs](https://docs.autolabproject.com/tango-cli/).\n\n## Python 2 Support\nTango 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.\n\nWe will not be backporting new features from `master` to `master-python2`.\n\n## Contributing to Tango\n\n1. [Fork the Tango repository](https://github.com/autolab/Tango).\n2. Create a local clone of the forked repo.\n3. Install [pre-commit](https://pre-commit.com/) from pip, and run `pre-commit install` to set up Git pre-commit linting scripts.\n4. Make a branch for your feature and start committing changes.\n5. Create a pull request (PR).\n6. Address any comments by updating the PR and wait for it to be accepted.\n7. Once your PR is accepted, a reviewer will ask you to squash the commits on your branch into one well-worded commit.\n8. Squash your commits into one and push to your branch on your forked repo.\n9. A reviewer will fetch from your repo, rebase your commit, and push to Tango.\n\nPlease 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.\n\n## License\n\nTango is released under the [Apache License 2.0](http://opensource.org/licenses/Apache-2.0).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fautolab%2Ftango","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fautolab%2Ftango","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fautolab%2Ftango/lists"}