Lauris BH 2023-01-30 22:53:59 +02:00 committed by GitHub
parent 71d6c03ca7
commit 420ac54e62
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 56 additions and 17 deletions

3
web/components.d.ts vendored
View file

@ -11,6 +11,7 @@ declare module '@vue/runtime-core' {
ActivePipelines: typeof import('./src/components/layout/header/ActivePipelines.vue')['default'] ActivePipelines: typeof import('./src/components/layout/header/ActivePipelines.vue')['default']
AdminAgentsTab: typeof import('./src/components/admin/settings/AdminAgentsTab.vue')['default'] AdminAgentsTab: typeof import('./src/components/admin/settings/AdminAgentsTab.vue')['default']
AdminSecretsTab: typeof import('./src/components/admin/settings/AdminSecretsTab.vue')['default'] AdminSecretsTab: typeof import('./src/components/admin/settings/AdminSecretsTab.vue')['default']
Badge: typeof import('./src/components/atomic/Badge.vue')['default']
BadgeTab: typeof import('./src/components/repo/settings/BadgeTab.vue')['default'] BadgeTab: typeof import('./src/components/repo/settings/BadgeTab.vue')['default']
Button: typeof import('./src/components/atomic/Button.vue')['default'] Button: typeof import('./src/components/atomic/Button.vue')['default']
Checkbox: typeof import('./src/components/form/Checkbox.vue')['default'] Checkbox: typeof import('./src/components/form/Checkbox.vue')['default']
@ -55,10 +56,10 @@ declare module '@vue/runtime-core' {
IMdiGestureTap: typeof import('~icons/mdi/gesture-tap')['default'] IMdiGestureTap: typeof import('~icons/mdi/gesture-tap')['default']
IMdiGithub: typeof import('~icons/mdi/github')['default'] IMdiGithub: typeof import('~icons/mdi/github')['default']
IMdiLoading: typeof import('~icons/mdi/loading')['default'] IMdiLoading: typeof import('~icons/mdi/loading')['default']
IMdiSync: typeof import('~icons/mdi/sync')['default']
IMdiSourceBranch: typeof import('~icons/mdi/source-branch')['default'] IMdiSourceBranch: typeof import('~icons/mdi/source-branch')['default']
IMdisourceCommit: typeof import('~icons/mdi/source-commit')['default'] IMdisourceCommit: typeof import('~icons/mdi/source-commit')['default']
IMdiSourcePull: typeof import('~icons/mdi/source-pull')['default'] IMdiSourcePull: typeof import('~icons/mdi/source-pull')['default']
IMdiSync: typeof import('~icons/mdi/sync')['default']
IMdiTagOutline: typeof import('~icons/mdi/tag-outline')['default'] IMdiTagOutline: typeof import('~icons/mdi/tag-outline')['default']
InputField: typeof import('./src/components/form/InputField.vue')['default'] InputField: typeof import('./src/components/form/InputField.vue')['default']
IPhGitlabLogoSimpleFill: typeof import('~icons/ph/gitlab-logo-simple-fill')['default'] IPhGitlabLogoSimpleFill: typeof import('~icons/ph/gitlab-logo-simple-fill')['default']

View file

@ -341,9 +341,18 @@
"placeholder": "Stop agent from taking new tasks" "placeholder": "Stop agent from taking new tasks"
}, },
"token": "Token", "token": "Token",
"platform": "Platform", "platform": {
"backend": "Backend", "platform": "Platform",
"capacity": "Capacity", "badge": "platform"
},
"backend": {
"backend": "Backend",
"badge": "backend"
},
"capacity": {
"capacity": "Capacity",
"badge": "capacity"
},
"version": "Version", "version": "Version",
"last_contact": "Last contact", "last_contact": "Last contact",
"never": "Never", "never": "Never",

View file

