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: Output GitHub Context id: output-context run: | # Loop through all properties in the github context for key in $(echo '${{ toJson(github) }}' | jq -r 'keys[]'); do value=$(echo '${{ toJson(github) }}' | jq -r .$key) echo "Property Name: $key" echo "Property Value: $value" echo "-------------------------" done - 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: | # 获取相对于主分支新增的文件(仅限添加操作) NEW_FILES=$(git diff --diff-filter=A --name-only origin/main...HEAD) # 检查是否只有一个新增的 .py 文件 NEW_PY_FILES=$(echo "$NEW_FILES" | grep '\.py$') NEW_PY_FILE_COUNT=$(echo "$NEW_PY_FILES" | wc -l) if [ "$NEW_PY_FILE_COUNT" -ne 1 ]; then echo "提交的文件不是唯一的 .py 文件,或者没有 .py 文件!" >&2 exit 1 fi # 取最后一个新增的 .py 文件 NEW_PY_FILE=$(echo "$NEW_PY_FILES" | tail -n 1) echo "new_py_file=$NEW_PY_FILE" >> $GITHUB_OUTPUT - name: Rename and store file as code.py run: | # 将文件命名为 code.py 并保存到当前工作目录 cp "${{ steps.find-file.outputs.new_py_file }}" "code.py" echo "文件已保存为 code.py" - name: Call main.py and commit result run: | # 执行 main.py 脚本,获取输出的文件名 FILE_NAME=$(python3 main.py) # 检查 main.py 输出是否有效 if [ -z "$FILE_NAME" ]; then echo "main.py 输出的文件名无效!" >&2 exit 1 fi # 将文件名作为文件保存到 /storage 目录 mkdir -p /storage mv "code.py" "/storage/$FILE_NAME" echo "文件已移动到 /storage 目录,并命名为 $FILE_NAME" - name: Commit and push changes run: | # 将更改提交到仓库并合并 git add /storage/* git commit -m "提交代码文件到 /storage" git push origin ${{ github.head_ref }} # 推送更改到当前分支 - name: Approve and merge PR run: | # 自动同意 PR 并合并 gh pr merge ${{ github.event.pull_request.number }} --merge --squash --admin