#!/bin/bash GITEA="ssh://git@focs.ji.sjtu.edu.cn:2222" ORG=${GITHUB_ACTION_REPOSITORY%/*} COURSE=${ORG/-*} LXCHOST="tt@172.17.0.1" # # parse commit message # parse_commit() { message=$(git log -1 --pretty=format:%s ${GITHUB_WORKFLOW_SHA}) # add empty scope if none provided, then split "type(scope): message" OLDIFS=$IFS; IFS=$'\n' commit=( $(sed 's/\(^[^(]*\):/\1( ):/g; s/\([^(]*\)(\?\([^)]*\))\?: \(.*\)/\1\n\2\n\3/g' <<< ${message}) ) IFS=$OLDIFS } # # gen # generate_json() { parse_commit for i in ${commit[1]}; do echo joj-conf-generator $HOME/.config/joj/$i done } # # initial repo/config setup # init() { # backup current grading scoreboard [ -d $COURSE-joj ] && backup $COURSE-joj git clone $GITEA/$ORG/$COURSE-joj.git cd $COURSE-config # check existence of grading branch git branch -a | grep -q grading && br=1 # clone grading branch or create one + push readme if [ "x$br" = "x1" ]; then git switch grading git pull else git switch --orphan grading echo "# $COURSE JOJ grading" > Readme.md echo "This branch is automatically updated by JOJ, **never edit any file in this branch!**" >> Readme.md git add Readme.md git commit -m"docs: readme" git push fi } # # update config repo + copy config files # update() { [ -d "$COURSE-joj" ] || ( echo "ERROR: init first!" 1>&2 && exit ) # genjson rsync -a ./$HOME/ $LXCHOST:$HOME } # # simple local backup # backup() { [ -d $HOME/.local/share/joj ] || mkdir -p $HOME/.local/share/joj BCK="$HOME/.local/share/joj/$1-$(date +%y%m%d-%H%M%S)" echo "WARNING: $1 already exits, backing it up to $BCK" mv "$1" "$BCK" } [ -z "$1" ] && echo "Usage: $0 update|init" && exit 1 [ -d $HOME/.cache ] || mkdir $HOME/.cache cd $HOME/.cache $1