返回 Skill 列表
extension
分类: 开发与工程无需 API Key

gamma-ci-integration

配置Gamma CI/CD与GitHub Actions的集成和测试。在设置自动化测试、配置CI流水线或将Gamma测试集成到构建过程中时使用。可以通过诸如“gamma CI”、“gamma GitHub Actions”、“gamma 自动化测试”、“CI gamma”、“gamma 流水线”等短语触发。

person作者: jakexiaohubgithub

Gamma CI Integration

Overview

Set up continuous integration for Gamma-powered applications with automated testing and deployment.

Prerequisites

  • GitHub repository with Actions enabled
  • Gamma test API key
  • npm/pnpm project configured

Instructions

Step 1: Create GitHub Actions Workflow

# .github/workflows/gamma-ci.yml
name: Gamma CI

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

env:
  GAMMA_API_KEY: ${{ secrets.GAMMA_API_KEY }}

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Run unit tests
        run: npm test

      - name: Run Gamma integration tests
        run: npm run test:gamma
        env:
          GAMMA_MOCK: ${{ github.event_name == 'pull_request' }}

      - name: Upload coverage
        uses: codecov/codecov-action@v4
        with:
          files: ./coverage/lcov.info

Step 2: Create Test Scripts

// package.json
{
  "scripts": {
    "test": "vitest run",
    "test:gamma": "vitest run --config vitest.gamma.config.ts",
    "test:gamma:live": "GAMMA_MOCK=false vitest run --config vitest.gamma.config.ts"
  }
}

Step 3: Gamma Test Configuration

// vitest.gamma.config.ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    include: ['tests/gamma/**/*.test.ts'],
    testTimeout: 60000, // Gamma API can be slow
    hookTimeout: 30000,
    setupFiles: ['./tests/gamma/setup.ts'],
  },
});

Step 4: Test Setup with Mocking

// tests/gamma/setup.ts
import { beforeAll, afterAll } from 'vitest';
import { GammaClient } from '@gamma/sdk';

const useMock = process.env.GAMMA_MOCK === 'true';

export let gamma: GammaClient;

beforeAll(() => {
  if (useMock) {
    gamma = createMockGammaClient();
  } else {
    gamma = new GammaClient({
      apiKey: process.env.GAMMA_API_KEY,
    });
  }
});

function createMockGammaClient() {
  return {
    presentations: {
      create: vi.fn().mockResolvedValue({
        id: 'mock-id',
        url: 'https://gamma.app/mock/test',
        title: 'Mock Presentation',
      }),
      list: vi.fn().mockResolvedValue([]),
      get: vi.fn().mockResolvedValue({ id: 'mock-id' }),
    },
    ping: vi.fn().mockResolvedValue({ ok: true }),
  } as unknown as GammaClient;
}

Step 5: Integration Test Example

// tests/gamma/presentation.test.ts
import { describe, it, expect } from 'vitest';
import { gamma } from './setup';

describe('Gamma Presentations', () => {
  it('should create a presentation', async () => {
    const result = await gamma.presentations.create({
      title: 'CI Test Presentation',
      prompt: 'Test slide for CI',
      slideCount: 1,
    });

    expect(result.id).toBeDefined();
    expect(result.url).toContain('gamma.app');
  });

  it('should list presentations', async () => {
    const presentations = await gamma.presentations.list({ limit: 5 });

    expect(Array.isArray(presentations)).toBe(true);
  });
});

Step 6: Add Secrets to GitHub

# Using GitHub CLI
gh secret set GAMMA_API_KEY --body "your-test-api-key"

# Verify secrets
gh secret list

Output

  • Automated test pipeline running on push/PR
  • Mock mode for PR checks (no API calls)
  • Live integration tests on main branch
  • Coverage reports uploaded

Error Handling

| Error | Cause | Solution | |-------|-------|----------| | Secret not found | Missing GitHub secret | Add GAMMA_API_KEY secret | | Test timeout | Slow API response | Increase testTimeout | | Mock mismatch | Mock out of sync | Update mock responses | | Rate limit in CI | Too many test runs | Use mock mode for PRs |

Resources

Next Steps

Proceed to gamma-deploy-integration for deployment workflows.