From 9079893371c0e19851df9cd3e451f1f13948b705 Mon Sep 17 00:00:00 2001 From: Esteban Date: Mon, 20 Jul 2026 18:48:57 -0500 Subject: [PATCH] add deploy to actions on gitea --- .gitea/workflows/deploy.yml | 79 +++++++++++++++++++++++++++++++++++++ ecosystem.config.cjs | 25 ++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 .gitea/workflows/deploy.yml create mode 100644 ecosystem.config.cjs diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..906be45 --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,79 @@ +name: Deploy Search Typesense + +on: + push: + branches: + - staging + - production + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + # Route each branch to a specific directory and PM2 environment + - name: Setup Environment Variables + run: | + if [[ "${{ github.ref_name }}" == "production" ]]; then + TARGET="/var/www/search.carpa.com" + echo "PM2_ENV=production" >> $GITHUB_ENV + elif [[ "${{ github.ref_name }}" == "staging" ]]; then + TARGET="/var/www/dev.search.carpa.com" + echo "PM2_ENV=staging" >> $GITHUB_ENV + fi + + PM2_NAME="search-${{ github.ref_name }}" + + echo "TARGET_DIR=$TARGET" >> $GITHUB_ENV + echo "PM2_NAME=$PM2_NAME" >> $GITHUB_ENV + + echo "NUXT_PUBLIC_FEEDBACK_WEBHOOK=${{ secrets.NUXT_PUBLIC_FEEDBACK_WEBHOOK }}" >> $GITHUB_ENV + echo "NUXT_PUBLIC_RECAPTCHA_SITE_KEY=${{ secrets.NUXT_PUBLIC_RECAPTCHA_SITE_KEY }}" >> $GITHUB_ENV + echo "NUXT_PUBLIC_FEEDBACK_MAX_PER_HOUR=${{ secrets.NUXT_PUBLIC_FEEDBACK_MAX_PER_HOUR }}" >> $GITHUB_ENV + echo "NUXT_PUBLIC_FEEDBACK_MAX_PER_SESSION=${{ secrets.NUXT_PUBLIC_FEEDBACK_MAX_PER_SESSION }}" >> $GITHUB_ENV + echo "NUXT_PUBLIC_FEEDBACK_COOLDOWN_SEC=${{ secrets.NUXT_PUBLIC_FEEDBACK_COOLDOWN_SEC }}" >> $GITHUB_ENV + echo "NUXT_PUBLIC_FEEDBACK_MIN_SECONDS=${{ secrets.NUXT_PUBLIC_FEEDBACK_MIN_SECONDS }}" >> $GITHUB_ENV + echo "NUXT_FEEDBACK_TOKEN=${{ secrets.NUXT_FEEDBACK_TOKEN }}" >> $GITHUB_ENV + echo "NUXT_PUBLIC_TYPESENSE_URL=${{ secrets.NUXT_PUBLIC_TYPESENSE_URL }}" >> $GITHUB_ENV + echo "NUXT_PUBLIC_TYPESENSE_API_KEY=${{ secrets.NUXT_PUBLIC_TYPESENSE_API_KEY }}" >> $GITHUB_ENV + echo "NUXT_PUBLIC_ENTRELINEAS_DEV_KEY=${{ secrets.NUXT_PUBLIC_ENTRELINEAS_DEV_KEY }}" >> $GITHUB_ENV + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '24' + cache: 'npm' + + - name: Install Dependencies + run: npm ci + + - name: Build Nuxt Application + run: npm run build + env: + NITRO_PRESET: node-server + + - name: Copy Build Files to Vultr + uses: appleboy/scp-action@master + with: + host: ${{ secrets.VPS_HOST }} + username: ${{ secrets.VPS_USER }} + key: ${{ secrets.VPS_SSH_KEY }} + port: 22 + source: ".output/*,package.json,ecosystem.config.cjs" + target: "${{ env.TARGET_DIR }}" + + - name: Restart PM2 on Vultr + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.VPS_HOST }} + username: ${{ secrets.VPS_USER }} + key: ${{ secrets.VPS_SSH_KEY }} + port: 22 + script: | + export NVM_DIR="$HOME/.nvm" + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" + cd ${{ env.TARGET_DIR }} + PM2_NAME=${{ env.PM2_NAME }} pm2 reload ${{ env.PM2_NAME }} --env ${{ env.PM2_ENV }} || \ + PM2_NAME=${{ env.PM2_NAME }} pm2 start ecosystem.config.cjs --env ${{ env.PM2_ENV }} diff --git a/ecosystem.config.cjs b/ecosystem.config.cjs new file mode 100644 index 0000000..859264c --- /dev/null +++ b/ecosystem.config.cjs @@ -0,0 +1,25 @@ +module.exports = { + apps: [ + { + // You can append the PM2_ENV dynamically in the script if you want unique names in the PM2 list, + // or rely on the directory path to keep them separate. + name: process.env.PM2_NAME || 'SearchTs', + // port: '3000', + // exec_mode: 'cluster', + // instances: 'max', + script: './.output/server/index.mjs', + + // Triggered by 'staging' branch + env_staging: { + NODE_ENV: 'staging', + PORT: 3005 + }, + + // Triggered by 'production' branch + env_production: { + NODE_ENV: 'production', + PORT: 3010 + } + } + ] +};