itsulu-blog-publisher/PHASE3_DEPLOYMENT_CHECKLIST.md
Nicholas Riegel 124d9308c7 docs: add Phase 3 deployment checklist with CI/CD variable setup
Created comprehensive deployment guide for Phase 3 Runboat E2E testing:

Pre-Deployment Checklist:
- Code readiness verification (all Phase 3 artifacts listed)
- CI/CD variables setup with exact requirements:
  * RUNBOAT_API_URL (from infrastructure team)
  * RUNBOAT_TOKEN (from infrastructure team)
  * GITLAB_BOT_TOKEN (create locally via GitLab access tokens)
- Runboat account verification script
- E2E test dry-run instructions
- Performance test dry-run instructions

Deployment Steps (Step-by-step):
1. Create GitLab bot token (copy/paste walkthrough)
2. Set CI/CD variables in GitLab UI (protected, masked)
3. Push Phase 3 code to feature branch
4. Create MR with standard description
5. Verify pipeline runs (expected stages + timing)
6. Review pipeline artifacts (reports + traces)

Troubleshooting Guide:
- Runboat preview fails: Authorization, timeout, connectivity
- E2E selector failures: Form field mismatches
- Performance test failures: Network time vs mocked
- With fixes and verification steps for each

Post-Deployment:
- Weekly monitoring procedures
- Annual token renewal reminder
- Success criteria checklist
- Approval sign-off section

Expected Pipeline Timeline:
- Lint: 2 min
- Test (parallel): 10 min
- Build: 3 min
- Preview: 5 min
- E2E: 15 min
- Total: ~35 minutes

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-30 00:55:38 -04:00

8.5 KiB
Raw Blame History

Phase 3: Runboat E2E & Performance Testing — Deployment Checklist

Status: Ready for deployment
Last Updated: 2026-05-30

Pre-Deployment Checklist

1. Code Readiness

  • E2E test infrastructure complete (conftest.py)
  • 19 E2E scenarios implemented
  • 7 performance benchmark tests implemented
  • PHASE3_ROADMAP.md documented
  • .gitlab-ci.yml updated with preview + e2e + performance stages
  • CLAUDE.md updated with SLO targets and patterns
  • All code committed and pushed to main

2. CI/CD Variables Setup (Action Required)

Before merging Phase 3 code, set these variables in GitLab Project Settings → CI/CD Variables:

