Files
ZFScoresCheck/.github/workflows/main.yml
T
2024-03-11 18:09:29 +08:00

214 lines
7.4 KiB
YAML

# 工作流的名称
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: 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:
# 使用GitHub Actions提供的动作来检出代码库
- name: Checkout Repository
uses: actions/checkout@main
# 配置Python环境
- name: Set up Python
uses: actions/setup-python@main
with:
python-version: "*"
- name: Install dependencies
run: |
# 使用pip安装项目的依赖项
pip install requests rsa pyquery
- name: Backup TXT and YAML files
run: |
rsync -av --include="*/" --include="*.txt" --include="*.yml" --exclude="*" ./ ./Backup/
- 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