name: studio CI and deployment on: push: branches: [main] paths: - 'apps/studio/**' - 'scripts/deploy-studio.sh' - 'scripts/verify-studio-production.sh' - 'scripts/verify-studio-library.mjs' - 'scripts/verify-studio-visual.cjs' - '.gitea/workflows/studio.yml' - 'pnpm-workspace.yaml' pull_request: paths: - 'apps/studio/**' - 'scripts/deploy-studio.sh' - 'scripts/verify-studio-production.sh' - 'scripts/verify-studio-library.mjs' - 'scripts/verify-studio-visual.cjs' - '.gitea/workflows/studio.yml' - 'pnpm-workspace.yaml' workflow_dispatch: jobs: verify-and-deploy: runs-on: ces-control timeout-minutes: 45 steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Build and verify studio run: docker build -f apps/studio/Dockerfile -t "prompt-studio:${{ gitea.sha }}" . - name: Release studio if: gitea.ref == 'refs/heads/main' && (gitea.event_name == 'push' || gitea.event_name == 'workflow_dispatch') run: bash scripts/deploy-studio.sh "${{ gitea.sha }}" - name: Capture deployed baseline diagnostics (does not validate PR code) if: gitea.event_name == 'pull_request' run: bash scripts/verify-studio-production.sh --diagnose - name: Verify the deployed Studio API and native pages if: gitea.ref == 'refs/heads/main' && (gitea.event_name == 'push' || gitea.event_name == 'workflow_dispatch') run: bash scripts/verify-studio-production.sh - name: Save server acceptance evidence id: acceptance_evidence if: always() uses: actions/upload-artifact@v3 with: name: studio-production-acceptance path: artifacts/studio-acceptance/ if-no-files-found: ignore retention-days: 7 - name: Remove temporary acceptance output after upload if: always() && steps.acceptance_evidence.outcome == 'success' run: rm -rf artifacts/studio-acceptance