@cat-factory/app 0.261.0 → 0.261.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/components/foundational/FoundationalServiceManager.vue +1 -1
- package/app/components/fragments/FragmentLibraryManager.vue +1 -1
- package/app/components/layout/BoardTopOverlays.vue +6 -0
- package/app/components/layout/GitHubPatPermissionsBanner.vue +224 -0
- package/app/components/settings/ConnectionTestVerdict.vue +62 -0
- package/app/components/settings/InfraHandlersConfigurator.logic.spec.ts +64 -0
- package/app/components/settings/InfraHandlersConfigurator.logic.ts +41 -0
- package/app/components/settings/InfraHandlersConfigurator.vue +36 -9
- package/app/components/settings/KubernetesEngineForm.vue +24 -7
- package/app/components/settings/KubernetesEnvironmentForm.vue +20 -7
- package/app/components/settings/ProviderConnectionTab.vue +3 -7
- package/app/components/settings/ProviderManifestEditor.vue +3 -7
- package/app/components/skills/SkillLibraryManager.vue +1 -1
- package/app/composables/api/github.ts +7 -0
- package/app/composables/useServiceAccountTokenProblem.ts +52 -0
- package/app/stores/github/probe.ts +97 -0
- package/app/stores/github.spec.ts +109 -1
- package/app/stores/github.ts +26 -42
- package/app/stores/ui/k3sDeepLink.spec.ts +79 -0
- package/app/stores/ui/modals.ts +25 -2
- package/app/types/github.ts +4 -0
- package/app/types/providerConnections.ts +9 -0
- package/app/utils/connectionFailures.ts +32 -0
- package/app/utils/connectionWarnings.ts +1 -0
- package/app/utils/vcs.ts +28 -3
- package/i18n/locales/de.json +41 -1
- package/i18n/locales/en.json +59 -1
- package/i18n/locales/es.json +41 -1
- package/i18n/locales/fr.json +41 -1
- package/i18n/locales/he.json +41 -1
- package/i18n/locales/it.json +41 -1
- package/i18n/locales/ja.json +41 -1
- package/i18n/locales/pl.json +41 -1
- package/i18n/locales/tr.json +41 -1
- package/i18n/locales/uk.json +41 -1
- package/package.json +2 -2
package/app/stores/ui/modals.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { ref } from 'vue'
|
|
2
2
|
import type { DocumentSourceKind, InfraSetupArea, TaskSourceKind } from '~/types/domain'
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
InfrastructureScrollTarget,
|
|
5
|
+
InfrastructureTab,
|
|
6
|
+
ProviderConnectionKind,
|
|
7
|
+
} from '~/types/providerConnections'
|
|
4
8
|
import type { PendingContext } from '~/composables/useContextLinking'
|
|
5
9
|
import {
|
|
6
10
|
infraSetupDismissalKey,
|
|
@@ -737,6 +741,13 @@ function createInfraModals(resetHubReturn: ResetHubReturn) {
|
|
|
737
741
|
// `local-k3s` connection from it; the ServiceAccount token is deliberately NOT in the link (a
|
|
738
742
|
// secret in a URL leaks into history/logs), so the user still pastes it before Test → Save.
|
|
739
743
|
const k3sSetupPrefill = ref<K3sSetupPrefill | null>(null)
|
|
744
|
+
// A one-shot deep-link anchor into a SECTION of the open tab, mirroring
|
|
745
|
+
// `accountSettingsScrollTarget`. The Test-environments tab opens on the default-provision
|
|
746
|
+
// picker and the Compose wizard, with the per-type handler sections between them, so landing an
|
|
747
|
+
// operator at the top of it after a `cat-factory k3s` hand-off leaves them scrolling to find the
|
|
748
|
+
// very form the CLI just filled in. The owning panel scrolls the section into view once and
|
|
749
|
+
// then calls `clearInfrastructureScrollTarget`, so a later plain open doesn't re-scroll.
|
|
750
|
+
const infrastructureScrollTarget = ref<InfrastructureScrollTarget | null>(null)
|
|
740
751
|
// Environment setup wizard (shared-stacks slice 7): the guided detect → review → preflight →
|
|
741
752
|
// trial → save flow for a service frame's `docker-compose` provisioning. `environmentWizardOpen`
|
|
742
753
|
// is the modal flag; `environmentWizardFrameId` preselects the service frame the flow targets
|
|
@@ -761,8 +772,14 @@ function createInfraModals(resetHubReturn: ResetHubReturn) {
|
|
|
761
772
|
}
|
|
762
773
|
function closeProviderConnection() {
|
|
763
774
|
infrastructureOpen.value = false
|
|
764
|
-
// Drop any consumed CLI prefill so re-opening the window normally doesn't re-seed the form
|
|
775
|
+
// Drop any consumed CLI prefill so re-opening the window normally doesn't re-seed the form,
|
|
776
|
+
// and the anchor with it: an unconsumed target (the window was closed before the section
|
|
777
|
+
// rendered) would otherwise scroll the next, unrelated open.
|
|
765
778
|
k3sSetupPrefill.value = null
|
|
779
|
+
infrastructureScrollTarget.value = null
|
|
780
|
+
}
|
|
781
|
+
function clearInfrastructureScrollTarget() {
|
|
782
|
+
infrastructureScrollTarget.value = null
|
|
766
783
|
}
|
|
767
784
|
// Capture a `cat-factory k3s` deep-link (`?infraSetup=local-k3s&…`) on app load: stash the
|
|
768
785
|
// non-secret connection values, open the Infrastructure window on the Test-environments tab so
|
|
@@ -786,6 +803,10 @@ function createInfraModals(resetHubReturn: ResetHubReturn) {
|
|
|
786
803
|
}
|
|
787
804
|
resetHubReturn()
|
|
788
805
|
infrastructureTab.value = 'environment'
|
|
806
|
+
// The hand-off is about ONE form, so land on it: the Kubernetes section sits below the
|
|
807
|
+
// default-provision picker, far enough down the tab that an operator arriving from the CLI
|
|
808
|
+
// would otherwise have to go looking for the fields it just told them about.
|
|
809
|
+
infrastructureScrollTarget.value = 'kubernetes'
|
|
789
810
|
infrastructureOpen.value = true
|
|
790
811
|
for (const key of [
|
|
791
812
|
'infraSetup',
|
|
@@ -840,6 +861,8 @@ function createInfraModals(resetHubReturn: ResetHubReturn) {
|
|
|
840
861
|
infrastructureTab,
|
|
841
862
|
openInfrastructure,
|
|
842
863
|
k3sSetupPrefill,
|
|
864
|
+
infrastructureScrollTarget,
|
|
865
|
+
clearInfrastructureScrollTarget,
|
|
843
866
|
consumeK3sSetupDeepLink,
|
|
844
867
|
environmentWizardOpen,
|
|
845
868
|
environmentWizardFrameId,
|
package/app/types/github.ts
CHANGED
|
@@ -33,6 +33,15 @@ export type InfrastructureTab =
|
|
|
33
33
|
| 'package-registries'
|
|
34
34
|
| 'capability-credentials'
|
|
35
35
|
|
|
36
|
+
/**
|
|
37
|
+
* A SECTION within an Infrastructure tab that a deep link can land the user on, rather than at
|
|
38
|
+
* the top of the tab with the section to hunt for. A closed union rather than a bare string, so
|
|
39
|
+
* the store's setter and the panel that honours it cannot drift apart silently: today's only
|
|
40
|
+
* member is the `kubernetes` provision-type section the `cat-factory k3s` hand-off targets, which
|
|
41
|
+
* sits below the default-provision picker in a tab long enough to need scrolling.
|
|
42
|
+
*/
|
|
43
|
+
export type InfrastructureScrollTarget = 'kubernetes'
|
|
44
|
+
|
|
36
45
|
/** A workspace's provider binding, as exposed to clients (never secret values). */
|
|
37
46
|
export interface ProviderConnection {
|
|
38
47
|
/** The runner-backend kind for a runner-pool connection (`manifest` | `kubernetes`). */
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ConnectionFailureCause } from '@cat-factory/contracts'
|
|
2
|
+
|
|
3
|
+
// A connection test that never got an ANSWER reports the transport failure CLASS as a
|
|
4
|
+
// machine-readable `failureCause` (the backend does not localize prose), and the copy the operator
|
|
5
|
+
// reads lives here. The backend's own English account of the failure, including the remedy it can
|
|
6
|
+
// phrase with the concrete host in it, stays beside the headline as the technical detail.
|
|
7
|
+
//
|
|
8
|
+
// The exhaustive `Record<ConnectionFailureCause, …>` is the tier-2 drift guard, as in
|
|
9
|
+
// `connectionWarnings.ts`: a backend that adds a cause fails this typecheck until the SPA has copy
|
|
10
|
+
// for it, which the typed-key check cannot catch for a runtime-assembled key.
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Failure class → i18n key, or `null` where there is deliberately no headline to render.
|
|
14
|
+
*
|
|
15
|
+
* `unknown` is that case, and it is the reason the values are nullable: the chain was read and
|
|
16
|
+
* matched nothing, so the only honest statement about it is the backend's verbatim account, which
|
|
17
|
+
* is then rendered as the primary line instead of a headline that would have to invent a class.
|
|
18
|
+
*/
|
|
19
|
+
export const CONNECTION_FAILURE_CAUSE_KEYS: Record<ConnectionFailureCause, string | null> = {
|
|
20
|
+
refused: 'settings.providerConnection.test.causes.refused',
|
|
21
|
+
dns: 'settings.providerConnection.test.causes.dns',
|
|
22
|
+
timeout: 'settings.providerConnection.test.causes.timeout',
|
|
23
|
+
aborted: 'settings.providerConnection.test.causes.aborted',
|
|
24
|
+
unreachable: 'settings.providerConnection.test.causes.unreachable',
|
|
25
|
+
reset: 'settings.providerConnection.test.causes.reset',
|
|
26
|
+
'tls-untrusted': 'settings.providerConnection.test.causes.tlsUntrusted',
|
|
27
|
+
'tls-expired': 'settings.providerConnection.test.causes.tlsExpired',
|
|
28
|
+
'tls-hostname': 'settings.providerConnection.test.causes.tlsHostname',
|
|
29
|
+
'tls-protocol': 'settings.providerConnection.test.causes.tlsProtocol',
|
|
30
|
+
'invalid-header': 'settings.providerConnection.test.causes.invalidHeader',
|
|
31
|
+
unknown: null,
|
|
32
|
+
}
|
|
@@ -20,4 +20,5 @@ export const CONNECTION_WARNING_KEYS: Record<ConnectionWarningCode, string> = {
|
|
|
20
20
|
'settings.providerConnection.test.warnings.github_pat_scopes_beyond_need',
|
|
21
21
|
github_pat_scope_unreadable:
|
|
22
22
|
'settings.providerConnection.test.warnings.github_pat_scope_unreadable',
|
|
23
|
+
github_pat_no_scopes: 'settings.providerConnection.test.warnings.github_pat_no_scopes',
|
|
23
24
|
}
|
package/app/utils/vcs.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { GITHUB_TOKEN_CREATE_PATHS, githubPatCreateUrl } from '@cat-factory/contracts'
|
|
2
|
+
import type { GitHubConnection, GitHubPatKind, VcsProvider } from '~/types/domain'
|
|
2
3
|
|
|
3
4
|
// ---------------------------------------------------------------------------
|
|
4
5
|
// Shared VCS provider presentation. The platform's repo DATA is provider-neutral (one
|
|
@@ -42,9 +43,14 @@ const VCS_PROVIDER_PUBLIC_WEB_URLS: Record<VcsProvider, string> = {
|
|
|
42
43
|
gitlab: 'https://gitlab.com',
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Where a user creates a personal access token, relative to the instance's web root. GitHub's
|
|
48
|
+
* comes from `@cat-factory/contracts` rather than being spelled again here: the credential
|
|
49
|
+
* banner's PRE-FILLED re-mint link is built from that same map, and the unscoped connect-box
|
|
50
|
+
* link below has to land on the same page.
|
|
51
|
+
*/
|
|
46
52
|
const TOKEN_SETTINGS_PATHS: Record<VcsProvider, string> = {
|
|
47
|
-
github:
|
|
53
|
+
github: GITHUB_TOKEN_CREATE_PATHS.classic,
|
|
48
54
|
gitlab: '/-/user_settings/personal_access_tokens',
|
|
49
55
|
}
|
|
50
56
|
|
|
@@ -85,6 +91,25 @@ export function vcsTokenCreateUrl(provider: VcsProvider, webUrl?: string | null)
|
|
|
85
91
|
return `${root(webUrl || VCS_PROVIDER_PUBLIC_WEB_URLS[provider])}${TOKEN_SETTINGS_PATHS[provider]}`
|
|
86
92
|
}
|
|
87
93
|
|
|
94
|
+
/**
|
|
95
|
+
* Where the credential banner sends someone to REPLACE a GitHub token that cannot do what their
|
|
96
|
+
* runs need, pre-filled as far as GitHub allows.
|
|
97
|
+
*
|
|
98
|
+
* The `kind` is the kind of the token being replaced, so a deployment that standardised on
|
|
99
|
+
* fine-grained tokens is not pushed back to a classic one by a warning. When the check never got
|
|
100
|
+
* far enough to classify (GitHub rejected the token outright), the caller passes `'unknown'` and
|
|
101
|
+
* lands on the form that CAN be pre-filled.
|
|
102
|
+
*
|
|
103
|
+
* Shares {@link vcsTokenCreateUrl}'s public-host fallback for the same stated reason: this is a
|
|
104
|
+
* settings page, so being wrong costs one noticed click, unlike a repository link.
|
|
105
|
+
*/
|
|
106
|
+
export function githubPatRemintUrl(kind: GitHubPatKind, webUrl?: string | null): string {
|
|
107
|
+
return githubPatCreateUrl(kind, {
|
|
108
|
+
webUrl: webUrl || VCS_PROVIDER_PUBLIC_WEB_URLS.github,
|
|
109
|
+
description: 'cat-factory',
|
|
110
|
+
})
|
|
111
|
+
}
|
|
112
|
+
|
|
88
113
|
/**
|
|
89
114
|
* The App installation's settings page, where a user grants it access to a repository it
|
|
90
115
|
* can't see yet — or `undefined` when the connection is not a GitHub-App one.
|
package/i18n/locales/de.json
CHANGED
|
@@ -278,6 +278,11 @@
|
|
|
278
278
|
"blurb": "Wo die Coding-Agenten laufen, wenn keine Cloudflare Containers verwendet werden. Wähle einen selbst gehosteten Runner-Pool (deinen eigenen Scheduler) oder einen Kubernetes-Cluster und konfiguriere dann dessen Endpunkt und Zugangsdaten."
|
|
279
279
|
}
|
|
280
280
|
},
|
|
281
|
+
"serviceAccountToken": {
|
|
282
|
+
"whitespace": "Dieses Token enthält ein Leerzeichen oder einen Zeilenumbruch, was bei einem Bearer-Token nie vorkommt. Vermutlich wurde es über einen Zeilenumbruch im Terminal hinweg kopiert. Kopieren Sie es erneut als eine einzige ununterbrochene Zeile.",
|
|
283
|
+
"base64Encoded": "Das sieht nach dem Base64-Wert aus dem Feld .data.token des Secrets aus, nicht nach dem Token selbst. Dekodieren Sie ihn zuerst, zum Beispiel mit base64 -d.",
|
|
284
|
+
"notAJwt": "Das sieht nicht nach einem ServiceAccount-Token aus, das ein JWT aus drei durch Punkte getrennten Teilen ist. Prüfen Sie, ob der gesamte Wert kopiert wurde. Ignorieren Sie diesen Hinweis, wenn Ihr Cluster statische Bearer-Token verwendet."
|
|
285
|
+
},
|
|
281
286
|
"kubernetesEnv": {
|
|
282
287
|
"label": "Name",
|
|
283
288
|
"labelPlaceholder": "Preview-Cluster",
|
|
@@ -364,13 +369,27 @@
|
|
|
364
369
|
"button": "Verbindung testen",
|
|
365
370
|
"ok": "Verbindung OK",
|
|
366
371
|
"failed": "Verbindung fehlgeschlagen",
|
|
372
|
+
"causes": {
|
|
373
|
+
"refused": "An dieser Adresse wartet nichts: Die Verbindung wurde abgelehnt.",
|
|
374
|
+
"dns": "Dieser Hostname lässt sich von dieser Installation aus nicht auflösen.",
|
|
375
|
+
"timeout": "Es kam keine Antwort, bevor die Prüfung abgelaufen ist.",
|
|
376
|
+
"aborted": "Die Anfrage wurde abgebrochen, bevor eine Antwort ankam.",
|
|
377
|
+
"unreachable": "Von dieser Installation aus gibt es keine Netzwerkroute zu dieser Adresse.",
|
|
378
|
+
"reset": "Die Verbindung wurde geschlossen, bevor eine Antwort ankam.",
|
|
379
|
+
"tlsUntrusted": "Diese Installation vertraut dem TLS-Zertifikat nicht.",
|
|
380
|
+
"tlsExpired": "Das TLS-Zertifikat liegt außerhalb seines Gültigkeitszeitraums.",
|
|
381
|
+
"tlsHostname": "Das TLS-Zertifikat wurde nicht für diesen Hostnamen ausgestellt.",
|
|
382
|
+
"tlsProtocol": "Der TLS-Handshake ist fehlgeschlagen.",
|
|
383
|
+
"invalidHeader": "Die Anfrage ließ sich nicht erstellen: Ein Zugangsdaten-Wert enthält ein Zeichen, das ein HTTP-Header nicht übertragen kann."
|
|
384
|
+
},
|
|
367
385
|
"warningsTitle": "Lücken in dieser Konfiguration",
|
|
368
386
|
"warnings": {
|
|
369
387
|
"runner_manifest_no_release": "Kein Release-Template: Beim Abbrechen eines Laufs kann dem Pool nicht mitgeteilt werden, dass er seinen Job stoppen soll. Ein verwaister Job belegt seinen Runner, bis der Pool ihn von selbst zurücknimmt.",
|
|
370
388
|
"runner_manifest_no_status_path": "Kein Statuspfad: Jede Abfrage wird als weiterhin laufend gelesen. Ein Job kann daher nur enden, wenn das Abfragebudget des Laufs aufgebraucht ist.",
|
|
371
389
|
"github_pat_classic_account_wide": "Dies ist ein klassisches Token mit dem Bereich 'repo': Es erreicht jedes Repository, in das du pushen kannst, auch solche, in denen die GitHub-App dieses Arbeitsbereichs nie installiert wurde. Ausführungen, die du startest, nutzen es bevorzugt vor der App. Ein fein abgestuftes Token, das auf die Repositories dieser Installation begrenzt ist, ist enger gefasst.",
|
|
372
390
|
"github_pat_scopes_beyond_need": "Dieses Token gewährt Berechtigungen, die cat-factory nie nutzt. Sie zu entfernen kostet nichts und verkleinert das, was eine kompromittierte Ausführung erreichen könnte.",
|
|
373
|
-
"github_pat_scope_unreadable": "GitHub hat dieses Token akzeptiert, aber keine Bereiche dafür gemeldet, daher lässt sich seine Reichweite hier nicht anzeigen. Prüfe in deinen GitHub-Token-Einstellungen, was es gewährt."
|
|
391
|
+
"github_pat_scope_unreadable": "GitHub hat dieses Token akzeptiert, aber keine Bereiche dafür gemeldet, daher lässt sich seine Reichweite hier nicht anzeigen. Prüfe in deinen GitHub-Token-Einstellungen, was es gewährt.",
|
|
392
|
+
"github_pat_no_scopes": "GitHub meldet für dieses klassische Token keine Scopes, es kann also nur öffentliche Daten lesen. Läufe, die damit klonen, pushen oder einen Pull Request öffnen, schlagen fehl. Erstellen Sie ein neues Token mit ausgewähltem 'repo' und 'workflow'."
|
|
374
393
|
}
|
|
375
394
|
},
|
|
376
395
|
"toast": {
|
|
@@ -2435,6 +2454,27 @@
|
|
|
2435
2454
|
"createToken": "Ein GitHub-Token erstellen (Scopes vorausgewählt)",
|
|
2436
2455
|
"thenSet": "Setzen Sie dann {envVar} und starten Sie neu."
|
|
2437
2456
|
},
|
|
2457
|
+
"githubPatPermissionsBanner": {
|
|
2458
|
+
"title": "GitHub-Token kann nicht pushen oder Pull Requests öffnen",
|
|
2459
|
+
"rejectedTitle": "GitHub hat das Token Ihrer Läufe abgelehnt",
|
|
2460
|
+
"body": "Hier gestartete Läufe authentifizieren sich mit einem GitHub Personal Access Token, und diesem fehlen Berechtigungen, die die Pipeline braucht. Agentenschritte, die einen Branch pushen, einen Pull Request öffnen oder mergen, werden fehlschlagen.",
|
|
2461
|
+
"rejectedBody": "Das GitHub Personal Access Token, mit dem sich Ihre Läufe authentifizieren, ist ungültig, abgelaufen, widerrufen oder durch eine Organisationsrichtlinie blockiert. Jeder Schritt, der klont, pusht, einen Pull Request öffnet oder merget, schlägt fehl, bis es ersetzt wird.",
|
|
2462
|
+
"missing": "Fehlt:",
|
|
2463
|
+
"alsoMissing": "Fehlt ebenfalls, blockiert aber nur Änderungen an Workflow-Dateien: {capabilities}.",
|
|
2464
|
+
"capability": {
|
|
2465
|
+
"push": "Commits pushen",
|
|
2466
|
+
"pullRequests": "Pull Requests öffnen und mergen",
|
|
2467
|
+
"workflows": "Workflow-Dateien bearbeiten"
|
|
2468
|
+
},
|
|
2469
|
+
"sourceDeployment": "Dies ist das Token, mit dem dieses Deployment konfiguriert ist; es zu ersetzen bedeutet daher, das Deployment zu aktualisieren.",
|
|
2470
|
+
"sourceInitiator": "Dies ist Ihr eigenes gespeichertes Token, das Ihre Läufe bevorzugt vor den Deployment-Zugangsdaten verwenden. Ersetzen Sie es in Ihren persönlichen Einstellungen.",
|
|
2471
|
+
"createClassic": "Ersatz-Token erstellen (Scopes vorausgewählt)",
|
|
2472
|
+
"createFineGrained": "Fein granuliertes Ersatz-Token erstellen",
|
|
2473
|
+
"classicHint": "Der Link öffnet das klassische Token-Formular mit bereits ausgewählten erforderlichen Scopes.",
|
|
2474
|
+
"fineGrainedHint": "Das fein granulierte Formular von GitHub akzeptiert keine Vorauswahl; erteilen Sie diese Repository-Berechtigungen daher selbst: {permissions}.",
|
|
2475
|
+
"sampled": "Gegen {checked} genutzte Repositories geprüft; {remaining} weitere wurden nicht geprüft.",
|
|
2476
|
+
"deniedRepos": "Das Token erreicht diese von Ihren Services genutzten Repositories nicht: {repos}. Erstellen Sie es neu und wählen Sie diese Repositories aus."
|
|
2477
|
+
},
|
|
2438
2478
|
"providerConfigBanner": {
|
|
2439
2479
|
"titleMany": "Anbieter benötigen Konfiguration",
|
|
2440
2480
|
"titleOne": {
|
package/i18n/locales/en.json
CHANGED
|
@@ -2341,6 +2341,45 @@
|
|
|
2341
2341
|
"createToken": "Create a GitHub token (scopes pre-selected)",
|
|
2342
2342
|
"thenSet": "Then set {envVar} and restart."
|
|
2343
2343
|
},
|
|
2344
|
+
"githubPatPermissionsBanner": {
|
|
2345
|
+
"title": "GitHub token cannot push or open pull requests",
|
|
2346
|
+
"rejectedTitle": "GitHub rejected the token your runs use",
|
|
2347
|
+
"body": "Runs started here authenticate with a GitHub personal access token, and this one lacks permissions the pipeline needs. Agent steps that push a branch, open a pull request or merge will fail.",
|
|
2348
|
+
"rejectedBody": "The GitHub personal access token your runs authenticate with is invalid, expired, revoked, or blocked by an organisation policy. Every step that clones, pushes, opens a pull request or merges will fail until it is replaced.",
|
|
2349
|
+
"missing": "Missing:",
|
|
2350
|
+
"alsoMissing": "Also missing, though it only blocks changes to workflow files: {capabilities}.",
|
|
2351
|
+
"capability": {
|
|
2352
|
+
"push": "pushing commits",
|
|
2353
|
+
"pullRequests": "opening and merging pull requests",
|
|
2354
|
+
"workflows": "editing workflow files"
|
|
2355
|
+
},
|
|
2356
|
+
"sourceDeployment": "This is the token this deployment is configured with, so replacing it means updating the deployment.",
|
|
2357
|
+
"sourceInitiator": "This is your own stored token, which your runs use in preference to the deployment credential. Replace it in your personal settings.",
|
|
2358
|
+
"createClassic": "Create a replacement token (scopes pre-selected)",
|
|
2359
|
+
"createFineGrained": "Create a replacement fine-grained token",
|
|
2360
|
+
"classicHint": "The link opens the classic token form with the required scopes already selected.",
|
|
2361
|
+
"fineGrainedHint": "GitHub's fine-grained form accepts no pre-selection, so grant these repository permissions yourself: {permissions}.",
|
|
2362
|
+
"sampled": "Checked against {checked} targeted repositories; {remaining} more were not checked.",
|
|
2363
|
+
"deniedRepos": "The token cannot reach these repositories your services target: {repos}. Re-mint it with those repositories selected.",
|
|
2364
|
+
"@title": {
|
|
2365
|
+
"description": "Banner heading when the configured GitHub personal access token authenticates but lacks a permission the pipeline needs. \"push\" and \"pull request\" are the Git/GitHub terms."
|
|
2366
|
+
},
|
|
2367
|
+
"@rejectedTitle": {
|
|
2368
|
+
"description": "Banner heading for the worse case: GitHub refused the token outright (401/403). Distinct from the missing-permission heading on purpose."
|
|
2369
|
+
},
|
|
2370
|
+
"@alsoMissing": {
|
|
2371
|
+
"description": "{capabilities} is a comma-joined list of capability names from the `capability` group. Shown only beside a blocking finding, never alone."
|
|
2372
|
+
},
|
|
2373
|
+
"@fineGrainedHint": {
|
|
2374
|
+
"description": "{permissions} is a comma-joined list of GitHub's own fine-grained permission identifiers (e.g. contents:write); keep them verbatim, untranslated."
|
|
2375
|
+
},
|
|
2376
|
+
"@sampled": {
|
|
2377
|
+
"description": "Declares that the fine-grained check read a SAMPLE. {checked} and {remaining} are counts of repositories."
|
|
2378
|
+
},
|
|
2379
|
+
"@deniedRepos": {
|
|
2380
|
+
"description": "{repos} is a comma-joined list of GitHub owner/name repository paths; keep them verbatim, untranslated. Shown when a fine-grained token was denied access to repositories the board's services target."
|
|
2381
|
+
}
|
|
2382
|
+
},
|
|
2344
2383
|
"providerConfigBanner": {
|
|
2345
2384
|
"titleMany": "Providers need configuration",
|
|
2346
2385
|
"titleOne": {
|
|
@@ -2961,6 +3000,11 @@
|
|
|
2961
3000
|
"blurb": "Where the coding agents run when not using Cloudflare Containers. Choose a self-hosted runner pool (your own scheduler) or a Kubernetes cluster, then configure its endpoint and credentials."
|
|
2962
3001
|
}
|
|
2963
3002
|
},
|
|
3003
|
+
"serviceAccountToken": {
|
|
3004
|
+
"whitespace": "This token contains a space or line break, which a bearer token never has. It was most likely copied across a wrapped line in your terminal. Re-copy it as a single unbroken line.",
|
|
3005
|
+
"base64Encoded": "This looks like the base64 value from the Secret's .data.token field rather than the token itself. Decode it first, for example with base64 -d.",
|
|
3006
|
+
"notAJwt": "This does not look like a ServiceAccount token, which is a JWT of three dot-separated parts. Check that the whole value was copied. Ignore this if your cluster uses static bearer tokens."
|
|
3007
|
+
},
|
|
2964
3008
|
"kubernetesEnv": {
|
|
2965
3009
|
"label": "Name",
|
|
2966
3010
|
"labelPlaceholder": "Preview cluster",
|
|
@@ -3050,13 +3094,27 @@
|
|
|
3050
3094
|
"button": "Test connection",
|
|
3051
3095
|
"ok": "Connection OK",
|
|
3052
3096
|
"failed": "Connection failed",
|
|
3097
|
+
"causes": {
|
|
3098
|
+
"refused": "Nothing is listening at that address: the connection was refused.",
|
|
3099
|
+
"dns": "That host name does not resolve from this deployment.",
|
|
3100
|
+
"timeout": "No answer arrived before the test timed out.",
|
|
3101
|
+
"aborted": "The request was cancelled before an answer arrived.",
|
|
3102
|
+
"unreachable": "There is no network route to that address from this deployment.",
|
|
3103
|
+
"reset": "The connection was closed before an answer arrived.",
|
|
3104
|
+
"tlsUntrusted": "This deployment does not trust the TLS certificate.",
|
|
3105
|
+
"tlsExpired": "The TLS certificate is outside its validity window.",
|
|
3106
|
+
"tlsHostname": "The TLS certificate was not issued for that host name.",
|
|
3107
|
+
"tlsProtocol": "The TLS handshake failed.",
|
|
3108
|
+
"invalidHeader": "The request could not be built: a credential holds a character an HTTP header cannot carry."
|
|
3109
|
+
},
|
|
3053
3110
|
"warningsTitle": "Gaps in this configuration",
|
|
3054
3111
|
"warnings": {
|
|
3055
3112
|
"runner_manifest_no_release": "No release template: cancelling a run cannot tell the pool to stop its job, so an orphaned job keeps its runner until the pool reclaims it on its own.",
|
|
3056
3113
|
"runner_manifest_no_status_path": "No status path: every poll reads as still running, so a job can only end by exhausting the run's poll budget.",
|
|
3057
3114
|
"github_pat_classic_account_wide": "This is a classic token with the 'repo' scope: it reaches every repository you can push to, including ones this workspace's GitHub App was never installed on. Runs you start use it in preference to the App. A fine-grained token limited to this deployment's repositories is narrower.",
|
|
3058
3115
|
"github_pat_scopes_beyond_need": "This token grants permissions cat-factory never uses. Removing them costs nothing and narrows what a compromised run could reach.",
|
|
3059
|
-
"github_pat_scope_unreadable": "GitHub accepted this token but reported no scopes for it, so its reach cannot be shown here. Check what it grants in your GitHub token settings."
|
|
3116
|
+
"github_pat_scope_unreadable": "GitHub accepted this token but reported no scopes for it, so its reach cannot be shown here. Check what it grants in your GitHub token settings.",
|
|
3117
|
+
"github_pat_no_scopes": "GitHub reports no scopes for this classic token, so it can read public data and nothing else. Runs that clone, push or open a pull request with it will fail. Mint a replacement with 'repo' and 'workflow' selected."
|
|
3060
3118
|
}
|
|
3061
3119
|
},
|
|
3062
3120
|
"toast": {
|
package/i18n/locales/es.json
CHANGED
|
@@ -2234,6 +2234,27 @@
|
|
|
2234
2234
|
"createToken": "Crear un token de GitHub (ámbitos preseleccionados)",
|
|
2235
2235
|
"thenSet": "Luego define {envVar} y reinicia."
|
|
2236
2236
|
},
|
|
2237
|
+
"githubPatPermissionsBanner": {
|
|
2238
|
+
"title": "El token de GitHub no puede hacer push ni abrir pull requests",
|
|
2239
|
+
"rejectedTitle": "GitHub rechazó el token que usan tus ejecuciones",
|
|
2240
|
+
"body": "Las ejecuciones iniciadas aquí se autentican con un token de acceso personal de GitHub, y a este le faltan permisos que la canalización necesita. Los pasos de agente que envían una rama, abren una pull request o fusionan fallarán.",
|
|
2241
|
+
"rejectedBody": "El token de acceso personal de GitHub con el que se autentican tus ejecuciones no es válido, ha caducado, fue revocado o está bloqueado por una política de la organización. Todos los pasos que clonan, envían, abren pull requests o fusionan fallarán hasta que lo reemplaces.",
|
|
2242
|
+
"missing": "Falta:",
|
|
2243
|
+
"alsoMissing": "También falta, aunque solo bloquea cambios en archivos de flujo de trabajo: {capabilities}.",
|
|
2244
|
+
"capability": {
|
|
2245
|
+
"push": "enviar commits",
|
|
2246
|
+
"pullRequests": "abrir y fusionar pull requests",
|
|
2247
|
+
"workflows": "editar archivos de flujo de trabajo"
|
|
2248
|
+
},
|
|
2249
|
+
"sourceDeployment": "Este es el token con el que está configurado este despliegue, así que reemplazarlo implica actualizar el despliegue.",
|
|
2250
|
+
"sourceInitiator": "Este es tu propio token almacenado, que tus ejecuciones usan con preferencia sobre la credencial del despliegue. Reemplázalo en tus ajustes personales.",
|
|
2251
|
+
"createClassic": "Crear un token de reemplazo (ámbitos preseleccionados)",
|
|
2252
|
+
"createFineGrained": "Crear un token de reemplazo de permisos detallados",
|
|
2253
|
+
"classicHint": "El enlace abre el formulario de token clásico con los ámbitos necesarios ya seleccionados.",
|
|
2254
|
+
"fineGrainedHint": "El formulario de permisos detallados de GitHub no admite preselección, así que concede tú mismo estos permisos de repositorio: {permissions}.",
|
|
2255
|
+
"sampled": "Se comprobaron {checked} repositorios en uso; otros {remaining} no se comprobaron.",
|
|
2256
|
+
"deniedRepos": "El token no puede acceder a estos repositorios que usan tus servicios: {repos}. Vuelve a generarlo seleccionando esos repositorios."
|
|
2257
|
+
},
|
|
2237
2258
|
"providerConfigBanner": {
|
|
2238
2259
|
"titleMany": "Los proveedores necesitan configuración",
|
|
2239
2260
|
"titleOne": {
|
|
@@ -2744,13 +2765,27 @@
|
|
|
2744
2765
|
"button": "Probar conexión",
|
|
2745
2766
|
"ok": "Conexión correcta",
|
|
2746
2767
|
"failed": "Falló la conexión",
|
|
2768
|
+
"causes": {
|
|
2769
|
+
"refused": "No hay nada escuchando en esa dirección: la conexión fue rechazada.",
|
|
2770
|
+
"dns": "Ese nombre de host no se resuelve desde esta instalación.",
|
|
2771
|
+
"timeout": "No llegó ninguna respuesta antes de que la prueba agotara su tiempo.",
|
|
2772
|
+
"aborted": "La solicitud se canceló antes de que llegara una respuesta.",
|
|
2773
|
+
"unreachable": "No hay ruta de red hacia esa dirección desde esta instalación.",
|
|
2774
|
+
"reset": "La conexión se cerró antes de que llegara una respuesta.",
|
|
2775
|
+
"tlsUntrusted": "Esta instalación no confía en el certificado TLS.",
|
|
2776
|
+
"tlsExpired": "El certificado TLS está fuera de su periodo de validez.",
|
|
2777
|
+
"tlsHostname": "El certificado TLS no se emitió para ese nombre de host.",
|
|
2778
|
+
"tlsProtocol": "El protocolo de enlace TLS falló.",
|
|
2779
|
+
"invalidHeader": "No se pudo construir la solicitud: una credencial contiene un carácter que una cabecera HTTP no puede transportar."
|
|
2780
|
+
},
|
|
2747
2781
|
"warningsTitle": "Carencias en esta configuración",
|
|
2748
2782
|
"warnings": {
|
|
2749
2783
|
"runner_manifest_no_release": "Sin plantilla de release: al cancelar una ejecución no se puede indicar al pool que detenga su trabajo, así que un trabajo huérfano ocupa su runner hasta que el pool lo recupere por su cuenta.",
|
|
2750
2784
|
"runner_manifest_no_status_path": "Sin ruta de estado: cada sondeo se interpreta como todavía en ejecución, así que un trabajo solo puede terminar agotando el presupuesto de sondeo de la ejecución.",
|
|
2751
2785
|
"github_pat_classic_account_wide": "Es un token clásico con el ámbito 'repo': alcanza todos los repositorios a los que puedes hacer push, incluidos aquellos donde nunca se instaló la App de GitHub de este espacio de trabajo. Las ejecuciones que inicias lo usan con preferencia sobre la App. Un token granular limitado a los repositorios de esta instalación es más estrecho.",
|
|
2752
2786
|
"github_pat_scopes_beyond_need": "Este token concede permisos que cat-factory nunca usa. Quitarlos no cuesta nada y reduce lo que podría alcanzar una ejecución comprometida.",
|
|
2753
|
-
"github_pat_scope_unreadable": "GitHub aceptó este token pero no informó de sus ámbitos, así que aquí no se puede mostrar su alcance. Comprueba lo que concede en la configuración de tokens de GitHub."
|
|
2787
|
+
"github_pat_scope_unreadable": "GitHub aceptó este token pero no informó de sus ámbitos, así que aquí no se puede mostrar su alcance. Comprueba lo que concede en la configuración de tokens de GitHub.",
|
|
2788
|
+
"github_pat_no_scopes": "GitHub no informa de ningún ámbito para este token clásico, así que solo puede leer datos públicos. Las ejecuciones que clonen, envíen cambios o abran una pull request con él fallarán. Genera uno nuevo con 'repo' y 'workflow' seleccionados."
|
|
2754
2789
|
}
|
|
2755
2790
|
},
|
|
2756
2791
|
"toast": {
|
|
@@ -2759,6 +2794,11 @@
|
|
|
2759
2794
|
"removed": "Conexión eliminada",
|
|
2760
2795
|
"removeFailed": "No se pudo eliminar la conexión"
|
|
2761
2796
|
},
|
|
2797
|
+
"serviceAccountToken": {
|
|
2798
|
+
"whitespace": "Este token contiene un espacio o un salto de línea, algo que nunca ocurre en un token de portador. Lo más probable es que se haya copiado a través de una línea ajustada en la terminal. Vuelve a copiarlo como una única línea continua.",
|
|
2799
|
+
"base64Encoded": "Esto parece el valor en base64 del campo .data.token del Secret, no el token en sí. Descodifícalo primero, por ejemplo con base64 -d.",
|
|
2800
|
+
"notAJwt": "Esto no parece un token de ServiceAccount, que es un JWT de tres partes separadas por puntos. Comprueba que has copiado el valor completo. Ignora este aviso si tu clúster usa tokens de portador estáticos."
|
|
2801
|
+
},
|
|
2762
2802
|
"kubernetesEnv": {
|
|
2763
2803
|
"label": "Nombre",
|
|
2764
2804
|
"labelPlaceholder": "Clúster de vista previa",
|
package/i18n/locales/fr.json
CHANGED
|
@@ -2234,6 +2234,27 @@
|
|
|
2234
2234
|
"createToken": "Créer un jeton GitHub (portées présélectionnées)",
|
|
2235
2235
|
"thenSet": "Définissez ensuite {envVar} et redémarrez."
|
|
2236
2236
|
},
|
|
2237
|
+
"githubPatPermissionsBanner": {
|
|
2238
|
+
"title": "Le jeton GitHub ne peut ni pousser ni ouvrir de pull requests",
|
|
2239
|
+
"rejectedTitle": "GitHub a rejeté le jeton utilisé par vos exécutions",
|
|
2240
|
+
"body": "Les exécutions lancées ici s'authentifient avec un jeton d'accès personnel GitHub, et celui-ci n'a pas les autorisations dont le pipeline a besoin. Les étapes d'agent qui poussent une branche, ouvrent une pull request ou fusionnent échoueront.",
|
|
2241
|
+
"rejectedBody": "Le jeton d'accès personnel GitHub avec lequel vos exécutions s'authentifient est invalide, expiré, révoqué ou bloqué par une politique d'organisation. Toute étape qui clone, pousse, ouvre une pull request ou fusionne échouera tant qu'il n'est pas remplacé.",
|
|
2242
|
+
"missing": "Manquant :",
|
|
2243
|
+
"alsoMissing": "Manque également, bien que cela ne bloque que les modifications des fichiers de workflow : {capabilities}.",
|
|
2244
|
+
"capability": {
|
|
2245
|
+
"push": "pousser des commits",
|
|
2246
|
+
"pullRequests": "ouvrir et fusionner des pull requests",
|
|
2247
|
+
"workflows": "modifier les fichiers de workflow"
|
|
2248
|
+
},
|
|
2249
|
+
"sourceDeployment": "C'est le jeton configuré pour ce déploiement ; le remplacer suppose donc de mettre à jour le déploiement.",
|
|
2250
|
+
"sourceInitiator": "C'est votre propre jeton enregistré, que vos exécutions utilisent de préférence aux identifiants du déploiement. Remplacez-le dans vos paramètres personnels.",
|
|
2251
|
+
"createClassic": "Créer un jeton de remplacement (portées présélectionnées)",
|
|
2252
|
+
"createFineGrained": "Créer un jeton de remplacement à portée fine",
|
|
2253
|
+
"classicHint": "Le lien ouvre le formulaire de jeton classique avec les portées requises déjà sélectionnées.",
|
|
2254
|
+
"fineGrainedHint": "Le formulaire à portée fine de GitHub n'accepte aucune présélection : accordez vous-même ces autorisations de dépôt : {permissions}.",
|
|
2255
|
+
"sampled": "Vérifié sur {checked} dépôts utilisés ; {remaining} autres non vérifiés.",
|
|
2256
|
+
"deniedRepos": "Le jeton n'atteint pas ces dépôts utilisés par vos services : {repos}. Régénérez-le en sélectionnant ces dépôts."
|
|
2257
|
+
},
|
|
2237
2258
|
"providerConfigBanner": {
|
|
2238
2259
|
"titleMany": "Les fournisseurs nécessitent une configuration",
|
|
2239
2260
|
"titleOne": {
|
|
@@ -2744,13 +2765,27 @@
|
|
|
2744
2765
|
"button": "Tester la connexion",
|
|
2745
2766
|
"ok": "Connexion réussie",
|
|
2746
2767
|
"failed": "Échec de la connexion",
|
|
2768
|
+
"causes": {
|
|
2769
|
+
"refused": "Rien n'écoute à cette adresse : la connexion a été refusée.",
|
|
2770
|
+
"dns": "Ce nom d'hôte n'est pas résolu depuis ce déploiement.",
|
|
2771
|
+
"timeout": "Aucune réponse n'est arrivée avant l'expiration du test.",
|
|
2772
|
+
"aborted": "La requête a été annulée avant l'arrivée d'une réponse.",
|
|
2773
|
+
"unreachable": "Aucune route réseau ne mène à cette adresse depuis ce déploiement.",
|
|
2774
|
+
"reset": "La connexion a été fermée avant l'arrivée d'une réponse.",
|
|
2775
|
+
"tlsUntrusted": "Ce déploiement ne fait pas confiance au certificat TLS.",
|
|
2776
|
+
"tlsExpired": "Le certificat TLS est en dehors de sa période de validité.",
|
|
2777
|
+
"tlsHostname": "Le certificat TLS n'a pas été émis pour ce nom d'hôte.",
|
|
2778
|
+
"tlsProtocol": "La négociation TLS a échoué.",
|
|
2779
|
+
"invalidHeader": "La requête n'a pas pu être construite : un identifiant contient un caractère qu'un en-tête HTTP ne peut pas transporter."
|
|
2780
|
+
},
|
|
2747
2781
|
"warningsTitle": "Lacunes dans cette configuration",
|
|
2748
2782
|
"warnings": {
|
|
2749
2783
|
"runner_manifest_no_release": "Aucun modèle de release : annuler une exécution ne permet pas de demander au pool d'arrêter son job, donc un job orphelin occupe son runner jusqu'à ce que le pool le récupère de lui-même.",
|
|
2750
2784
|
"runner_manifest_no_status_path": "Aucun chemin de statut : chaque interrogation est lue comme toujours en cours, donc un job ne peut se terminer qu'en épuisant le budget d'interrogation de l'exécution.",
|
|
2751
2785
|
"github_pat_classic_account_wide": "Il s'agit d'un jeton classique avec la portée 'repo' : il atteint tous les dépôts sur lesquels vous pouvez pousser, y compris ceux où l'App GitHub de cet espace de travail n'a jamais été installée. Les exécutions que vous lancez l'utilisent de préférence à l'App. Un jeton à portée fine, limité aux dépôts de cette installation, est plus restreint.",
|
|
2752
2786
|
"github_pat_scopes_beyond_need": "Ce jeton accorde des permissions que cat-factory n'utilise jamais. Les retirer ne coûte rien et réduit ce qu'une exécution compromise pourrait atteindre.",
|
|
2753
|
-
"github_pat_scope_unreadable": "GitHub a accepté ce jeton mais n'a signalé aucune portée, sa portée ne peut donc pas être affichée ici. Vérifiez ce qu'il accorde dans vos paramètres de jetons GitHub."
|
|
2787
|
+
"github_pat_scope_unreadable": "GitHub a accepté ce jeton mais n'a signalé aucune portée, sa portée ne peut donc pas être affichée ici. Vérifiez ce qu'il accorde dans vos paramètres de jetons GitHub.",
|
|
2788
|
+
"github_pat_no_scopes": "GitHub ne signale aucune portée pour ce jeton classique : il ne peut lire que des données publiques. Les exécutions qui clonent, poussent ou ouvrent une pull request avec lui échoueront. Créez-en un nouveau avec 'repo' et 'workflow' sélectionnés."
|
|
2754
2789
|
}
|
|
2755
2790
|
},
|
|
2756
2791
|
"toast": {
|
|
@@ -2759,6 +2794,11 @@
|
|
|
2759
2794
|
"removed": "Connexion supprimée",
|
|
2760
2795
|
"removeFailed": "Impossible de supprimer la connexion"
|
|
2761
2796
|
},
|
|
2797
|
+
"serviceAccountToken": {
|
|
2798
|
+
"whitespace": "Ce jeton contient une espace ou un saut de ligne, ce qu'un jeton porteur ne contient jamais. Il a probablement été copié à cheval sur un retour à la ligne du terminal. Recopiez-le sur une seule ligne ininterrompue.",
|
|
2799
|
+
"base64Encoded": "Ceci ressemble à la valeur base64 du champ .data.token du Secret, et non au jeton lui-même. Décodez-la d'abord, par exemple avec base64 -d.",
|
|
2800
|
+
"notAJwt": "Ceci ne ressemble pas à un jeton de ServiceAccount, qui est un JWT composé de trois parties séparées par des points. Vérifiez que la valeur a été copiée en entier. Ignorez cet avertissement si votre cluster utilise des jetons porteurs statiques."
|
|
2801
|
+
},
|
|
2762
2802
|
"kubernetesEnv": {
|
|
2763
2803
|
"label": "Nom",
|
|
2764
2804
|
"labelPlaceholder": "Cluster de prévisualisation",
|
package/i18n/locales/he.json
CHANGED
|
@@ -2234,6 +2234,27 @@
|
|
|
2234
2234
|
"createToken": "צור אסימון GitHub (ההרשאות נבחרו מראש)",
|
|
2235
2235
|
"thenSet": "לאחר מכן הגדר {envVar} והפעל מחדש."
|
|
2236
2236
|
},
|
|
2237
|
+
"githubPatPermissionsBanner": {
|
|
2238
|
+
"title": "אסימון GitHub אינו יכול לדחוף או לפתוח בקשות משיכה",
|
|
2239
|
+
"rejectedTitle": "GitHub דחה את האסימון שבו משתמשות ההרצות שלך",
|
|
2240
|
+
"body": "הרצות שמתחילות כאן מאמתות באמצעות אסימון גישה אישי של GitHub, ולאסימון הזה חסרות הרשאות שהצינור זקוק להן. שלבי סוכן שדוחפים ענף, פותחים בקשת משיכה או ממזגים ייכשלו.",
|
|
2241
|
+
"rejectedBody": "אסימון הגישה האישי של GitHub שבו מאומתות ההרצות שלך אינו תקף, פג תוקפו, בוטל או נחסם על ידי מדיניות ארגונית. כל שלב שמשכפל, דוחף, פותח בקשת משיכה או ממזג ייכשל עד להחלפתו.",
|
|
2242
|
+
"missing": "חסר:",
|
|
2243
|
+
"alsoMissing": "חסר גם, אף שהדבר חוסם רק שינויים בקובצי תהליכי עבודה: {capabilities}.",
|
|
2244
|
+
"capability": {
|
|
2245
|
+
"push": "דחיפת קומיטים",
|
|
2246
|
+
"pullRequests": "פתיחה ומיזוג של בקשות משיכה",
|
|
2247
|
+
"workflows": "עריכת קובצי תהליכי עבודה"
|
|
2248
|
+
},
|
|
2249
|
+
"sourceDeployment": "זהו האסימון שאיתו מוגדרת הפריסה הזו, ולכן החלפתו משמעה עדכון הפריסה.",
|
|
2250
|
+
"sourceInitiator": "זהו האסימון השמור שלך, שההרצות שלך מעדיפות על פני אישורי הפריסה. החלף אותו בהגדרות האישיות שלך.",
|
|
2251
|
+
"createClassic": "צור אסימון חלופי (ההרשאות נבחרו מראש)",
|
|
2252
|
+
"createFineGrained": "צור אסימון חלופי עם הרשאות מדויקות",
|
|
2253
|
+
"classicHint": "הקישור פותח את טופס האסימון הקלאסי כשההרשאות הנדרשות כבר מסומנות.",
|
|
2254
|
+
"fineGrainedHint": "טופס ההרשאות המדויקות של GitHub אינו תומך בבחירה מראש, לכן הענק בעצמך את הרשאות המאגר הבאות: {permissions}.",
|
|
2255
|
+
"sampled": "נבדק מול {checked} מאגרים שבשימוש; {remaining} נוספים לא נבדקו.",
|
|
2256
|
+
"deniedRepos": "האסימון אינו מגיע למאגרים האלה שהשירותים שלך משתמשים בהם: {repos}. צור אותו מחדש ובחר את המאגרים האלה."
|
|
2257
|
+
},
|
|
2237
2258
|
"providerConfigBanner": {
|
|
2238
2259
|
"titleMany": "ספקים זקוקים להגדרה",
|
|
2239
2260
|
"titleOne": {
|
|
@@ -2854,6 +2875,11 @@
|
|
|
2854
2875
|
"blurb": "היכן סוכני הקוד רצים כשלא משתמשים ב-Cloudflare Containers. בחר מאגר מריצים בניהול עצמי (מתזמן משלך) או אשכול Kubernetes, ואז הגדר את נקודת הקצה והאישורים שלו."
|
|
2855
2876
|
}
|
|
2856
2877
|
},
|
|
2878
|
+
"serviceAccountToken": {
|
|
2879
|
+
"whitespace": "האסימון הזה מכיל רווח או שבירת שורה, דבר שלא קיים באסימון נושא. סביר להניח שהוא הועתק תוך חציית שורה שנשברה במסוף. העתיקו אותו מחדש כשורה אחת רציפה.",
|
|
2880
|
+
"base64Encoded": "זה נראה כמו הערך בבסיס 64 מהשדה .data.token של ה-Secret, ולא כמו האסימון עצמו. פענחו אותו קודם, למשל באמצעות base64 -d.",
|
|
2881
|
+
"notAJwt": "זה לא נראה כמו אסימון ServiceAccount, שהוא JWT בן שלושה חלקים המופרדים בנקודות. ודאו שהערך הועתק במלואו. התעלמו מההודעה אם האשכול שלכם משתמש באסימוני נושא סטטיים."
|
|
2882
|
+
},
|
|
2857
2883
|
"kubernetesEnv": {
|
|
2858
2884
|
"label": "שם",
|
|
2859
2885
|
"labelPlaceholder": "אשכול תצוגה מקדימה",
|
|
@@ -2940,13 +2966,27 @@
|
|
|
2940
2966
|
"button": "בדוק חיבור",
|
|
2941
2967
|
"ok": "החיבור תקין",
|
|
2942
2968
|
"failed": "החיבור נכשל",
|
|
2969
|
+
"causes": {
|
|
2970
|
+
"refused": "אין דבר שמאזין בכתובת הזו: החיבור נדחה.",
|
|
2971
|
+
"dns": "שם המחשב המארח הזה אינו נפתר מהפריסה הזו.",
|
|
2972
|
+
"timeout": "לא הגיעה תשובה לפני שתם הזמן שהוקצב לבדיקה.",
|
|
2973
|
+
"aborted": "הבקשה בוטלה לפני שהגיעה תשובה.",
|
|
2974
|
+
"unreachable": "אין נתיב רשת לכתובת הזו מהפריסה הזו.",
|
|
2975
|
+
"reset": "החיבור נסגר לפני שהגיעה תשובה.",
|
|
2976
|
+
"tlsUntrusted": "הפריסה הזו אינה סומכת על אישור ה-TLS.",
|
|
2977
|
+
"tlsExpired": "אישור ה-TLS נמצא מחוץ לתקופת התוקף שלו.",
|
|
2978
|
+
"tlsHostname": "אישור ה-TLS לא הונפק עבור שם המחשב המארח הזה.",
|
|
2979
|
+
"tlsProtocol": "לחיצת היד של TLS נכשלה.",
|
|
2980
|
+
"invalidHeader": "לא ניתן היה לבנות את הבקשה: פרטי גישה מכילים תו שכותרת HTTP אינה יכולה לשאת."
|
|
2981
|
+
},
|
|
2943
2982
|
"warningsTitle": "פערים בתצורה הזו",
|
|
2944
2983
|
"warnings": {
|
|
2945
2984
|
"runner_manifest_no_release": "אין תבנית שחרור: ביטול הרצה לא יכול להודיע למאגר להפסיק את המשימה שלו, ולכן משימה יתומה תופסת את הראנר שלה עד שהמאגר משחרר אותה בעצמו.",
|
|
2946
2985
|
"runner_manifest_no_status_path": "אין נתיב סטטוס: כל תשאול נקרא כאילו המשימה עדיין רצה, ולכן משימה יכולה להסתיים רק לאחר ניצול כל תקציב התשאול של ההרצה.",
|
|
2947
2986
|
"github_pat_classic_account_wide": "זהו אסימון קלאסי עם ההרשאה 'repo': הוא מגיע לכל מאגר שאתם יכולים לדחוף אליו, כולל מאגרים שאפליקציית GitHub של סביבת העבודה הזו מעולם לא הותקנה בהם. הרצות שאתם מתחילים משתמשות בו במקום באפליקציה. אסימון מפורט המוגבל למאגרים של התקנה זו צר יותר.",
|
|
2948
2987
|
"github_pat_scopes_beyond_need": "האסימון הזה מעניק הרשאות ש-cat-factory לעולם אינה משתמשת בהן. הסרתן אינה עולה דבר ומצמצמת את מה שהרצה שנפרצה יכולה להגיע אליו.",
|
|
2949
|
-
"github_pat_scope_unreadable": "GitHub קיבלה את האסימון הזה אך לא דיווחה על ההרשאות שלו, ולכן לא ניתן להציג כאן את טווחו. בדקו בהגדרות האסימונים שלכם ב-GitHub מה הוא מעניק."
|
|
2988
|
+
"github_pat_scope_unreadable": "GitHub קיבלה את האסימון הזה אך לא דיווחה על ההרשאות שלו, ולכן לא ניתן להציג כאן את טווחו. בדקו בהגדרות האסימונים שלכם ב-GitHub מה הוא מעניק.",
|
|
2989
|
+
"github_pat_no_scopes": "GitHub אינו מדווח על היקפי הרשאה לאסימון הקלאסי הזה, ולכן הוא יכול לקרוא רק נתונים ציבוריים. הרצות שמשכפלות, דוחפות או פותחות בקשת משיכה איתו ייכשלו. צור אסימון חדש עם 'repo' ו-'workflow' מסומנים."
|
|
2950
2990
|
}
|
|
2951
2991
|
},
|
|
2952
2992
|
"toast": {
|