name: Deploy to Flatlogic VM on: push: branches: - main - master workflow_dispatch: repository_dispatch: types: - bolt_sync - replit_sync - flatlogic_deploy concurrency: group: flatlogic-deploy-${{ github.ref_name }} cancel-in-progress: true jobs: deploy: runs-on: ubuntu-latest timeout-minutes: 30 environment: production steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 20 cache: pnpm - name: Enable Corepack run: | corepack enable corepack prepare pnpm@10.16.1 --activate - name: Install dependencies run: pnpm install --frozen-lockfile - name: Typecheck workspace run: pnpm typecheck - name: Build workspace run: pnpm build - name: Configure SSH env: FLATLOGIC_SSH_KEY: ${{ secrets.FLATLOGIC_SSH_KEY }} FLATLOGIC_HOST: ${{ secrets.FLATLOGIC_HOST }} run: | test -n "$FLATLOGIC_SSH_KEY" test -n "$FLATLOGIC_HOST" install -m 700 -d ~/.ssh printf '%s' "$FLATLOGIC_SSH_KEY" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 ssh-keyscan -H "$FLATLOGIC_HOST" >> ~/.ssh/known_hosts - name: Deploy on Flatlogic VM env: FLATLOGIC_HOST: ${{ secrets.FLATLOGIC_HOST }} FLATLOGIC_USER: ${{ secrets.FLATLOGIC_USER }} PROJECT_DIR: ${{ secrets.FLATLOGIC_PROJECT_DIR }} DEPLOY_BRANCH: ${{ secrets.FLATLOGIC_DEPLOY_BRANCH }} DATABASE_URL: ${{ secrets.DATABASE_URL }} DB_SSL: ${{ secrets.DB_SSL }} DB_POOL_MAX: ${{ secrets.DB_POOL_MAX }} DB_QUERY_TIMEOUT_MS: ${{ secrets.DB_QUERY_TIMEOUT_MS }} DB_STATEMENT_TIMEOUT_MS: ${{ secrets.DB_STATEMENT_TIMEOUT_MS }} ADMIN_TOKEN: ${{ secrets.ADMIN_TOKEN }} API_INGEST_KEY: ${{ secrets.API_INGEST_KEY }} WEBHOOK_SECRET: ${{ secrets.WEBHOOK_SECRET }} SHEIN_WEBHOOK_SECRET: ${{ secrets.SHEIN_WEBHOOK_SECRET }} API_PORT: ${{ secrets.API_PORT }} STORE_PORT: ${{ secrets.STORE_PORT }} run: | test -n "$FLATLOGIC_HOST" test -n "$FLATLOGIC_USER" test -n "$PROJECT_DIR" ssh "$FLATLOGIC_USER@$FLATLOGIC_HOST" \ "export PROJECT_DIR='$PROJECT_DIR' DEPLOY_BRANCH='${DEPLOY_BRANCH:-${GITHUB_REF_NAME}}' DATABASE_URL='$DATABASE_URL' DB_SSL='${DB_SSL:-require}' DB_POOL_MAX='${DB_POOL_MAX:-20}' DB_QUERY_TIMEOUT_MS='${DB_QUERY_TIMEOUT_MS:-15000}' DB_STATEMENT_TIMEOUT_MS='${DB_STATEMENT_TIMEOUT_MS:-15000}' ADMIN_TOKEN='$ADMIN_TOKEN' API_INGEST_KEY='$API_INGEST_KEY' WEBHOOK_SECRET='$WEBHOOK_SECRET' SHEIN_WEBHOOK_SECRET='$SHEIN_WEBHOOK_SECRET' API_PORT='${API_PORT:-8080}' STORE_PORT='${STORE_PORT:-3001}' && bash '$PROJECT_DIR/scripts/flatlogic-deploy.sh'"