feat: workflow logging (#29878)

* feat: workflow logging

* chore: update sql and openapi patch

* chore: include id in workflow log entries

* chore(server): update sql and lint

* chore(mobile): remove openapi files

* chore(web): lint

* chore: clean up workflow logging

* chore(server): add runId to workflow logs

* chore(server): store workflow results as enum
This commit is contained in:
Ben Beckford 2026-08-13 19:18:24 -07:00 committed by GitHub
parent af33a78d18
commit 447cc40a50
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 689 additions and 22 deletions

View file

@ -2791,6 +2791,8 @@ export type WorkflowResponseDto = {
enabled: boolean;
/** Workflow ID */
id: string;
/** Workflow logs run results */
logging: boolean;
/** Workflow name */
name: string | null;
/** Workflow steps */
@ -2805,6 +2807,8 @@ export type WorkflowCreateDto = {
description?: string | null;
/** Workflow enabled */
enabled?: boolean;
/** Workflow logs run results */
logging?: boolean;
/** Workflow name */
name?: string | null;
steps?: WorkflowStepDto[];
@ -2822,12 +2826,30 @@ export type WorkflowUpdateDto = {
description?: string | null;
/** Workflow enabled */
enabled?: boolean;
/** Workflow logs run results */
logging?: boolean;
/** Workflow name */
name?: string | null;
steps?: WorkflowStepDto[];
/** Workflow trigger type */
trigger?: WorkflowTrigger;
};
export type WorkflowLogEntryDto = {
/** Workflow run date/time */
at: string;
/** Workflow log entry ID */
id: string;
/** Last step ran, if the workflow ended early */
lastStep?: {
/** Index of the step in the workflow */
index: number;
/** Method of the step */
method: string;
};
result: WorkflowResult;
/** Workflow trigger data ID */
triggerDataId?: string;
};
export type WorkflowShareStepDto = {
/** Step configuration */
config: {
@ -6977,10 +6999,11 @@ export function getUniqueOriginalPaths(opts?: Oazapfts.RequestOpts) {
/**
* List all workflows
*/
export function searchWorkflows({ description, enabled, id, name, trigger }: {
export function searchWorkflows({ description, enabled, id, logging, name, trigger }: {
description?: string;
enabled?: boolean;
id?: string;
logging?: boolean;
name?: string;
trigger?: WorkflowTrigger;
}, opts?: Oazapfts.RequestOpts) {
@ -6991,6 +7014,7 @@ export function searchWorkflows({ description, enabled, id, name, trigger }: {
description,
enabled,
id,
logging,
name,
trigger
}))}`, {
@ -7063,6 +7087,26 @@ export function updateWorkflow({ id, workflowUpdateDto }: {
body: workflowUpdateDto
})));
}
/**
* Retrieve workflow logs
*/
export function getWorkflowLogs({ before, id, limit, result }: {
before?: string;
id: string;
limit?: number;
result?: WorkflowResult;
}, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{
status: 200;
data: WorkflowLogEntryDto[];
}>(`/workflows/${encodeURIComponent(id)}/logs${QS.query(QS.explode({
before,
limit,
result
}))}`, {
...opts
}));
}
/**
* Retrieve a workflow
*/
@ -7310,6 +7354,7 @@ export enum Permission {
WorkflowRead = "workflow.read",
WorkflowUpdate = "workflow.update",
WorkflowDelete = "workflow.delete",
WorkflowLogs = "workflow.logs",
AdminUserCreate = "adminUser.create",
AdminUserRead = "adminUser.read",
AdminUserUpdate = "adminUser.update",
@ -7687,6 +7732,11 @@ export enum AssetOrderBy {
TakenAt = "takenAt",
CreatedAt = "createdAt"
}
export enum WorkflowResult {
Completed = "completed",
Halted = "halted",
Error = "error"
}
export enum ReleaseType {
Major = "major",
Premajor = "premajor",