ci: get started on ci build

This commit is contained in:
鲁树人 2023-06-09 01:01:41 +01:00
parent 5974ef3d0c
commit 16f15a6bd7
4 changed files with 118 additions and 0 deletions

30
.drone.yml Normal file
View File

@ -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

4
.gitignore vendored
View File

@ -23,3 +23,7 @@ dist-ssr
*.njsproj
*.sln
*.sw?
# Files created when running "drone exec" locally
/.pnpm-store/
/*.zip

63
scripts/deploy.sh Executable file
View File

@ -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

21
scripts/publish.sh Executable file
View File

@ -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