forked from yixinnb/test
69 lines
2.4 KiB
YAML
69 lines
2.4 KiB
YAML
name: Process Python Script on PR
|
|
|
|
on:
|
|
pull_request:
|
|
types: [opened, synchronize]
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
jobs:
|
|
process-python:
|
|
runs-on: auto_judgement_py
|
|
steps:
|
|
- name: Set up Node.js
|
|
uses: github.com/actions/setup-node@v4
|
|
with:
|
|
node-version: '22'
|
|
|
|
- name: Checkout PR code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ gitea.head_ref }} # 检出 PR 的 HEAD 分支代码
|
|
|
|
- name: Find newly added .py file
|
|
id: find-file
|
|
run: |
|
|
# 获取相对于主分支新增的 .py 文件(仅限添加操作)
|
|
NEW_FILES=$(git diff --diff-filter=A --name-only origin/main...HEAD | grep '\.py$')
|
|
# 取最后一个新增文件(假设最新提交只新增一个)
|
|
NEW_PY_FILE=$(echo "$NEW_FILES" | tail -n 1)
|
|
# 验证文件存在
|
|
if [ -z "$NEW_PY_FILE" ]; then
|
|
echo "No new .py file found!"
|
|
exit 1
|
|
fi
|
|
echo "new_py_file=$NEW_PY_FILE" >> $GITHUB_OUTPUT
|
|
|
|
- name: Extract metadata from .py file
|
|
id: extract-metadata
|
|
run: |
|
|
# 提取三个 """ 包裹的 YAML 元数据
|
|
sed -n '/^"""/,/^"""/p' ${{ steps.find-file.outputs.new_py_file }} | sed '1d;$d' > metadata.yaml
|
|
# 使用 yq 解析 name 字段(需提前安装 yq)
|
|
NAME=$(yq e '.name' metadata.yaml)
|
|
if [ -z "$NAME" ]; then
|
|
echo "Metadata 'name' not found!"
|
|
exit 1
|
|
fi
|
|
echo "name=$NAME" >> $GITHUB_OUTPUT
|
|
|
|
- name: Run Docker container to process script
|
|
id: docker-process
|
|
run: |
|
|
# 假设你的 Docker 镜像已预装在服务器,且支持输入文件路径
|
|
SCORE=$(docker run --rm -v $(pwd):/data your-docker-image python /data/${{ steps.find-file.outputs.new_py_file }})
|
|
if [ -z "$SCORE" ]; then
|
|
echo "Docker processing failed!"
|
|
exit 1
|
|
fi
|
|
echo "score=$SCORE" >> $GITHUB_OUTPUT
|
|
|
|
- name: Rename and archive file
|
|
run: |
|
|
mkdir -p code # 创建归档目录
|
|
# 组合新文件名:name_score.py
|
|
NEW_NAME="${{ steps.extract-metadata.outputs.name }}_${{ steps.docker-process.outputs.score }}.py"
|
|
# 移动并重命名文件
|
|
mv "${{ steps.find-file.outputs.new_py_file }}" "code/${NEW_NAME}"
|
|
echo "File archived to: code/${NEW_NAME}" |