ci-report
This module aggregates the machine-readable outputs of a pipeline run(Azure DevOps timeline, Trivy SARIF/SBOM, sanitized plan summary) and asks
an LLM to synthesize a readable execution report (markdown, HTML, or PDF).
Unlike the intel module, there is no web search and no MCP server: the inputs
are read in Go and injected deterministically into the prompt. The LLM model
provider is resolved by the Dagger engine via OPENAI_* environment variables
(works with OpenAI, Azure OpenAI, or a local OpenAI-compatible endpoint).
Installation
dagger install dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/llm/ci-report@6f6f022cb5f4f8c0f66a21286e7a7fc118bd4288Entrypoint
Return Type
CiReport ! Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/llm/ci-report@6f6f022cb5f4f8c0f66a21286e7a7fc118bd4288 call \
func (m *MyModule) Example() *dagger.CiReport {
return dag.
Cireport()
}@function
def example() -> dagger.CiReport:
return (
dag.ci_report()
)@func()
example(): CiReport {
return dag
.ciReport()
}Types
CiReport 🔗
CiReport synthesizes a CI/CD run report from pipeline artifacts.
generateReport() 🔗
GenerateReport aggregates the machine-readable outputs of a CI/CD run into a French execution report.
Inputs are deliberately limited to non-sensitive data: the Azure DevOps timeline (stage/job statuses and durations), Trivy SARIF/SBOM reports, an optional sanitized plan summary (resource addresses + actions only), an optional code-change summary (commit list + diffstat since the previous deployment), and optional failed-step logs for root-cause analysis. The raw Terraform plan (tfplan.json / plan.txt) must NEVER be passed here — it embeds resolved secret values.
The LLM model provider is resolved by the Dagger engine via the OPENAI_* environment variables (OpenAI, Azure OpenAI, or a local endpoint).
The format parameter controls the output (default: “markdown”): - “markdown”: .md file - “html”: standalone .html with inlined CSS (Teams/email friendly) - “pdf”: .pdf generated via Typst
Return Type
File !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| timeline | File ! | - | Azure DevOps build timeline JSON (REST API …/builds/{id}/timeline) |
| pipeline | String ! | - | Pipeline name (e.g. “AD.DORDOGNE.FR”) |
| environment | String ! | - | Target environment (e.g. “RC”, “PROD”) |
| version | String ! | - | Deployed version / tag |
| status | String ! | - | Aggregate run status (e.g. $(Agent.JobStatus)) |
| securityReports | Directory | - | Directory with Trivy reports: *.sarif and/or CycloneDX *.json SBOM |
| planSummary | File | - | Sanitized Terraform plan summary (address + actions only, NO values) |
| codeChanges | File | - | Code changes since the previous deployment (commit list |
| failureLogs | File | - | Logs of the failed step(s), for root-cause analysis on deployment failure |
| format | String | "markdown" | Output format: markdown, html, pdf |
Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/llm/ci-report@6f6f022cb5f4f8c0f66a21286e7a7fc118bd4288 call \
generate-report --timeline file:path --pipeline string --environment string --version string --status stringfunc (m *MyModule) Example(timeline *dagger.File, pipeline string, environment string, version string, status string) *dagger.File {
return dag.
Cireport().
Generatereport(timeline, pipeline, environment, version, status)
}@function
def example(timeline: dagger.File, pipeline: str, environment: str, version: str, status: str) -> dagger.File:
return (
dag.ci_report()
.generatereport(timeline, pipeline, environment, version, status)
)@func()
example(timeline: File, pipeline: string, environment: string, version: string, status: string): File {
return dag
.ciReport()
.generateReport(timeline, pipeline, environment, version, status)
}