diff --git a/.gitea/workflows/demo.yaml b/.gitea/workflows/demo.yaml new file mode 100644 index 0000000..80fba42 --- /dev/null +++ b/.gitea/workflows/demo.yaml @@ -0,0 +1,61 @@ +name: Process Python Script on PR + +on: + pull_request: + types: [opened, synchronize] + +jobs: + process-python: + runs-on: auto_judgement_py + steps: + - name: Checkout PR code + uses: actions/checkout@v3 + 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}" \ No newline at end of file