A handy tool for TAs in JI to handle works through Gitea, Canvas, JOJ and Mattermost. Joint is related to JI and also this tool which join websites together. Teapot means to hold Gitea, inspired by @nichujie.
This tool is still under heavy development. The docs may not be updated on time, and all the features are provided with the probability to change.
python3 -m venv env # you only need to do that once
# each time when you need this venv, if on Linux / macOS use
source env/bin/activate
# or this if on Windows
source env/Scripts/activate
pip3 install -e .
cp .env.example .env && vi .env # configure environment
joint-teapot --help
pip3 install -r requirements-dev.txt
pre-commit install
pytest -svv
archive all repos in gitea organization
unwatch all repos in gitea organization
check the existence of issue by title on gitea
checkout git repo to git tag fetched from gitea by release name, with due date
clone all gitea repos to local
close all issues and pull requests in gitea organization
create channels for student groups according to group information on gitea. Optionally specify a prefix to ignore all repos whose names do not start with it. Optionally specify a suffix to add to all channels created.
Example: python3 -m joint_teapot create-channels-on-mm --prefix p1 --suffix -private --invite-teaching-team
will fetch all repos whose names start with "p1"
and create channels on mm for these repos like "p1team1-private". Members of a repo will be added to the corresponding channel. And teaching team (adjust in .env
) will be invited to the channels.
create a comment for an issue on gitea.
create issues on gitea. Specify a list of repos (use --regex
to match against list of patterns), a title, and a body (use --file
to read from file), in this order.
Examples (run both with python3 -m joint_teapot create-issues
):
pgroup-08 pgroup-17 "Hurry up" "You are running out of time"
will create an issue in these two pgroups.--regex "^pgroup" "Final submission" --file "./issues/final-submission.md"
will create an issue in all pgroups, with body content read from said file.
create personal repos on gitea for all canvas students. You may specify an optional suffix.
Example: python3 -m joint_teapot create-personal-repos --suffix "-p1"
will create repos named StudentNameStudentID-p1
.
create teams on gitea by canvas groups
Create a pair of webhooks on gitea and mm for all student groups on gitea, and configure them so that updates on gitea will be pushed to the mm channel. Optionally specify a prefix to ignore all repos whose names do not start with it.
Example: python3 -m joint_teapot create-webhooks-for-mm p1
will fetch all repos whose names start with "p1"
and create two-way webhooks for these repos. All repos should already have same-name mm channels. If not, use create-channels-on-mm
to create them.
list all repos with no collaborators
list all public keys on gitea
list status of all repos with conditions
invite all canvas students to gitea teams by team name
prepare assignment dir from extracted canvas "Download Submissions" zip
Unsubscribe from all repos in the organization specified in the config file where the repo name matches a given regex expression.
Example: python3 -m joint_teapot unsubscribe-from-repos '\d{12}$'
will remove all repos whose names end with a student ID number from your gitea subscription list. Refer to the Python re
module docs for more info about regex.
upload assignment grades to canvas from grade file (GRADE.txt by default), read the first line as grade, the rest as comments
MIT