mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-07-13 15:14:22 +00:00
Merge branch 'origin/main' into 'next-release/main'
This commit is contained in:
commit
0790ac8411
@ -291,6 +291,7 @@
|
|||||||
},
|
},
|
||||||
"admin": {
|
"admin": {
|
||||||
"settings": {
|
"settings": {
|
||||||
|
"settings": "Admin Settings",
|
||||||
"not_allowed": "You are not allowed to access server settings",
|
"not_allowed": "You are not allowed to access server settings",
|
||||||
"secrets": {
|
"secrets": {
|
||||||
"desc": "Global secrets can be used in the pipelines of all repositories.",
|
"desc": "Global secrets can be used in the pipelines of all repositories.",
|
||||||
|
@ -192,7 +192,7 @@
|
|||||||
"branches": "Atzari",
|
"branches": "Atzari",
|
||||||
"deploy_pipeline": {
|
"deploy_pipeline": {
|
||||||
"enter_target": "Mērķa uzstādīšanas vide",
|
"enter_target": "Mērķa uzstādīšanas vide",
|
||||||
"title": "Iniciēt uzstādīšanas notikumu šim konvejerdarbam #{pipelineId}",
|
"title": "Iniciēt uzstādīšanu šim konvejerdarbam #{pipelineId}",
|
||||||
"trigger": "Uzstādīt",
|
"trigger": "Uzstādīt",
|
||||||
"variables": {
|
"variables": {
|
||||||
"add": "Pievienot mainīgo",
|
"add": "Pievienot mainīgo",
|
||||||
@ -364,10 +364,10 @@
|
|||||||
"cancel": "Atcelt iepriekšējos konvejerdarbus",
|
"cancel": "Atcelt iepriekšējos konvejerdarbus",
|
||||||
"desc": "Iespējojot šo pazīmi, tiks atcelti visi iepriekšējie konvejerdarbi, kuriem sakrīt notikums un konteksts."
|
"desc": "Iespējojot šo pazīmi, tiks atcelti visi iepriekšējie konvejerdarbi, kuriem sakrīt notikums un konteksts."
|
||||||
},
|
},
|
||||||
"general": "Pamata",
|
"general": "Projekts",
|
||||||
"netrc_only_trusted": {
|
"netrc_only_trusted": {
|
||||||
"desc": "Atļaut izmantot Git autorizāciju tikai uzticamiem konteineriem (ieteicams).",
|
"desc": "Atļaut izmantot Git autorizāciju tikai uzticamiem konteineriem (ieteicams).",
|
||||||
"netrc_only_trusted": "Atļaut izmantot Git autorizāciju tikai uzticamiem konteineriem"
|
"netrc_only_trusted": "Papildus uzticamie klonēšanas spraudņiem"
|
||||||
},
|
},
|
||||||
"pipeline_path": {
|
"pipeline_path": {
|
||||||
"default": "Pēc noklusējuma: .woodpecker/*.{'{yaml,yml}'} -> .woodpecker.yaml -> .woodpecker.yml",
|
"default": "Pēc noklusējuma: .woodpecker/*.{'{yaml,yml}'} -> .woodpecker.yaml -> .woodpecker.yml",
|
||||||
@ -381,7 +381,7 @@
|
|||||||
"protected": "Aizsargāts"
|
"protected": "Aizsargāts"
|
||||||
},
|
},
|
||||||
"save": "Saglabāt iestatījumus",
|
"save": "Saglabāt iestatījumus",
|
||||||
"success": "Repozitorija iestatījumi tika saglabāti",
|
"success": "Projekta iestatījumi tika saglabāti",
|
||||||
"timeout": {
|
"timeout": {
|
||||||
"minutes": "minūtes",
|
"minutes": "minūtes",
|
||||||
"timeout": "Noildze"
|
"timeout": "Noildze"
|
||||||
@ -406,7 +406,7 @@
|
|||||||
"visibility": "Projekta redzamība"
|
"visibility": "Projekta redzamība"
|
||||||
},
|
},
|
||||||
"allow_deploy": {
|
"allow_deploy": {
|
||||||
"desc": "Atļaut publicēšanu no veiksmīgiem konvejerdarbiem. Lietot tikai ja Jūs uzticaties visiem lietotājiem ar push permisijām.",
|
"desc": "Atļaut publicēšanu no veiksmīgiem konvejerdarbiem. Lietojiet tikai, ja uzticaties visiem lietotājiem ar iesūtīšanas tiesībām.",
|
||||||
"allow": "Atļaut publicēšanu"
|
"allow": "Atļaut publicēšanu"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -456,10 +456,35 @@
|
|||||||
},
|
},
|
||||||
"settings": "Iestatījumi"
|
"settings": "Iestatījumi"
|
||||||
},
|
},
|
||||||
"user_none": "Šai organizācijai/lietotājam pagaidām nav neviena projekta."
|
"user_none": "Šai organizācijai/lietotājam pagaidām nav neviena projekta.",
|
||||||
|
"visibility": {
|
||||||
|
"visibility": "Projekta redzamība",
|
||||||
|
"public": {
|
||||||
|
"public": "Publisks",
|
||||||
|
"desc": "Jebkurš var redzēt šo projektu bez autentifikācijas."
|
||||||
|
},
|
||||||
|
"private": {
|
||||||
|
"private": "Privāts",
|
||||||
|
"desc": "Tikai repozitorija dalībnieki var redzēt šo projektu."
|
||||||
|
},
|
||||||
|
"internal": {
|
||||||
|
"internal": "Iekšējs",
|
||||||
|
"desc": "Visi autentificētie lietotāji šajā serverī var redzēt šo projektu."
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"repos": "Repozitorijas",
|
"repos": "Repozitorijas",
|
||||||
"repositories": "Repozitoriji",
|
"repositories": {
|
||||||
|
"all": {
|
||||||
|
"desc": "Repozitoriji sakārtoti pēc pēdējā konvejerdarba izveides laika",
|
||||||
|
"title": "Visi repozitoriji"
|
||||||
|
},
|
||||||
|
"title": "Repozitoriji",
|
||||||
|
"last": {
|
||||||
|
"title": "Pēdējo reizi aplūkots",
|
||||||
|
"desc": "Visbiežāk skatītie repozitoriji sakārtoti pēc pēdējā aplūkošanas laika"
|
||||||
|
}
|
||||||
|
},
|
||||||
"running_version": "Tiek izmantota Woodpecker {0}",
|
"running_version": "Tiek izmantota Woodpecker {0}",
|
||||||
"search": "Meklēt…",
|
"search": "Meklēt…",
|
||||||
"time": {
|
"time": {
|
||||||
@ -469,7 +494,8 @@
|
|||||||
"not_started": "nav uzsākts",
|
"not_started": "nav uzsākts",
|
||||||
"sec_short": "sek.",
|
"sec_short": "sek.",
|
||||||
"template": "YYYY. [gada] D. MMMM, HH:mm z",
|
"template": "YYYY. [gada] D. MMMM, HH:mm z",
|
||||||
"weeks_short": "ned."
|
"weeks_short": "ned.",
|
||||||
|
"just_now": "tikko"
|
||||||
},
|
},
|
||||||
"unknown_error": "Notika neparedzēta kļūda",
|
"unknown_error": "Notika neparedzēta kļūda",
|
||||||
"update_woodpecker": "Lūdzu atjauniniet Woodpecker instanci uz {0}",
|
"update_woodpecker": "Lūdzu atjauniniet Woodpecker instanci uz {0}",
|
||||||
|
7
web/src/compositions/useWPTitle.ts
Normal file
7
web/src/compositions/useWPTitle.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import { useTitle } from '@vueuse/core';
|
||||||
|
import type { Ref } from 'vue';
|
||||||
|
import { computed } from 'vue';
|
||||||
|
|
||||||
|
export function useWPTitle(elements: Ref<string[]>) {
|
||||||
|
useTitle(computed(() => `${elements.value.join(' · ')} · Woodpecker`));
|
||||||
|
}
|
@ -38,7 +38,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onMounted, ref } from 'vue';
|
import { computed, onMounted, ref } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { useRoute, useRouter } from 'vue-router';
|
import { useRoute, useRouter } from 'vue-router';
|
||||||
|
|
||||||
@ -47,6 +47,7 @@ import Button from '~/components/atomic/Button.vue';
|
|||||||
import Error from '~/components/atomic/Error.vue';
|
import Error from '~/components/atomic/Error.vue';
|
||||||
import useApiClient from '~/compositions/useApiClient';
|
import useApiClient from '~/compositions/useApiClient';
|
||||||
import useAuthentication from '~/compositions/useAuthentication';
|
import useAuthentication from '~/compositions/useAuthentication';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { Forge } from '~/lib/api/types';
|
import type { Forge } from '~/lib/api/types';
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
@ -97,4 +98,6 @@ onMounted(async () => {
|
|||||||
errorMessage.value = authErrorMessages[error] ?? error;
|
errorMessage.value = authErrorMessages[error] ?? error;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('login')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onMounted, ref } from 'vue';
|
import { computed, onMounted, ref } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
|
|
||||||
@ -46,6 +46,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
|||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
import { useRepoSearch } from '~/compositions/useRepoSearch';
|
import { useRepoSearch } from '~/compositions/useRepoSearch';
|
||||||
import { useRouteBack } from '~/compositions/useRouteBack';
|
import { useRouteBack } from '~/compositions/useRouteBack';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { Repo } from '~/lib/api/types';
|
import type { Repo } from '~/lib/api/types';
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@ -74,4 +75,6 @@ const { doSubmit: activateRepo, isLoading: isActivatingRepo } = useAsyncAction(a
|
|||||||
});
|
});
|
||||||
|
|
||||||
const goBack = useRouteBack({ name: 'repos' });
|
const goBack = useRouteBack({ name: 'repos' });
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('repo.add')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -42,12 +42,14 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, onMounted, ref } from 'vue';
|
import { computed, onMounted, ref } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import Button from '~/components/atomic/Button.vue';
|
import Button from '~/components/atomic/Button.vue';
|
||||||
import Scaffold from '~/components/layout/scaffold/Scaffold.vue';
|
import Scaffold from '~/components/layout/scaffold/Scaffold.vue';
|
||||||
import RepoItem from '~/components/repo/RepoItem.vue';
|
import RepoItem from '~/components/repo/RepoItem.vue';
|
||||||
import useRepos from '~/compositions/useRepos';
|
import useRepos from '~/compositions/useRepos';
|
||||||
import { useRepoSearch } from '~/compositions/useRepoSearch';
|
import { useRepoSearch } from '~/compositions/useRepoSearch';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import { useRepoStore } from '~/store/repos';
|
import { useRepoStore } from '~/store/repos';
|
||||||
|
|
||||||
const repoStore = useRepoStore();
|
const repoStore = useRepoStore();
|
||||||
@ -64,6 +66,9 @@ const reposLastActivity = computed(() => sortReposByLastActivity(searchedRepos.v
|
|||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await repoStore.loadRepos();
|
await repoStore.loadRepos();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(computed(() => [t('repositories.title')]));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
@ -10,8 +10,12 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import AgentManager from '~/components/agent/AgentManager.vue';
|
import AgentManager from '~/components/agent/AgentManager.vue';
|
||||||
import useApiClient from '~/compositions/useApiClient';
|
import useApiClient from '~/compositions/useApiClient';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { Agent } from '~/lib/api/types';
|
import type { Agent } from '~/lib/api/types';
|
||||||
|
|
||||||
const apiClient = useApiClient();
|
const apiClient = useApiClient();
|
||||||
@ -20,4 +24,7 @@ const loadAgents = (page: number) => apiClient.getAgents({ page });
|
|||||||
const createAgent = (agent: Partial<Agent>) => apiClient.createAgent(agent);
|
const createAgent = (agent: Partial<Agent>) => apiClient.createAgent(agent);
|
||||||
const updateAgent = (agent: Agent) => apiClient.updateAgent(agent);
|
const updateAgent = (agent: Agent) => apiClient.updateAgent(agent);
|
||||||
const deleteAgent = (agent: Agent) => apiClient.deleteAgent(agent);
|
const deleteAgent = (agent: Agent) => apiClient.deleteAgent(agent);
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(computed(() => [t('admin.settings.agents.agents'), t('admin.settings.settings')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -28,10 +28,17 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import WoodpeckerLogo from '~/assets/logo.svg?component';
|
import WoodpeckerLogo from '~/assets/logo.svg?component';
|
||||||
import Error from '~/components/atomic/Error.vue';
|
import Error from '~/components/atomic/Error.vue';
|
||||||
import Settings from '~/components/layout/Settings.vue';
|
import Settings from '~/components/layout/Settings.vue';
|
||||||
import { useVersion } from '~/compositions/useVersion';
|
import { useVersion } from '~/compositions/useVersion';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
|
|
||||||
const version = useVersion();
|
const version = useVersion();
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(computed(() => [t('info'), t('admin.settings.settings')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import IconButton from '~/components/atomic/IconButton.vue';
|
import IconButton from '~/components/atomic/IconButton.vue';
|
||||||
@ -43,6 +44,7 @@ import useApiClient from '~/compositions/useApiClient';
|
|||||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { Org } from '~/lib/api/types';
|
import type { Org } from '~/lib/api/types';
|
||||||
|
|
||||||
const apiClient = useApiClient();
|
const apiClient = useApiClient();
|
||||||
@ -65,4 +67,6 @@ const { doSubmit: deleteOrg, isLoading: isDeleting } = useAsyncAction(async (_or
|
|||||||
notifications.notify({ title: t('admin.settings.orgs.deleted'), type: 'success' });
|
notifications.notify({ title: t('admin.settings.orgs.deleted'), type: 'success' });
|
||||||
resetPage();
|
resetPage();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [t('admin.settings.orgs.orgs'), t('admin.settings.settings')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -93,6 +93,7 @@ import ListItem from '~/components/atomic/ListItem.vue';
|
|||||||
import Settings from '~/components/layout/Settings.vue';
|
import Settings from '~/components/layout/Settings.vue';
|
||||||
import useApiClient from '~/compositions/useApiClient';
|
import useApiClient from '~/compositions/useApiClient';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { QueueInfo } from '~/lib/api/types';
|
import type { QueueInfo } from '~/lib/api/types';
|
||||||
|
|
||||||
const apiClient = useApiClient();
|
const apiClient = useApiClient();
|
||||||
@ -159,4 +160,6 @@ onBeforeUnmount(() => {
|
|||||||
window.clearInterval(reloadInterval.value);
|
window.clearInterval(reloadInterval.value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [t('admin.settings.queue.queue'), t('admin.settings.settings')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -50,6 +50,7 @@ import useApiClient from '~/compositions/useApiClient';
|
|||||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { Registry } from '~/lib/api/types';
|
import type { Registry } from '~/lib/api/types';
|
||||||
|
|
||||||
const emptyRegistry: Partial<Registry> = {
|
const emptyRegistry: Partial<Registry> = {
|
||||||
@ -102,4 +103,6 @@ function editRegistry(registry: Registry) {
|
|||||||
function showAddRegistry() {
|
function showAddRegistry() {
|
||||||
selectedRegistry.value = cloneDeep(emptyRegistry);
|
selectedRegistry.value = cloneDeep(emptyRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('registries.registries'), i18n.t('admin.settings.settings')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import Badge from '~/components/atomic/Badge.vue';
|
import Badge from '~/components/atomic/Badge.vue';
|
||||||
@ -54,6 +55,7 @@ import useApiClient from '~/compositions/useApiClient';
|
|||||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { Repo } from '~/lib/api/types';
|
import type { Repo } from '~/lib/api/types';
|
||||||
|
|
||||||
const apiClient = useApiClient();
|
const apiClient = useApiClient();
|
||||||
@ -70,4 +72,6 @@ const { doSubmit: repairRepos, isLoading: isRepairingRepos } = useAsyncAction(as
|
|||||||
await apiClient.repairAllRepos();
|
await apiClient.repairAllRepos();
|
||||||
notifications.notify({ title: i18n.t('admin.settings.repos.repair.success'), type: 'success' });
|
notifications.notify({ title: i18n.t('admin.settings.repos.repair.success'), type: 'success' });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('admin.settings.repos.repos'), i18n.t('admin.settings.settings')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -45,6 +45,7 @@ import useApiClient from '~/compositions/useApiClient';
|
|||||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { Secret } from '~/lib/api/types';
|
import type { Secret } from '~/lib/api/types';
|
||||||
import { WebhookEvents } from '~/lib/api/types';
|
import { WebhookEvents } from '~/lib/api/types';
|
||||||
|
|
||||||
@ -99,4 +100,6 @@ function editSecret(secret: Secret) {
|
|||||||
function showAddSecret() {
|
function showAddSecret() {
|
||||||
selectedSecret.value = cloneDeep(emptySecret);
|
selectedSecret.value = cloneDeep(emptySecret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('secrets.secrets'), i18n.t('admin.settings.settings')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<Scaffold enable-tabs>
|
<Scaffold enable-tabs>
|
||||||
<template #title>
|
<template #title>
|
||||||
{{ $t('settings') }}
|
{{ $t('admin.settings.settings') }}
|
||||||
</template>
|
</template>
|
||||||
<Tab icon="info" :to="{ name: 'admin-settings' }" :title="$t('info')" />
|
<Tab icon="info" :to="{ name: 'admin-settings' }" :title="$t('info')" />
|
||||||
<Tab icon="secret" :to="{ name: 'admin-settings-secrets' }" :title="$t('secrets.secrets')" />
|
<Tab icon="secret" :to="{ name: 'admin-settings-secrets' }" :title="$t('secrets.secrets')" />
|
||||||
|
@ -98,6 +98,7 @@ import useApiClient from '~/compositions/useApiClient';
|
|||||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { User } from '~/lib/api/types';
|
import type { User } from '~/lib/api/types';
|
||||||
|
|
||||||
const apiClient = useApiClient();
|
const apiClient = useApiClient();
|
||||||
@ -153,4 +154,6 @@ function editUser(user: User) {
|
|||||||
function showAddUser() {
|
function showAddUser() {
|
||||||
selectedUser.value = cloneDeep({ login: '' });
|
selectedUser.value = cloneDeep({ login: '' });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [t('admin.settings.users.users'), t('admin.settings.settings')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, onMounted, ref } from 'vue';
|
import { computed, onMounted, ref } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import IconButton from '~/components/atomic/IconButton.vue';
|
import IconButton from '~/components/atomic/IconButton.vue';
|
||||||
import Scaffold from '~/components/layout/scaffold/Scaffold.vue';
|
import Scaffold from '~/components/layout/scaffold/Scaffold.vue';
|
||||||
@ -31,6 +32,7 @@ import RepoItem from '~/components/repo/RepoItem.vue';
|
|||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import useRepos from '~/compositions/useRepos';
|
import useRepos from '~/compositions/useRepos';
|
||||||
import { useRepoSearch } from '~/compositions/useRepoSearch';
|
import { useRepoSearch } from '~/compositions/useRepoSearch';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import { useRepoStore } from '~/store/repos';
|
import { useRepoStore } from '~/store/repos';
|
||||||
|
|
||||||
const repoStore = useRepoStore();
|
const repoStore = useRepoStore();
|
||||||
@ -51,4 +53,7 @@ const reposLastActivity = computed(() => sortReposByLastActivity(searchedRepos.v
|
|||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await repoStore.loadRepos(); // TODO: load only org repos
|
await repoStore.loadRepos(); // TODO: load only org repos
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(computed(() => [t('repositories.title'), org.value.name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -9,9 +9,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import AgentManager from '~/components/agent/AgentManager.vue';
|
import AgentManager from '~/components/agent/AgentManager.vue';
|
||||||
import useApiClient from '~/compositions/useApiClient';
|
import useApiClient from '~/compositions/useApiClient';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { Agent } from '~/lib/api/types';
|
import type { Agent } from '~/lib/api/types';
|
||||||
|
|
||||||
const apiClient = useApiClient();
|
const apiClient = useApiClient();
|
||||||
@ -21,4 +25,7 @@ const loadAgents = (page: number) => apiClient.getOrgAgents(org.value.id, { page
|
|||||||
const createAgent = (agent: Partial<Agent>) => apiClient.createOrgAgent(org.value.id, agent);
|
const createAgent = (agent: Partial<Agent>) => apiClient.createOrgAgent(org.value.id, agent);
|
||||||
const updateAgent = (agent: Agent) => apiClient.updateOrgAgent(org.value.id, agent.id, agent);
|
const updateAgent = (agent: Agent) => apiClient.updateOrgAgent(org.value.id, agent.id, agent);
|
||||||
const deleteAgent = (agent: Agent) => apiClient.deleteOrgAgent(org.value.id, agent.id);
|
const deleteAgent = (agent: Agent) => apiClient.deleteOrgAgent(org.value.id, agent.id);
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(computed(() => [t('admin.settings.agents.agents'), org.value.name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -46,6 +46,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
|||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { Registry } from '~/lib/api/types';
|
import type { Registry } from '~/lib/api/types';
|
||||||
|
|
||||||
const emptyRegistry: Partial<Registry> = {
|
const emptyRegistry: Partial<Registry> = {
|
||||||
@ -99,4 +100,6 @@ function editRegistry(registry: Registry) {
|
|||||||
function showAddRegistry() {
|
function showAddRegistry() {
|
||||||
selectedRegistry.value = cloneDeep(emptyRegistry);
|
selectedRegistry.value = cloneDeep(emptyRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('registries.registries'), org.value.name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -37,6 +37,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
|||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import { WebhookEvents } from '~/lib/api/types';
|
import { WebhookEvents } from '~/lib/api/types';
|
||||||
import type { Secret } from '~/lib/api/types';
|
import type { Secret } from '~/lib/api/types';
|
||||||
|
|
||||||
@ -92,4 +93,6 @@ function editSecret(secret: Secret) {
|
|||||||
function showAddSecret() {
|
function showAddSecret() {
|
||||||
selectedSecret.value = cloneDeep(emptySecret);
|
selectedSecret.value = cloneDeep(emptySecret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('secrets.secrets'), org.value.name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -7,9 +7,11 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, toRef } from 'vue';
|
import { computed, toRef } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import PipelineList from '~/components/repo/pipeline/PipelineList.vue';
|
import PipelineList from '~/components/repo/pipeline/PipelineList.vue';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
branch: string;
|
branch: string;
|
||||||
@ -24,4 +26,7 @@ const pipelines = computed(() =>
|
|||||||
(b) => b.branch === branch.value && b.event !== 'pull_request' && b.event !== 'pull_request_closed',
|
(b) => b.branch === branch.value && b.event !== 'pull_request' && b.event !== 'pull_request_closed',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(computed(() => [t('repo.activity'), branch.value, repo.value.full_name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, watch } from 'vue';
|
import { computed, watch } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import Badge from '~/components/atomic/Badge.vue';
|
import Badge from '~/components/atomic/Badge.vue';
|
||||||
import Icon from '~/components/atomic/Icon.vue';
|
import Icon from '~/components/atomic/Icon.vue';
|
||||||
@ -30,6 +31,7 @@ import Panel from '~/components/layout/Panel.vue';
|
|||||||
import useApiClient from '~/compositions/useApiClient';
|
import useApiClient from '~/compositions/useApiClient';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
|
|
||||||
const apiClient = useApiClient();
|
const apiClient = useApiClient();
|
||||||
|
|
||||||
@ -56,4 +58,7 @@ const branchesWithDefaultBranchFirst = computed(() =>
|
|||||||
);
|
);
|
||||||
|
|
||||||
watch(repo, resetPage);
|
watch(repo, resetPage);
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(computed(() => [t('repo.branches'), repo.value.full_name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -39,6 +39,7 @@ import Panel from '~/components/layout/Panel.vue';
|
|||||||
import useApiClient from '~/compositions/useApiClient';
|
import useApiClient from '~/compositions/useApiClient';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import { usePaginate } from '~/compositions/usePaginate';
|
import { usePaginate } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
||||||
open: boolean;
|
open: boolean;
|
||||||
@ -103,4 +104,6 @@ async function triggerManualPipeline() {
|
|||||||
|
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('repo.manual_pipeline.trigger'), repo.value.full_name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -3,9 +3,16 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import PipelineList from '~/components/repo/pipeline/PipelineList.vue';
|
import PipelineList from '~/components/repo/pipeline/PipelineList.vue';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
|
|
||||||
const repo = requiredInject('repo');
|
const repo = requiredInject('repo');
|
||||||
const pipelines = requiredInject('pipelines');
|
const pipelines = requiredInject('pipelines');
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(computed(() => [t('repo.activity'), repo.value.full_name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -7,9 +7,11 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, toRef } from 'vue';
|
import { computed, toRef } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import PipelineList from '~/components/repo/pipeline/PipelineList.vue';
|
import PipelineList from '~/components/repo/pipeline/PipelineList.vue';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
pullRequest: string;
|
pullRequest: string;
|
||||||
@ -34,4 +36,7 @@ const pipelines = computed(() =>
|
|||||||
.replaceAll('/head', '') === pullRequest.value,
|
.replaceAll('/head', '') === pullRequest.value,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(computed(() => [t('repo.activity'), pullRequest.value, repo.value.full_name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -26,7 +26,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { watch } from 'vue';
|
import { computed, watch } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import Icon from '~/components/atomic/Icon.vue';
|
import Icon from '~/components/atomic/Icon.vue';
|
||||||
import ListItem from '~/components/atomic/ListItem.vue';
|
import ListItem from '~/components/atomic/ListItem.vue';
|
||||||
@ -34,6 +35,7 @@ import Panel from '~/components/layout/Panel.vue';
|
|||||||
import useApiClient from '~/compositions/useApiClient';
|
import useApiClient from '~/compositions/useApiClient';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { PullRequest } from '~/lib/api/types';
|
import type { PullRequest } from '~/lib/api/types';
|
||||||
|
|
||||||
const apiClient = useApiClient();
|
const apiClient = useApiClient();
|
||||||
@ -50,4 +52,7 @@ async function loadPullRequests(page: number): Promise<PullRequest[]> {
|
|||||||
const { resetPage, data: pullRequests, loading } = usePagination(loadPullRequests);
|
const { resetPage, data: pullRequests, loading } = usePagination(loadPullRequests);
|
||||||
|
|
||||||
watch(repo, resetPage);
|
watch(repo, resetPage);
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(computed(() => [t('repo.pull_requests'), repo.value.full_name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -76,6 +76,7 @@ import useApiClient from '~/compositions/useApiClient';
|
|||||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { PipelineStep } from '~/lib/api/types';
|
import type { PipelineStep } from '~/lib/api/types';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
@ -144,4 +145,12 @@ const { doSubmit: declinePipeline, isLoading: isDecliningPipeline } = useAsyncAc
|
|||||||
await apiClient.declinePipeline(repo.value.id, `${pipeline.value.number}`);
|
await apiClient.declinePipeline(repo.value.id, `${pipeline.value.number}`);
|
||||||
notifications.notify({ title: i18n.t('repo.pipeline.protected.decline_success'), type: 'success' });
|
notifications.notify({ title: i18n.t('repo.pipeline.protected.decline_success'), type: 'success' });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
useWPTitle(
|
||||||
|
computed(() => [
|
||||||
|
i18n.t('repo.pipeline.tasks'),
|
||||||
|
i18n.t('repo.pipeline.pipeline', { pipelineId: pipeline.value.id }),
|
||||||
|
repo.value.full_name,
|
||||||
|
]),
|
||||||
|
);
|
||||||
</script>
|
</script>
|
||||||
|
@ -7,8 +7,22 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import Panel from '~/components/layout/Panel.vue';
|
import Panel from '~/components/layout/Panel.vue';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
|
|
||||||
|
const repo = requiredInject('repo');
|
||||||
const pipeline = requiredInject('pipeline');
|
const pipeline = requiredInject('pipeline');
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(
|
||||||
|
computed(() => [
|
||||||
|
t('repo.pipeline.files'),
|
||||||
|
t('repo.pipeline.pipeline', { pipelineId: pipeline.value.id }),
|
||||||
|
repo.value.full_name,
|
||||||
|
]),
|
||||||
|
);
|
||||||
</script>
|
</script>
|
||||||
|
@ -15,11 +15,15 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { decode } from 'js-base64';
|
import { decode } from 'js-base64';
|
||||||
import { computed } from 'vue';
|
import { computed } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import SyntaxHighlight from '~/components/atomic/SyntaxHighlight';
|
import SyntaxHighlight from '~/components/atomic/SyntaxHighlight';
|
||||||
import Panel from '~/components/layout/Panel.vue';
|
import Panel from '~/components/layout/Panel.vue';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
|
|
||||||
|
const repo = requiredInject('repo');
|
||||||
|
const pipeline = requiredInject('pipeline');
|
||||||
const pipelineConfigs = requiredInject('pipeline-configs');
|
const pipelineConfigs = requiredInject('pipeline-configs');
|
||||||
|
|
||||||
const pipelineConfigsDecoded = computed(
|
const pipelineConfigsDecoded = computed(
|
||||||
@ -29,4 +33,13 @@ const pipelineConfigsDecoded = computed(
|
|||||||
data: decode(i.data),
|
data: decode(i.data),
|
||||||
})) ?? [],
|
})) ?? [],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(
|
||||||
|
computed(() => [
|
||||||
|
t('repo.pipeline.config'),
|
||||||
|
t('repo.pipeline.pipeline', { pipelineId: pipeline.value.id }),
|
||||||
|
repo.value.full_name,
|
||||||
|
]),
|
||||||
|
);
|
||||||
</script>
|
</script>
|
||||||
|
@ -27,6 +27,7 @@ import Panel from '~/components/layout/Panel.vue';
|
|||||||
import useApiClient from '~/compositions/useApiClient';
|
import useApiClient from '~/compositions/useApiClient';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const apiClient = useApiClient();
|
const apiClient = useApiClient();
|
||||||
@ -74,4 +75,12 @@ async function downloadMetadata() {
|
|||||||
isLoading.value = false;
|
isLoading.value = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useWPTitle(
|
||||||
|
computed(() => [
|
||||||
|
t('repo.pipeline.debug.title'),
|
||||||
|
t('repo.pipeline.pipeline', { pipelineId: pipeline.value.id }),
|
||||||
|
repo.value.full_name,
|
||||||
|
]),
|
||||||
|
);
|
||||||
</script>
|
</script>
|
||||||
|
@ -48,13 +48,18 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import DocsLink from '~/components/atomic/DocsLink.vue';
|
import DocsLink from '~/components/atomic/DocsLink.vue';
|
||||||
import Icon from '~/components/atomic/Icon.vue';
|
import Icon from '~/components/atomic/Icon.vue';
|
||||||
import RenderMarkdown from '~/components/atomic/RenderMarkdown.vue';
|
import RenderMarkdown from '~/components/atomic/RenderMarkdown.vue';
|
||||||
import Panel from '~/components/layout/Panel.vue';
|
import Panel from '~/components/layout/Panel.vue';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { PipelineError } from '~/lib/api/types';
|
import type { PipelineError } from '~/lib/api/types';
|
||||||
|
|
||||||
|
const repo = requiredInject('repo');
|
||||||
const pipeline = requiredInject('pipeline');
|
const pipeline = requiredInject('pipeline');
|
||||||
|
|
||||||
function isLinterError(error: PipelineError): error is PipelineError<{ file?: string; field: string }> {
|
function isLinterError(error: PipelineError): error is PipelineError<{ file?: string; field: string }> {
|
||||||
@ -70,4 +75,13 @@ function isDeprecationError(
|
|||||||
function isBadHabitError(error: PipelineError): error is PipelineError<{ file?: string; field: string; docs: string }> {
|
function isBadHabitError(error: PipelineError): error is PipelineError<{ file?: string; field: string; docs: string }> {
|
||||||
return error.type === 'bad_habit';
|
return error.type === 'bad_habit';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(
|
||||||
|
computed(() => [
|
||||||
|
pipeline.value.errors?.some((e) => !e.is_warning) ? t('repo.pipeline.errors') : t('repo.pipeline.warnings'),
|
||||||
|
t('repo.pipeline.pipeline', { pipelineId: pipeline.value.id }),
|
||||||
|
repo.value.full_name,
|
||||||
|
]),
|
||||||
|
);
|
||||||
</script>
|
</script>
|
||||||
|
@ -52,6 +52,7 @@ import useApiClient from '~/compositions/useApiClient';
|
|||||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
|
|
||||||
const apiClient = useApiClient();
|
const apiClient = useApiClient();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@ -89,4 +90,6 @@ const { doSubmit: deactivateRepo, isLoading: isDeactivatingRepo } = useAsyncActi
|
|||||||
});
|
});
|
||||||
|
|
||||||
const isActive = computed(() => repo?.value.active);
|
const isActive = computed(() => repo?.value.active);
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('repo.settings.actions.actions'), repo.value.full_name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -42,6 +42,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { useStorage } from '@vueuse/core';
|
import { useStorage } from '@vueuse/core';
|
||||||
import { computed, onMounted, ref, watch } from 'vue';
|
import { computed, onMounted, ref, watch } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import type { SelectOption } from '~/components/form/form.types';
|
import type { SelectOption } from '~/components/form/form.types';
|
||||||
import InputField from '~/components/form/InputField.vue';
|
import InputField from '~/components/form/InputField.vue';
|
||||||
@ -51,6 +52,7 @@ import useApiClient from '~/compositions/useApiClient';
|
|||||||
import useConfig from '~/compositions/useConfig';
|
import useConfig from '~/compositions/useConfig';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import { usePaginate } from '~/compositions/usePaginate';
|
import { usePaginate } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
|
|
||||||
const apiClient = useApiClient();
|
const apiClient = useApiClient();
|
||||||
const repo = requiredInject('repo');
|
const repo = requiredInject('repo');
|
||||||
@ -109,4 +111,7 @@ onMounted(() => {
|
|||||||
watch(repo, () => {
|
watch(repo, () => {
|
||||||
loadBranches();
|
loadBranches();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(computed(() => [t('repo.settings.badge.badge'), repo.value.full_name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -120,6 +120,7 @@ import { useDate } from '~/compositions/useDate';
|
|||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { Cron } from '~/lib/api/types';
|
import type { Cron } from '~/lib/api/types';
|
||||||
import router from '~/router';
|
import router from '~/router';
|
||||||
|
|
||||||
@ -171,4 +172,6 @@ const { doSubmit: runCron } = useAsyncAction(async (_cron: Cron) => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('repo.settings.crons.crons'), repo.value.full_name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -171,7 +171,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onMounted, ref } from 'vue';
|
import { computed, onMounted, ref } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import Button from '~/components/atomic/Button.vue';
|
import Button from '~/components/atomic/Button.vue';
|
||||||
@ -188,6 +188,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
|||||||
import useAuthentication from '~/compositions/useAuthentication';
|
import useAuthentication from '~/compositions/useAuthentication';
|
||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import { RepoRequireApproval, RepoVisibility, WebhookEvents } from '~/lib/api/types';
|
import { RepoRequireApproval, RepoVisibility, WebhookEvents } from '~/lib/api/types';
|
||||||
import type { RepoSettings } from '~/lib/api/types';
|
import type { RepoSettings } from '~/lib/api/types';
|
||||||
import { useRepoStore } from '~/store/repos';
|
import { useRepoStore } from '~/store/repos';
|
||||||
@ -294,4 +295,6 @@ function removeUser(user: string) {
|
|||||||
|
|
||||||
repoSettings.value.approval_allowed_users = repoSettings.value.approval_allowed_users.filter((i) => i !== user);
|
repoSettings.value.approval_allowed_users = repoSettings.value.approval_allowed_users.filter((i) => i !== user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('repo.settings.general.project'), repo.value.full_name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -42,6 +42,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
|||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { Registry } from '~/lib/api/types';
|
import type { Registry } from '~/lib/api/types';
|
||||||
|
|
||||||
const emptyRegistry: Partial<Registry> = {
|
const emptyRegistry: Partial<Registry> = {
|
||||||
@ -96,4 +97,6 @@ function editRegistry(registry: Registry) {
|
|||||||
function showAddRegistry() {
|
function showAddRegistry() {
|
||||||
selectedRegistry.value = cloneDeep(emptyRegistry);
|
selectedRegistry.value = cloneDeep(emptyRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('registries.registries'), repo.value.full_name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -37,6 +37,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
|||||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import { WebhookEvents } from '~/lib/api/types';
|
import { WebhookEvents } from '~/lib/api/types';
|
||||||
import type { Secret } from '~/lib/api/types';
|
import type { Secret } from '~/lib/api/types';
|
||||||
|
|
||||||
@ -129,4 +130,6 @@ function editSecret(secret: Secret) {
|
|||||||
function showAddSecret() {
|
function showAddSecret() {
|
||||||
selectedSecret.value = cloneDeep(emptySecret);
|
selectedSecret.value = cloneDeep(emptySecret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('secrets.secrets'), repo.value.full_name]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -9,9 +9,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import AgentManager from '~/components/agent/AgentManager.vue';
|
import AgentManager from '~/components/agent/AgentManager.vue';
|
||||||
import useApiClient from '~/compositions/useApiClient';
|
import useApiClient from '~/compositions/useApiClient';
|
||||||
import useAuthentication from '~/compositions/useAuthentication';
|
import useAuthentication from '~/compositions/useAuthentication';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { Agent } from '~/lib/api/types';
|
import type { Agent } from '~/lib/api/types';
|
||||||
|
|
||||||
const apiClient = useApiClient();
|
const apiClient = useApiClient();
|
||||||
@ -25,4 +29,7 @@ const loadAgents = (page: number) => apiClient.getOrgAgents(user.org_id, { page
|
|||||||
const createAgent = (agent: Partial<Agent>) => apiClient.createOrgAgent(user.org_id, agent);
|
const createAgent = (agent: Partial<Agent>) => apiClient.createOrgAgent(user.org_id, agent);
|
||||||
const updateAgent = (agent: Agent) => apiClient.updateOrgAgent(user.org_id, agent.id, agent);
|
const updateAgent = (agent: Agent) => apiClient.updateOrgAgent(user.org_id, agent.id, agent);
|
||||||
const deleteAgent = (agent: Agent) => apiClient.deleteOrgAgent(user.org_id, agent.id);
|
const deleteAgent = (agent: Agent) => apiClient.deleteOrgAgent(user.org_id, agent.id);
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(computed(() => [t('admin.settings.agents.agents'), t('user.settings.settings')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -34,12 +34,14 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, onMounted, ref } from 'vue';
|
import { computed, onMounted, ref } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import Button from '~/components/atomic/Button.vue';
|
import Button from '~/components/atomic/Button.vue';
|
||||||
import InputField from '~/components/form/InputField.vue';
|
import InputField from '~/components/form/InputField.vue';
|
||||||
import Settings from '~/components/layout/Settings.vue';
|
import Settings from '~/components/layout/Settings.vue';
|
||||||
import useApiClient from '~/compositions/useApiClient';
|
import useApiClient from '~/compositions/useApiClient';
|
||||||
import useConfig from '~/compositions/useConfig';
|
import useConfig from '~/compositions/useConfig';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
|
|
||||||
const { rootPath, enableSwagger } = useConfig();
|
const { rootPath, enableSwagger } = useConfig();
|
||||||
|
|
||||||
@ -68,4 +70,7 @@ const resetToken = async () => {
|
|||||||
token.value = await apiClient.resetToken();
|
token.value = await apiClient.resetToken();
|
||||||
window.location.href = `${address}/logout`;
|
window.location.href = `${address}/logout`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
useWPTitle(computed(() => [t('user.settings.cli_and_api.cli_and_api'), t('user.settings.settings')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -28,8 +28,9 @@ import SelectField from '~/components/form/SelectField.vue';
|
|||||||
import Settings from '~/components/layout/Settings.vue';
|
import Settings from '~/components/layout/Settings.vue';
|
||||||
import { setI18nLanguage } from '~/compositions/useI18n';
|
import { setI18nLanguage } from '~/compositions/useI18n';
|
||||||
import { useTheme } from '~/compositions/useTheme';
|
import { useTheme } from '~/compositions/useTheme';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
|
|
||||||
const { locale } = useI18n();
|
const { locale, t } = useI18n();
|
||||||
const { storeTheme } = useTheme();
|
const { storeTheme } = useTheme();
|
||||||
|
|
||||||
const localeOptions = computed(() =>
|
const localeOptions = computed(() =>
|
||||||
@ -49,4 +50,6 @@ const selectedLocale = computed<string>({
|
|||||||
return storedLocale.value;
|
return storedLocale.value;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [t('user.settings.general.general'), t('user.settings.settings')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -46,6 +46,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
|||||||
import useAuthentication from '~/compositions/useAuthentication';
|
import useAuthentication from '~/compositions/useAuthentication';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import type { Registry } from '~/lib/api/types';
|
import type { Registry } from '~/lib/api/types';
|
||||||
|
|
||||||
const emptyRegistry: Partial<Registry> = {
|
const emptyRegistry: Partial<Registry> = {
|
||||||
@ -106,4 +107,6 @@ function editRegistry(registry: Registry) {
|
|||||||
function showAddRegistry() {
|
function showAddRegistry() {
|
||||||
selectedRegistry.value = cloneDeep(emptyRegistry);
|
selectedRegistry.value = cloneDeep(emptyRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('registries.registries'), i18n.t('user.settings.settings')]));
|
||||||
</script>
|
</script>
|
||||||
|
@ -41,6 +41,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
|||||||
import useAuthentication from '~/compositions/useAuthentication';
|
import useAuthentication from '~/compositions/useAuthentication';
|
||||||
import useNotifications from '~/compositions/useNotifications';
|
import useNotifications from '~/compositions/useNotifications';
|
||||||
import { usePagination } from '~/compositions/usePaginate';
|
import { usePagination } from '~/compositions/usePaginate';
|
||||||
|
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||||
import { WebhookEvents } from '~/lib/api/types';
|
import { WebhookEvents } from '~/lib/api/types';
|
||||||
import type { Secret } from '~/lib/api/types';
|
import type { Secret } from '~/lib/api/types';
|
||||||
|
|
||||||
@ -103,4 +104,6 @@ function editSecret(secret: Secret) {
|
|||||||
function showAddSecret() {
|
function showAddSecret() {
|
||||||
selectedSecret.value = cloneDeep(emptySecret);
|
selectedSecret.value = cloneDeep(emptySecret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useWPTitle(computed(() => [i18n.t('secrets.secrets'), i18n.t('user.settings.settings')]));
|
||||||
</script>
|
</script>
|
||||||
|
Loading…
Reference in New Issue
Block a user