From 05d69d5c075ebc9611d1b3e370ecf2bf93109048 Mon Sep 17 00:00:00 2001 From: UUBulb <35923940+uubulb@users.noreply.github.com> Date: Sun, 14 Jul 2024 14:38:12 +0800 Subject: [PATCH] ci: sync release to gitee (#390) --- .github/workflows/release.yml | 13 +++ .github/workflows/{sync.yml => sync-code.yml} | 0 .github/workflows/sync-release.yml | 16 ++++ .github/workflows/sync.py | 90 +++++++++++++++++++ README.md | 2 +- script/install.sh | 10 ++- script/install_en.sh | 10 ++- 7 files changed, 136 insertions(+), 5 deletions(-) rename .github/workflows/{sync.yml => sync-code.yml} (100%) create mode 100644 .github/workflows/sync-release.yml create mode 100644 .github/workflows/sync.py diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 16da386..15d2726 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -108,3 +108,16 @@ jobs: curl -s https://purge.jsdelivr.net/gh/$LOWER_USERNAME/nezha@master/script/nezha-agent.service curl -s https://purge.jsdelivr.net/gh/$LOWER_USERNAME/nezha@master/script/docker-compose.yaml curl -s https://purge.jsdelivr.net/gh/$LOWER_USERNAME/nezha@master/script/config.yaml + + - name: Trigger sync + if: ${{ env.SYNCED == 0 }} + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + await github.rest.actions.createWorkflowDispatch({ + owner: 'naiba', + repo: 'nezha', + workflow_id: 'sync-release.yml', + ref: 'main' + }) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync-code.yml similarity index 100% rename from .github/workflows/sync.yml rename to .github/workflows/sync-code.yml diff --git a/.github/workflows/sync-release.yml b/.github/workflows/sync-release.yml new file mode 100644 index 0000000..a6482ed --- /dev/null +++ b/.github/workflows/sync-release.yml @@ -0,0 +1,16 @@ +name: Sync Release to Gitee + +on: + workflow_dispatch: + +jobs: + sync-release-to-gitee: + runs-on: ubuntu-latest + env: + GITEE_TOKEN: ${{ secrets.GITEE_TOKEN }} + steps: + - uses: actions/checkout@v4 + - name: Sync to Gitee + run: | + pip3 install PyGitHub + python3 .github/workflows/sync.py \ No newline at end of file diff --git a/.github/workflows/sync.py b/.github/workflows/sync.py new file mode 100644 index 0000000..0f43888 --- /dev/null +++ b/.github/workflows/sync.py @@ -0,0 +1,90 @@ +import os +import time +import requests +import hashlib +from github import Github + + +def get_github_latest_release(): + g = Github() + repo = g.get_repo("naiba/nezha") + release = repo.get_latest_release() + if release: + print(f"Latest release tag is: {release.tag_name}") + print(f"Latest release info is: {release.body}") + files = [] + for asset in release.get_assets(): + url = asset.browser_download_url + name = asset.name + + response = requests.get(url) + if response.status_code == 200: + with open(name, 'wb') as f: + f.write(response.content) + print(f"Downloaded {name}") + else: + print(f"Failed to download {name}") + file_abs_path = get_abs_path(asset.name) + files.append(file_abs_path) + sync_to_gitee(release.tag_name, release.body, files) + else: + print("No releases found.") + + +def sync_to_gitee(tag: str, body: str, files: slice): + release_id = "" + owner = "naibahq" + repo = "nezha" + release_api_uri = f"https://gitee.com/api/v5/repos/{owner}/{repo}/releases" + api_client = requests.Session() + api_client.headers.update({ + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }) + + access_token = os.environ['GITEE_TOKEN'] + release_data = { + 'access_token': access_token, + 'tag_name': tag, + 'name': tag, + 'body': body, + 'prerelease': False, + 'target_commitish': 'main' + } + release_api_response = api_client.post(release_api_uri, json=release_data) + if release_api_response.status_code == 201: + release_info = release_api_response.json() + release_id = release_info.get('id') + else: + print( + f"Request failed with status code {release_api_response.status_code}") + + print(f"Gitee release id: {release_id}") + asset_api_uri = f"{release_api_uri}/{release_id}/attach_files" + + for file_path in files: + files = { + 'file': open(file_path, 'rb') + } + + asset_api_response = requests.post( + asset_api_uri, params={'access_token': access_token}, files=files) + + if asset_api_response.status_code == 201: + asset_info = asset_api_response.json() + asset_name = asset_info.get('name') + print(f"Successfully uploaded {asset_name}!") + else: + print( + f"Request failed with status code {asset_api_response.status_code}") + + api_client.close() + print("Sync is completed!") + + +def get_abs_path(path: str): + wd = os.getcwd() + return os.path.join(wd, path) + + +get_github_latest_release() diff --git a/README.md b/README.md index 8a3ab53..35e9869 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@
LOGO designed by 熊大 .

-GitHub release (with filter)    +GitHub release (with filter)   

:trollface: Nezha Monitoring: Self-hostable, lightweight, servers and websites monitoring and O&M tool.

diff --git a/script/install.sh b/script/install.sh index 31e129b..9ef78ae 100755 --- a/script/install.sh +++ b/script/install.sh @@ -12,7 +12,7 @@ NZ_DASHBOARD_PATH="${NZ_BASE_PATH}/dashboard" NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" NZ_DASHBOARD_SERVICE="/etc/systemd/system/nezha-dashboard.service" NZ_DASHBOARD_SERVICERC="/etc/init.d/nezha-dashboard" -NZ_VERSION="v0.17.1" +NZ_VERSION="v0.17.2" red='\033[0;31m' green='\033[0;32m' @@ -563,7 +563,13 @@ restart_and_update_standalone() { sudo rc-service nezha-dashboard stop fi - sudo wget -qO $NZ_DASHBOARD_PATH/app.zip https://${GITHUB_URL}/naiba/nezha/releases/latest/download/dashboard-linux-$os_arch.zip >/dev/null 2>&1 && sudo unzip -qq $NZ_DASHBOARD_PATH/app.zip -d $NZ_DASHBOARD_PATH && sudo mv $NZ_DASHBOARD_PATH/dist/dashboard-linux-$os_arch $NZ_DASHBOARD_PATH/app && sudo rm -r $NZ_DASHBOARD_PATH/app.zip $NZ_DASHBOARD_PATH/dist + if [ -z "$CN" ]; then + NZ_DASHBOARD_URL="https://${GITHUB_URL}/naiba/nezha/releases/latest/download/dashboard-linux-$os_arch.zip" + else + NZ_DASHBOARD_URL="https://${GITHUB_URL}/naibahq/nezha/releases/latest/download/dashboard-linux-$os_arch.zip" + fi + + sudo wget -qO $NZ_DASHBOARD_PATH/app.zip $NZ_DASHBOARD_URL >/dev/null 2>&1 && sudo unzip -qq $NZ_DASHBOARD_PATH/app.zip -d $NZ_DASHBOARD_PATH && sudo mv $NZ_DASHBOARD_PATH/dist/dashboard-linux-$os_arch $NZ_DASHBOARD_PATH/app && sudo rm -r $NZ_DASHBOARD_PATH/app.zip $NZ_DASHBOARD_PATH/dist if [ "$os_alpine" != 1 ]; then sudo systemctl enable nezha-dashboard diff --git a/script/install_en.sh b/script/install_en.sh index f2e7958..f583372 100755 --- a/script/install_en.sh +++ b/script/install_en.sh @@ -12,7 +12,7 @@ NZ_DASHBOARD_PATH="${NZ_BASE_PATH}/dashboard" NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" NZ_DASHBOARD_SERVICE="/etc/systemd/system/nezha-dashboard.service" NZ_DASHBOARD_SERVICERC="/etc/init.d/nezha-dashboard" -NZ_VERSION="v0.17.1" +NZ_VERSION="v0.17.2" red='\033[0;31m' green='\033[0;32m' @@ -557,7 +557,13 @@ restart_and_update_standalone() { sudo rc-service nezha-dashboard stop fi - sudo wget -qO $NZ_DASHBOARD_PATH/app.zip https://${GITHUB_URL}/naiba/nezha/releases/latest/download/dashboard-linux-$os_arch.zip >/dev/null 2>&1 && sudo unzip -qq $NZ_DASHBOARD_PATH/app.zip -d $NZ_DASHBOARD_PATH && sudo mv $NZ_DASHBOARD_PATH/dist/dashboard-linux-$os_arch $NZ_DASHBOARD_PATH/app && sudo rm -r $NZ_DASHBOARD_PATH/app.zip $NZ_DASHBOARD_PATH/dist + if [ -z "$CN" ]; then + NZ_DASHBOARD_URL="https://${GITHUB_URL}/naiba/nezha/releases/latest/download/dashboard-linux-$os_arch.zip" + else + NZ_DASHBOARD_URL="https://${GITHUB_URL}/naibahq/nezha/releases/latest/download/dashboard-linux-$os_arch.zip" + fi + + sudo wget -qO $NZ_DASHBOARD_PATH/app.zip $NZ_DASHBOARD_URL >/dev/null 2>&1 && sudo unzip -qq $NZ_DASHBOARD_PATH/app.zip -d $NZ_DASHBOARD_PATH && sudo mv $NZ_DASHBOARD_PATH/dist/dashboard-linux-$os_arch $NZ_DASHBOARD_PATH/app && sudo rm -r $NZ_DASHBOARD_PATH/app.zip $NZ_DASHBOARD_PATH/dist if [ "$os_alpine" != 1 ]; then sudo systemctl enable nezha-dashboard