104 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/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
 |