@plutocms/core 0.47.1 → 0.48.0
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/CHANGELOG.md +11 -0
- package/FEATURES.md +15 -4
- package/app/components/Pluto/Admin/PlutoAdminBackendBadge.vue +84 -0
- package/app/components/Pluto/Admin/PlutoAdminNavbar.vue +7 -0
- package/app/components/Pluto/Github/PlutoGithubBackendDetails.vue +180 -0
- package/app/components/Pluto/Github/PlutoGithubBuildStatus.vue +17 -4
- package/app/components/Pluto/Github/PlutoGithubDeployPage.vue +472 -0
- package/app/components/Pluto/Github/PlutoGithubUsersPage.vue +214 -0
- package/app/components/Pluto/PlutoHtml.vue +8 -2
- package/app/composables/internal/async-component.ts +9 -0
- package/app/composables/pluto-extension.ts +4 -0
- package/app/composables/pluto-navbar.ts +25 -0
- package/app/composables/pluto-registry.ts +1 -0
- package/i18n/locales/en.json +164 -2
- package/i18n/locales/pt-BR.json +164 -2
- package/modules/pluto-github/index.ts +127 -51
- package/modules/pluto-github/options.ts +18 -5
- package/modules/pluto-github/runtime/app/composables/pluto-github-local-git.ts +50 -0
- package/modules/pluto-github/runtime/app/composables/pluto-github-session.ts +8 -1
- package/modules/pluto-github/runtime/app/plugins/pluto-github.ts +84 -1
- package/modules/pluto-github/runtime/server/adapter.ts +26 -7
- package/modules/pluto-github/runtime/server/api/deploy/pages.post.ts +5 -0
- package/modules/pluto-github/runtime/server/api/deploy/status.get.ts +5 -0
- package/modules/pluto-github/runtime/server/api/local/push.post.ts +5 -0
- package/modules/pluto-github/runtime/server/api/local/status.get.ts +5 -0
- package/modules/pluto-github/runtime/server/api/users.get.ts +5 -0
- package/modules/pluto-github/runtime/server/store/github.ts +4 -1
- package/modules/pluto-github/runtime/server/store/local-git.ts +145 -0
- package/modules/pluto-github/runtime/server/store/memory.ts +4 -1
- package/modules/pluto-github/runtime/server/utils/build-status.ts +16 -7
- package/modules/pluto-github/runtime/server/utils/deploy.ts +204 -0
- package/modules/pluto-github/runtime/server/utils/github-setup.ts +1 -3
- package/modules/pluto-github/runtime/server/utils/github-users.ts +120 -0
- package/modules/pluto-github/runtime/server/utils/local-git-routes.ts +95 -0
- package/modules/pluto-github/runtime/shared/build-status.ts +26 -0
- package/modules/pluto-github/runtime/shared/client-rules.ts +16 -0
- package/modules/pluto-github/runtime/shared/deploy.ts +43 -0
- package/modules/pluto-github/runtime/shared/pages-workflow.ts +138 -0
- package/modules/pluto-github/runtime/shared/repo-users.ts +97 -0
- package/package.json +1 -1
- package/shared/types/github.d.ts +2 -0
- package/shared/types/registry.ts +22 -0
- package/shared/utils/html-base.ts +23 -0
|
@@ -7,7 +7,10 @@
|
|
|
7
7
|
// The prose look is `.pluto-prose` in app/assets/css/pluto-base.css: plain CSS that a site
|
|
8
8
|
// imports with `@plutocms/css/base`. No Tailwind class here, so the component works on a site
|
|
9
9
|
// with no Tailwind. See the public-components skill.
|
|
10
|
-
|
|
10
|
+
//
|
|
11
|
+
// A site under a sub path (a project site of GitHub Pages) gets its base path before each site
|
|
12
|
+
// path of the body (`withBaseInHtml`), so the images and the links of a post still work.
|
|
13
|
+
const props = withDefaults(
|
|
11
14
|
defineProps<{
|
|
12
15
|
html: string
|
|
13
16
|
tag?: string
|
|
@@ -16,6 +19,9 @@ withDefaults(
|
|
|
16
19
|
tag: 'article',
|
|
17
20
|
}
|
|
18
21
|
)
|
|
22
|
+
|
|
23
|
+
const baseURL = useRuntimeConfig().app.baseURL
|
|
24
|
+
const body = computed(() => withBaseInHtml(props.html, baseURL))
|
|
19
25
|
</script>
|
|
20
26
|
|
|
21
27
|
<template>
|
|
@@ -23,5 +29,5 @@ withDefaults(
|
|
|
23
29
|
on a dynamic `<component :is>` drops the value in the SSR output. The
|
|
24
30
|
hyphenated spelling renders a literal `inner-h-t-m-l` attribute. -->
|
|
25
31
|
<!-- eslint-disable-next-line vue/attribute-hyphenation -- must stay camelCase, see comment above -->
|
|
26
|
-
<component :is="tag" v-if="html" :innerHTML="
|
|
32
|
+
<component :is="tag" v-if="html" :innerHTML="body" class="pluto-prose" />
|
|
27
33
|
</template>
|
|
@@ -42,6 +42,10 @@ interface ExtensionComponents {
|
|
|
42
42
|
id: string
|
|
43
43
|
component: Component
|
|
44
44
|
}[]
|
|
45
|
+
backend?: {
|
|
46
|
+
id: string
|
|
47
|
+
details?: Component
|
|
48
|
+
}
|
|
45
49
|
}
|
|
46
50
|
|
|
47
51
|
/**
|
|
@@ -68,5 +72,10 @@ export function findSyncComponents(definition: ExtensionComponents): string[] {
|
|
|
68
72
|
}
|
|
69
73
|
}
|
|
70
74
|
|
|
75
|
+
const details = definition.backend?.details
|
|
76
|
+
if (details && !isAsyncComponent(details)) {
|
|
77
|
+
found.push(`${definition.id}:backend:${definition.backend!.id}`)
|
|
78
|
+
}
|
|
79
|
+
|
|
71
80
|
return found
|
|
72
81
|
}
|
|
@@ -47,6 +47,10 @@ export function definePlutoExtension(definition: PlutoExtension): void {
|
|
|
47
47
|
registry.accountMenu.set(definition.id, definition.accountMenu ?? [])
|
|
48
48
|
registry.adminBanners.set(definition.id, definition.adminBanners ?? [])
|
|
49
49
|
registry.siteInfo.set(definition.id, definition.site ? [definition.site] : [])
|
|
50
|
+
registry.backend.set(
|
|
51
|
+
definition.id,
|
|
52
|
+
definition.backend ? [definition.backend] : []
|
|
53
|
+
)
|
|
50
54
|
registry.contentTypes.set(definition.id, definition.contentTypes ?? [])
|
|
51
55
|
registry.contentFieldWidgets.set(
|
|
52
56
|
definition.id,
|
|
@@ -131,3 +131,28 @@ export function usePlutoSiteInfo() {
|
|
|
131
131
|
url: computed(() => pick('url')),
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* The backend that stores the content, for the badge of the admin navbar. The last registered
|
|
137
|
+
* entry wins. `null` when no backend gives one.
|
|
138
|
+
*/
|
|
139
|
+
export function usePlutoBackend() {
|
|
140
|
+
const registry = usePlutoRegistry()
|
|
141
|
+
const { tx } = usePlutoI18n()
|
|
142
|
+
|
|
143
|
+
const backend = computed(() => {
|
|
144
|
+
const entry = registry.backend.list.value.at(-1)
|
|
145
|
+
if (!entry) {
|
|
146
|
+
return null
|
|
147
|
+
}
|
|
148
|
+
const count = Math.max(0, Math.trunc(Number(entry.count?.() ?? 0)) || 0)
|
|
149
|
+
return {
|
|
150
|
+
...entry,
|
|
151
|
+
label: tx(entry.label),
|
|
152
|
+
count,
|
|
153
|
+
countLabel: count && entry.countLabel ? tx(entry.countLabel, count) : '',
|
|
154
|
+
}
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
return { backend }
|
|
158
|
+
}
|
|
@@ -29,6 +29,7 @@ export function usePlutoRegistry(): PlutoRegistry {
|
|
|
29
29
|
accountMenu: createOwnedRegistry<PlutoAccountMenuItem>(),
|
|
30
30
|
adminBanners: createOwnedRegistry<PlutoAdminBanner>(),
|
|
31
31
|
siteInfo: createOwnedRegistry<PlutoSiteInfo>(),
|
|
32
|
+
backend: createOwnedRegistry<PlutoBackendInfo>(),
|
|
32
33
|
contentTypes: createOwnedRegistry<PlutoContentTypeEntry>(),
|
|
33
34
|
contentFieldWidgets: createOwnedRegistry<PlutoContentFieldWidget>(),
|
|
34
35
|
contentActions: createOwnedRegistry<PlutoContentAction>(),
|
package/i18n/locales/en.json
CHANGED
|
@@ -20,7 +20,9 @@
|
|
|
20
20
|
"create": "Create",
|
|
21
21
|
"error": "Error",
|
|
22
22
|
"switchToLightMode": "Switch to light mode",
|
|
23
|
-
"switchToDarkMode": "Switch to dark mode"
|
|
23
|
+
"switchToDarkMode": "Switch to dark mode",
|
|
24
|
+
"copy": "Copy",
|
|
25
|
+
"copied": "Copied"
|
|
24
26
|
},
|
|
25
27
|
"navbar": {
|
|
26
28
|
"openNavigation": "Open navigation",
|
|
@@ -169,7 +171,8 @@
|
|
|
169
171
|
"tabs": {
|
|
170
172
|
"general": "General",
|
|
171
173
|
"email": "Email",
|
|
172
|
-
"github": "GitHub"
|
|
174
|
+
"github": "GitHub",
|
|
175
|
+
"deploy": "Deploy"
|
|
173
176
|
},
|
|
174
177
|
"noPermission": {
|
|
175
178
|
"title": "You cannot open this page",
|
|
@@ -371,6 +374,156 @@
|
|
|
371
374
|
"retry": "Start again"
|
|
372
375
|
}
|
|
373
376
|
}
|
|
377
|
+
},
|
|
378
|
+
"backend": {
|
|
379
|
+
"local": "Local",
|
|
380
|
+
"github": "GitHub",
|
|
381
|
+
"description": "Each save is a commit in this repo, made with your GitHub account.",
|
|
382
|
+
"repo": "Repo",
|
|
383
|
+
"branch": "Branch",
|
|
384
|
+
"private": "Private",
|
|
385
|
+
"public": "Public",
|
|
386
|
+
"openRepo": "Open the repo",
|
|
387
|
+
"commits": "Commits"
|
|
388
|
+
},
|
|
389
|
+
"local": {
|
|
390
|
+
"description": "Each save writes a Markdown file in this project and makes a commit in your local Git repo. The live site changes after you push.",
|
|
391
|
+
"ahead": "No commits to push | 1 commit not pushed | {count} commits not pushed",
|
|
392
|
+
"aheadShort": "{count} to push",
|
|
393
|
+
"upToDate": "All commits are pushed.",
|
|
394
|
+
"noGit": "Git is not installed. Saves only write the files.",
|
|
395
|
+
"notARepo": "This project is not a Git repo. Saves only write the files.",
|
|
396
|
+
"detached": "Git is not on a branch. Check out a branch to push.",
|
|
397
|
+
"noRemote": "The repo has no remote. Add one to push, for example with git remote add origin <url>.",
|
|
398
|
+
"push": "Push",
|
|
399
|
+
"pushed": "Pushed.",
|
|
400
|
+
"pushHint": "Push runs git push on this computer.",
|
|
401
|
+
"errors": {
|
|
402
|
+
"notARepo": "This project is not a Git repo.",
|
|
403
|
+
"detached": "Git is not on a branch.",
|
|
404
|
+
"noRemote": "The repo has no remote.",
|
|
405
|
+
"rejected": "The remote has commits that this repo does not have. Run git pull, then push again.",
|
|
406
|
+
"auth": "Git could not sign in to the remote. Run git push in a terminal to sign in.",
|
|
407
|
+
"timeout": "The push took too long. Run git push in a terminal to see why.",
|
|
408
|
+
"failed": "Git could not push. Run git push in a terminal to see why."
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
"users": {
|
|
412
|
+
"title": "Users",
|
|
413
|
+
"description": "The people with write access to {repo} on GitHub can sign in to the admin. GitHub controls the access: add or remove people there.",
|
|
414
|
+
"manage": "Manage access on GitHub",
|
|
415
|
+
"restricted": "NUXT_PLUTO_GITHUB_ALLOWED_USERS is set: only the users in that list can sign in.",
|
|
416
|
+
"error": "Could not load the users",
|
|
417
|
+
"empty": "No user has write access to the repo.",
|
|
418
|
+
"you": "You",
|
|
419
|
+
"columns": {
|
|
420
|
+
"user": "User",
|
|
421
|
+
"role": "GitHub role",
|
|
422
|
+
"access": "In Pluto"
|
|
423
|
+
},
|
|
424
|
+
"roles": {
|
|
425
|
+
"admin": "Admin",
|
|
426
|
+
"maintain": "Maintain",
|
|
427
|
+
"write": "Write"
|
|
428
|
+
},
|
|
429
|
+
"access": {
|
|
430
|
+
"admin": "Administrator: everything",
|
|
431
|
+
"editor": "Editor: write, publish and delete content"
|
|
432
|
+
},
|
|
433
|
+
"blocked": "Cannot sign in: not in ALLOWED_USERS",
|
|
434
|
+
"footnote": "People with the Triage or Read role on GitHub cannot sign in.",
|
|
435
|
+
"reason": {
|
|
436
|
+
"noApp": {
|
|
437
|
+
"title": "The list needs the GitHub App",
|
|
438
|
+
"description": "In local mode you are the only user. To see the people of the GitHub repo here, set up the GitHub App.",
|
|
439
|
+
"action": "Set up the GitHub App"
|
|
440
|
+
},
|
|
441
|
+
"noRepo": {
|
|
442
|
+
"title": "No GitHub repo",
|
|
443
|
+
"description": "Pluto does not know the GitHub repo of this site. Set PLUTO_GITHUB_REPO, or add a GitHub remote named origin."
|
|
444
|
+
},
|
|
445
|
+
"appError": {
|
|
446
|
+
"title": "The GitHub App cannot read the repo",
|
|
447
|
+
"description": "The App gave no token. Check that it is installed on the repo, and that its private key is right.",
|
|
448
|
+
"action": "Check the GitHub App"
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
},
|
|
452
|
+
"deploy": {
|
|
453
|
+
"intro": "Put the site online. Pick a host.",
|
|
454
|
+
"error": "Could not load the deploy settings",
|
|
455
|
+
"full": {
|
|
456
|
+
"title": "The site and the admin",
|
|
457
|
+
"description": "These hosts run the whole app. Editors sign in on the live site with GitHub, and a save is live in seconds.",
|
|
458
|
+
"after": "After the first deploy, open /admin on the live site. It shows how to create the GitHub App that editors use to sign in."
|
|
459
|
+
},
|
|
460
|
+
"hosts": {
|
|
461
|
+
"vercel": {
|
|
462
|
+
"name": "Vercel",
|
|
463
|
+
"description": "Import this repo. Vercel finds Nuxt and the repo by itself.",
|
|
464
|
+
"action": "Deploy to Vercel"
|
|
465
|
+
},
|
|
466
|
+
"netlify": {
|
|
467
|
+
"name": "Netlify",
|
|
468
|
+
"description": "Import this repo from your GitHub account. Netlify finds Nuxt by itself.",
|
|
469
|
+
"action": "Deploy to Netlify"
|
|
470
|
+
},
|
|
471
|
+
"node": {
|
|
472
|
+
"name": "A Node host",
|
|
473
|
+
"description": "Any host that runs Node.js. Build with nuxt build, then start .output/server/index.mjs.",
|
|
474
|
+
"action": "Read the guide"
|
|
475
|
+
}
|
|
476
|
+
},
|
|
477
|
+
"static": {
|
|
478
|
+
"title": "A static site",
|
|
479
|
+
"description": "The site is plain files, so the host is simple and free. The admin stays on your computer: save, push, and the host builds the site again."
|
|
480
|
+
},
|
|
481
|
+
"pages": {
|
|
482
|
+
"name": "GitHub Pages",
|
|
483
|
+
"description": "A GitHub Action builds the site on each push and puts it on GitHub Pages. The build needs no secret.",
|
|
484
|
+
"ready": "Ready",
|
|
485
|
+
"open": "Open the site",
|
|
486
|
+
"setup": "Set up GitHub Pages",
|
|
487
|
+
"settings": "Pages settings on GitHub",
|
|
488
|
+
"showWorkflow": "Show the workflow",
|
|
489
|
+
"hideWorkflow": "Hide the workflow",
|
|
490
|
+
"workflow": {
|
|
491
|
+
"done": "The workflow is in the project:",
|
|
492
|
+
"old": "The workflow is in the project, but Pluto has a new version:",
|
|
493
|
+
"missing": "The workflow is not in the project yet:"
|
|
494
|
+
},
|
|
495
|
+
"state": {
|
|
496
|
+
"on": "GitHub Pages is on, with GitHub Actions as the source.",
|
|
497
|
+
"legacy": "GitHub Pages is on, but it builds from a branch. Set up moves it to GitHub Actions.",
|
|
498
|
+
"off": "GitHub Pages is off for the repo."
|
|
499
|
+
},
|
|
500
|
+
"reason": {
|
|
501
|
+
"no-gh": "Pluto cannot see GitHub Pages: the GitHub CLI (gh) is not installed. Set up still writes the workflow. Then turn Pages on in the settings of the repo.",
|
|
502
|
+
"signed-out": "Pluto cannot see GitHub Pages: the GitHub CLI is not signed in. Run gh auth login, or turn Pages on in the settings of the repo.",
|
|
503
|
+
"error": "Pluto cannot see GitHub Pages for the repo."
|
|
504
|
+
},
|
|
505
|
+
"done": {
|
|
506
|
+
"title": "GitHub Pages is set up",
|
|
507
|
+
"description": "Push your commits to deploy: use the Git badge in the bar, or run git push. The first build takes a few minutes."
|
|
508
|
+
},
|
|
509
|
+
"partial": {
|
|
510
|
+
"title": "The workflow is ready",
|
|
511
|
+
"description": "Pluto could not turn GitHub Pages on. Open the Pages settings of the repo, and set the source to GitHub Actions. Then push your commits."
|
|
512
|
+
},
|
|
513
|
+
"manual": {
|
|
514
|
+
"step1": "Add the workflow below to the repo, at the path that it shows.",
|
|
515
|
+
"step2": "In the Pages settings of the repo, set the source to GitHub Actions.",
|
|
516
|
+
"step3": "Push. The Action builds and deploys the site."
|
|
517
|
+
},
|
|
518
|
+
"nodeAdmin": "An admin on a Node host can use the same site: set commit.skipDeploy to false, so that each save of published content starts a build."
|
|
519
|
+
},
|
|
520
|
+
"cloudflare": {
|
|
521
|
+
"name": "Cloudflare Pages",
|
|
522
|
+
"description": "Connect the repo in Cloudflare, and use these build settings.",
|
|
523
|
+
"command": "Build command",
|
|
524
|
+
"output": "Output directory",
|
|
525
|
+
"action": "Open Cloudflare"
|
|
526
|
+
}
|
|
374
527
|
}
|
|
375
528
|
},
|
|
376
529
|
"validation": {
|
|
@@ -751,6 +904,15 @@
|
|
|
751
904
|
"clear": "Clear the selection"
|
|
752
905
|
},
|
|
753
906
|
"dropHint": "Drop files here, or upload them. Every layer of the site uses this library."
|
|
907
|
+
},
|
|
908
|
+
"backend": {
|
|
909
|
+
"kind": {
|
|
910
|
+
"git": "Git",
|
|
911
|
+
"database": "Database"
|
|
912
|
+
},
|
|
913
|
+
"open": "Where the content is: {name}",
|
|
914
|
+
"gitMode": "Git mode: the content is Markdown files in a Git repo.",
|
|
915
|
+
"databaseMode": "Database mode: the content is in a database."
|
|
754
916
|
}
|
|
755
917
|
}
|
|
756
918
|
}
|
package/i18n/locales/pt-BR.json
CHANGED
|
@@ -20,7 +20,9 @@
|
|
|
20
20
|
"create": "Criar",
|
|
21
21
|
"error": "Erro",
|
|
22
22
|
"switchToLightMode": "Mudar para o tema claro",
|
|
23
|
-
"switchToDarkMode": "Mudar para o tema escuro"
|
|
23
|
+
"switchToDarkMode": "Mudar para o tema escuro",
|
|
24
|
+
"copy": "Copiar",
|
|
25
|
+
"copied": "Copiado"
|
|
24
26
|
},
|
|
25
27
|
"navbar": {
|
|
26
28
|
"openNavigation": "Abrir a navegação",
|
|
@@ -169,7 +171,8 @@
|
|
|
169
171
|
"tabs": {
|
|
170
172
|
"general": "Geral",
|
|
171
173
|
"email": "E-mail",
|
|
172
|
-
"github": "GitHub"
|
|
174
|
+
"github": "GitHub",
|
|
175
|
+
"deploy": "Publicar"
|
|
173
176
|
},
|
|
174
177
|
"noPermission": {
|
|
175
178
|
"title": "Você não pode abrir esta página",
|
|
@@ -371,6 +374,156 @@
|
|
|
371
374
|
"retry": "Começar de novo"
|
|
372
375
|
}
|
|
373
376
|
}
|
|
377
|
+
},
|
|
378
|
+
"backend": {
|
|
379
|
+
"local": "Local",
|
|
380
|
+
"github": "GitHub",
|
|
381
|
+
"description": "Cada salvamento é um commit neste repositório, feito com a sua conta do GitHub.",
|
|
382
|
+
"repo": "Repositório",
|
|
383
|
+
"branch": "Branch",
|
|
384
|
+
"private": "Privado",
|
|
385
|
+
"public": "Público",
|
|
386
|
+
"openRepo": "Abrir o repositório",
|
|
387
|
+
"commits": "Commits"
|
|
388
|
+
},
|
|
389
|
+
"local": {
|
|
390
|
+
"description": "Cada salvamento grava um arquivo Markdown neste projeto e faz um commit no seu repositório Git local. O site no ar muda depois do push.",
|
|
391
|
+
"ahead": "Nenhum commit para enviar | 1 commit não enviado | {count} commits não enviados",
|
|
392
|
+
"aheadShort": "{count} para enviar",
|
|
393
|
+
"upToDate": "Todos os commits foram enviados.",
|
|
394
|
+
"noGit": "O Git não está instalado. Os salvamentos só gravam os arquivos.",
|
|
395
|
+
"notARepo": "Este projeto não é um repositório Git. Os salvamentos só gravam os arquivos.",
|
|
396
|
+
"detached": "O Git não está em uma branch. Faça checkout de uma branch para enviar.",
|
|
397
|
+
"noRemote": "O repositório não tem remote. Adicione um para enviar, por exemplo com git remote add origin <url>.",
|
|
398
|
+
"push": "Enviar",
|
|
399
|
+
"pushed": "Enviado.",
|
|
400
|
+
"pushHint": "Enviar roda git push neste computador.",
|
|
401
|
+
"errors": {
|
|
402
|
+
"notARepo": "Este projeto não é um repositório Git.",
|
|
403
|
+
"detached": "O Git não está em uma branch.",
|
|
404
|
+
"noRemote": "O repositório não tem remote.",
|
|
405
|
+
"rejected": "O remote tem commits que este repositório não tem. Rode git pull e envie de novo.",
|
|
406
|
+
"auth": "O Git não conseguiu entrar no remote. Rode git push em um terminal para entrar.",
|
|
407
|
+
"timeout": "O envio demorou demais. Rode git push em um terminal para ver o motivo.",
|
|
408
|
+
"failed": "O Git não conseguiu enviar. Rode git push em um terminal para ver o motivo."
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
"users": {
|
|
412
|
+
"title": "Usuários",
|
|
413
|
+
"description": "As pessoas com acesso de escrita a {repo} no GitHub podem entrar no admin. O GitHub controla o acesso: adicione ou remova pessoas lá.",
|
|
414
|
+
"manage": "Gerenciar o acesso no GitHub",
|
|
415
|
+
"restricted": "NUXT_PLUTO_GITHUB_ALLOWED_USERS está definido: só os usuários dessa lista podem entrar.",
|
|
416
|
+
"error": "Não foi possível carregar os usuários",
|
|
417
|
+
"empty": "Ninguém tem acesso de escrita ao repositório.",
|
|
418
|
+
"you": "Você",
|
|
419
|
+
"columns": {
|
|
420
|
+
"user": "Usuário",
|
|
421
|
+
"role": "Papel no GitHub",
|
|
422
|
+
"access": "No Pluto"
|
|
423
|
+
},
|
|
424
|
+
"roles": {
|
|
425
|
+
"admin": "Admin",
|
|
426
|
+
"maintain": "Maintain",
|
|
427
|
+
"write": "Write"
|
|
428
|
+
},
|
|
429
|
+
"access": {
|
|
430
|
+
"admin": "Administrador: tudo",
|
|
431
|
+
"editor": "Editor: escrever, publicar e excluir conteúdo"
|
|
432
|
+
},
|
|
433
|
+
"blocked": "Não pode entrar: fora de ALLOWED_USERS",
|
|
434
|
+
"footnote": "Pessoas com o papel Triage ou Read no GitHub não podem entrar.",
|
|
435
|
+
"reason": {
|
|
436
|
+
"noApp": {
|
|
437
|
+
"title": "A lista precisa do GitHub App",
|
|
438
|
+
"description": "No modo local você é o único usuário. Para ver aqui as pessoas do repositório no GitHub, configure o GitHub App.",
|
|
439
|
+
"action": "Configurar o GitHub App"
|
|
440
|
+
},
|
|
441
|
+
"noRepo": {
|
|
442
|
+
"title": "Nenhum repositório do GitHub",
|
|
443
|
+
"description": "O Pluto não sabe qual é o repositório do GitHub deste site. Defina PLUTO_GITHUB_REPO ou adicione um remote do GitHub chamado origin."
|
|
444
|
+
},
|
|
445
|
+
"appError": {
|
|
446
|
+
"title": "O GitHub App não consegue ler o repositório",
|
|
447
|
+
"description": "O App não deu um token. Confira se ele está instalado no repositório e se a chave privada está certa.",
|
|
448
|
+
"action": "Conferir o GitHub App"
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
},
|
|
452
|
+
"deploy": {
|
|
453
|
+
"intro": "Coloque o site no ar. Escolha um host.",
|
|
454
|
+
"error": "Não foi possível carregar as configurações de publicação",
|
|
455
|
+
"full": {
|
|
456
|
+
"title": "O site e o admin",
|
|
457
|
+
"description": "Estes hosts rodam o app inteiro. Os editores entram no site no ar com o GitHub, e um salvamento fica no ar em segundos.",
|
|
458
|
+
"after": "Depois da primeira publicação, abra /admin no site no ar. Ele mostra como criar o GitHub App que os editores usam para entrar."
|
|
459
|
+
},
|
|
460
|
+
"hosts": {
|
|
461
|
+
"vercel": {
|
|
462
|
+
"name": "Vercel",
|
|
463
|
+
"description": "Importe este repositório. A Vercel encontra o Nuxt e o repositório sozinha.",
|
|
464
|
+
"action": "Publicar na Vercel"
|
|
465
|
+
},
|
|
466
|
+
"netlify": {
|
|
467
|
+
"name": "Netlify",
|
|
468
|
+
"description": "Importe este repositório da sua conta do GitHub. A Netlify encontra o Nuxt sozinha.",
|
|
469
|
+
"action": "Publicar na Netlify"
|
|
470
|
+
},
|
|
471
|
+
"node": {
|
|
472
|
+
"name": "Um host Node",
|
|
473
|
+
"description": "Qualquer host que rode Node.js. Compile com nuxt build e inicie .output/server/index.mjs.",
|
|
474
|
+
"action": "Ler o guia"
|
|
475
|
+
}
|
|
476
|
+
},
|
|
477
|
+
"static": {
|
|
478
|
+
"title": "Um site estático",
|
|
479
|
+
"description": "O site são arquivos simples, então o host é simples e gratuito. O admin fica no seu computador: salve, faça o push, e o host compila o site de novo."
|
|
480
|
+
},
|
|
481
|
+
"pages": {
|
|
482
|
+
"name": "GitHub Pages",
|
|
483
|
+
"description": "Uma GitHub Action compila o site a cada push e o coloca no GitHub Pages. A compilação não precisa de segredo.",
|
|
484
|
+
"ready": "Pronto",
|
|
485
|
+
"open": "Abrir o site",
|
|
486
|
+
"setup": "Configurar o GitHub Pages",
|
|
487
|
+
"settings": "Configurações do Pages no GitHub",
|
|
488
|
+
"showWorkflow": "Mostrar o workflow",
|
|
489
|
+
"hideWorkflow": "Esconder o workflow",
|
|
490
|
+
"workflow": {
|
|
491
|
+
"done": "O workflow está no projeto:",
|
|
492
|
+
"old": "O workflow está no projeto, mas o Pluto tem uma versão nova:",
|
|
493
|
+
"missing": "O workflow ainda não está no projeto:"
|
|
494
|
+
},
|
|
495
|
+
"state": {
|
|
496
|
+
"on": "O GitHub Pages está ligado, com o GitHub Actions como fonte.",
|
|
497
|
+
"legacy": "O GitHub Pages está ligado, mas compila de uma branch. Configurar o passa para o GitHub Actions.",
|
|
498
|
+
"off": "O GitHub Pages está desligado no repositório."
|
|
499
|
+
},
|
|
500
|
+
"reason": {
|
|
501
|
+
"no-gh": "O Pluto não consegue ver o GitHub Pages: o GitHub CLI (gh) não está instalado. Configurar ainda grava o workflow. Depois ligue o Pages nas configurações do repositório.",
|
|
502
|
+
"signed-out": "O Pluto não consegue ver o GitHub Pages: o GitHub CLI não está conectado. Rode gh auth login, ou ligue o Pages nas configurações do repositório.",
|
|
503
|
+
"error": "O Pluto não consegue ver o GitHub Pages do repositório."
|
|
504
|
+
},
|
|
505
|
+
"done": {
|
|
506
|
+
"title": "O GitHub Pages está configurado",
|
|
507
|
+
"description": "Envie seus commits para publicar: use o selo do Git na barra, ou rode git push. A primeira compilação leva alguns minutos."
|
|
508
|
+
},
|
|
509
|
+
"partial": {
|
|
510
|
+
"title": "O workflow está pronto",
|
|
511
|
+
"description": "O Pluto não conseguiu ligar o GitHub Pages. Abra as configurações do Pages do repositório e escolha GitHub Actions como fonte. Depois envie seus commits."
|
|
512
|
+
},
|
|
513
|
+
"manual": {
|
|
514
|
+
"step1": "Adicione o workflow abaixo ao repositório, no caminho que ele mostra.",
|
|
515
|
+
"step2": "Nas configurações do Pages do repositório, escolha GitHub Actions como fonte.",
|
|
516
|
+
"step3": "Faça o push. A Action compila e publica o site."
|
|
517
|
+
},
|
|
518
|
+
"nodeAdmin": "Um admin em um host Node pode usar o mesmo site: defina commit.skipDeploy como false, para que cada salvamento de conteúdo publicado inicie uma compilação."
|
|
519
|
+
},
|
|
520
|
+
"cloudflare": {
|
|
521
|
+
"name": "Cloudflare Pages",
|
|
522
|
+
"description": "Conecte o repositório na Cloudflare e use estas configurações de compilação.",
|
|
523
|
+
"command": "Comando de compilação",
|
|
524
|
+
"output": "Pasta de saída",
|
|
525
|
+
"action": "Abrir a Cloudflare"
|
|
526
|
+
}
|
|
374
527
|
}
|
|
375
528
|
},
|
|
376
529
|
"validation": {
|
|
@@ -751,6 +904,15 @@
|
|
|
751
904
|
"clear": "Limpar a seleção"
|
|
752
905
|
},
|
|
753
906
|
"dropHint": "Solte os arquivos aqui ou envie-os. Todas as camadas do site usam esta biblioteca."
|
|
907
|
+
},
|
|
908
|
+
"backend": {
|
|
909
|
+
"kind": {
|
|
910
|
+
"git": "Git",
|
|
911
|
+
"database": "Banco de dados"
|
|
912
|
+
},
|
|
913
|
+
"open": "Onde o conteúdo fica: {name}",
|
|
914
|
+
"gitMode": "Modo Git: o conteúdo são arquivos Markdown em um repositório Git.",
|
|
915
|
+
"databaseMode": "Modo banco de dados: o conteúdo fica em um banco de dados."
|
|
754
916
|
}
|
|
755
917
|
}
|
|
756
918
|
}
|