Version Check and Update #70
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Version Check and Update | |
| on: | |
| schedule: | |
| - cron: '0 16,04 * * *' # 每天运行两次(午夜和中午,北京时间) | |
| workflow_dispatch: # 允许手动触发 | |
| # 添加权限配置以允许推送更改 | |
| permissions: | |
| contents: write | |
| jobs: | |
| version-check: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/[email protected] | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Get current versions from README | |
| id: current_versions | |
| run: | | |
| # 从 README_EN.md 提取当前版本 | |
| current_versions=$(sed -nE 's/^-[ ]+(Stable|Development|LTS):/\1:/p' README_EN.md) | |
| versions=$(echo $current_versions | tr '\n' ' ') | |
| echo "versions=$versions" >> $GITHUB_OUTPUT | |
| echo "Current versions:" | |
| echo "$current_versions" | |
| - name: Get latest versions | |
| id: latest_versions | |
| run: | | |
| # 获取 Stable 版本 (稳定版使用 latest 标签) | |
| STABLE_LATEST_VERSION=$(curl -sL "https://api.github.com/repos/yosebyte/nodepass/releases/latest" | awk -F '"' '/tag_name/{print $4}') | |
| # 获取 Development 版本 (使用时间判断) | |
| API_MESSAGE_DEV=$(curl -sL "https://api.github.com/repos/NodePassProject/nodepass-core/releases" | grep -E 'published_at|tag_name') | |
| # 处理开发版本 | |
| PUBLISHED_AT_DEV=($(awk -F '"' '/published_at/{print $4}' <<< "$API_MESSAGE_DEV")) | |
| TAG_NAME_DEV=($(awk -F '"' '/tag_name/{print $4}' <<< "$API_MESSAGE_DEV")) | |
| # 找到最新的开发版本 | |
| if [ ${#PUBLISHED_AT_DEV[@]} -gt 0 ]; then | |
| i_dev=$(echo "${PUBLISHED_AT_DEV[@]}" | tr ' ' '\n' | awk ' | |
| BEGIN {max="1970-01-01T00:00:00Z"; idx=0} | |
| {if ($1 > max) {max=$1; idx=NR-1}} | |
| END {print idx} | |
| ') | |
| DEV_LATEST_VERSION="${TAG_NAME_DEV[$i_dev]}" | |
| else | |
| DEV_LATEST_VERSION="" | |
| fi | |
| # 获取 LTS 版本 | |
| LTS_LATEST_VERSION=$(curl -sL "https://api.github.com/repos/NodePassProject/nodepass-apt/releases/latest" | awk -F '"' '/tag_name/{print $4}') | |
| echo "STABLE=$STABLE_LATEST_VERSION" >> $GITHUB_OUTPUT | |
| echo "DEVELOPMENT=$DEV_LATEST_VERSION" >> $GITHUB_OUTPUT | |
| echo "LTS=$LTS_LATEST_VERSION" >> $GITHUB_OUTPUT | |
| echo "Latest Stable: $STABLE_LATEST_VERSION" | |
| echo "Latest Development: $DEV_LATEST_VERSION" | |
| echo "Latest LTS: $LTS_LATEST_VERSION" | |
| - name: Compare versions and update README if needed | |
| id: compare | |
| run: | | |
| # 解析当前版本 | |
| version_arr=($(echo "${{ steps.current_versions.outputs.versions }}" | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?')) | |
| CURRENT_STABLE=${version_arr[0]} | |
| CURRENT_DEVELOPMENT=${version_arr[1]} | |
| CURRENT_LTS=${version_arr[2]} | |
| # 获取最新版本 | |
| LATEST_STABLE="${{ steps.latest_versions.outputs.STABLE }}" | |
| LATEST_DEVELOPMENT="${{ steps.latest_versions.outputs.DEVELOPMENT }}" | |
| LATEST_LTS="${{ steps.latest_versions.outputs.LTS }}" | |
| echo "Current Stable: ${CURRENT_STABLE:-None}, Latest: $LATEST_STABLE" | |
| echo "Current Development: ${CURRENT_DEVELOPMENT:-None}, Latest: $LATEST_DEVELOPMENT" | |
| echo "Current LTS: ${CURRENT_LTS:-None}, Latest: $LATEST_LTS" | |
| # 检查是否有任何版本不同 | |
| if [[ "${CURRENT_STABLE:-}" != "$LATEST_STABLE" ]] || [[ "${CURRENT_DEVELOPMENT:-}" != "$LATEST_DEVELOPMENT" ]] || [[ "${CURRENT_LTS:-}" != "$LATEST_LTS" ]]; then | |
| echo "New version detected. Updating README..." | |
| echo "needs_update=true" >> $GITHUB_OUTPUT | |
| # 更新 README_EN.md 文件 | |
| sed -i "s/- Stable: .*/- Stable: $LATEST_STABLE/" README_EN.md | |
| sed -i "s/- Development: .*/- Development: $LATEST_DEVELOPMENT/" README_EN.md | |
| sed -i "s/- LTS: .*/- LTS: $LATEST_LTS/" README_EN.md | |
| # 更新 README.md 文件 | |
| sed -i "s/- 正式版: .*/- 正式版: $LATEST_STABLE/" README.md | |
| sed -i "s/- 开发版: .*/- 开发版: $LATEST_DEVELOPMENT/" README.md | |
| sed -i "s/- 经典版: .*/- 经典版: $LATEST_LTS/" README.md | |
| # 确定提交消息 - 只包含实际更新的版本 | |
| commit_parts=() | |
| if [[ "${CURRENT_STABLE:-}" != "$LATEST_STABLE" ]]; then | |
| commit_parts+=("Stable to $LATEST_STABLE") | |
| fi | |
| if [[ "${CURRENT_DEVELOPMENT:-}" != "$LATEST_DEVELOPMENT" ]]; then | |
| commit_parts+=("Development to $LATEST_DEVELOPMENT") | |
| fi | |
| if [[ "${CURRENT_LTS:-}" != "$LATEST_LTS" ]]; then | |
| commit_parts+=("LTS to $LATEST_LTS") | |
| fi | |
| # 构建提交消息 | |
| commit_msg="" | |
| case ${#commit_parts[@]} in | |
| 1) | |
| commit_msg="Update ${commit_parts[0]}" | |
| ;; | |
| 2) | |
| commit_msg="Update ${commit_parts[0]} and ${commit_parts[1]}" | |
| ;; | |
| 3) | |
| commit_msg="Update ${commit_parts[0]}, ${commit_parts[1]} and ${commit_parts[2]}" | |
| ;; | |
| esac | |
| echo "commit_msg=$commit_msg" >> $GITHUB_OUTPUT | |
| echo "README updated with new versions:" | |
| echo " Stable: $LATEST_STABLE" | |
| echo " Development: $LATEST_DEVELOPMENT" | |
| echo " LTS: $LATEST_LTS" | |
| else | |
| echo "No version updates needed." | |
| echo "needs_update=false" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Commit and push changes | |
| if: steps.compare.outputs.needs_update == 'true' | |
| uses: stefanzweifel/[email protected] | |
| with: | |
| commit_message: ${{ steps.compare.outputs.commit_msg }} | |
| tagging_message: '' |