refactor: harden the joj3-forge-convert script
All checks were successful
push / build (push) Successful in 51s
All checks were successful
push / build (push) Successful in 51s
This commit is contained in:
parent
f128933252
commit
ac4fbb83ed
|
@ -1,46 +1,67 @@
|
||||||
#!/usr/bin/bash
|
#!/usr/bin/env bash
|
||||||
set -ex
|
|
||||||
|
|
||||||
ORG_NAME=$(basename "$(dirname "$(pwd)")")
|
set -euo pipefail
|
||||||
REPO_NAME=$(basename "$(pwd)")
|
|
||||||
|
|
||||||
COURSE=${REPO_NAME%-*}
|
export PATH="/usr/bin:/bin:/usr/local/bin"
|
||||||
CONFIG_REPO_PATH="/home/tt/.cache/$COURSE-config"
|
unset IFS
|
||||||
GRADING_REPO_PATH="/home/tt/.cache/$COURSE-joj"
|
|
||||||
GIT_USER="bot-$COURSE"
|
|
||||||
GIT_EMAIL="bot-$COURSE@focs.ji.sjtu.edu.cn"
|
|
||||||
|
|
||||||
if ! [ -d "$CONFIG_REPO_PATH" ]; then
|
main() {
|
||||||
git clone "ssh://git@focs.ji.sjtu.edu.cn:2222/$COURSE/$COURSE-joj.git" "$CONFIG_REPO_PATH"
|
local org_name
|
||||||
fi
|
local repo_name
|
||||||
# TODO: move this into if statement
|
local course
|
||||||
git -C "$CONFIG_REPO_PATH" config user.name "$GIT_USER"
|
org_name=$(basename "$(dirname "$(pwd)")")
|
||||||
git -C "$CONFIG_REPO_PATH" config user.email "$GIT_EMAIL"
|
repo_name=$(basename "$(pwd)")
|
||||||
|
course=${repo_name%-*}
|
||||||
|
if ! [[ "$course" =~ ^[a-zA-Z0-9_-]+$ ]]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
if ! [ -d "$GRADING_REPO_PATH" ]; then
|
local config_repo_path="/home/tt/.cache/$course-config"
|
||||||
git clone "ssh://git@focs.ji.sjtu.edu.cn:2222/$COURSE/$COURSE-joj.git" "$GRADING_REPO_PATH"
|
local grading_repo_path="/home/tt/.cache/$course-joj"
|
||||||
git -C "$GRADING_REPO_PATH" switch --orphan grading
|
local git_user="bot-$course"
|
||||||
echo "# $COURSE JOJ grading" >"$GRADING_REPO_PATH/Readme.md"
|
local git_email="bot-$course@focs.ji.sjtu.edu.cn"
|
||||||
echo "This branch is automatically updated by JOJ, **never edit any file in this branch!**" >>"$GRADING_REPO_PATH/Readme.md"
|
local git_server="ssh://git@focs.ji.sjtu.edu.cn:2222"
|
||||||
git -C "$GRADING_REPO_PATH" add Readme.md
|
|
||||||
git -C "$GRADING_REPO_PATH" commit -m"docs: readme"
|
|
||||||
git -C "$GRADING_REPO_PATH" push -u origin grading
|
|
||||||
fi
|
|
||||||
# TODO: move this into if statement
|
|
||||||
git -C "$GRADING_REPO_PATH" config user.name "$GIT_USER"
|
|
||||||
git -C "$GRADING_REPO_PATH" config user.email "$GIT_EMAIL"
|
|
||||||
|
|
||||||
git -C "$CONFIG_REPO_PATH" pull --rebase
|
if ! [ -d "$config_repo_path" ]; then
|
||||||
rsync -r --delete "$CONFIG_REPO_PATH/home/tt/.config/" /home/tt/.config
|
git clone "$git_server/$course/$course-config.git" "$config_repo_path"
|
||||||
joj3-forge convert /home/tt/.config/joj
|
fi
|
||||||
rsync -r --delete /home/tt/.config/joj/ "$CONFIG_REPO_PATH/home/tt/.config/joj"
|
# TODO: move this into if statement
|
||||||
git -C "$CONFIG_REPO_PATH" add home/tt/.config/joj
|
git -C "$config_repo_path" config user.name "$git_user"
|
||||||
if ! git -C "$CONFIG_REPO_PATH" diff --staged --quiet; then
|
git -C "$config_repo_path" config user.email "$git_email"
|
||||||
git -C "$CONFIG_REPO_PATH" commit -m "chore: joj3-forge convert [skip ci]"
|
|
||||||
git -C "$CONFIG_REPO_PATH" push
|
if ! [ -d "$grading_repo_path" ]; then
|
||||||
fi
|
git clone "$git_server/$course/$course-joj.git" "$grading_repo_path"
|
||||||
if [ -n "$TEAPOT_GITEA_TOKEN" ]; then
|
git -C "$grading_repo_path" switch --orphan grading
|
||||||
mkdir -p /home/tt/.config/teapot
|
cat >"$grading_repo_path/Readme.md" <<EOF
|
||||||
echo "GITEA_ORG_NAME=$ORG_NAME" >"/home/tt/.config/teapot/teapot.env"
|
# $course JOJ grading
|
||||||
echo "GITEA_ACCESS_TOKEN=$TEAPOT_GITEA_TOKEN" >>"/home/tt/.config/teapot/teapot.env"
|
|
||||||
fi
|
This branch is automatically updated by JOJ, **never edit any file in this branch!**
|
||||||
|
EOF
|
||||||
|
git -C "$grading_repo_path" add Readme.md
|
||||||
|
git -C "$grading_repo_path" commit -m"docs: readme"
|
||||||
|
git -C "$grading_repo_path" push -u origin grading
|
||||||
|
fi
|
||||||
|
# TODO: move this into if statement
|
||||||
|
git -C "$grading_repo_path" config user.name "$git_user"
|
||||||
|
git -C "$grading_repo_path" config user.email "$git_email"
|
||||||
|
|
||||||
|
git -C "$config_repo_path" pull --rebase
|
||||||
|
rsync -a --delete "$config_repo_path/home/tt/.config/" "/home/tt/.config"
|
||||||
|
joj3-forge-convert "/home/tt/.config/joj"
|
||||||
|
rsync -a --delete "/home/tt/.config/joj/" "$config_repo_path/home/tt/.config/joj"
|
||||||
|
git -C "$config_repo_path" add home/tt/.config/joj
|
||||||
|
if ! git -C "$config_repo_path" diff --staged --quiet; then
|
||||||
|
git -C "$config_repo_path" commit -m "chore: joj3-forge convert [skip ci]"
|
||||||
|
git -C "$config_repo_path" push
|
||||||
|
fi
|
||||||
|
if [ -n "${TEAPOT_GITEA_TOKEN:-}" ]; then
|
||||||
|
local teapot_config_dir="/home/tt/.config/teapot"
|
||||||
|
mkdir -p "$teapot_config_dir"
|
||||||
|
cat >"$teapot_config_dir/teapot.env" <<EOF
|
||||||
|
GITEA_ORG_NAME=$org_name
|
||||||
|
GITEA_ACCESS_TOKEN=$TEAPOT_GITEA_TOKEN
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user