documenso-ci-integration
Sets up GitHub Actions for Documenso CI/CD, including unit testing and integration deployment workflows.
Install
mkdir -p .claude/skills/documenso-ci-integration && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/6844" && unzip -o skill.zip -d .claude/skills/documenso-ci-integration && rm skill.zipInstalls to .claude/skills/documenso-ci-integration
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Configure CI/CD pipelines for Documenso integrations.Key capabilities
- →Configure GitHub Actions for Documenso CI
- →Implement unit testing with mocked SDK clients
- →Execute integration tests against staging environments
- →Manage secrets for API keys and webhooks
- →Automate test document cleanup
How it works
The skill provides YAML templates for GitHub Actions that separate fast unit tests using mocks from slower integration tests that interact with the live Documenso staging API.
Inputs & outputs
When to use documenso-ci-integration
- →Creating GitHub Actions for Documenso CI
- →Configuring automated test environments for signing flows
- →Setting up deployment pipelines for document integrations
About this skill
Documenso CI Integration
Overview
Configure CI/CD pipelines for Documenso integrations with GitHub Actions. Covers unit testing with mocks, integration testing against staging, and deployment workflows with secret management.
Prerequisites
- GitHub repository with Actions enabled
- Documenso staging API key
- Test environment configured (see
documenso-local-dev-loop)
Instructions
Step 1: GitHub Actions Workflow
# .github/workflows/documenso-ci.yml
name: Documenso CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
env:
NODE_ENV: test
jobs:
unit-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm test
# Unit tests use mocks — no API key needed
integration-tests:
runs-on: ubuntu-latest
if: github.event_name == 'push' # Only on push to main/develop
needs: unit-tests
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm run test:integration
env:
DOCUMENSO_API_KEY: ${{ secrets.DOCUMENSO_STAGING_API_KEY }}
- run: npm run test:cleanup # Remove test documents
env:
DOCUMENSO_API_KEY: ${{ secrets.DOCUMENSO_STAGING_API_KEY }}
if: always()
Step 2: Unit Tests with Mocked SDK
// tests/unit/document-service.test.ts
import { describe, it, expect, vi, beforeEach } from "vitest";
import { createMockClient } from "../mocks/documenso";
import { DocumentService } from "../../src/services/document-service";
describe("DocumentService", () => {
let service: DocumentService;
let mockClient: ReturnType<typeof createMockClient>;
beforeEach(() => {
mockClient = createMockClient();
service = new DocumentService(mockClient as any);
});
it("creates document with recipients and sends", async () => {
const result = await service.createAndSend({
title: "Test Contract",
pdfPath: "./fixtures/test.pdf",
signers: [{ email: "[email protected]", name: "Test User" }],
});
expect(mockClient.documents.createV0).toHaveBeenCalledWith({ title: "Test Contract" });
expect(mockClient.documentsRecipients.createV0).toHaveBeenCalled();
expect(mockClient.documents.sendV0).toHaveBeenCalled();
expect(result.documentId).toBe(1);
});
it("handles API errors gracefully", async () => {
mockClient.documents.createV0.mockRejectedValue(
Object.assign(new Error("Unauthorized"), { statusCode: 401 })
);
await expect(service.createAndSend({
title: "Test",
pdfPath: "./fixtures/test.pdf",
signers: [],
})).rejects.toThrow("Unauthorized");
});
});
Step 3: Integration Tests Against Staging
// tests/integration/document-lifecycle.test.ts
import { describe, it, expect, afterAll } from "vitest";
import { Documenso } from "@documenso/sdk-typescript";
const client = new Documenso({ apiKey: process.env.DOCUMENSO_API_KEY! });
const testDocIds: number[] = [];
describe("Document Lifecycle (Integration)", () => {
it("creates a document", async () => {
const doc = await client.documents.createV0({
title: "[CI-TEST] Integration Test",
});
testDocIds.push(doc.documentId);
expect(doc.documentId).toBeGreaterThan(0);
}, 30000);
it("lists documents", async () => {
const { documents } = await client.documents.findV0({ page: 1, perPage: 5 });
expect(documents.length).toBeGreaterThan(0);
}, 15000);
afterAll(async () => {
// Cleanup: delete test documents
for (const id of testDocIds) {
try {
await client.documents.deleteV0(id);
} catch {
console.warn(`Cleanup: could not delete document ${id}`);
}
}
});
});
Step 4: Add Secrets to GitHub
# Using GitHub CLI
gh secret set DOCUMENSO_STAGING_API_KEY --body "api_stg_xxxxxxxxxxxx"
gh secret set DOCUMENSO_WEBHOOK_SECRET --body "whsec_xxxxxxxxxxxx"
# Verify secrets exist
gh secret list
Step 5: Package.json Scripts
{
"scripts": {
"test": "vitest run tests/unit/",
"test:integration": "vitest run tests/integration/ --timeout 60000",
"test:cleanup": "tsx scripts/cleanup-test-docs.ts",
"test:all": "npm test && npm run test:integration"
}
}
Step 6: Pre-commit Hook (Optional)
# .husky/pre-commit
npm test -- --run
This runs unit tests (with mocks) before every commit, catching issues early without needing API access.
CI Strategy Summary
| Test Type | Runs On | API Key Needed? | Speed |
|---|---|---|---|
| Unit tests (mocks) | Every push + PR | No | Fast (~5s) |
| Integration tests | Push to main/develop only | Yes (staging) | Slow (~30s) |
| Cleanup | After integration tests | Yes (staging) | Fast |
Error Handling
| CI Issue | Cause | Solution |
|---|---|---|
| Integration test timeout | Slow API | Increase vitest timeout to 60s |
| Rate limit in CI | Too many test runs | Use mocks for PRs, live API only on main |
| Secret not found | Missing GitHub secret | Add via gh secret set |
| Stale test data | Cleanup didn't run | Run npm run test:cleanup manually |
Resources
Next Steps
For deployment strategies, see documenso-deploy-integration.
When not to use it
- →When the project does not use GitHub Actions
- →When staging API access is unavailable
Prerequisites
Limitations
- →Integration tests require staging API keys
- →Cleanup scripts must be manually maintained
How it compares
This configuration automates the lifecycle of testing document signing flows, replacing manual test execution and cleanup.
Compared to similar skills
documenso-ci-integration side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| documenso-ci-integration (this skill) | 1 | 25d | Review | Intermediate |
| agent-production-validator | 3 | 6mo | Review | Advanced |
| validate-delivery | 1 | 5mo | Review | Beginner |
| release-testing | 1 | 1mo | Review | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
agent-production-validator
ruvnet
Agent skill for production-validator - invoke with $agent-production-validator
validate-delivery
avifenesh
Use when validating task completion before shipping. Runs tests, build, and requirement checks. Returns pass/fail with fix instructions.
release-testing
mono
Run integration tests to verify SkiaSharp NuGet packages work correctly before publishing. Use when user asks to: - Test/verify packages before release - Run integration tests - Test on specific device (iPad, iPhone, Android emulator, Mac, Windows) - Verify SkiaSharp rendering works - Check if packages are ready for publishing - Run smoke/console/blazor/maui tests - Continue with release - Test version X Triggers: "test the release", "verify packages", "run tests on iPad", "check ios tests", "test mac catalyst", "run android tests", "continue", "test 3.119.2-preview.2".
smoke-check
hoatv2211
Run core path smoke validation before QA handoff or merge.
aidlc-build
aws-samples
Final integration build and test verification. Validates that implemented code compiles, passes all test suites, and meets quality gates before deployment.
release-bump
himatts
Prepare versioned release updates for Lime Pipeline. Use when user-visible behavior changes require bumping `bl_info["version"]`, updating `CHANGELOG.md`, and producing release-ready QA notes.