feat: optimize SEO meta tags and structured data #9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: 🎭 Conductor CLI - CI/CD Pipeline | |
| on: | |
| push: | |
| branches: [ main, develop ] | |
| pull_request: | |
| branches: [ main ] | |
| release: | |
| types: [ published ] | |
| env: | |
| NODE_VERSION: '18' | |
| FORCE_COLOR: '1' | |
| jobs: | |
| # Quality Gates - Run first to fail fast | |
| quality-gates: | |
| name: 🔍 Quality Gates | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - name: 📥 Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: 📦 Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| - name: 📋 Install dependencies | |
| run: npm ci | |
| - name: 🔧 Lint code | |
| run: npm run lint || echo "::warning::Linting issues found" | |
| - name: 🏗️ Type check | |
| run: npm run build -- --noEmit || echo "::warning::Type check issues found" | |
| - name: 📊 Run unit tests | |
| run: npm run test:unit || echo "::warning::Unit test failures" | |
| - name: 📈 Upload coverage reports | |
| if: always() | |
| uses: codecov/codecov-action@v3 | |
| with: | |
| files: ./coverage/lcov.info | |
| flags: unittests | |
| name: codecov-umbrella | |
| # End-to-End Testing - Core functionality validation | |
| e2e-testing: | |
| name: 🧪 End-to-End Testing | |
| runs-on: ${{ matrix.os }} | |
| needs: quality-gates | |
| timeout-minutes: 20 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| node-version: ['16', '18', '20'] | |
| exclude: | |
| - os: windows-latest | |
| node-version: '16' | |
| steps: | |
| - name: 📥 Checkout code | |
| uses: actions/checkout@v4 | |
| - name: 📦 Setup Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache: 'npm' | |
| - name: 📋 Install dependencies | |
| run: npm ci | |
| - name: 🏗️ Build project | |
| run: npm run build || true | |
| - name: 🎭 Run E2E Onboarding Flow Tests | |
| run: npm run test:e2e | |
| env: | |
| CI: true | |
| NODE_ENV: test | |
| - name: 📊 Upload E2E test results | |
| if: always() | |
| uses: actions/upload-artifact@v3 | |
| with: | |
| name: e2e-results-${{ matrix.os }}-node${{ matrix.node-version }} | |
| path: | | |
| tests/e2e/results/ | |
| tests/e2e/screenshots/ | |
| retention-days: 7 | |
| # Performance Testing - Ensure CLI performance standards | |
| performance-testing: | |
| name: 🚀 Performance Testing | |
| runs-on: ubuntu-latest | |
| needs: quality-gates | |
| timeout-minutes: 15 | |
| steps: | |
| - name: 📥 Checkout code | |
| uses: actions/checkout@v4 | |
| - name: 📦 Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| - name: 📋 Install dependencies | |
| run: npm ci | |
| - name: 🏗️ Build project | |
| run: npm run build || true | |
| - name: ⚡ Performance benchmark | |
| run: npm run test:performance | |
| env: | |
| CI: true | |
| - name: 📈 Upload performance results | |
| if: always() | |
| uses: actions/upload-artifact@v3 | |
| with: | |
| name: performance-results | |
| path: performance-results.json | |
| retention-days: 30 | |
| # Security Scanning | |
| security-scan: | |
| name: 🛡️ Security Scan | |
| runs-on: ubuntu-latest | |
| needs: quality-gates | |
| timeout-minutes: 10 | |
| steps: | |
| - name: 📥 Checkout code | |
| uses: actions/checkout@v4 | |
| - name: 📦 Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| - name: 📋 Install dependencies | |
| run: npm ci | |
| - name: 🔍 Run security audit | |
| run: npm audit --audit-level=moderate | |
| - name: 🛡️ OWASP Dependency Check | |
| uses: dependency-check/Dependency-Check_Action@main | |
| with: | |
| project: 'conductor-cli' | |
| path: '.' | |
| format: 'ALL' | |
| args: > | |
| --enableRetired | |
| --enableExperimental | |
| --failOnCVSS 7 | |
| - name: 📊 Upload security results | |
| if: always() | |
| uses: actions/upload-artifact@v3 | |
| with: | |
| name: security-results | |
| path: reports/ | |
| retention-days: 30 | |
| # Build and Package | |
| build-and-package: | |
| name: 📦 Build & Package | |
| runs-on: ubuntu-latest | |
| needs: [e2e-testing, performance-testing, security-scan] | |
| if: github.ref == 'refs/heads/main' || github.event_name == 'release' | |
| timeout-minutes: 15 | |
| steps: | |
| - name: 📥 Checkout code | |
| uses: actions/checkout@v4 | |
| - name: 📦 Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| - name: 📋 Install dependencies | |
| run: npm ci | |
| - name: 🏗️ Build project | |
| run: npm run build | |
| - name: 📦 Create distribution package | |
| run: npm pack | |
| - name: 📊 Upload build artifacts | |
| uses: actions/upload-artifact@v3 | |
| with: | |
| name: conductor-cli-package | |
| path: conductor-cli-*.tgz | |
| retention-days: 90 | |
| # Deployment to NPM (on release) | |
| deploy-npm: | |
| name: 🚀 Deploy to NPM | |
| runs-on: ubuntu-latest | |
| needs: build-and-package | |
| if: github.event_name == 'release' && github.event.action == 'published' | |
| timeout-minutes: 10 | |
| steps: | |
| - name: 📥 Checkout code | |
| uses: actions/checkout@v4 | |
| - name: 📦 Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| registry-url: 'https://registry.npmjs.org' | |
| - name: 📋 Install dependencies | |
| run: npm ci | |
| - name: 🏗️ Build project | |
| run: npm run build | |
| - name: 🚀 Publish to NPM | |
| run: npm publish | |
| env: | |
| NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
| - name: 🎉 Notify deployment success | |
| run: | | |
| echo "🎉 Successfully deployed Conductor CLI to NPM!" | |
| echo "Version: $(node -p 'require("./package.json").version')" | |
| # Integration Testing with Real Claude (if available) | |
| claude-integration-test: | |
| name: 🤖 Claude Integration Test | |
| runs-on: ubuntu-latest | |
| needs: e2e-testing | |
| if: github.ref == 'refs/heads/main' | |
| timeout-minutes: 10 | |
| continue-on-error: true # Don't fail pipeline if Claude is unavailable | |
| steps: | |
| - name: 📥 Checkout code | |
| uses: actions/checkout@v4 | |
| - name: 📦 Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| - name: 📋 Install dependencies | |
| run: npm ci | |
| - name: 🏗️ Build project | |
| run: npm run build || true | |
| - name: 🤖 Test Claude integration (if available) | |
| run: | | |
| if command -v claude &> /dev/null; then | |
| echo "✅ Claude CLI found, running integration test" | |
| npm run test:claude-integration | |
| else | |
| echo "⚠️ Claude CLI not available, skipping integration test" | |
| fi | |
| # Post-deployment validation | |
| post-deployment: | |
| name: ✅ Post-Deployment Validation | |
| runs-on: ubuntu-latest | |
| needs: deploy-npm | |
| if: github.event_name == 'release' | |
| timeout-minutes: 10 | |
| steps: | |
| - name: 📦 Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| - name: 📥 Install from NPM | |
| run: npm install -g conductor-cli | |
| - name: 🧪 Validate installation | |
| run: | | |
| conductor --version | |
| conductor --help | |
| - name: 🎉 Deployment validation complete | |
| run: echo "🎉 Conductor CLI successfully deployed and validated!" | |
| # Status notification | |
| notify-status: | |
| name: 📢 Notify Status | |
| runs-on: ubuntu-latest | |
| needs: [quality-gates, e2e-testing, performance-testing, security-scan] | |
| if: always() && github.ref == 'refs/heads/main' | |
| steps: | |
| - name: 📊 Calculate overall status | |
| id: status | |
| run: | | |
| if [[ "${{ needs.quality-gates.result }}" == "success" && | |
| "${{ needs.e2e-testing.result }}" == "success" && | |
| "${{ needs.performance-testing.result }}" == "success" && | |
| "${{ needs.security-scan.result }}" == "success" ]]; then | |
| echo "status=success" >> $GITHUB_OUTPUT | |
| echo "message=🎉 All quality gates passed! Conductor CLI is ready." >> $GITHUB_OUTPUT | |
| else | |
| echo "status=failure" >> $GITHUB_OUTPUT | |
| echo "message=❌ Quality gate failures detected. Check the logs." >> $GITHUB_OUTPUT | |
| fi | |
| - name: 📢 Report status | |
| run: | | |
| echo "${{ steps.status.outputs.message }}" | |
| echo "🔗 Workflow: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" |