@ -21,7 +21,14 @@
<div v-if="!selectedAgent" class="space-y-4 text-color"> <div v-if="!selectedAgent" class="space-y-4 text-color">
<ListItem v-for="agent in agents" :key="agent.id" class="items-center"> <ListItem v-for="agent in agents" :key="agent.id" class="items-center">
<span>{{ agent.name || `Agent ${agent.id}` }}</span> <span>{{ agent.name || `Agent ${agent.id}` }}</span>
<span class="ml-auto">{{ agent.last_contact ? timeAgo.format(agent.last_contact * 1000) : 'never' }}</span> <span class="ml-auto">
<span class="hidden md:inline-block space-x-2">
<Badge :label="$t('admin.settings.agents.platform.badge')" :value="agent.platform" />
<Badge :label="$t('admin.settings.agents.backend.badge')" :value="agent.backend" />
<Badge :label="$t('admin.settings.agents.capacity.badge')" :value="agent.capacity" />
</span>
<span class="ml-2">{{ agent.last_contact ? timeAgo.format(agent.last_contact * 1000) : 'never' }}</span>
</span>
<IconButton icon="edit" class="ml-2 w-8 h-8" @click="editAgent(agent)" /> <IconButton icon="edit" class="ml-2 w-8 h-8" @click="editAgent(agent)" />
<IconButton <IconButton
icon="trash" icon="trash"
@ -56,16 +63,19 @@
<TextField v-model="selectedAgent.token" :placeholder="$t('admin.settings.agents.token')" disabled /> <TextField v-model="selectedAgent.token" :placeholder="$t('admin.settings.agents.token')" disabled />
</InputField> </InputField>
<InputField :label="$t('admin.settings.agents.backend')" docs-url="docs/next/administration/backends/docker"> <InputField
:label="$t('admin.settings.agents.backend.backend')"
docs-url="docs/next/administration/backends/docker"
>
<TextField v-model="selectedAgent.backend" disabled /> <TextField v-model="selectedAgent.backend" disabled />
</InputField> </InputField>
<InputField :label="$t('admin.settings.agents.platform')"> <InputField :label="$t('admin.settings.agents.platform.platform')">
<TextField v-model="selectedAgent.platform" disabled /> <TextField v-model="selectedAgent.platform" disabled />
</InputField> </InputField>
<InputField <InputField
:label="$t('admin.settings.agents.capacity')" :label="$t('admin.settings.agents.capacity.capacity')"
docs-url="docs/next/administration/agent-config#woodpecker_max_procs" docs-url="docs/next/administration/agent-config#woodpecker_max_procs"
> >
<span class="text-color-alt">The max amount of parallel pipelines executed by this agent.</span> <span class="text-color-alt">The max amount of parallel pipelines executed by this agent.</span>
@ -103,6 +113,7 @@ import { cloneDeep } from 'lodash';
import { computed, onMounted, ref } from 'vue'; import { computed, onMounted, ref } from 'vue';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import Badge from '~/components/atomic/Badge.vue';
import Button from '~/components/atomic/Button.vue'; import Button from '~/components/atomic/Button.vue';
import ListItem from '~/components/atomic/ListItem.vue'; import ListItem from '~/components/atomic/ListItem.vue';
import Checkbox from '~/components/form/Checkbox.vue'; import Checkbox from '~/components/form/Checkbox.vue';

View file

@ -0,0 +1,24 @@
<template>
<span class="text-xs font-medium inline-flex">
<span
class="pl-2 pr-1 py-0.5 bg-gray-800 text-gray-200 dark:bg-gray-600 border-2 border-gray-800 dark:border-gray-600 rounded-l-full"
>
{{ label }}
</span>
<span class="pl-1 pr-2 py-0.5 border-2 border-gray-800 dark:border-gray-600 rounded-r-full">
{{ value }}
</span>
</span>
</template>
<script lang="ts" setup>
import { toRef } from 'vue';
const props = defineProps<{
label: string;
value: string | number;
}>();
const label = toRef(props, 'label');
const value = toRef(props, 'value');
</script>

View file

@ -50,16 +50,9 @@
class="p-2 md:rounded-md bg-white shadow dark:border-b-dark-gray-600 dark:bg-dark-gray-700" class="p-2 md:rounded-md bg-white shadow dark:border-b-dark-gray-600 dark:bg-dark-gray-700"
> >
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<div v-if="workflow.environ" class="flex flex-wrap gap-x-1 gap-y-2 text-xs justify-end pt-1"> <div v-if="workflow.environ" class="flex flex-wrap gap-x-1 gap-y-2 text-xs justify-end pt-1 pr-1">
<div v-for="(value, key) in workflow.environ" :key="key"> <div v-for="(value, key) in workflow.environ" :key="key">
<span <Badge :label="key" :value="value" />
class="pl-2 pr-1 py-0.5 bg-gray-800 text-gray-200 dark:bg-gray-600 border-2 border-gray-800 dark:border-gray-600 rounded-l-full"
>
{{ key }}
</span>
<span class="pl-1 pr-2 py-0.5 border-2 border-gray-800 dark:border-gray-600 rounded-r-full">
{{ value }}
</span>
</div> </div>
</div> </div>
<button <button
@ -114,6 +107,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { ref, toRef } from 'vue'; import { ref, toRef } from 'vue';
import Badge from '~/components/atomic/Badge.vue';
import Icon from '~/components/atomic/Icon.vue'; import Icon from '~/components/atomic/Icon.vue';
import PipelineStatusIcon from '~/components/repo/pipeline/PipelineStatusIcon.vue'; import PipelineStatusIcon from '~/components/repo/pipeline/PipelineStatusIcon.vue';
import PipelineStepDuration from '~/components/repo/pipeline/PipelineStepDuration.vue'; import PipelineStepDuration from '~/components/repo/pipeline/PipelineStepDuration.vue';