From 16f15a6bd780a82a9c71095c6512eb88eb8709c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=B2=81=E6=A0=91=E4=BA=BA?= Date: Fri, 9 Jun 2023 01:01:41 +0100 Subject: [PATCH] ci: get started on ci build --- .drone.yml | 30 ++++++++++++++++++++++ .gitignore | 4 +++ scripts/deploy.sh | 63 ++++++++++++++++++++++++++++++++++++++++++++++ scripts/publish.sh | 21 ++++++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 .drone.yml create mode 100755 scripts/deploy.sh create mode 100755 scripts/publish.sh diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..f82f0b5 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,30 @@ +--- +kind: pipeline +type: docker +name: default + +steps: + - name: test & build + image: node:18.16.0-bullseye + commands: + # - git config --global --add safe.directory "/drone/src" + - npm install -g pnpm + - pnpm i --frozen-lockfile + - pnpm build + + - name: publish + image: node:18.16.0-bullseye + environment: + DRONE_GITEA_SERVER: https://git.unlock-music.dev + GITEA_API_KEY: + from_secret: GITEA_API_KEY + NETLIFY_SITE_ID: + from_secret: NETLIFY_SITE_ID + NETLIFY_API_KEY: + from_secret: NETLIFY_API_KEY + commands: + # - git config --global --add safe.directory "/drone/src" + - apt-get update && apt-get install -y zip jq tar gzip curl + - (cd dist && zip -r -9 ../um-react.zip .) + - ./scripts/publish.sh + - ./scripts/deploy.sh diff --git a/.gitignore b/.gitignore index 6cf4bce..19fa33e 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,7 @@ dist-ssr *.njsproj *.sln *.sw? + +# Files created when running "drone exec" locally +/.pnpm-store/ +/*.zip diff --git a/scripts/deploy.sh b/scripts/deploy.sh new file mode 100755 index 0000000..22aa4f4 --- /dev/null +++ b/scripts/deploy.sh @@ -0,0 +1,63 @@ +#!/bin/bash -ex + +BRANCH_NAME="$(git branch --show-current)" + +__netlify_upload() { + curl -sL \ + -H "Content-Type: application/zip" \ + -H "Authorization: Bearer ${NETLIFY_API_KEY}" \ + --data-binary "@${1}" \ + "https://api.netlify.com/api/v1/sites/${NETLIFY_SITE_ID}/deploys?branch=${BRANCH_NAME}" +} + +__netlify_get_deploy() { + local deploy_id="$1" + curl -sL \ + -H "Authorization: Bearer ${NETLIFY_API_KEY}" \ + "https://api.netlify.com/api/v1/deploys/${deploy_id}" +} + +deploy_netlify() { + local upload_resp + upload_resp="$(__netlify_upload "$1")" + + local error_message="$(echo "$upload_resp" | jq -r ".message // .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_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')" + 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')" + return 0 + ;; + error) + echo "Deploy to netlify failed:" + echo " * $(echo "$deploy_resp" | jq -r '.error_message')" + return 1 + ;; + *) + retry_count="$((retry_count - 1))" + sleep 3 + ;; + esac + done +} + +# For deployment, we care a bit less +if [[ -n "${NETLIFY_API_KEY}" && -n "${NETLIFY_SITE_ID}" ]]; then + echo "Deploy to netlify..." + deploy_netlify um-react.zip +fi diff --git a/scripts/publish.sh b/scripts/publish.sh new file mode 100755 index 0000000..2c1ceba --- /dev/null +++ b/scripts/publish.sh @@ -0,0 +1,21 @@ +#!/bin/bash -ex + +BRANCH_NAME="$(git branch --show-current)" + +publish_gitea() { + local ZIP_NAME="$1" + local URL="${DRONE_GITEA_SERVER}/api/packages/${DRONE_REPO_NAMESPACE}/generic/${DRONE_REPO_NAME}/${DRONE_BUILD_NUMBER}/${ZIP_NAME}" + sha256sum "${ZIP_NAME}" + curl -sLifu "um-release-bot:${GITEA_API_KEY}" -T "${ZIP_NAME}" "${URL}" + echo "Uploaded to: ${URL}" +} + +# Only publish main branch by default +if [[ "${BRANCH_NAME}" = "main" ]]; then + echo 'prepare to publish...' + + if [[ -n "${GITEA_API_KEY}" ]]; then + echo "Publish to gitea..." + publish_gitea "um-react.zip" + fi +fi