GitHub Actions y CI¶
Traducción informativa de la versión en inglés, actualizada el 25/10/2026. Si difieren, prevalece la versión en inglés. Los identificadores, comandos y bloques de código se conservan sin traducir.
Las GitHub Actions y el flujo de CI de este repositorio: dos acciones compuestas en .github/actions/ y el flujo ci.yml.
Los flujos de este repositorio no ejercitan las acciones (25/10/2026), y no se probaron desde otro repositorio. Las dos ejecutan código de un checkout de este repositorio:
verify-bundlecargalib/verify.js, que necesita compilado el SDK del workspace (sdks/typescript), yconformance-testejecutatools/conformance.jsdel workspace, así que solo funciona en un checkout de este repositorio. Para verificar bundles en tu propio pipeline, véase Verificar bundles en tu proyecto.
Acciones disponibles¶
verify-bundle¶
Verifica un Signed Bundle de DCP en un flujo de GitHub Actions con el verificador de referencia (lib/verify.js). Los bundles V1 pasan comprobaciones de esquema, firma Ed25519, cadena de auditoría y Merkle. Los bundles V2 normativos (schemas/v2/signed_bundle.schema.json) se validan contra el esquema y después los verifica @dcp-ai/sdk: manifiesto, firma compuesta Ed25519 + ML-DSA-65, vinculación de sesión y cadena de auditoría.
Instala el paquete raíz del checkout desde el que se ejecuta (npm install --production, ignorando los errores de instalación) y no compila el SDK del workspace, así que compila sdks/typescript en un paso anterior. Verifica con la política por defecto: no hay ninguna entrada de política.
Usa solo entradas de ruta literales y de confianza: la acción las interpola en shell y en JavaScript evaluado con eval, en lugar de pasarlas como datos. Las comillas o la sintaxis de shell en una ruta pueden cambiar el comando. No obtengas estas entradas de un pull request, una incidencia o un nombre de artefacto que no sean de confianza. El ejemplo con la CLI de referencia de abajo pasa la ruta como argumento.
- uses: ./.github/actions/verify-bundle
with:
bundle-path: "path/to/signed_bundle.json"
public-key-path: "keys/public_key.txt" # Optional
fail-on-invalid: "true"
node-version: "20"
Entradas¶
| Entrada | Obligatoria | Valor por defecto | Descripción |
|---|---|---|---|
bundle-path |
Sí | — | Ruta al archivo JSON del bundle firmado |
public-key-path |
No | — | Ruta a la clave pública Ed25519 esperada. V1: verifica contra ella (si no, se usa la clave incluida en el bundle). V2: fija el firmante clásico del bundle |
fail-on-invalid |
No | "true" |
Hace fallar el paso si el bundle no es válido |
node-version |
No | "20" |
Versión de Node.js |
Salidas¶
| Salida | Descripción |
|---|---|
verified |
"true" o "false" |
errors |
Errores de verificación (si los hay) |
Ejemplo de uso¶
Un esbozo para un checkout de este repositorio (no se ejecutó para esta página): la acción y lib/verify.js proceden del
checkout, y agent/citizenship_bundle.signed.json y agent/public_key.txt representan archivos que aporta el operador.
name: Verify Agent Bundle
on: [push]
jobs:
verify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
- name: Build the workspace SDK (the action does not)
run: (cd sdks/typescript && npm ci && npm run build)
- name: Verify DCP Bundle
id: verify
uses: ./.github/actions/verify-bundle
with:
bundle-path: "agent/citizenship_bundle.signed.json"
public-key-path: "agent/public_key.txt"
- name: Check result
run: echo "Verified: ${{ steps.verify.outputs.verified }}"
conformance-test¶
Ejecuta node tools/conformance.js en el workspace: la suite de conformidad V1 + V2 del repositorio, sobre sus propios ejemplos. Solo funciona en un checkout de este repositorio, y su entrada test-dir no se usa.
- uses: ./.github/actions/conformance-test
with:
node-version: "20"
test-dir: "tests/conformance/examples"
Entradas¶
| Entrada | Obligatoria | Valor por defecto | Descripción |
|---|---|---|---|
node-version |
No | "20" |
Versión de Node.js |
test-dir |
No | "tests/conformance/examples" |
La acción no la usa |
Salidas¶
| Salida | Descripción |
|---|---|
passed |
Si pasaron todas las pruebas |
summary |
Resumen de las pruebas |
Ejemplo de uso¶
Un esbozo para un checkout de este repositorio (no se ejecutó para esta página). tools/conformance.js importa
@dcp-ai/sdk, así que primero se compila el SDK del workspace:
name: DCP Conformance
on: [push]
jobs:
conformance:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
- name: Build the workspace SDK (the action does not)
run: (cd sdks/typescript && npm ci && npm run build)
- name: Run Conformance Tests
id: conform
uses: ./.github/actions/conformance-test
- name: Results
run: echo "${{ steps.conform.outputs.summary }}"
Flujo de CI¶
El flujo ci.yml se ejecuta en los pushes a main y en los pull requests contra cualquier rama base. Un trabajo changes detecta qué partes cambiaron (dorny/paths-filter), y los trabajos de abajo se ejecutan para esas partes:
| Trabajo | Qué ejecuta |
|---|---|
conformance |
Node.js 20 y 22: npm install, npm run conformance, las pruebas del rango del escalar S de tools/crypto.js y del playground, npm run examples:generate:v2, dcp verify-bundle sobre los ejemplos V1 y V2 (V2 con hybrid_required) y dcp integrity |
typescript-sdk |
sdks/typescript: npm install, npx tsc --noEmit, npm run build, npm run test, cobertura |
integrations |
anthropic-mcp, express, google-a2a, openclaw: compila el SDK del workspace, npm ci, compilación, vitest run |
cli |
Node.js 20 y 22: compila el SDK del workspace, lo instala en cli/, las pruebas de la CLI y su control negativo, y una comprobación de los archivos empaquetados |
python-sdk |
Python 3.12: pip install -e ".[dev]", pytest con cobertura |
go-sdk |
Go según sdks/go/go.mod: go build ./..., go test con cobertura |
rust-sdk |
Rust estable: cargo build, cargo build --features otlp, cobertura, cargo test --all-features, una compilación de las pruebas para wasm32-unknown-unknown |
wasm-sdk |
Rust estable y wasm-pack: npm run build:wasm, npm test en sdks/wasm |
Otros flujos cubren la matriz y el laboratorio del candidato de canonicalización, los contratos, el fuzzing diferencial, la matriz de interoperabilidad, las etiquetas y la publicación (npm, PyPI, imágenes Docker, integraciones, plantillas). Dos cubren la documentación, y ninguno traduce nada automáticamente: i18n-sync.yml («Documentation and i18n») comprueba, en los pull requests y en los pushes a main que tocan Markdown o las herramientas de documentación, la cobertura, los hashes revisados, la estructura y los enlaces de los cinco idiomas, ejecuta los controles positivos y negativos de esa puerta y construye el sitio en los cinco idiomas; docs.yml construye el mismo sitio en main y lo despliega en GitHub Pages.
Para ejecutar en local las mismas comprobaciones de documentación, véase Documentation and translations en CONTRIBUTING.md:
pip install 'mkdocs==1.6.*' 'mkdocs-material==9.5.*' 'pymdown-extensions==10.*'
python3 scripts/docs_i18n.py check
python3 -m unittest discover -s scripts -p 'test_docs*.py' -v
bash scripts/build-docs-site.sh
Verificar bundles en tu proyecto¶
Un esbozo que verifica un bundle con la CLI de referencia de un checkout fijado (no se ejecutó para esta página). dcp verify-bundle sale con 0 cuando el bundle se verifica y con un valor distinto de cero en caso contrario, y solo lee archivos bajo el directorio actual:
# .github/workflows/dcp.yml
name: DCP Verification
on: [push, pull_request]
jobs:
verify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v4
with:
repository: dcp-ai-protocol/dcp-ai
ref: <full commit SHA you have reviewed>
path: dcp-ai
- uses: actions/setup-node@v4
with:
node-version: "22"
- name: Build the reference verifier
run: |
(cd dcp-ai/sdks/typescript && npm ci && npm run build)
(cd dcp-ai && npm install)
- name: Verify the agent's bundle
run: node dcp-ai/bin/dcp.js verify-bundle --policy hybrid_required my-agent/bundle.signed.json
Un bundle verificado está íntegro y firmado por las claves que nombra; para aceptar bundles solo de principales en los que confías, usa la admisión (dcp admit-bundle, véase docs/ADMISSION.md).
Licencia¶
Apache-2.0