1
0
mirror of https://github.com/hanxi/xiaomusic.git synced 2025-12-06 14:52:50 +08:00

ci: 自动生成 versions.json 文件

This commit is contained in:
涵曦
2024-12-17 02:24:36 +08:00
parent 9079a7d79a
commit 740b24131f
2 changed files with 76 additions and 1 deletions

View File

@@ -16,6 +16,10 @@ on:
issues:
types: [opened, edited, reopened] # Specify events you're interested in
release:
types:
- uploaded
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
@@ -59,10 +63,17 @@ jobs:
npm run docs:build
npm run docs:build
- uses: pdm-project/setup-pdm@v3
- name: generate versions.json
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: pdm run get_release.py
- name: Check for changes
id: check_changes
run: |
if [ -n "$(git diff docs/issues)" ]; then
if [ -n "$(git diff docs)" ]; then
echo "changed=true" >> $GITHUB_OUTPUT
else
echo "changed=false" >> $GITHUB_OUTPUT

64
get_release.py Normal file
View File

@@ -0,0 +1,64 @@
import json
import os
import requests
# 替换为你的 GitHub 仓库信息
GITHUB_OWNER = "hanxi"
GITHUB_REPO = "xiaomusic"
GITHUB_API_URL = f"https://api.github.com/repos/{GITHUB_OWNER}/{GITHUB_REPO}/releases"
def fetch_releases():
headers = {}
github_token = os.getenv("GITHUB_TOKEN")
if github_token:
headers["Authorization"] = f"token {github_token}"
try:
response = requests.get(GITHUB_API_URL, headers=headers)
response.raise_for_status()
return response.json()
except requests.RequestException as e:
print(f"请求 GitHub API 失败: {e}")
return []
def extract_tar_gz_files(releases):
versions = []
for release in releases:
version = release.get("tag_name")
if not version:
continue
files = []
for asset in release.get("assets", []):
if asset.get("name", "").endswith(".tar.gz"):
files.append(asset["name"])
if files:
versions.append({"version": version, "files": files})
return versions
def save_to_json(data, filename="versions.json"):
try:
with open(filename, "w") as f:
json.dump(data, f, indent=4)
print(f"数据已保存到 {filename}")
except OSError as e:
print(f"保存文件失败: {e}")
def main():
releases = fetch_releases()
if not releases:
print("未获取到任何 release 数据")
return
versions = extract_tar_gz_files(releases)
save_to_json(versions, "docs/.vitepress/dist/versions.json")
if __name__ == "__main__":
main()