Variable 1: RUNBOAT_API_URL

  • Type: Secret
  • Value: Runboat API endpoint (e.g., https://api.runboat.dev)
  • Protected: Yes
  • Masked: Yes
  • Source: Request from Acsone/infrastructure team

Variable 2: RUNBOAT_TOKEN

  • Type: Secret
  • Value: Bearer token for Runboat API authentication
  • Protected: Yes
  • Masked: Yes
  • Source: Request from Acsone/infrastructure team
  • Format: rbk_... (Runboat Bearer Key)

Variable 3: GITLAB_BOT_TOKEN

  • Type: Secret
  • Value: GitLab personal/bot token for posting MR comments
  • Protected: Yes
  • Masked: Yes
  • Source: Create locally via GitLab Settings → Access Tokens
    • Token name: itsulu-blog-publisher-bot
    • Scopes: api, read_api, read_repository
    • Expiration: 1 year
    • Save and copy the value

3. Runboat Account Verification

Before deploying, verify Runboat is accessible:

# Test Runboat API (after variables are set)
curl -fsSL -X POST "${RUNBOAT_API_URL}/builds" \
  -H "Authorization: Bearer ${RUNBOAT_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"repo":"example/repo","sha":"abc123"}'

# Should return JSON with "url" field (success)
# Or 401 error (invalid token — fix variables)

4. E2E Test Dry-Run (Local)

Test E2E suite against local dev instance:

# Install dependencies
pip install -r e2e/requirements.txt

# Run against local Odoo (default http://localhost:8069)
pytest e2e/ -v

# Or specify custom URL
ODOO_BASE_URL=http://staging:8069 pytest e2e/ -v

Expected result:

  • All 19 scenarios should execute
  • Some may fail if features not in local DB (normal for dry-run)
  • Key is to verify Playwright fixtures work

5. Performance Test Dry-Run (Local)

Test performance tests against local instance:

# Run performance tests
pytest addons/itsulu_blog_publisher/tests/test_performance.py \
  -m performance -v

# Should output:
# - test_generation_latency_under_30_seconds PASSED
# - test_query_count tests PASSED
# - test_token_usage_baseline PASSED
# - test_concurrent_generation PASSED

Deployment Steps

Step 1: Create/Verify GitLab Bot Token

# In GitLab web UI:
1. Click your avatar → Settings → Access Tokens
2. Click "Add New Token"
3. Fill:
   - Token name: "itsulu-blog-publisher-bot"
   - Scopes: Check api, read_api, read_repository
   - Expiration: 1 year from now
4. Click "Create Personal Access Token"
5. Copy the token value (only shown once)

Step 2: Set CI/CD Variables

# In GitLab web UI:
1. Project → Settings → CI/CD → Variables
2. Add RUNBOAT_API_URL (get from infrastructure team)
3. Add RUNBOAT_TOKEN (get from infrastructure team)
4. Add GITLAB_BOT_TOKEN (paste from step 1)
5. Check all are: Protected=Yes, Masked=Yes
6. Click Save

Step 3: Push Phase 3 Code to Feature Branch

# Verify all commits are in git log
git log --oneline -5

# Should see:
# d122b77 feat: integrate Runboat E2E testing into CI/CD pipeline
# acfa1d9 feat: establish Phase 3 E2E testing infrastructure
# 7ee393a feat: add performance benchmark tests
# ... Phase 2 commits ...

Step 4: Create Merge Request

# Push to feature branch
git push origin main:refs/heads/phase-3-e2e-testing

# Create MR in GitLab UI
# Title: "Phase 3: Runboat E2E Testing & Performance Benchmarks"
# Description:
# - E2E infrastructure with Runboat polling and auth fixtures
# - 19 E2E test scenarios (generation, scheduling, error recovery)
# - 7 performance benchmark tests (latency, queries, tokens, concurrency)
# - CI/CD pipeline integration (preview + e2e + performance stages)
# - SLO targets established for 7 performance metrics

Step 5: Verify Pipeline Runs

When MR is created, GitLab CI/CD should automatically start:

  1. Lint stage (2 min)

    • black --check
    • pylint-odoo
    • Status: Should pass
  2. Test stage (10 min) — runs in parallel:

    • unit_tests: TDD + BDD tests
    • performance_tests: Performance benchmarks
    • Status: Should pass
  3. Build stage (3 min)

    • Docker image build & push
    • Status: Should pass
  4. Preview stage (5 min)

    • runboat_preview: Requests Runboat build
    • Status: Should create preview URL (or ⚠️ if Runboat unavailable)
  5. E2E stage (15 min) — waits for preview

    • e2e_tests: Runs Playwright scenarios
    • Status: Should pass or ⚠️ if preview not ready

Step 6: Review Pipeline Artifacts

After pipeline completes, download/review artifacts:

  • report-unit.html — Unit test coverage report
  • report-performance.html — Performance test results
  • report-e2e.html — E2E test results (if ran)
  • e2e/traces/ — Playwright trace files for debugging

Troubleshooting

Runboat Preview Fails

Error: Authorization failed or 401 Unauthorized

Fix:

  1. Verify RUNBOAT_TOKEN is set in CI/CD variables
  2. Check token is not expired (request new from infrastructure team)
  3. Verify RUNBOAT_API_URL is correct

Error: Cannot reach Runboat API

Fix:

  1. Verify RUNBOAT_API_URL is not behind firewall
  2. Check infrastructure team has enabled preview access for this project

E2E Tests Timeout

Error: Runboat instance not ready after 180s

Fix:

  1. Runboat cold-start can take 60s, normal behavior
  2. If > 180s, Runboat infrastructure may be overloaded
  3. Retry pipeline after 30 minutes

E2E Tests Fail (Selector Not Found)

Error: locator.fill('value') → TimeoutError: locator did not resolve

Fix:

  1. Form field names may differ in template DB
  2. Update selector in test file to match actual field names
  3. Use page.pause() to inspect live page: pytest e2e/ --pdb-trace

Performance Tests Fail

Error: AssertionError: Generation took 35s, target <30s

Fix:

  1. Mock LLM response is artificially fast
  2. Real API calls will add network time
  3. If local test > 30s, investigate N+1 queries or missing indexes

Post-Deployment

Ongoing Maintenance

After Phase 3 is live:

  1. Monitor E2E Results (Weekly)

    • Check MR pipeline E2E reports
    • Flag flaky scenarios (run 3× to verify)
    • Update fixtures if Odoo UI changes
  2. Track Performance Metrics (Weekly)

    • Monitor ir_logging table for generation latency
    • Alert if P99 latency > 60s (bottleneck detected)
    • Adjust SLOs if production baseline differs
  3. Update Runboat Token (Annually)

    • RUNBOAT_TOKEN expires yearly
    • Request renewal 1 month before expiration
    • Update CI/CD variable before it expires
  4. Runboat Account Maintenance

    • Monitor preview instance quota
    • Cleanup old instances if quota fills
    • Contact Acsone if persistent issues

Success Criteria

Phase 3 is successful when:

  • All MRs include E2E test results
  • No E2E flakiness (< 2% failure rate)
  • Performance baselines recorded in first full month
  • Runboat previews available for all MRs
  • Zero issues with Runboat integration after 1 week
  • Performance SLOs consistently met
  • Team trained on reading E2E/performance reports

Approval Sign-Off

This Phase 3 deployment is ready when:

  • Code review approved
  • All CI/CD variables set (RUNBOAT_API_URL, RUNBOAT_TOKEN, GITLAB_BOT_TOKEN)
  • Runboat account verified operational
  • Local dry-runs pass (E2E + performance tests)
  • Infrastructure team confirms Runboat access
  • At least one team member trained on results interpretation

Deploy: Create MR and monitor first pipeline run


Deployment Date: (To be filled on merge)
Deployed By: (To be filled on merge)
Notes: (To be filled with any issues encountered)