Skip to content

Commit af200dc

Browse files
vitaliytvclaude
andcommitted
feat(app): CI pipeline/workflow status view per workspace
Adds a "Pipeline status" button on each workspace row that lists GitHub Actions workflows and/or Azure Pipelines for that repo's CI, with green/red status from the latest run, sortable by date (default) or name. Clicking a failed run shows job-level detail inline (including an extracted failure message for both providers) with a "View log" link as fallback, so opening a browser is no longer required to see why a run failed. Provider detection is filesystem-based (.github/workflows, .azurepipelines) rather than derived from the git remote, since a repo can be GitHub-hosted while its CI runs as Azure Pipelines via a sync action, with org/project only known through the local `az devops configure` defaults. Also fixes an `az pipelines runs show --run-id` flag bug (should be --id) found while implementing the Azure job-details path. Includes incidental fixes surfaced by `n-lint`/`n-doc-files` across the repo (owner package tauri-updater wiring, doc CRC stamps, changelog entries). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1 parent 34232b4 commit af200dc

59 files changed

Lines changed: 2090 additions & 2549 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.mt.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@
1818
},
1919
"stale_worktree_min": 30,
2020
"grace_period": 60,
21-
"min_free_disk_gb": 10
21+
"min_free_disk_gb": 10,
22+
"node_executor": "npx @nitra/cursor mt-run-node"
2223
}

app/.changes/260713-2141.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
bump: minor
3+
section: Added
4+
---
5+
Статус CI-пайплайнів по воркспейсу: кнопка на рядку воркспейсу відкриває список усіх GitHub Actions workflows та/або Azure Pipelines цього репозиторію з останнім статусом (успіх/провал/у процесі), сортуванням за датою або алфавітом; клік на провальний ран показує деталі (джоби, посилання на лог).

app/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"@tauri-apps/api": "^2.11.1",
2525
"@tauri-apps/plugin-dialog": "^2.7.1",
2626
"@tauri-apps/plugin-http": "^2.5.9",
27+
"@tauri-apps/plugin-opener": "^2.5.4",
2728
"@tauri-apps/plugin-process": "^2.3.1",
2829
"@tauri-apps/plugin-updater": "^2.10.1",
2930
"marked": "^18.0.6",

app/src-tauri/gen/schemas/acl-manifests.json

Lines changed: 1 addition & 2423 deletions
Large diffs are not rendered by default.
Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1 @@
1-
{
2-
"default": {
3-
"identifier": "default",
4-
"description": "Capability for the main window",
5-
"local": true,
6-
"windows": ["main"],
7-
"permissions": [
8-
"core:default",
9-
"opener:default",
10-
"dialog:allow-open",
11-
"agent:default",
12-
"process:allow-restart",
13-
"mcp-bridge:default",
14-
{
15-
"identifier": "http:default",
16-
"allow": [
17-
{ "url": "http://localhost:*/*" },
18-
{ "url": "http://127.0.0.1:*/*" },
19-
{ "url": "http://**" },
20-
{ "url": "https://**" }
21-
]
22-
}
23-
]
24-
},
25-
"updater": {
26-
"identifier": "updater",
27-
"description": "Updater access — desktop only, the plugin isn't registered on Android/iOS.",
28-
"local": true,
29-
"windows": ["main"],
30-
"permissions": ["updater:default"],
31-
"platforms": ["macOS", "windows", "linux"]
32-
}
33-
}
1+
{"default":{"identifier":"default","description":"Capability for the main window","local":true,"windows":["main"],"permissions":["core:default","opener:default","dialog:allow-open","agent:default","process:allow-restart","mcp-bridge:default",{"identifier":"http:default","allow":[{"url":"http://localhost:*/*"},{"url":"http://127.0.0.1:*/*"},{"url":"http://**"},{"url":"https://**"}]}]},"updater":{"identifier":"updater","description":"Updater access — desktop only, the plugin isn't registered on Android/iOS.","local":true,"windows":["main"],"permissions":["updater:default"],"platforms":["macOS","windows","linux"]}}

app/src-tauri/gen/schemas/desktop-schema.json

