diff --git a/Backup/.github/workflows/main.yml b/Backup/.github/workflows/main.yml new file mode 100644 index 0000000..c118e5d --- /dev/null +++ b/Backup/.github/workflows/main.yml @@ -0,0 +1,215 @@ +# 工作流的名称 +name: CheckScores + +# 工作流运行的名称 +run-name: ${{ github.workflow }} ${{ github.sha }} + +# 指定此工作流的触发器 +on: + schedule: + - cron: "*/30 * * * *" # 每30分钟自动执行一次 + workflow_dispatch: # 可以手动执行 + inputs: + force_push_message: + # 如果为True,则当次运行时无论成绩是否已更新,都会进行推送 + description: "Whether or not to force a push message?" + required: true + default: "False" + type: choice + options: + - "True" + - "False" + +jobs: + # 同步上游分支 + SyncFork: + name: SyncFork + + # 在最新版的Ubuntu系统上运行 + runs-on: ubuntu-latest + + # 定义SyncFork的变量 + outputs: + MAIN_YML_FILES_INCONSISTENT: ${{ steps.compare_main_yml_files.outputs.MAIN_YML_FILES_INCONSISTENT }} + + steps: + # 使用GitHub Actions提供的动作来检出代码库 + - name: Checkout Repository + uses: actions/checkout@main + + - name: Configure Git + run: | + # 配置Git用户信息 + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + + - name: Fetch upstream changes + run: | + # 添加上游仓库作为远程仓库,并获取上游仓库的main分支的最新更改 + REPO_NAME="NianBroken/ZFCheckScores" + REPO_URL="https://github.com/$REPO_NAME.git" + echo "Repo Url: $REPO_URL" + git remote add upstream "$REPO_URL" + git fetch upstream main + + - name: Compare main.yml files + id: compare_main_yml_files + run: | + tree -L 3 --dirsfirst + # 比对当前分支的main.yml文件与上游分支的main.yml文件是否一致 + if cmp -s .github/workflows/main.yml <(git show upstream/main:.github/workflows/main.yml); then + echo "MAIN_YML_FILES_INCONSISTENT=False" >> $GITHUB_OUTPUT + echo "main.yml file is consistent" + else + echo "MAIN_YML_FILES_INCONSISTENT=True" >> $GITHUB_OUTPUT + echo "main.yml file is inconsistent" + echo "::error title=main.yml file is inconsistent!" \ + "::The content of the 'main.yml' file in the current branch" \ + "does not match the content of the 'main.yml' file in the" \ + "upstream branch! You need to synchronize the upstream branch" \ + "manually! If you don't synchronize, there is a chance that" \ + "your code will have an uncontrollable fatal bug!" + fi + + - name: Backup files + run: | + mkdir -p Backup + find . -type f -name "*.txt" -exec cp --parents {} ./Backup \; + find . -type f -name "*.yml" -exec cp --parents {} ./Backup \; + + - name: Restore files + run: | + cp -r Backup/* . + + - name: Force push changes to main branch + run: | + # 将更改强制推送到main分支 + git add . + git commit -m "Update branch" || true + git push origin main --force + + # 检查成绩 + CheckScores: + name: CheckScores + + # SyncFork执行完成后运行 + needs: SyncFork + + # 在最新版的Ubuntu系统上运行 + runs-on: ubuntu-latest + + outputs: + BEIJING_TIME: ${{ steps.run_main_program.outputs.BEIJING_TIME }} + + steps: + # 配置Python环境 + - name: Set up Python + uses: actions/setup-python@main + with: + python-version: "*" + + - name: Install dependencies + run: | + # 使用pip安装项目的依赖项 + pip install requests rsa pyquery + + - name: Run main program + id: run_main_program + env: + FORCE_PUSH_MESSAGE: ${{ github.event.inputs.force_push_message }} + MAIN_YML_FILES_INCONSISTENT: ${{ needs.SyncFork.outputs.MAIN_YML_FILES_INCONSISTENT }} + URL: ${{ secrets.URL }} + USERNAME: ${{ secrets.USERNAME }} + PASSWORD: ${{ secrets.PASSWORD }} + TOKEN: ${{ secrets.TOKEN }} + GITHUB_EVENT_NAME: ${{ github.event_name }} + GITHUB_TRIGGERING_ACTOR: ${{ github.triggering_actor }} + REPOSITORY_NAME: ${{ github.repository }} + GITHUB_SHA: ${{ github.sha }} + GITHUB_WORKFLOW: ${{ github.workflow }} + GITHUB_RUN_NUMBER: ${{ github.run_number }} + GITHUB_RUN_ID: ${{ github.run_id }} + run: | + # 运行主程序 + # 判断是否需要强制推送信息 + if [ -z "${{ github.event.inputs.force_push_message }}" ]; then + export FORCE_PUSH_MESSAGE="False" + else + export FORCE_PUSH_MESSAGE="${{ github.event.inputs.force_push_message }}" + fi + export BEIJING_TIME="$(TZ='Asia/Shanghai' date +'%Y-%m-%d %H:%M:%S:%3N')" + echo "BEIJING_TIME=$BEIJING_TIME" >> $GITHUB_OUTPUT + python main.py + echo "------" + + # 判断环境变量是否为空 + if [ -z "$URL" ]; then + echo "URL Secret is empty!" + echo "::error title=URL Secret is empty!" \ + "::Your 'URL' Secret is not filled with any" \ + "information, so your program will not work!" + fi + if [ -z "$USERNAME" ]; then + echo "USERNAME Secret is empty!" + echo "::error title=USERNAME Secret is empty!" \ + "::Your 'USERNAME' Secret is not filled with any" \ + "information, so your program will not work!" + fi + if [ -z "$PASSWORD" ]; then + echo "PASSWORD Secret is empty!" + echo "::error title=PASSWORD Secret is empty!" \ + "::Your 'PASSWORD' Secret is not filled with any" \ + "information, so your program will not work!" + fi + if [ -z "$TOKEN" ]; then + echo "TOKEN Secret is empty!" + echo "::error title=TOKEN Secret is empty!" \ + "::Your 'TOKEN' Secret is not filled with any" \ + "information, so your program will not work!" + fi + + # 方便通过截图快速定位到用户 + echo "Force Push Message: $FORCE_PUSH_MESSAGE" + echo "main.yml Files Inconsistent: $MAIN_YML_FILES_INCONSISTENT" + echo "Triggered By: $GITHUB_EVENT_NAME" + echo "Run By: $GITHUB_TRIGGERING_ACTOR" + echo "Repository Name: $REPOSITORY_NAME" + echo "Commit SHA: $GITHUB_SHA" + echo "Workflow Name: $GITHUB_WORKFLOW" + echo "Workflow Number: $GITHUB_RUN_NUMBER" + echo "Workflow ID: $GITHUB_RUN_ID" + echo "Beijing Time: $BEIJING_TIME" + + - name: Delete __pycache__ folder + run: | + # 删除__pycache__文件夹 + rm -rf __pycache__ + + - name: Force push changes to main branch + run: | + # 将更改强制推送到main分支 + git add . + git commit -m "Update from GitHub Actions" || true + git push origin main --force + + # 备份main分支 + BackupMain: + name: BackupMain + + # SyncFork执行完成后运行 + needs: CheckScores + + # 在最新版的Ubuntu系统上运行 + runs-on: ubuntu-latest + + steps: + # 使用GitHub Actions提供的动作来检出代码库 + - name: Checkout Repository + uses: actions/checkout@main + + - name: Backup Main to ThirtyMinutesAgo + run: | + # 备份main分支到OldMain分支 + echo "${{ needs.CheckScores.outputs.BEIJING_TIME }}" + git checkout -b OldMain|| git checkout OldMain + git push -f origin OldMain diff --git a/Backup/Backup/grade.txt b/Backup/Backup/grade.txt new file mode 100644 index 0000000..b0c3520 --- /dev/null +++ b/Backup/Backup/grade.txt @@ -0,0 +1 @@ +4400f1a0083a801243f628f53a270491 \ No newline at end of file diff --git a/Backup/Backup/old_grade.txt b/Backup/Backup/old_grade.txt new file mode 100644 index 0000000..b0c3520 --- /dev/null +++ b/Backup/Backup/old_grade.txt @@ -0,0 +1 @@ +4400f1a0083a801243f628f53a270491 \ No newline at end of file diff --git a/Backup/grade.txt b/Backup/grade.txt new file mode 100644 index 0000000..b0c3520 --- /dev/null +++ b/Backup/grade.txt @@ -0,0 +1 @@ +4400f1a0083a801243f628f53a270491 \ No newline at end of file diff --git a/Backup/info.txt b/Backup/info.txt new file mode 100644 index 0000000..691b3c9 --- /dev/null +++ b/Backup/info.txt @@ -0,0 +1 @@ +09975406912bb31cacc59f2573b68768 \ No newline at end of file diff --git a/Backup/old_grade.txt b/Backup/old_grade.txt new file mode 100644 index 0000000..b0c3520 --- /dev/null +++ b/Backup/old_grade.txt @@ -0,0 +1 @@ +4400f1a0083a801243f628f53a270491 \ No newline at end of file