more robust gitea action for older versiona

Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
2026-04-10 12:25:38 +02:00
parent 9b247a8e76
commit 46f36f662f
+37 -12
View File
@@ -23,32 +23,54 @@ class GiteaAction extends ActionBase {
} }
} }
semverAtLeast(version, major, minor) {
const parts = version.replace(/[^0-9.]/g, '').split('.').map(Number);
if (parts[0] !== major) return parts[0] > major;
return (parts[1] || 0) >= minor;
}
fetchRun() { fetchRun() {
this.debounce(async () => { this.debounce(async () => {
if (!this.config.url || !this.config.owner || !this.config.repo) { if (!this.config.url || !this.config.owner || !this.config.repo) {
this.renderButton(null); this.renderButton(null, false);
return; return;
} }
try { try {
const headers = this.config.token ? { Authorization: `token ${this.config.token}` } : {}; const headers = this.config.token ? { Authorization: `token ${this.config.token}` } : {};
const versionRes = await fetch(`${this.config.url}/api/v1/version`, { headers });
if (!versionRes.ok) {
this.renderButton({ error: versionRes.status }, false);
return;
}
const { version } = await versionRes.json();
if (!this.semverAtLeast(version, 1, 23)) {
this.renderButton(null, true);
return;
}
const response = await fetch( const response = await fetch(
`${this.config.url}/api/v1/repos/${this.config.owner}/${this.config.repo}/actions/runs?limit=1`, `${this.config.url}/api/v1/repos/${this.config.owner}/${this.config.repo}/actions/runs?limit=20`,
{ headers } { headers }
); );
if (!response.ok) { if (!response.ok) {
this.renderButton({ error: response.status }); this.renderButton({ error: response.status }, false);
return; return;
} }
const data = await response.json(); const data = await response.json();
const run = data.workflow_runs && data.workflow_runs[0]; const runs = data.workflow_runs || [];
this.renderButton(run || null); const activeStatuses = ['in_progress', 'queued', 'waiting', 'requested', 'action_required'];
const runningRun = runs.find(r => activeStatuses.includes(r.status));
this.renderButton(runningRun || runs[0] || null, false);
} catch (e) { } catch (e) {
this.renderButton({ error: 'ERR' }); this.renderButton({ error: 'ERR' }, false);
} }
}); });
} }
renderButton(run) { renderButton(run, unsupported) {
const { canvas, ctx } = this.createCanvas(); const { canvas, ctx } = this.createCanvas();
// Owner — top // Owner — top
@@ -65,22 +87,25 @@ class GiteaAction extends ActionBase {
// Status symbol — center // Status symbol — center
let symbol, color; let symbol, color;
if (!run) { if (unsupported) {
symbol = '⊘';
color = '#555555';
} else if (!run) {
symbol = '?'; symbol = '?';
color = '#666666'; color = '#666666';
} else if (run.error) { } else if (run.error) {
symbol = '✗'; symbol = '✗';
color = '#ff6b6b'; color = '#ff6b6b';
} else if (run.status === 'running' || run.status === 'waiting') { } else if (['in_progress', 'queued', 'waiting', 'requested', 'action_required'].includes(run.status)) {
symbol = '⟳'; symbol = '⟳';
color = '#f0c040'; color = '#f0c040';
} else if (run.conclusion === 'success') { } else if (run.conclusion === 'success' || run.status === 'success') {
symbol = '✓'; symbol = '✓';
color = '#6bff6b'; color = '#6bff6b';
} else if (run.conclusion === 'failure') { } else if (run.conclusion === 'failure' || run.status === 'failure') {
symbol = '✗'; symbol = '✗';
color = '#ff6b6b'; color = '#ff6b6b';
} else if (run.conclusion === 'cancelled') { } else if (['cancelled', 'skipped', 'timed_out', 'neutral'].includes(run.conclusion || run.status)) {
symbol = '⊘'; symbol = '⊘';
color = '#aaaaaa'; color = '#aaaaaa';
} else { } else {