From 3a6ff3fa8e20ed5688abeb26703302d79524c48b Mon Sep 17 00:00:00 2001 From: Sebastian Frank Date: Thu, 27 Mar 2025 12:12:55 +0000 Subject: [PATCH] =?UTF-8?q?F=C3=BCge=20ein=20neues=20Deployment-Workflow-S?= =?UTF-8?q?kript=20hinzu=20und=20entferne=20veraltete=20Skripte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/deploy.yml | 190 ++++++++++++++++++++++++++++++++++++ scripts/deploy.sh | 40 -------- scripts/init.sh | 5 - scripts/modify-config.sh | 37 ------- 4 files changed, 190 insertions(+), 82 deletions(-) create mode 100644 .gitea/workflows/deploy.yml delete mode 100755 scripts/deploy.sh delete mode 100755 scripts/init.sh delete mode 100755 scripts/modify-config.sh diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..428af22 --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,190 @@ +name: deploy to production + +on: "push" +# push: +# branches: +# - master + +jobs: + deploy: + name: deploy + runs-on: ubuntu-latest + container: + image: gitbase.de/actions/ubuntu:latest + volumes: + - /data:/data + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + lfs: true + submodules: true + + - run: | + git fetch --force --tags + + # setup node 20 + - name: setup node 20 + uses: actions/setup-node@v3 + with: + node-version: 20 + + - name: install dependencies + run: | + npm install -g yarn + yarn install + + - name: modify config + run: | + sed -i 's#\(sentryEnvironment.*\)".*"#\1"${GITHUB_REF_NAME}"#g' frontend/src/config.ts + sed -i 's#//\( sentry\\.init.*\)#\1#g' frontend/src/config.ts + set -o allexport + . ./.env + echo "PROJECT_RELEASE=${SENTRY_PROJECT}.r`git rev-list HEAD --count`-`git describe --all --long | sed 's+/+-+'`" >> .env + . ./.env + set +o allexport + echo ______ .env ______ + cat .env + echo + sed -i 's#\(const release = \).*#\1"'${PROJECT_RELEASE}'"#g' api/hooks/config-client.js + sed -i 's#\(const originURL = \).*#\1"'${LIVE_URL}'"#g' api/hooks/config-client.js + + # bash scripts/preload-meta.sh frontend/spa.html + # bash scripts/preload-meta.sh frontend/spa.html > frontend/_spa.html + # cp frontend/_spa.html frontend/spa.html + + export stamp=`date +%s` + sed -i s/__TIMESTAMP__/$stamp/g frontend/spa.html + # sed -i s/__TIMESTAMP__/$stamp/g frontend/serviceworker.js + # cat frontend/serviceworker.js + rm api/templates/spa.html + cp frontend/spa.html api/templates/spa.html + echo ______ frontend/spa.html ______ + cat frontend/spa.html + + sed -i 's#\(PREVIEW_URL=\).*#\1'${LIVE_URL}/preview'#g' api/config.yml.env + echo ______ api/config.yml.env ______ + cat api/config.yml.env + + - name: build + env: + FORCE_COLOR: "true" + run: | + yarn build + + - name: build admin + env: + FORCE_COLOR: "true" + run: | + yarn build:admin + + - name: build ssr + env: + FORCE_COLOR: "true" + run: | + yarn build:server + + - name: build legacy + env: + FORCE_COLOR: "true" + run: | + yarn build:legacy + + - name: staging + # only if branch is dev + if: github.ref == 'refs/heads/dev' + env: + # /data/ORG/PROJECT/BRANCH + API_BASEDIR: /data/${{ github.repository }}/${{ github.ref_name }} + COMPOSE_PROJECT_NAME: ${{ github.repository }}-${{ github.ref_name }} + run: | + # read .env + set -o allexport + . ./.env + set +o allexport + + # replace / with - + COMPOSE_PROJECT_NAME=`echo $COMPOSE_PROJECT_NAME | sed 's+/+-+g'` + + mkdir -p $API_BASEDIR/frontend + rsync -av api $API_BASEDIR/ + rsync -av frontend/dist $API_BASEDIR/frontend/ + rsync -av frontend/assets $API_BASEDIR/frontend/ + sed -i 's#\(PREVIEW_URL=\).*#\1'${STAGING_URL}/preview'#g' $API_BASEDIR/api/config.yml.env + + docker compose -f docker-compose-staging.yml -p $COMPOSE_PROJECT_NAME up -d --build --remove-orphans + + # clear ssr cache + ssrUrl=${STAGING_URL}/tibiapi/ssr + curl -X POST -H "Content-Type: application/json" -d '{}' "${ssrUrl}?clear=1" + + - name: deploy + # only if branch is master + if: github.ref == 'refs/heads/master' + env: + RSYNC_USER: ${{ github.repository }} + RSYNC_PASS: ${{ github.token }} + BRANCH: ${{ github.ref_name }} + run: | + # read .env + set -o allexport + . ./.env + set +o allexport + + + # if RSYNC_USER or RSYNC_KEY is not set, exit + if [ -z "${RSYNC_USER}" ]; then + echo "RSYNC_USER missing, exiting" + exit 1 + fi + if [ -z "${RSYNC_PASS}" ]; then + echo "RSYNC_PASS missing, exiting" + exit 1 + fi + if [ -z "${RSYNC_HOST}" ]; then + echo "RSYNC_HOST missing, exiting" + exit 1 + fi + if [ -z "${RSYNC_PORT}" ]; then + echo "RSYNC_PORT missing, exiting" + exit 1 + fi + + echo "Deploying ${BRANCH} to ${RSYNC_HOST} on port ${RSYNC_PORT} as ${RSYNC_USER}" + + excludes="" + if [ "${BRANCH}" = "master" ]; then + excludes='--exclude=src --exclude=*.map' + echo "master deploy, excluding $excludes" + fi + + SSH_CMD="sshpass -p ${RSYNC_PASS} ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p ${RSYNC_PORT} -l ${RSYNC_USER}" + + # sync frontend + rsync -rlcgD --perms -i -u -v --stats --progress \ + --delete \ + -e "${SSH_CMD}" \ + $excludes \ + frontend/ \ + ${RSYNC_HOST}:./frontend/ \ + + # sync api config + rsync -rlcgD --perms -i -u -v --stats --progress \ + --delete \ + -e "${SSH_CMD}" \ + api/ \ + ${RSYNC_HOST}:./api/ + + # create media directory + mkdir media + chmod 770 media + rsync -rlcgD --perms -i -u -v --stats --progress \ + -e "${SSH_CMD}" \ + media \ + ${RSYNC_HOST}:./ + + + + # clear ssr cache + ssrUrl=${LIVE_URL}/tibiapi/ssr + curl -X POST -H "Content-Type: application/json" -d '{}' "${ssrUrl}?clear=1" diff --git a/scripts/deploy.sh b/scripts/deploy.sh deleted file mode 100755 index 2d0c8a2..0000000 --- a/scripts/deploy.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh - -host=$1 -user=$2 -pass=$3 - -if [ "$host" == "" ]; then - echo "missing host" - exit 1 -fi -if [ "$user" == "" ]; then - echo "missing username" - exit 1 -fi -if [ "$pass" == "" ]; then - echo "missing password" - exit 1 -fi - -echo "sync frontend" -rsync -rlcgD --perms -i -u -v --stats --progress \ ---delete \ --e "sshpass -p $pass ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 22222" \ -frontend/ \ -$user@$host:./frontend/ - -echo "sync api config" -rsync -rlcgD --perms -i -u -v --stats --progress \ ---delete \ --e "sshpass -p $pass ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 22222" \ -api/ \ -$user@$host:./api/ - -echo "create media directory" -mkdir media -chmod 770 media -rsync -rlcgD --perms -i -u -v --stats --progress \ --e "sshpass -p $pass ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 22222" \ -media \ -$user@$host:./ diff --git a/scripts/init.sh b/scripts/init.sh deleted file mode 100755 index cdda7e7..0000000 --- a/scripts/init.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -files=`find .drone.yml api src -type f -name "config*" -or -name "*drone*"` - -grep -E "__.*__" $files | grep -v TIMESTAMP \ No newline at end of file diff --git a/scripts/modify-config.sh b/scripts/modify-config.sh deleted file mode 100755 index adb7a99..0000000 --- a/scripts/modify-config.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash - -branch=$1 -url=$2 - -if [ "$branch" == "" ]; then - echo missing branch name - exit 1 -fi - -if [ "$url" == "" ]; then - echo missing url - exit 1 -fi - -if [ "$branch" == "master" ]; then - paypal=live -fi - -sed -i 's#\(apiBase:\).*#apiBase:"'$url'/api/",#g' api/hooks/config.js -sed -i 's#\(frontendBase:\).*#frontendBase:"'$url'/",#g' api/hooks/config.js -sed -i 's#\(pppReturnURL:\).*#pppReturnURL:"'$url'/checkout/overview\?type=paypal",#g' api/hooks/config.js -sed -i 's#\(pppCancelURL:\).*#pppCancelURL:"'$url'/checkout/payment\?type=paypal",#g' api/hooks/config.js -sed -i 's#\(var paypalMode *=\).*#var paypalMode = "'$paypal'"#g' api/hooks/config.js -cat api/hooks/config.js -sed -i 's#\(sentryEnvironment.*\)".*"#\1"'$branch'"#g' src/config.ts - -if [[ "$branch" == "master" || "$branch" == "dev" ]]; then - sed -i 's#//\( sentry\\.init.*\)#\1#g' src/config.ts -fi - -cat src/config.ts - -if [ "$branch" != "master" ]; then - sed -i 's#\(namespace:.*\)#\1_'$branch'#g' api/config.yml - cat api/config.yml -fi