Lines changed: 59 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
{
2222
"description": "A list of capabilities.",
2323
"type": "object",
24-
"required": ["capabilities"],
24+
"required": [
25+
"capabilities"
26+
],
2527
"properties": {
2628
"capabilities": {
2729
"description": "The list of capabilities.",
@@ -37,7 +39,10 @@
3739
"Capability": {
3840
"description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```",
3941
"type": "object",
40-
"required": ["identifier", "permissions"],
42+
"required": [
43+
"identifier",
44+
"permissions"
45+
],
4146
"properties": {
4247
"identifier": {
4348
"description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`",
@@ -88,7 +93,10 @@
8893
},
8994
"platforms": {
9095
"description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`",
91-
"type": ["array", "null"],
96+
"type": [
97+
"array",
98+
"null"
99+
],
92100
"items": {
93101
"$ref": "#/definitions/Target"
94102
}
@@ -98,7 +106,9 @@
98106
"CapabilityRemote": {
99107
"description": "Configuration for remote URLs that are associated with the capability.",
100108
"type": "object",
101-
"required": ["urls"],
109+
"required": [
110+
"urls"
111+
],
102112
"properties": {
103113
"urls": {
104114
"description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api",
@@ -212,7 +222,9 @@
212222
},
213223
{
214224
"type": "object",
215-
"required": ["url"],
225+
"required": [
226+
"url"
227+
],
216228
"properties": {
217229
"url": {
218230
"description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"",
@@ -234,7 +246,9 @@
234246
},
235247
{
236248
"type": "object",
237-
"required": ["url"],
249+
"required": [
250+
"url"
251+
],
238252
"properties": {
239253
"url": {
240254
"description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"",
@@ -324,7 +338,9 @@
324338
"anyOf": [
325339
{
326340
"type": "object",
327-
"required": ["url"],
341+
"required": [
342+
"url"
343+
],
328344
"properties": {
329345
"app": {
330346
"description": "An application to open this url with, for example: firefox.",
@@ -342,7 +358,9 @@
342358
},
343359
{
344360
"type": "object",
345-
"required": ["path"],
361+
"required": [
362+
"path"
363+
],
346364
"properties": {
347365
"app": {
348366
"description": "An application to open this path with, for example: xdg-open.",
@@ -368,7 +386,9 @@
368386
"anyOf": [
369387
{
370388
"type": "object",
371-
"required": ["url"],
389+
"required": [
390+
"url"
391+
],
372392
"properties": {
373393
"app": {
374394
"description": "An application to open this url with, for example: firefox.",
@@ -386,7 +406,9 @@
386406
},
387407
{
388408
"type": "object",
389-
"required": ["path"],
409+
"required": [
410+
"path"
411+
],
390412
"properties": {
391413
"app": {
392414
"description": "An application to open this path with, for example: xdg-open.",
@@ -430,22 +452,30 @@
430452
},
431453
"allow": {
432454
"description": "Data that defines what is allowed by the scope.",
433-
"type": ["array", "null"],
455+
"type": [
456+
"array",
457+
"null"
458+
],
434459
"items": {
435460
"$ref": "#/definitions/Value"
436461
}
437462
},
438463
"deny": {
439464
"description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.",
440-
"type": ["array", "null"],
465+
"type": [
466+
"array",
467+
"null"
468+
],
441469
"items": {
442470
"$ref": "#/definitions/Value"
443471
}
444472
}
445473
}
446474
}
447475
],
448-
"required": ["identifier"]
476+
"required": [
477+
"identifier"
478+
]
449479
}
450480
]
451481
},
@@ -3064,27 +3094,37 @@
30643094
{
30653095
"description": "MacOS.",
30663096
"type": "string",
3067-
"enum": ["macOS"]
3097+
"enum": [
3098+
"macOS"
3099+
]
30683100
},
30693101
{
30703102
"description": "Windows.",
30713103
"type": "string",
3072-
"enum": ["windows"]
3104+
"enum": [
3105+
"windows"
3106+
]
30733107
},
30743108
{
30753109
"description": "Linux.",
30763110
"type": "string",
3077-
"enum": ["linux"]
3111+
"enum": [
3112+
"linux"
3113+
]
30783114
},
30793115
{
30803116
"description": "Android.",
30813117
"type": "string",
3082-
"enum": ["android"]
3118+
"enum": [
3119+
"android"
3120+
]
30833121
},
30843122
{
30853123
"description": "iOS.",
30863124
"type": "string",
3087-
"enum": ["iOS"]
3125+
"enum": [
3126+
"iOS"
3127+
]
30883128
}
30893129
]
30903130
},
@@ -3106,4 +3146,4 @@
31063146
]
31073147
}
31083148
}
3109-
}
3149+
}

0 commit comments

Comments
 (0)