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_API_KEY=${{ secrets.NUXT_PUBLIC_TYPESENSE_API_KEY }}' >> $GITHUB_ENV echo 'TYPESENSE_NODES=${{ secrets.TYPESENSE_NODES }}' >> $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 TYPESENSE_NODES: ${{ secrets.TYPESENSE_NODES }} - 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 }} NUXT_FEEDBACK_TOKEN=${{ secrets.NUXT_FEEDBACK_TOKEN }} \ TYPESENSE_NODES=${{ secrets.TYPESENSE_NODES }} \ pm2 reload ${{ env.PM2_NAME }} --update-env --env ${{ env.PM2_ENV }} || \ NUXT_FEEDBACK_TOKEN=${{ secrets.NUXT_FEEDBACK_TOKEN }} \ TYPESENSE_NODES=${{ secrets.TYPESENSE_NODES }} \ pm2 start ecosystem.config.cjs --env ${{ env.PM2_ENV }}