From 47741564d1fe752cce89dac62691d73dd63924ca Mon Sep 17 00:00:00 2001 From: Chris Dumas Date: Fri, 22 May 2026 08:01:37 +0000 Subject: [PATCH] feat: add gitea actions workflows --- .gitea/workflows/deploy.yml | 122 ++++++++++++++++++++++++++++++++ .gitea/workflows/test-build.yml | 35 +++++++++ 2 files changed, 157 insertions(+) create mode 100644 .gitea/workflows/deploy.yml create mode 100644 .gitea/workflows/test-build.yml diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..09ad20e --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,122 @@ +name: Deploy Holiday Property Booking + +on: + push: + branches: + - develop + - qa + - master + - main + +jobs: + deploy: + runs-on: docker + steps: + - name: Deploy branch + shell: bash + env: + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + DEPLOY_USER: ${{ secrets.DEPLOY_USER }} + DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} + GITEA_REF: ${{ gitea.ref }} + run: | + set -Eeuo pipefail + + mkdir -p ~/.ssh + printf '%s\n' "$DEPLOY_SSH_KEY" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts + + REPO_URL=ssh://git@git.dumas.ddns.net:222/chris.dumas/holiday-property-booking.git + + case "$GITEA_REF" in + refs/heads/develop) + TARGET_DIR=/mnt/appdata/dev/holiday-property-booking + TARGET_BRANCH=develop + COMPOSE_FILE=docker-compose.dev.yml + PROJECT=holiday-property-booking-dev + PORT=7003 + HEALTH_URL=http://192.168.1.15:7003/api/health + ;; + refs/heads/qa) + TARGET_DIR=/mnt/appdata/qa/holiday-property-booking + TARGET_BRANCH=qa + COMPOSE_FILE=docker-compose.qa.yml + PROJECT=holiday-property-booking-qa + PORT=6003 + HEALTH_URL=http://192.168.1.15:6003/api/health + ;; + refs/heads/master) + TARGET_DIR=/mnt/appdata/prod/holiday-property-booking + TARGET_BRANCH=master + COMPOSE_FILE=docker-compose.prod.yml + PROJECT=holiday-property-booking-prod + PORT=5003 + HEALTH_URL=http://192.168.1.15:5003/api/health + ;; + refs/heads/main) + TARGET_DIR=/mnt/appdata/prod/holiday-property-booking + TARGET_BRANCH=main + COMPOSE_FILE=docker-compose.prod.yml + PROJECT=holiday-property-booking-prod + PORT=5003 + HEALTH_URL=http://192.168.1.15:5003/api/health + ;; + *) + echo "Skipping unmapped ref: $GITEA_REF" + exit 0 + ;; + esac + + echo "Deploying branch $TARGET_BRANCH to $TARGET_DIR with project $PROJECT" + + ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=yes "${DEPLOY_USER}@${DEPLOY_HOST}" " + set -euo pipefail + + ssh-keyscan -p 222 -H git.dumas.ddns.net >> ~/.ssh/known_hosts + + NODE_BASE_IMAGE=node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 + + ensure_node_base_image() { + for attempt in 1 2 3 4 5; do + if docker pull \"\$NODE_BASE_IMAGE\"; then + echo \"\$NODE_BASE_IMAGE is available\" + return 0 + fi + echo \"\$NODE_BASE_IMAGE pull failed on attempt \${attempt}; retrying...\" + sleep 5 + done + + echo \"\$NODE_BASE_IMAGE pull failed after retries\" + return 1 + } + + if [ ! -d '$TARGET_DIR/.git' ]; then + mkdir -p '$TARGET_DIR' + GIT_SSH_COMMAND='ssh -i ~/.ssh/id_ed25519 -p 222 -o IdentitiesOnly=yes -o StrictHostKeyChecking=yes' git clone --branch '$TARGET_BRANCH' --single-branch '$REPO_URL' '$TARGET_DIR' + fi + + cd '$TARGET_DIR' + + GIT_SSH_COMMAND='ssh -i ~/.ssh/id_ed25519 -p 222 -o IdentitiesOnly=yes -o StrictHostKeyChecking=yes' git fetch origin '$TARGET_BRANCH' + git reset --hard 'origin/$TARGET_BRANCH' + + docker ps -q --filter publish=$PORT | xargs -r docker rm -f + + docker compose -p '$PROJECT' -f docker-compose.yml -f '$COMPOSE_FILE' down --remove-orphans || true + ensure_node_base_image + docker compose -p '$PROJECT' -f docker-compose.yml -f '$COMPOSE_FILE' up -d --build + " + + for attempt in 1 2 3 4 5; do + if curl --fail --silent --show-error --location --max-time 15 "$HEALTH_URL" >/dev/null; then + echo "Health check passed on attempt $attempt" + exit 0 + fi + echo "Health check failed on attempt $attempt; retrying..." + sleep 5 + done + + echo "Health check failed after retries" + exit 1 + diff --git a/.gitea/workflows/test-build.yml b/.gitea/workflows/test-build.yml new file mode 100644 index 0000000..fe8b5e1 --- /dev/null +++ b/.gitea/workflows/test-build.yml @@ -0,0 +1,35 @@ +name: Test & Build Holiday Property Booking + +on: + pull_request: + push: + branches: + - develop + - qa + - master + - main + +jobs: + test-build: + runs-on: docker + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + github-server-url: https://git.dumas.ddns.net + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Lint + run: npm run lint + + - name: Build + run: npm run build +