From f10459ab69e4196111b5ea410e48ff3760ee85a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=B2=81=E6=A0=91=E4=BA=BA?= Date: Sat, 10 Jun 2023 21:32:41 +0100 Subject: [PATCH] ci: avoid installing debian dependencies --- .drone.yml | 5 +---- scripts/deploy.sh | 25 ++++++++++++++++++------- scripts/read_json.mjs | 12 ++++++++++++ 3 files changed, 31 insertions(+), 11 deletions(-) create mode 100755 scripts/read_json.mjs diff --git a/.drone.yml b/.drone.yml index 7d85534..db8b471 100644 --- a/.drone.yml +++ b/.drone.yml @@ -27,9 +27,6 @@ steps: from_secret: NETLIFY_API_KEY commands: # - git config --global --add safe.directory "/drone/src" - # 让 Debian 使用中科大源;测试网易和阿里的源速度不理想。 - - sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list - - apt-get update && apt-get install -y zip jq tar gzip curl - - (cd dist && zip -r -9 ../um-react.zip .) + - python3 -m zipfile -c etc.zip um-react.zip dist/. - ./scripts/publish.sh - ./scripts/deploy.sh diff --git a/scripts/deploy.sh b/scripts/deploy.sh index ddcc6c5..616b0b8 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -1,6 +1,7 @@ #!/bin/bash -e BRANCH_NAME="$(git branch --show-current)" +SCRIPTS_DIR="$(dirname "${BASH_SOURCE[0]}")" __netlify_upload() { local branch="$BRANCH_NAME" @@ -25,35 +26,45 @@ __netlify_get_deploy() { "https://api.netlify.com/api/v1/deploys/${deploy_id}" } +json_get() { + local json_body="$1" + shift + + echo -n "$json_body" | "${SCRIPTS_DIR}/read_json.mjs" "$@" +} + deploy_netlify() { local upload_resp upload_resp="$(__netlify_upload "$1")" - local error_message="$(echo "$upload_resp" | jq -r ".message // .error_message")" + local error_message + error_message="$(json_get "$upload_resp" message)" + [[ "$error_message" = "null" ]] && error_message="$(json_get "$upload_resp" error_message)" + if [[ "$error_message" != "null" ]]; then echo "Deploy to netlify failed:" echo " * ${error_message}" return 1 fi - local deploy_id="$(echo "$upload_resp" | jq -r ".id")" + local deploy_id="$(json_get "$upload_resp" id)" local deploy_resp="" local deploy_state="" local retry_count=10 while [[ "$retry_count" -gt 0 ]]; do deploy_resp="$(__netlify_get_deploy "$deploy_id")" - deploy_state="$(echo "$deploy_resp" | jq -r '.state')" + deploy_state="$(json_get "$deploy_resp" 'state')" case "$deploy_state" in ready) echo 'Deploy to netlify OK!' - echo " * main url: $(echo "$deploy_resp" | jq -r '.ssl_url')" - echo " * branch: $(echo "$deploy_resp" | jq -r '.deploy_ssl_url')" - echo " * permalink: $(echo "$deploy_resp" | jq -r '.links.permalink')" + echo " * main url: $(json_get "$deploy_resp" 'ssl_url')" + echo " * branch: $(json_get "$deploy_resp" 'deploy_ssl_url')" + echo " * permalink: $(json_get "$deploy_resp" 'links' 'permalink')" return 0 ;; error) echo "Deploy to netlify failed:" - echo " * $(echo "$deploy_resp" | jq -r '.error_message')" + echo " * $(json_get "$deploy_resp" 'error_message')" return 1 ;; *) diff --git a/scripts/read_json.mjs b/scripts/read_json.mjs new file mode 100755 index 0000000..007b167 --- /dev/null +++ b/scripts/read_json.mjs @@ -0,0 +1,12 @@ +#!/bin/env node +/* eslint-env node */ + +import fs from 'fs'; + +const data = JSON.parse(fs.readFileSync(0, 'utf-8').trim()); + +let value = data; +for (let i = 2; i < process.argv.length; i++) { + value = value[process.argv[i]] ?? null; +} +process.stdout.write(String(value), 'utf-8');