119 lines
3.8 KiB
TypeScript
119 lines
3.8 KiB
TypeScript
import type { GiteaClient } from './gitea.classes.giteaclient.js';
|
|
import type { IGiteaActionRunJob, IGiteaActionRunJobStep } from './gitea.interfaces.js';
|
|
import { computeDuration, resolveGiteaStatus } from './gitea.helpers.js';
|
|
|
|
export class GiteaActionRunJobStep {
|
|
public readonly name: string;
|
|
public readonly number: number;
|
|
public readonly status: string;
|
|
public readonly conclusion: string;
|
|
public readonly resolvedStatus: string;
|
|
public readonly startedAt: string;
|
|
public readonly completedAt: string;
|
|
public readonly duration: number;
|
|
|
|
constructor(raw: IGiteaActionRunJobStep) {
|
|
this.name = raw.name || '';
|
|
this.number = raw.number || 0;
|
|
this.status = raw.status || '';
|
|
this.conclusion = raw.conclusion || '';
|
|
this.resolvedStatus = resolveGiteaStatus(this.status, this.conclusion);
|
|
this.startedAt = raw.started_at || '';
|
|
this.completedAt = raw.completed_at || '';
|
|
this.duration = computeDuration(this.startedAt, this.completedAt);
|
|
}
|
|
|
|
toJSON(): IGiteaActionRunJobStep {
|
|
return {
|
|
name: this.name,
|
|
number: this.number,
|
|
status: this.status,
|
|
conclusion: this.conclusion,
|
|
started_at: this.startedAt,
|
|
completed_at: this.completedAt,
|
|
};
|
|
}
|
|
}
|
|
|
|
export class GiteaActionRunJob {
|
|
// Raw data
|
|
public readonly id: number;
|
|
public readonly runId: number;
|
|
public readonly name: string;
|
|
public readonly workflowName: string;
|
|
public readonly headBranch: string;
|
|
public readonly headSha: string;
|
|
public readonly status: string;
|
|
public readonly conclusion: string;
|
|
public readonly htmlUrl: string;
|
|
public readonly startedAt: string;
|
|
public readonly completedAt: string;
|
|
public readonly labels: string[];
|
|
public readonly runnerId: number;
|
|
public readonly runnerName: string;
|
|
public readonly steps: GiteaActionRunJobStep[];
|
|
|
|
// Computed
|
|
public readonly resolvedStatus: string;
|
|
public readonly duration: number;
|
|
|
|
/** @internal */
|
|
constructor(
|
|
private client: GiteaClient,
|
|
private ownerRepo: string,
|
|
raw: IGiteaActionRunJob,
|
|
) {
|
|
this.id = raw.id;
|
|
this.runId = raw.run_id || 0;
|
|
this.name = raw.name || '';
|
|
this.workflowName = raw.workflow_name || '';
|
|
this.headBranch = raw.head_branch || '';
|
|
this.headSha = raw.head_sha || '';
|
|
this.status = raw.status || '';
|
|
this.conclusion = raw.conclusion || '';
|
|
this.htmlUrl = raw.html_url || '';
|
|
this.startedAt = raw.started_at || '';
|
|
this.completedAt = raw.completed_at || '';
|
|
this.labels = raw.labels || [];
|
|
this.runnerId = raw.runner_id || 0;
|
|
this.runnerName = raw.runner_name || '';
|
|
this.steps = (raw.steps || []).map(s => new GiteaActionRunJobStep(s));
|
|
|
|
// Computed
|
|
this.resolvedStatus = resolveGiteaStatus(this.status, this.conclusion);
|
|
this.duration = computeDuration(this.startedAt, this.completedAt);
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Log
|
|
// ---------------------------------------------------------------------------
|
|
|
|
async getLog(): Promise<string> {
|
|
return this.client.requestGetJobLog(this.ownerRepo, this.id);
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Serialization
|
|
// ---------------------------------------------------------------------------
|
|
|
|
toJSON(): IGiteaActionRunJob {
|
|
return {
|
|
id: this.id,
|
|
run_id: this.runId,
|
|
name: this.name,
|
|
workflow_name: this.workflowName,
|
|
head_branch: this.headBranch,
|
|
head_sha: this.headSha,
|
|
status: this.status,
|
|
conclusion: this.conclusion,
|
|
html_url: this.htmlUrl,
|
|
started_at: this.startedAt,
|
|
completed_at: this.completedAt,
|
|
steps: this.steps.map(s => s.toJSON()),
|
|
labels: this.labels,
|
|
runner_id: this.runnerId,
|
|
runner_name: this.runnerName,
|
|
};
|
|
}
|
|
}
|