generated from Java-2025Fall/final-vibevault-template
完成作业
This commit is contained in:
parent
80d369b038
commit
d292459e9a
@ -14,7 +14,7 @@ permissions:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# 检查是否应该触发 CI(仅在 commit message 包含 “完成作业” 时执行)
|
# 检查是否应该触发 CI(仅在 commit message 包含 "完成作业" 时执行)
|
||||||
check-trigger:
|
check-trigger:
|
||||||
runs-on: docker
|
runs-on: docker
|
||||||
container:
|
container:
|
||||||
@ -32,7 +32,7 @@ jobs:
|
|||||||
echo "✅ Commit contains \"完成作业\",即将执行评分"
|
echo "✅ Commit contains \"完成作业\",即将执行评分"
|
||||||
else
|
else
|
||||||
echo "trigger=false" >> $GITHUB_OUTPUT
|
echo "trigger=false" >> $GITHUB_OUTPUT
|
||||||
echo "⛔ 只有包含“完成作业”的提交才会执行自动评分" >&2
|
echo "⛔ 只有包含"完成作业"的提交才会执行自动评分" >&2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
grade:
|
grade:
|
||||||
@ -69,7 +69,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
mkdir -p ~/.gradle
|
mkdir -p ~/.gradle
|
||||||
cat > ~/.gradle/init.gradle << 'EOF'
|
cat > ~/.gradle/init.gradle << 'EOF'
|
||||||
allprojects {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
mavenLocal()
|
mavenLocal()
|
||||||
maven { url 'https://maven.aliyun.com/repository/public' }
|
maven { url 'https://maven.aliyun.com/repository/public' }
|
||||||
@ -78,8 +78,8 @@ jobs:
|
|||||||
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
|
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
echo "✅ Gradle configured to use Aliyun mirror"
|
echo "✅ Gradle configured to use Aliyun mirror"
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
@ -134,29 +134,33 @@ jobs:
|
|||||||
# Proceed with fetching from external repo if local scripts not found
|
# Proceed with fetching from external repo if local scripts not found
|
||||||
GITEA_TOKEN="${{ secrets.GITEA_TOKEN }}"
|
GITEA_TOKEN="${{ secrets.GITEA_TOKEN }}"
|
||||||
|
|
||||||
# Resolve Gitea Host
|
# Resolve Gitea Host - 修复关键部分开始
|
||||||
if [ -n "$EXTERNAL_GITEA_HOST" ]; then
|
if [ -n "$EXTERNAL_GITEA_HOST" ]; then
|
||||||
HOST="$EXTERNAL_GITEA_HOST"
|
HOST="$EXTERNAL_GITEA_HOST"
|
||||||
elif [ -n "$GITEA_ROOT_URL" ]; then
|
elif [ -n "$GITEA_ROOT_URL" ]; then
|
||||||
HOST=$(echo "$GITEA_ROOT_URL" | sed 's|https\?://||' | sed 's|/$||')
|
HOST=$(echo "$GITEA_ROOT_URL" | sed 's|https\?://||' | sed 's|/$||')
|
||||||
else
|
else
|
||||||
HOST=$(echo "${{ github.server_url }}" | sed 's|https\?://||' | cut -d'/' -f1)
|
# 直接指定正确的 Gitea 服务器地址和端口
|
||||||
|
HOST="49.234.193.192:3000"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ORG=$(echo "${{ github.repository }}" | cut -d'/' -f1)
|
ORG=$(echo "${{ github.repository }}" | cut -d'/' -f1)
|
||||||
REPO_NAME=$(echo "${{ github.repository }}" | cut -d'/' -f2)
|
REPO_NAME=$(echo "${{ github.repository }}" | cut -d'/' -f2)
|
||||||
|
|
||||||
# Extract assignment ID
|
# Extract assignment ID - 确保拼写正确
|
||||||
if echo "$REPO_NAME" | grep -q -- '-stu_'; then
|
if echo "$REPO_NAME" | grep -q -- '-stu_'; then
|
||||||
ASSIGNMENT_ID=$(echo "$REPO_NAME" | sed 's/-stu_.*//')
|
ASSIGNMENT_ID=$(echo "$REPO_NAME" | sed 's/-stu_.*//')
|
||||||
elif echo "$REPO_NAME" | grep -q -- '-template'; then
|
elif echo "$REPO_NAME" | grep -q -- '-template'; then
|
||||||
ASSIGNMENT_ID=$(echo "$REPO_NAME" | sed 's/-template.*//')
|
ASSIGNMENT_ID=$(echo "$REPO_NAME" | sed 's/-template.*//')
|
||||||
else
|
else
|
||||||
|
# 使用正确的作业ID
|
||||||
ASSIGNMENT_ID="final-vibevault"
|
ASSIGNMENT_ID="final-vibevault"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Try different test repo naming conventions
|
# 直接使用正确的测试仓库名(修复拼写错误)
|
||||||
TEST_REPO_NAMES=("${ASSIGNMENT_ID}-tests" "tests-${ASSIGNMENT_ID}" "grading-${ASSIGNMENT_ID}")
|
TEST_REPO_NAMES=("final-vibevault-tests" "${ASSIGNMENT_ID}-tests" "tests-${ASSIGNMENT_ID}" "grading-${ASSIGNMENT_ID}")
|
||||||
|
|
||||||
|
echo "🔍 Looking for test repos at host: $HOST, org: $ORG"
|
||||||
|
|
||||||
for TEST_REPO in "${TEST_REPO_NAMES[@]}"; do
|
for TEST_REPO in "${TEST_REPO_NAMES[@]}"; do
|
||||||
echo "📥 Trying to fetch from ${ORG}/${TEST_REPO}..."
|
echo "📥 Trying to fetch from ${ORG}/${TEST_REPO}..."
|
||||||
@ -170,6 +174,8 @@ jobs:
|
|||||||
echo "Using no authentication..."
|
echo "Using no authentication..."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Clone URL: $AUTH_URL"
|
||||||
|
|
||||||
if git -c http.sslVerify=false clone --depth=1 "$AUTH_URL" _priv_tests 2>&1; then
|
if git -c http.sslVerify=false clone --depth=1 "$AUTH_URL" _priv_tests 2>&1; then
|
||||||
echo "✅ Successfully fetched hidden tests and grading scripts from ${ORG}/${TEST_REPO}"
|
echo "✅ Successfully fetched hidden tests and grading scripts from ${ORG}/${TEST_REPO}"
|
||||||
|
|
||||||
@ -213,6 +219,8 @@ jobs:
|
|||||||
if [ $SUCCESS -eq 1 ]; then
|
if [ $SUCCESS -eq 1 ]; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo "❌ Failed to clone ${ORG}/${TEST_REPO}"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -230,7 +238,7 @@ jobs:
|
|||||||
mkdir -p .autograde
|
mkdir -p .autograde
|
||||||
|
|
||||||
# Create minimal grade_grouped.py script
|
# Create minimal grade_grouped.py script
|
||||||
cat > .autograde/grade_grouped.py <<- 'EOF'
|
cat > .autograde/grade_grouped.py << 'EOF'
|
||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
import argparse
|
import argparse
|
||||||
@ -478,4 +486,3 @@ EOF
|
|||||||
--server-url "${SERVER_URL}" \
|
--server-url "${SERVER_URL}" \
|
||||||
--external-host "${EXTERNAL_GITEA_HOST}"
|
--external-host "${EXTERNAL_GITEA_HOST}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
5
validate_yaml.py
Normal file
5
validate_yaml.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
import yaml
|
||||||
|
|
||||||
|
with open(".gitea/workflows/autograde.yml", "r") as f:
|
||||||
|
yaml.safe_load(f)
|
||||||
|
print("YAML syntax is valid!")
|
||||||
Loading…
Reference in New Issue
Block a user