diff --git a/.woodpecker/docker.yaml b/.woodpecker/docker.yaml index 578e8bc11..d7807c14c 100644 --- a/.woodpecker/docker.yaml +++ b/.woodpecker/docker.yaml @@ -3,7 +3,7 @@ variables: - &node_image 'docker.io/node:21-alpine' - &xgo_image 'docker.io/techknowlogick/xgo:go-1.22.1' - &xgo_version 'go-1.21.2' - - &buildx_plugin 'docker.io/woodpeckerci/plugin-docker-buildx:3.1.0' + - &buildx_plugin 'docker.io/woodpeckerci/plugin-docker-buildx:3.2.0' - &platforms_release 'linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/386,linux/amd64,linux/ppc64le,linux/riscv64,linux/s390x,freebsd/arm64,freebsd/amd64,openbsd/arm64,openbsd/amd64' - &platforms_server 'linux/arm/v7,linux/arm64/v8,linux/amd64,linux/ppc64le,linux/riscv64' - &platforms_preview 'linux/amd64' diff --git a/docs/docs/10-intro.md b/docs/docs/10-intro.md index 276dcb000..2d7f70950 100644 --- a/docs/docs/10-intro.md +++ b/docs/docs/10-intro.md @@ -81,7 +81,7 @@ steps: template: config/k8s/service.yaml ``` -See [plugin docs](./20-usage/51-plugins/10-overview.md). +See [plugin docs](./20-usage/51-plugins/51-overview.md). ## Continue reading diff --git a/docs/docs/20-usage/15-terminiology/architecture.excalidraw b/docs/docs/20-usage/15-terminology/architecture.excalidraw similarity index 100% rename from docs/docs/20-usage/15-terminiology/architecture.excalidraw rename to docs/docs/20-usage/15-terminology/architecture.excalidraw diff --git a/docs/docs/20-usage/15-terminiology/architecture.svg b/docs/docs/20-usage/15-terminology/architecture.svg similarity index 100% rename from docs/docs/20-usage/15-terminiology/architecture.svg rename to docs/docs/20-usage/15-terminology/architecture.svg diff --git a/docs/docs/20-usage/15-terminiology/index.md b/docs/docs/20-usage/15-terminology/index.md similarity index 96% rename from docs/docs/20-usage/15-terminiology/index.md rename to docs/docs/20-usage/15-terminology/index.md index 3d8f12772..d2bc5bdc0 100644 --- a/docs/docs/20-usage/15-terminiology/index.md +++ b/docs/docs/20-usage/15-terminology/index.md @@ -31,7 +31,7 @@ - **YAML File**: A file format used to define and configure [workflows][Workflow]. - **Dependency**: [Workflows][Workflow] can depend on each other, and if possible, they are executed in parallel. - **Status**: Status refers to the outcome of a step or [workflow][Workflow] after it has been executed, determined by the internal command exit code. At the end of a [workflow][Workflow], its status is sent to the [forge][Forge]. -- **Service extension**: Some parts of woodpecker internal services like secrets storage or config fetcher can be replaced through service extensions. +- **Service extension**: Some parts of Woodpecker internal services like secrets storage or config fetcher can be replaced through service extensions. ## Pipeline events @@ -55,8 +55,8 @@ Sometimes there are multiple terms that can be used to describe something. This [Pipeline]: ../20-workflow-syntax.md [Workflow]: ../25-workflows.md -[Forge]: ../../30-administration/11-forges/10-overview.md -[Plugin]: ../51-plugins/10-overview.md +[Forge]: ../../30-administration/11-forges/11-overview.md +[Plugin]: ../51-plugins/51-overview.md [Workspace]: ../20-workflow-syntax.md#workspace [Matrix]: ../30-matrix-workflows.md [Docker]: ../../30-administration/22-backends/10-docker.md diff --git a/docs/docs/20-usage/15-terminiology/pipeline-workflow-step.excalidraw b/docs/docs/20-usage/15-terminology/pipeline-workflow-step.excalidraw similarity index 100% rename from docs/docs/20-usage/15-terminiology/pipeline-workflow-step.excalidraw rename to docs/docs/20-usage/15-terminology/pipeline-workflow-step.excalidraw diff --git a/docs/docs/20-usage/15-terminiology/pipeline-workflow-step.svg b/docs/docs/20-usage/15-terminology/pipeline-workflow-step.svg similarity index 100% rename from docs/docs/20-usage/15-terminiology/pipeline-workflow-step.svg rename to docs/docs/20-usage/15-terminology/pipeline-workflow-step.svg diff --git a/docs/docs/20-usage/20-workflow-syntax.md b/docs/docs/20-usage/20-workflow-syntax.md index b9aad7826..4e7759209 100644 --- a/docs/docs/20-usage/20-workflow-syntax.md +++ b/docs/docs/20-usage/20-workflow-syntax.md @@ -188,7 +188,8 @@ Some of the steps may be allowed to fail without causing the whole workflow and ### `when` - Conditional Execution -Woodpecker supports defining a list of conditions for a step by using a `when` block. If at least one of the conditions in the `when` block evaluate to true the step is executed, otherwise it is skipped. A condition can be a check like: +Woodpecker supports defining a list of conditions for a step by using a `when` block. If at least one of the conditions in the `when` block evaluate to true the step is executed, otherwise it is skipped. A condition is evaluated to true if _all_ subconditions are true. +A condition can be a check like: ```diff steps: @@ -203,6 +204,11 @@ Woodpecker supports defining a list of conditions for a step by using a `when` b + branch: main ``` +The `slack` step is executed if one of these conditions is met: + +1. The pipeline is executed from a pull request in the repo `test/test` +2. The pipeline is executed from a push to `maiǹ` + #### `repo` Example conditional execution by repository: @@ -652,7 +658,7 @@ Example configuration to use a custom clone plugin: ```diff clone: - git: + - name: git + image: octocat/custom-git-plugin ``` @@ -702,7 +708,7 @@ skip_clone: true ## `when` - Global workflow conditions -Woodpecker gives the ability to skip whole workflows (not just steps #when---conditional-execution-1) based on certain conditions by a `when` block. If all conditions in the `when` block evaluate to true the workflow is executed, otherwise it is skipped, but treated as successful and other workflows depending on it will still continue. +Woodpecker gives the ability to skip whole workflows ([not just steps](#when---conditional-execution)) based on certain conditions by a `when` block. If all conditions in the `when` block evaluate to true the workflow is executed, otherwise it is skipped, but treated as successful and other workflows depending on it will still continue. For more information about the specific filters, take a look at the [step-specific `when` filters](#when---conditional-execution). diff --git a/docs/docs/20-usage/25-workflows.md b/docs/docs/20-usage/25-workflows.md index 1a3f40fc8..88ed78f81 100644 --- a/docs/docs/20-usage/25-workflows.md +++ b/docs/docs/20-usage/25-workflows.md @@ -18,7 +18,7 @@ You can also set some custom path like `.my-ci/pipelines/` instead of `.woodpeck :::warning Please note that files are only shared between steps of the same workflow (see [File changes are incremental](./20-workflow-syntax.md#file-changes-are-incremental)). That means you cannot access artifacts e.g. from the `build` workflow in the `deploy` workflow. -If you still need to pass artifacts between the workflows you need use some storage [plugin](./51-plugins/10-overview.md) (e.g. one which stores files in an Amazon S3 bucket). +If you still need to pass artifacts between the workflows you need use some storage [plugin](./51-plugins/51-overview.md) (e.g. one which stores files in an Amazon S3 bucket). ::: ```bash diff --git a/docs/docs/20-usage/45-cron.md b/docs/docs/20-usage/45-cron.md index 994e022bc..bbf23bdf0 100644 --- a/docs/docs/20-usage/45-cron.md +++ b/docs/docs/20-usage/45-cron.md @@ -19,7 +19,7 @@ To configure cron jobs you need at least push access to the repository. + cron: "name of the cron job" # if you only want to execute this step by a specific cron job ``` -1. Create a new cron job in the repository settings: +2. Create a new cron job in the repository settings: ![cron settings](./cron-settings.png) diff --git a/docs/docs/20-usage/50-environment.md b/docs/docs/20-usage/50-environment.md index ce05812e4..bf2a9da85 100644 --- a/docs/docs/20-usage/50-environment.md +++ b/docs/docs/20-usage/50-environment.md @@ -81,7 +81,7 @@ This is the reference list of all environment variables available to your pipeli | | **Current pipeline** | | `CI_PIPELINE_NUMBER` | pipeline number | | `CI_PIPELINE_PARENT` | number of parent pipeline | -| `CI_PIPELINE_EVENT` | pipeline event (see [pipeline events](../20-usage/15-terminiology/index.md#pipeline-events)) | +| `CI_PIPELINE_EVENT` | pipeline event (see [pipeline events](../20-usage/15-terminology/index.md#pipeline-events)) | | `CI_PIPELINE_URL` | link to the web UI for the pipeline | | `CI_PIPELINE_FORGE_URL` | link to the forge's web UI for the commit(s) or tag that triggered the pipeline | | `CI_PIPELINE_DEPLOY_TARGET` | pipeline deploy target for `deployment` events (i.e. production) | @@ -114,7 +114,7 @@ This is the reference list of all environment variables available to your pipeli | | **Previous pipeline** | | `CI_PREV_PIPELINE_NUMBER` | previous pipeline number | | `CI_PREV_PIPELINE_PARENT` | previous pipeline number of parent pipeline | -| `CI_PREV_PIPELINE_EVENT` | previous pipeline event (see [pipeline events](../20-usage/15-terminiology/index.md#pipeline-events)) | +| `CI_PREV_PIPELINE_EVENT` | previous pipeline event (see [pipeline events](../20-usage/15-terminology/index.md#pipeline-events)) | | `CI_PREV_PIPELINE_URL` | previous pipeline link in CI | | `CI_PREV_PIPELINE_FORGE_URL` | previous pipeline link to event in forge | | `CI_PREV_PIPELINE_DEPLOY_TARGET` | previous pipeline deploy target for `deployment` events (ie production) | diff --git a/docs/docs/20-usage/51-plugins/20-creating-plugins.md b/docs/docs/20-usage/51-plugins/20-creating-plugins.md index cd74ea455..44e0167ee 100644 --- a/docs/docs/20-usage/51-plugins/20-creating-plugins.md +++ b/docs/docs/20-usage/51-plugins/20-creating-plugins.md @@ -48,6 +48,23 @@ Secrets should be passed as settings too. Therefore, users should use [`from_sec For Go, we provide a plugin library you can use to get easy access to internal env vars and your settings. See . +## Metadata + +In your documentation, you can use a Markdown header to define metadata for your plugin. This data is used by [our plugin index](/plugins). + +Supported metadata: + +- `name`: The plugin's full name +- `icon`: URL to your plugin's icon +- `description`: A short description of what it's doing +- `author`: Your name +- `tags`: List of keywords (e.g. `[git, clone]` for the clone plugin) +- `containerImage`: name of the container image +- `containerImageUrl`: link to the container image +- `url`: homepage or repository of your plugin + +If you want your plugin to be listed in the index, you should add as many fields as possible, but only `name` is required. + ## Example plugin This provides a brief tutorial for creating a Woodpecker webhook plugin, using simple shell scripting, to make HTTP requests during the build pipeline. diff --git a/docs/docs/20-usage/51-plugins/10-overview.md b/docs/docs/20-usage/51-plugins/51-overview.md similarity index 100% rename from docs/docs/20-usage/51-plugins/10-overview.md rename to docs/docs/20-usage/51-plugins/51-overview.md diff --git a/docs/docs/30-administration/00-deployment/00-overview.md b/docs/docs/30-administration/00-deployment/00-overview.md index 758b76ad6..232eb8694 100644 --- a/docs/docs/30-administration/00-deployment/00-overview.md +++ b/docs/docs/30-administration/00-deployment/00-overview.md @@ -61,7 +61,7 @@ You can install Woodpecker on multiple ways: Authentication is done using OAuth and is delegated to your forge which is configured using environment variables. -See the complete reference for all supported forges [here](../11-forges/10-overview.md). +See the complete reference for all supported forges [here](../11-forges/11-overview.md). ## Database diff --git a/docs/docs/30-administration/00-deployment/30-nixos.md b/docs/docs/30-administration/00-deployment/30-nixos.md index 148fbd581..ce490ab4e 100644 --- a/docs/docs/30-administration/00-deployment/30-nixos.md +++ b/docs/docs/30-administration/00-deployment/30-nixos.md @@ -1,7 +1,7 @@ # NixOS :::info -Note that this module is not maintained by the woodpecker-developers. +Note that this module is not maintained by the Woodpecker developers. If you experience issues please open a bug report in the [nixpkgs repo](https://github.com/NixOS/nixpkgs/issues/new/choose) where the module is maintained. ::: @@ -85,4 +85,4 @@ All configuration options can be found via [NixOS Search](https://search.nixos.o ## Tips and tricks -There are some resources on how to utilize Woodpecker more effectively with NixOS on the [Awesome Woodpecker](../../92-awesome.md) page, like using the runners nix-store in the pipeline +There are some resources on how to utilize Woodpecker more effectively with NixOS on the [Awesome Woodpecker](../../92-awesome.md) page, like using the runners nix-store in the pipeline. diff --git a/docs/docs/30-administration/10-server-config.md b/docs/docs/30-administration/10-server-config.md index 4b6e0ce10..9f50065ed 100644 --- a/docs/docs/30-administration/10-server-config.md +++ b/docs/docs/30-administration/10-server-config.md @@ -6,7 +6,7 @@ toc_max_heading_level: 2 ## User registration -Woodpecker does not have its own user registry; users are provided from your [forge](./11-forges/10-overview.md) (using OAuth2). +Woodpecker does not have its own user registry; users are provided from your [forge](./11-forges/11-overview.md) (using OAuth2). Registration is closed by default (`WOODPECKER_OPEN=false`). If registration is open (`WOODPECKER_OPEN=true`) then every user with an account at the configured forge can login to Woodpecker. @@ -69,7 +69,7 @@ To handle sensitive data in docker-compose or docker-swarm configurations there For docker-compose you can use a `.env` file next to your compose configuration to store the secrets outside of the compose file. While this separates configuration from secrets it is still not very secure. -Alternatively use docker-secrets. As it may be difficult to use docker secrets for environment variables woodpecker allows to read sensible data from files by providing a `*_FILE` option of all sensible configuration variables. Woodpecker will try to read the value directly from this file. Keep in mind that when the original environment variable gets specified at the same time it will override the value read from the file. +Alternatively use docker-secrets. As it may be difficult to use docker secrets for environment variables Woodpecker allows to read sensible data from files by providing a `*_FILE` option of all sensible configuration variables. Woodpecker will try to read the value directly from this file. Keep in mind that when the original environment variable gets specified at the same time it will override the value read from the file. ```diff title="docker-compose.yaml" version: '3' @@ -477,7 +477,7 @@ Supported variables: > Default: empty -List of addon files. See [addons](./75-addons/00-overview.md). +List of addon files. See [addons](./75-addons/75-overview.md). --- diff --git a/docs/docs/30-administration/11-forges/10-overview.md b/docs/docs/30-administration/11-forges/11-overview.md similarity index 100% rename from docs/docs/30-administration/11-forges/10-overview.md rename to docs/docs/30-administration/11-forges/11-overview.md diff --git a/docs/docs/30-administration/11-forges/30-gitea.md b/docs/docs/30-administration/11-forges/30-gitea.md index 6059389c3..46249b986 100644 --- a/docs/docs/30-administration/11-forges/30-gitea.md +++ b/docs/docs/30-administration/11-forges/30-gitea.md @@ -16,7 +16,7 @@ WOODPECKER_GITEA_SECRET=YOUR_GITEA_CLIENT_SECRET ## Gitea on the same host with containers If you have Gitea also running on the same host within a container, make sure the agent does have access to it. -The agent tries to clone using the URL which Gitea reports through its API. For simplified connectivity, you should add the woodpecker agent to the same docker network as Gitea is in. +The agent tries to clone using the URL which Gitea reports through its API. For simplified connectivity, you should add the Woodpecker agent to the same docker network as Gitea is in. Otherwise, the communication should go via the `docker0` gateway (usually 172.17.0.1). To configure the Docker network if the network's name is `gitea`, configure it like this: diff --git a/docs/docs/30-administration/11-forges/50-bitbucket.md b/docs/docs/30-administration/11-forges/50-bitbucket.md index b658238d6..d368e709c 100644 --- a/docs/docs/30-administration/11-forges/50-bitbucket.md +++ b/docs/docs/30-administration/11-forges/50-bitbucket.md @@ -14,7 +14,7 @@ WOODPECKER_BITBUCKET_SECRET=... ## Registration -You must register an OAuth application at Bitbucket in order to get a key and secret combination for woodpecker. Navigate to your workspace settings and choose `OAuth consumers` from the menu, and finally click `Add Consumer` (the url should be like: `https://bitbucket.org/[your-project-name]/workspace/settings/api`). +You must register an OAuth application at Bitbucket in order to get a key and secret combination for Woodpecker. Navigate to your workspace settings and choose `OAuth consumers` from the menu, and finally click `Add Consumer` (the url should be like: `https://bitbucket.org/[your-project-name]/workspace/settings/api`). Please set a name and set the `Callback URL` like this: diff --git a/docs/docs/30-administration/75-addons/00-overview.md b/docs/docs/30-administration/75-addons/75-overview.md similarity index 100% rename from docs/docs/30-administration/75-addons/00-overview.md rename to docs/docs/30-administration/75-addons/75-overview.md diff --git a/docs/docs/92-awesome.md b/docs/docs/92-awesome.md index b13862209..698f94d79 100644 --- a/docs/docs/92-awesome.md +++ b/docs/docs/92-awesome.md @@ -1,6 +1,6 @@ # Awesome Woodpecker -A curated list of awesome things related to Woodpecker-CI. +A curated list of awesome things related to Woodpecker CI. If you have some missing resources, please feel free to [open a pull-request](https://github.com/woodpecker-ci/woodpecker/edit/main/docs/docs/92-awesome.md) and add them. @@ -14,7 +14,7 @@ If you have some missing resources, please feel free to [open a pull-request](ht ## Projects using Woodpecker -- [Woodpecker-CI](https://github.com/woodpecker-ci/woodpecker/tree/main/.woodpecker) itself +- [Woodpecker CI](https://github.com/woodpecker-ci/woodpecker/tree/main/.woodpecker) itself - [All official plugins](https://github.com/woodpecker-ci?q=plugin&type=all) - [dessalines/thumb-key](https://github.com/dessalines/thumb-key/blob/main/.woodpecker.yml) - Android Jetpack compose linting and building - [Vieter](https://git.rustybever.be/vieter-v/vieter) - Archlinux/Pacman repository server & automated package build system @@ -24,12 +24,12 @@ If you have some missing resources, please feel free to [open a pull-request](ht ## Tools - [Convert Drone CI pipelines to Woodpecker CI](https://codeberg.org/lafriks/woodpecker-pipeline-transform) -- [Ansible NAS](https://github.com/davestephens/ansible-nas/) - a homelab Ansible playbook that can set up Woodpecker-CI and Gitea +- [Ansible NAS](https://github.com/davestephens/ansible-nas/) - a homelab Ansible playbook that can set up Woodpecker CI and Gitea - [picus](https://github.com/windsource/picus) - Picus connects to a Woodpecker CI server and creates an agent in the cloud when there are pending workflows. - [Hetzner cloud](https://www.hetzner.com/cloud) based [Woodpecker compatible autoscaler](https://git.ljoonal.xyz/ljoonal/hetzner-ci-autoscaler) - Creates and destroys VPS instances based on the count of pending & running jobs. -- [woodpecker-lint](https://git.schmidl.dev/schtobia/woodpecker-lint) - A repository for linting a woodpecker config file via pre-commit hook -- [Grafana Dashboard](https://github.com/Janik-Haag/woodpecker-grafana-dashboard) - A dashboard visualizing information exposed by the woodpecker prometheus endpoint. -- [woodpecker-autoscaler](https://github.com/Lerentis/woodpecker-autoscaler) - Yet another woodpecker autoscaler currently targeting [Hetzner cloud](https://www.hetzner.com/cloud) that works in parallel to other autoscaler implementations. +- [woodpecker-lint](https://git.schmidl.dev/schtobia/woodpecker-lint) - A repository for linting a Woodpecker config file via pre-commit hook +- [Grafana Dashboard](https://github.com/Janik-Haag/woodpecker-grafana-dashboard) - A dashboard visualizing information exposed by the Woodpecker prometheus endpoint. +- [woodpecker-autoscaler](https://github.com/Lerentis/woodpecker-autoscaler) - Yet another Woodpecker autoscaler currently targeting [Hetzner cloud](https://www.hetzner.com/cloud) that works in parallel to other autoscaler implementations. ## Configuration Services @@ -50,8 +50,10 @@ If you have some missing resources, please feel free to [open a pull-request](ht - [Locally Cached Nix CI with Woodpecker](https://blog.kotatsu.dev/posts/2023-04-21-woodpecker-nix-caching/) - [How to run Cypress auto-tests on Woodpecker CI and report results to Slack](https://devforth.io/blog/how-to-run-cypress-auto-tests-on-woodpecker-ci-and-report-results-to-slack/) - [Quest For CICD - WoodpeckerCI](https://omaramin.me/posts/woodpecker/) -- [Getting started with Woodpecker CI](https://blog.lutra-it.eu/getting-started-with-woodpecker-ci.html) +- [Getting started with Woodpecker CI](https://systeemkabouter.eu/getting-started-with-woodpecker-ci.html) - [Installing gitea and woodpecker using binary packages](https://neelex.com/2023/03/26/Installing-gitea-using-binary-packages/) +- [Deploying mdbook to codeberg pages using woodpecker CI](https://www.markpitblado.me/blog/ci-deployment-of-mdbook) +- [Deploy a Fly app with Woodpecker CI](https://joeroe.io/2024/01/09/deploy-fly-woodpecker-ci.html) ## Videos diff --git a/docs/docs/92-development/01-getting-started.md b/docs/docs/92-development/01-getting-started.md index 0889afa5b..e1bb1ce0c 100644 --- a/docs/docs/92-development/01-getting-started.md +++ b/docs/docs/92-development/01-getting-started.md @@ -82,7 +82,7 @@ WOODPECKER_HEALTHCHECK=false ### Setup OAuth -Create an OAuth app for your forge as described in the [forges documentation](../30-administration/11-forges/10-overview.md). If you set `WOODPECKER_DEV_OAUTH_HOST=http://localhost:8000` you can use that address with the path as explained for the specific forge to login without the need for a public address. For example for GitHub you would use `http://localhost:8000/authorize` as authorization callback URL. +Create an OAuth app for your forge as described in the [forges documentation](../30-administration/11-forges/11-overview.md). If you set `WOODPECKER_DEV_OAUTH_HOST=http://localhost:8000` you can use that address with the path as explained for the specific forge to login without the need for a public address. For example for GitHub you would use `http://localhost:8000/authorize` as authorization callback URL. ## Developing with VS Code diff --git a/docs/docs/92-development/02-core-ideas.md b/docs/docs/92-development/02-core-ideas.md index c4527e6c7..2f80661f4 100644 --- a/docs/docs/92-development/02-core-ideas.md +++ b/docs/docs/92-development/02-core-ideas.md @@ -8,7 +8,7 @@ ## Addons and extensions If you are wondering whether your contribution will be accepted to be merged in the Woodpecker core, or whether it's better to write an -[addon](../30-administration/75-addons/00-overview.md), [extension](../30-administration/100-external-configuration-api.md) or an +[addon](../30-administration/75-addons/75-overview.md), [extension](../30-administration/100-external-configuration-api.md) or an [external custom backend](../30-administration/22-backends/50-custom-backends.md), please check these points: - Is your change very specific to your setup and unlikely to be used by anyone else? diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index 12f100b99..57f8b1c19 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -306,15 +306,6 @@ const config: Config = { }, ], ], - webpack: { - jsLoader: (isServer) => ({ - loader: require.resolve('esbuild-loader'), - options: { - loader: 'tsx', - target: isServer ? 'node12' : 'es2017', - }, - }), - }, markdown: { format: 'detect', }, diff --git a/docs/package.json b/docs/package.json index 09a5bba99..12edb966d 100644 --- a/docs/package.json +++ b/docs/package.json @@ -21,7 +21,6 @@ "@mdx-js/react": "^3.0.0", "@svgr/webpack": "^8.1.0", "clsx": "^2.1.0", - "esbuild-loader": "^4.0.2", "file-loader": "^6.2.0", "prism-react-renderer": "^2.3.1", "react": "^18.2.0", diff --git a/docs/plugins/woodpecker-plugins/src/index.ts b/docs/plugins/woodpecker-plugins/src/index.ts index 0b2e73df0..f8fd00c55 100644 --- a/docs/plugins/woodpecker-plugins/src/index.ts +++ b/docs/plugins/woodpecker-plugins/src/index.ts @@ -30,7 +30,7 @@ async function loadContent(): Promise { } return { - name: docsHeader.name || i.name, + name: docsHeader.name, url: docsHeader.url, icon: docsHeader.icon, description: docsHeader.description, diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index 0b92b5602..6416fb90b 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -33,9 +33,6 @@ importers: clsx: specifier: ^2.1.0 version: 2.1.0 - esbuild-loader: - specifier: ^4.0.2 - version: 4.0.3(webpack@5.90.3) file-loader: specifier: ^6.2.0 version: 6.2.0(webpack@5.90.3) @@ -2357,213 +2354,6 @@ packages: resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==} dev: false - /@esbuild/aix-ppc64@0.19.12: - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: false - optional: true - - /@esbuild/android-arm64@0.19.12: - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: false - optional: true - - /@esbuild/android-arm@0.19.12: - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: false - optional: true - - /@esbuild/android-x64@0.19.12: - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: false - optional: true - - /@esbuild/darwin-arm64@0.19.12: - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@esbuild/darwin-x64@0.19.12: - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@esbuild/freebsd-arm64@0.19.12: - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: false - optional: true - - /@esbuild/freebsd-x64@0.19.12: - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-arm64@0.19.12: - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-arm@0.19.12: - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-ia32@0.19.12: - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-loong64@0.19.12: - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-mips64el@0.19.12: - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-ppc64@0.19.12: - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-riscv64@0.19.12: - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-s390x@0.19.12: - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-x64@0.19.12: - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/netbsd-x64@0.19.12: - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: false - optional: true - - /@esbuild/openbsd-x64@0.19.12: - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: false - optional: true - - /@esbuild/sunos-x64@0.19.12: - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: false - optional: true - - /@esbuild/win32-arm64@0.19.12: - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@esbuild/win32-ia32@0.19.12: - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@esbuild/win32-x64@0.19.12: - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@exodus/schemasafe@1.3.0: resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} dev: false @@ -5014,49 +4804,6 @@ packages: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} dev: false - /esbuild-loader@4.0.3(webpack@5.90.3): - resolution: {integrity: sha512-YpaSRisj7TSg6maKKKG9OJGGm0BZ7EXeov8J8cXEYdugjlAJ0wL7aj2JactoQvPJ113v2Ar204pdJWrZsAQc8Q==} - peerDependencies: - webpack: ^4.40.0 || ^5.0.0 - dependencies: - esbuild: 0.19.12 - get-tsconfig: 4.7.2 - loader-utils: 2.0.4 - webpack: 5.90.3 - webpack-sources: 1.4.3 - dev: false - - /esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 - dev: false - /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -5493,12 +5240,6 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - /get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} - dependencies: - resolve-pkg-maps: 1.0.0 - dev: false - /github-slugger@1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} @@ -8592,10 +8333,6 @@ packages: /resolve-pathname@3.0.0: resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: false - /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -8957,10 +8694,6 @@ packages: resolution: {integrity: sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==} engines: {node: '>= 6.3.0'} - /source-list-map@2.0.1: - resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} - dev: false - /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -9698,13 +9431,6 @@ packages: flat: 5.0.2 wildcard: 2.0.1 - /webpack-sources@1.4.3: - resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} - dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 - dev: false - /webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} diff --git a/web/src/assets/locales/zh-Hans.json b/web/src/assets/locales/zh-Hans.json index f54e0ce8b..083479a79 100644 --- a/web/src/assets/locales/zh-Hans.json +++ b/web/src/assets/locales/zh-Hans.json @@ -1,508 +1,531 @@ { - "admin": { - "settings": { - "agents": { - "add": "添加代理", - "agents": "代理", - "backend": { - "backend": "后端", - "badge": "后端" - }, - "capacity": { - "badge": "容量", - "capacity": "容量", - "desc": "该代理并行执行流水线的最大数量。" - }, - "created": "已创建代理", - "delete_agent": "删除代理", - "delete_confirm": "你真的要删除该代理吗?删除后它将无法再次连接到此服务器。", - "deleted": "已删除代理", - "desc": "注册到此服务器的代理", - "edit_agent": "编辑代理", - "id": "ID", - "last_contact": "最后访问", - "name": { - "name": "名称", - "placeholder": "代理名称" - }, - "never": "绝不", - "no_schedule": { - "name": "禁用代理", - "placeholder": "阻止代理接受新任务" - }, - "none": "还未添加任何代理。", - "platform": { - "badge": "平台", - "platform": "平台" - }, - "save": "保存代理", - "saved": "已保存代理", - "show": "显示代理", - "token": "Token", - "version": "版本" - }, - "not_allowed": "你没有访问服务器设置的权限", - "orgs": { - "delete_confirm": "你真的想删除该组织吗?这也将删除该组织拥有的所有存储库。", - "delete_org": "删除组织", - "deleted": "组织已删除", - "desc": "在此服务器上拥有存储库的组织", - "none": "还没有任何组织。", - "org_settings": "组织设置", - "orgs": "组织", - "view": "查看组织" - }, - "queue": { - "agent": "代理", - "desc": "正在等待代理执行的任务", - "pause": "暂停", - "paused": "队列已暂停", - "queue": "队列", - "resume": "恢复", - "resumed": "队列已恢复", - "stats": { - "completed_count": "已完成的任务", - "pending_count": "等待中", - "running_count": "运行中", - "waiting_on_deps_count": "等待依赖项", - "worker_count": "空闲" - }, - "task_pending": "任务正在等待中", - "task_running": "任务正在运行", - "task_waiting_on_deps": "任务正在等待依赖项", - "tasks": "任务", - "waiting_for": "正在等待" - }, - "repos": { - "desc": "该服务器上已启用或曾经启用的仓库", - "disabled": "已禁用", - "none": "目前还没有存储库。", - "repair": { - "repair": "修复所有", - "success": "仓库已修复" - }, - "repos": "仓库", - "settings": "仓库设置", - "view": "查看仓库" - }, - "secrets": { - "add": "添加密钥", - "created": "全局密钥已创建", - "deleted": "全局密钥已删除", - "desc": "全局密钥可以当做环境变量传给任意仓库的各个流水线步骤。", - "events": { - "events": "对以下事件可用", - "pr_warning": "慎选这个选项:用户可以提交一个恶意推送请求以暴露你的密钥。" - }, - "images": { - "desc": "此密钥可用于此处填写的镜像列表,用逗号分隔,留空以允许所有镜像", - "images": "可用于以下镜像" - }, - "name": "名称", - "none": "现在没有全局密钥。", - "plugins_only": "仅对插件有效", - "save": "保存密钥", - "saved": "全局密钥已保存", - "secrets": "密钥", - "show": "显示所有密钥", - "value": "值", - "warning": "该密钥对所有服务器用户可用。" - }, - "settings": "设置", - "users": { - "add": "添加用户", - "admin": { - "admin": "管理员", - "placeholder": "此用户是管理员" - }, - "avatar_url": "Avatar URL", - "cancel": "取消", - "created": "用户已创建", - "delete_confirm": "你真的想删除这个用户吗?这也将删除该用户拥有的所有存储库。", - "delete_user": "删除用户", - "deleted": "删除用户", - "desc": "注册此服务器的用户", - "edit_user": "编辑用户", - "email": "Email", - "login": "登录", - "none": "还没有任何用户。", - "save": "保存用户", - "saved": "已保存用户", - "show": "显示用户", - "users": "用户" - } - } - }, - "api": "API", - "back": "返回", - "cancel": "取消", - "default": "默认", - "docs": "文档", - "documentation_for": "\"{topic}\"的文档", - "errors": { - "not_found": "服务器找不到请求的对象" - }, - "info": "信息", - "login": "登录", - "logout": "退出登录", - "not_found": { - "back_home": "回到主页", - "not_found": "啊,404,我们搞砸了什么,或者您拼错了什么词 :-/" - }, - "org": { - "settings": { - "not_allowed": "你没有访问组织设置的权限", - "secrets": { - "add": "添加密钥", - "created": "组织密钥已创建", - "deleted": "组织密钥已删除", - "desc": "组织密钥可以被当做环境变量传递给该组织的所有仓库的各个流水线步骤。", - "events": { - "events": "对以下事件可用", - "pr_warning": "慎选这个选项:用户可以提交一个恶意推送请求以暴露你的密钥。" - }, - "images": { - "desc": "此密钥可用于此处填写的镜像列表,用逗号分隔,留空以允许所有镜像", - "images": "可用于以下镜像" - }, - "name": "名称", - "none": "没有组织密钥。", - "plugins_only": "仅对插件有效", - "save": "保存密钥", - "saved": "组织密钥已保存", - "secrets": "密钥", - "show": "显示所有密钥", - "value": "值" - }, - "settings": "设置" - } - }, - "password": "密码", - "pipeline_feed": "流水线视图", - "repo": { - "activity": "活动", - "add": "添加仓库", - "branches": "分支", - "deploy_pipeline": { - "enter_target": "目标部署环境", - "title": "触发当前流水线 #{pipelineId} 的部署事件", - "trigger": "部署", - "variables": { - "add": "添加变量", - "desc": "指定传递到流水线中的变量。相同名称的变量会被覆盖。", - "name": "变量名", - "title": "添加流水线变量", - "value": "变量值" - } + "admin": { + "settings": { + "agents": { + "add": "添加 Agent", + "agents": "Agents", + "backend": { + "backend": "后端", + "badge": "后端" + }, + "capacity": { + "badge": "容量", + "capacity": "容量", + "desc": "该 Agent 并行执行流水线的最大数量。" + }, + "created": "已创建 Agent", + "delete_agent": "删除 Agent", + "delete_confirm": "你真的要删除该 Agent 吗?删除后它将无法再次连接到此服务器。", + "deleted": "已删除 Agent", + "desc": "注册到此服务器的 Agents", + "edit_agent": "编辑 Agent", + "id": "ID", + "last_contact": "最后访问", + "name": { + "name": "名称", + "placeholder": "Agent 名称" + }, + "never": "绝不", + "no_schedule": { + "name": "禁用 Agent", + "placeholder": "阻止 Agent 接受新任务" + }, + "none": "还未添加任何 Agents.", + "platform": { + "badge": "平台", + "platform": "平台" + }, + "save": "保存 Agent", + "saved": "已保存 Agent", + "show": "显示 Agents", + "token": "Token", + "version": "版本" + }, + "not_allowed": "你没有访问服务器设置的权限", + "orgs": { + "delete_confirm": "你真的想删除该组织吗?这也将删除该组织拥有的所有存储库。", + "delete_org": "删除组织", + "deleted": "组织已删除", + "desc": "在此服务器上拥有存储库的组织", + "none": "还没有任何组织。", + "org_settings": "组织设置", + "orgs": "组织", + "view": "查看组织" + }, + "queue": { + "agent": "agent", + "desc": "正在等待 Agents 执行的任务", + "pause": "暂停", + "paused": "队列已暂停", + "queue": "队列", + "resume": "恢复", + "resumed": "队列已恢复", + "stats": { + "completed_count": "已完成的任务", + "pending_count": "等待中", + "running_count": "运行中", + "waiting_on_deps_count": "等待依赖项", + "worker_count": "空闲" + }, + "task_pending": "任务正在等待中", + "task_running": "任务正在运行", + "task_waiting_on_deps": "任务正在等待依赖项", + "tasks": "任务", + "waiting_for": "正在等待" + }, + "repos": { + "desc": "该服务器上已启用或曾经启用的仓库", + "disabled": "已禁用", + "none": "目前还没有存储库。", + "repair": { + "repair": "修复所有", + "success": "仓库已修复" + }, + "repos": "仓库", + "settings": "仓库设置", + "view": "查看仓库" + }, + "secrets": { + "add": "添加密钥", + "created": "全局密钥已创建", + "deleted": "全局密钥已删除", + "desc": "全局密钥可以当做环境变量传给任意仓库的各个流水线步骤。", + "events": { + "events": "对以下事件可用", + "pr_warning": "慎选这个选项:用户可以提交一个恶意推送请求以暴露你的密钥。" + }, + "images": { + "desc": "此密钥可用于此处填写的镜像列表,用逗号分隔,留空以允许所有镜像", + "images": "可用于以下镜像" + }, + "name": "名称", + "none": "现在没有全局密钥。", + "plugins_only": "仅对插件有效", + "save": "保存密钥", + "saved": "全局密钥已保存", + "secrets": "密钥", + "show": "显示所有密钥", + "value": "值", + "warning": "该密钥对所有服务器用户可用。" + }, + "settings": "设置", + "users": { + "add": "添加用户", + "admin": { + "admin": "管理员", + "placeholder": "此用户是管理员" + }, + "avatar_url": "Avatar URL", + "cancel": "取消", + "created": "用户已创建", + "delete_confirm": "你真的想删除这个用户吗?这也将删除该用户拥有的所有存储库。", + "delete_user": "删除用户", + "deleted": "删除用户", + "desc": "注册此服务器的用户", + "edit_user": "编辑用户", + "email": "Email", + "login": "登录", + "none": "还没有任何用户。", + "save": "保存用户", + "saved": "已保存用户", + "show": "显示用户", + "users": "用户" + } + } }, - "enable": { - "disabled": "已禁用", - "enable": "启用", - "enabled": "已经启用了", - "list_reloaded": "仓库列表已刷新", - "reload": "刷新项目列表", - "success": "此仓库已成功启用" + "api": "API", + "back": "返回", + "cancel": "取消", + "default": "默认", + "docs": "文档", + "documentation_for": "\"{topic}\"的文档", + "errors": { + "not_found": "服务器找不到请求的对象" }, - "manual_pipeline": { - "select_branch": "选择分支", - "title": "手动触发流水线运行", - "trigger": "运行流水线", - "variables": { - "add": "添加变量", - "desc": "指定要添加在流水线中使用的变量,相同名称的变量将被覆盖。", - "name": "变量名称", - "title": "添加流水线变量", - "value": "变量值" - } + "info": "信息", + "login": "登录", + "logout": "退出登录", + "not_found": { + "back_home": "回到主页", + "not_found": "啊,404,我们搞砸了什么,或者您拼错了什么词 :-/" }, - "not_allowed": "你没有权限访问这个仓库", - "open_in_forge": "在版本控制系统中打开", - "pipeline": { - "actions": { - "cancel": "取消", - "cancel_success": "流水线已被取消", - "canceled": "该步骤已被取消。", - "deploy": "部署", - "log_auto_scroll": "自动滚动", - "log_auto_scroll_off": "关闭自动滚动", - "log_download": "下载", - "restart": "重启", - "restart_success": "流水线已重启" - }, - "config": "配置", - "errors": "错误 ({count})", - "event": { - "cron": "计划任务", - "deploy": "部署", - "manual": "手动", - "pr": "合并请求", - "push": "推送", - "tag": "标签" - }, - "exit_code": "退出代码 {exitCode}", - "files": "修改的文件({files})", - "loading": "载入中…", - "log_download_error": "下载日志文件中发生了错误", - "log_title": "步骤日志", - "no_files": "没有文件修改。", - "no_pipeline_steps": "没有流水线步骤可用!", - "no_pipelines": "尚未启动过流水线。", - "pipeline": "流水线 #{pipelineId}", - "pipelines_for": "{branch} 分支的流水线", - "pipelines_for_pr": "来自合并请求 #{index} 的流水线", - "protected": { - "approve": "同意", - "approve_success": "流水线已被许可", - "awaits": "该流水线正在等待维护者许可!", - "decline": "拒绝", - "decline_success": "流水线已被拒绝", - "declined": "该流水线已被拒绝!", - "review": "审查变更" - }, - "show_errors": "显示错误", - "status": { - "blocked": "已屏蔽", - "declined": "已拒绝", - "error": "错误", - "failure": "失败", - "killed": "已终止", - "pending": "等待中", - "running": "运行中", - "skipped": "已跳过", - "started": "已启动", - "status": "状态: {status}", - "success": "成功" - }, - "step_not_started": "该步骤尚未启动。", - "tasks": "任务", - "warnings": "警告 ({count})", - "we_got_some_errors": "哦不,我们遇到了一些错误!" + "org": { + "settings": { + "not_allowed": "你没有访问组织设置的权限", + "secrets": { + "add": "添加密钥", + "created": "组织密钥已创建", + "deleted": "组织密钥已删除", + "desc": "组织密钥可以被当做环境变量传递给该组织的所有仓库的各个流水线步骤。", + "events": { + "events": "对以下事件可用", + "pr_warning": "慎选这个选项:用户可以提交一个恶意推送请求以暴露你的密钥。" + }, + "images": { + "desc": "此密钥可用于此处填写的镜像列表,用逗号分隔,留空以允许所有镜像", + "images": "可用于以下镜像" + }, + "name": "名称", + "none": "没有组织密钥。", + "plugins_only": "仅对插件有效", + "save": "保存密钥", + "saved": "组织密钥已保存", + "secrets": "密钥", + "show": "显示所有密钥", + "value": "值" + }, + "settings": "设置" + } }, - "pull_requests": "合并请求", - "settings": { - "actions": { - "actions": "操作", - "delete": { - "confirm": "该操作将会删除所有数据!!!\n\n你确定真的要继续吗?", - "delete": "删除仓库", - "success": "仓库已删除" - }, - "disable": { - "disable": "禁用仓库", - "success": "仓库已禁用" + "password": "密码", + "pipeline_feed": "流水线视图", + "repo": { + "activity": "活动", + "add": "添加仓库", + "branches": "分支", + "deploy_pipeline": { + "enter_target": "目标部署环境", + "title": "触发当前流水线 #{pipelineId} 的部署事件", + "trigger": "部署", + "variables": { + "add": "添加变量", + "desc": "指定传递到流水线中的变量。相同名称的变量会被覆盖。", + "name": "变量名", + "title": "添加流水线变量", + "value": "变量值", + "delete": "删除变量" + } }, "enable": { - "enable": "启用仓库", - "success": "此仓库已成功启用" + "disabled": "已禁用", + "enable": "启用", + "enabled": "已经启用了", + "list_reloaded": "仓库列表已刷新", + "reload": "刷新项目列表", + "success": "此仓库已成功启用" }, - "repair": { - "repair": "修复仓库", - "success": "仓库已修复" - } - }, - "badge": { - "badge": "徽标", - "branch": "分支", - "type": "语法", - "type_html": "HTML", - "type_markdown": "Markdown", - "type_url": "URL" - }, - "crons": { - "add": "创建计划", - "branch": { - "placeholder": "分支(若为空,将使用默认分支)", - "title": "分支" + "manual_pipeline": { + "select_branch": "选择分支", + "title": "手动触发流水线运行", + "trigger": "运行流水线", + "variables": { + "add": "添加变量", + "desc": "指定要添加在流水线中使用的变量,相同名称的变量将被覆盖。", + "name": "变量名称", + "title": "添加流水线变量", + "value": "变量值", + "delete": "删除变量" + } }, - "created": "计划已创建", - "crons": "计划", - "delete": "删除计划", - "deleted": "计划已删除", - "desc": "计划作业可用于定期触发流水线。", - "edit": "编辑计划", - "name": { - "name": "名称", - "placeholder": "此计划的名称" + "not_allowed": "你没有权限访问这个仓库", + "open_in_forge": "在版本控制系统中打开", + "pipeline": { + "actions": { + "cancel": "取消", + "cancel_success": "流水线已被取消", + "canceled": "该步骤已被取消。", + "deploy": "部署", + "log_auto_scroll": "自动滚动", + "log_auto_scroll_off": "关闭自动滚动", + "log_download": "下载", + "restart": "重启", + "restart_success": "流水线已重启" + }, + "config": "配置", + "errors": "错误 ({count})", + "event": { + "cron": "计划任务", + "deploy": "部署", + "manual": "手动", + "pr": "合并请求", + "push": "推送", + "tag": "标签", + "release": "发布" + }, + "exit_code": "退出代码 {exitCode}", + "files": "修改的文件({files})", + "loading": "载入中…", + "log_download_error": "下载日志文件中发生了错误", + "log_title": "步骤日志", + "no_files": "没有文件修改。", + "no_pipeline_steps": "没有流水线步骤可用!", + "no_pipelines": "尚未启动过流水线。", + "pipeline": "流水线 #{pipelineId}", + "pipelines_for": "{branch} 分支的流水线", + "pipelines_for_pr": "来自合并请求 #{index} 的流水线", + "protected": { + "approve": "同意", + "approve_success": "流水线已被许可", + "awaits": "该流水线正在等待维护者许可!", + "decline": "拒绝", + "decline_success": "流水线已被拒绝", + "declined": "该流水线已被拒绝!", + "review": "审查变更" + }, + "show_errors": "显示错误", + "status": { + "blocked": "已屏蔽", + "declined": "已拒绝", + "error": "错误", + "failure": "失败", + "killed": "已终止", + "pending": "等待中", + "running": "运行中", + "skipped": "已跳过", + "started": "已启动", + "status": "状态: {status}", + "success": "成功" + }, + "step_not_started": "该步骤尚未启动。", + "tasks": "任务", + "warnings": "警告 ({count})", + "we_got_some_errors": "哦不,我们遇到了一些错误!" }, - "next_exec": "下次执行", - "none": "还未添加任何计划。", - "not_executed_yet": "还没有执行过", - "run": "立即执行", - "save": "保存计划", - "saved": "计划已保存", - "schedule": { - "placeholder": "计划任务", - "title": "计划任务(基于 UTC)" + "pull_requests": "合并请求", + "settings": { + "actions": { + "actions": "操作", + "delete": { + "confirm": "该操作将会删除所有数据!!!\n\n你确定真的要继续吗?", + "delete": "删除仓库", + "success": "仓库已删除" + }, + "disable": { + "disable": "禁用仓库", + "success": "仓库已禁用" + }, + "enable": { + "enable": "启用仓库", + "success": "此仓库已成功启用" + }, + "repair": { + "repair": "修复仓库", + "success": "仓库已修复" + } + }, + "badge": { + "badge": "徽标", + "branch": "分支", + "type": "语法", + "type_html": "HTML", + "type_markdown": "Markdown", + "type_url": "URL" + }, + "crons": { + "add": "创建计划", + "branch": { + "placeholder": "分支(若为空,将使用默认分支)", + "title": "分支" + }, + "created": "计划已创建", + "crons": "计划", + "delete": "删除计划", + "deleted": "计划已删除", + "desc": "计划作业可用于定期触发流水线。", + "edit": "编辑计划", + "name": { + "name": "名称", + "placeholder": "此计划的名称" + }, + "next_exec": "下次执行", + "none": "还未添加任何计划。", + "not_executed_yet": "还没有执行过", + "run": "立即执行", + "save": "保存计划", + "saved": "计划已保存", + "schedule": { + "placeholder": "计划任务", + "title": "计划任务(基于 UTC)" + }, + "show": "显示所有计划" + }, + "general": { + "allow_pr": { + "allow": "允许拉取请求", + "desc": "运行拉取请求中的流水线。" + }, + "cancel_prev": { + "cancel": "取消之前的流水线", + "desc": "启用后,启动新触发的管道之前会取消相同事件和上下文的挂起和正在运行的管道。" + }, + "general": "基本设置", + "netrc_only_trusted": { + "desc": "仅将 .netrc 提供的凭据注入受信任的容器(推荐)。", + "netrc_only_trusted": "仅将 .netrc 提供的凭据注入受信任的容器" + }, + "pipeline_path": { + "default": "默认: .woodpecker/*.yml -> .woodpecker.yml", + "desc": "流水线配置文件的路径(例如 {0})。文件夹路径应以 {1} 结尾。", + "desc_path_example": "my/path/", + "path": "流水线路径" + }, + "project": "项目设置", + "protected": { + "desc": "每个流水线都需要在执行之前获得批准。", + "protected": "受保护" + }, + "save": "保存设置", + "success": "仓库设置已更新", + "timeout": { + "minutes": "分钟", + "timeout": "流水线最大执行时长" + }, + "trusted": { + "desc": "流水线容器可以使用高级功能,比如挂载卷。", + "trusted": "受信任" + }, + "visibility": { + "internal": { + "desc": "只有经过身份验证的 Woodpecker 用户才能看到此项目。", + "internal": "内部" + }, + "private": { + "desc": "只有你和此仓库的所有者可以看到此项目。", + "private": "私有" + }, + "public": { + "desc": "用户无需登录即可看到你的项目。", + "public": "公开" + }, + "visibility": "项目可见性" + } + }, + "not_allowed": "你没有权限访问此仓库的设置", + "registries": { + "add": "添加 Registry", + "address": { + "address": "地址", + "placeholder": "Registry 地址(如 docker.io)" + }, + "created": "Registry 密码已创建", + "credentials": "注册表凭据", + "delete": "删除 registry", + "deleted": "Registry 密码已删除", + "desc": "可以添加 Registry 密码,以在流水线中使用私有镜像。", + "edit": "编辑注册表", + "none": "现在没有 Registry 密码。", + "registries": "注册表", + "save": "保存 Registry", + "saved": "Registry 密码已保存", + "show": "显示 Registry" + }, + "secrets": { + "add": "添加秘密", + "created": "秘密已创建", + "delete": "删除密钥", + "delete_confirm": "你真的要删除这个密钥吗?", + "deleted": "秘密已删除", + "desc": "密钥可以在运行时作为环境变量传递给各个流水线步骤。", + "edit": "编辑密钥", + "events": { + "events": "对以下事件可用", + "pr_warning": "慎选这个选项:用户可以提交一个恶意推送请求以暴露你的密钥。" + }, + "images": { + "desc": "此秘密可用于此处填写的镜像列表,用逗号分隔,留空以允许所有镜像", + "images": "可用于以下镜像" + }, + "name": "名称", + "none": "还未添加任何秘密。", + "plugins_only": "仅对插件有效", + "save": "保存秘密", + "saved": "秘密已保存", + "secrets": "密钥", + "show": "显示所有秘密", + "value": "值" + }, + "settings": "设置" }, - "show": "显示所有计划" - }, - "general": { - "allow_pr": { - "allow": "允许拉取请求", - "desc": "运行拉取请求中的流水线。" - }, - "cancel_prev": { - "cancel": "取消之前的流水线", - "desc": "启用后,启动新触发的管道之前会取消相同事件和上下文的挂起和正在运行的管道。" - }, - "general": "基本设置", - "netrc_only_trusted": { - "desc": "仅将 .netrc 提供的凭据注入受信任的容器(推荐)。", - "netrc_only_trusted": "仅将 .netrc 提供的凭据注入受信任的容器" - }, - "pipeline_path": { - "default": "默认: .woodpecker/*.yml -> .woodpecker.yml", - "desc": "流水线配置文件的路径(例如 {0})。文件夹路径应以 {1} 结尾。", - "desc_path_example": "my/path/", - "path": "流水线路径" - }, - "project": "项目设置", - "protected": { - "desc": "每个流水线都需要在执行之前获得批准。", - "protected": "受保护" - }, - "save": "保存设置", - "success": "仓库设置已更新", - "timeout": { - "minutes": "分钟", - "timeout": "流水线最大执行时长" - }, - "trusted": { - "desc": "流水线容器可以使用高级功能,比如挂载卷。", - "trusted": "受信任" - }, - "visibility": { - "internal": { - "desc": "只有经过身份验证的 Woodpecker 用户才能看到此项目。", - "internal": "内部" - }, - "private": { - "desc": "只有你和此仓库的所有者可以看到此项目。", - "private": "私有" - }, - "public": { - "desc": "用户无需登录即可看到你的项目。", - "public": "公开" - }, - "visibility": "项目可见性" - } - }, - "not_allowed": "你没有权限访问此仓库的设置", - "registries": { - "add": "添加 Registry", - "address": { - "address": "地址", - "placeholder": "Registry 地址(如 docker.io)" - }, - "created": "Registry 密码已创建", - "credentials": "注册表凭据", - "delete": "删除 registry", - "deleted": "Registry 密码已删除", - "desc": "可以添加 Registry 密码,以在流水线中使用私有镜像。", - "edit": "编辑注册表", - "none": "现在没有 Registry 密码。", - "registries": "注册表", - "save": "保存 Registry", - "saved": "Registry 密码已保存", - "show": "显示 Registry" - }, - "secrets": { - "add": "添加秘密", - "created": "秘密已创建", - "delete": "删除密钥", - "delete_confirm": "你真的要删除这个密钥吗?", - "deleted": "秘密已删除", - "desc": "密钥可以在运行时作为环境变量传递给各个流水线步骤。", - "edit": "编辑密钥", - "events": { - "events": "对以下事件可用", - "pr_warning": "慎选这个选项:用户可以提交一个恶意推送请求以暴露你的密钥。" - }, - "images": { - "desc": "此秘密可用于此处填写的镜像列表,用逗号分隔,留空以允许所有镜像", - "images": "可用于以下镜像" - }, - "name": "名称", - "none": "还未添加任何秘密。", - "plugins_only": "仅对插件有效", - "save": "保存秘密", - "saved": "秘密已保存", - "secrets": "密钥", - "show": "显示所有秘密", - "value": "值" - }, - "settings": "设置" + "user_none": "此组织/用户还没有任何仓库。" }, - "user_none": "此组织/用户还没有任何仓库。" - }, - "repos": "仓库", - "repositories": "仓库", - "running_version": "你正在运行 Woodpecker {0}", - "search": "查找仓库…", - "time": { - "days_short": "天", - "hours_short": "小时", - "min_short": "分钟", - "not_started": "还没有运行过", - "sec_short": "秒", - "template": "YYYY 年 MM 月 D 日 HH:mm z", - "weeks_short": "周" - }, - "unknown_error": "发生了未知错误", - "update_woodpecker": "请更新你的 Woodpecker 实例到 {0}", - "url": "URL", - "user": { - "access_denied": "你没有登陆的权限", - "internal_error": "发生了一些内部错误", - "oauth_error": "Oauth 认证错误", - "settings": { - "api": { - "api": "API", - "api_usage": "API 用例", - "cli_usage": "CLI 用例", - "desc": "个人访问令牌和 API 使用", - "dl_cli": "下载 CLI", - "reset_token": "重置令牌", - "shell_setup": "Shell 设置", - "shell_setup_before": "在 shell 设置步骤之前", - "swagger_ui": "Swagger UI", - "token": "个人访问令牌" - }, - "general": { - "general": "基本设置", - "language": "语言", - "theme": { - "auto": "自动", - "dark": "暗色", - "light": "亮色", - "theme": "主题" + "repos": "仓库", + "repositories": "仓库", + "running_version": "你正在运行 Woodpecker {0}", + "search": "查找仓库…", + "time": { + "days_short": "天", + "hours_short": "小时", + "min_short": "分", + "not_started": "还没有运行过", + "sec_short": "秒", + "template": "YYYY 年 MM 月 D 日 HH:mm z", + "weeks_short": "周" + }, + "unknown_error": "发生了未知错误", + "update_woodpecker": "请更新你的 Woodpecker 实例到 {0}", + "url": "URL", + "user": { + "access_denied": "你没有登陆的权限", + "internal_error": "发生了一些内部错误", + "oauth_error": "Oauth 认证错误", + "settings": { + "api": { + "api": "API", + "api_usage": "API 用例", + "cli_usage": "CLI 用例", + "desc": "个人访问令牌和 API 使用", + "dl_cli": "下载 CLI", + "reset_token": "重置令牌", + "shell_setup": "Shell 设置", + "shell_setup_before": "在 shell 设置步骤之前", + "swagger_ui": "Swagger UI", + "token": "个人访问令牌" + }, + "general": { + "general": "基本设置", + "language": "语言", + "theme": { + "auto": "自动", + "dark": "暗色", + "light": "亮色", + "theme": "主题" + } + }, + "secrets": { + "add": "添加密钥", + "created": "已创建用户密钥", + "deleted": "已删除用户密钥", + "desc": "用户密钥可以在运行时作为环境变量传递到所有用户的存储库的各个流水线步骤。", + "events": { + "events": "对以下事件可用", + "pr_warning": "慎选这个选项:用户可以提交一个恶意推送请求以暴露你的密钥。" + }, + "images": { + "desc": "此密钥可用于此处填写的镜像,多个镜像请使用逗号分隔,留空则允许所有镜像", + "images": "可用于以下镜像" + }, + "name": "名称", + "none": "还未添加任何密钥。", + "plugins_only": "仅对插件有效", + "save": "保存密钥", + "saved": "已保存用户密钥", + "secrets": "密钥", + "show": "显示所有密钥", + "value": "值" + }, + "settings": "用户设置", + "cli_and_api": { + "token": "个人访问令牌", + "api_usage": "API 使用示例", + "cli_usage": "CLI 用法示例", + "download_cli": "下载 CLI", + "reset_token": "重置令牌", + "swagger_ui": "Swagger UI", + "desc": "个人访问令牌、CLI 和 API 用法", + "cli_and_api": "CLI & API" + } } - }, - "secrets": { - "add": "添加密钥", - "created": "已创建用户密钥", - "deleted": "已删除用户密钥", - "desc": "用户密钥可以在运行时作为环境变量传递到所有用户的存储库的各个流水线步骤。", - "events": { - "events": "对以下事件可用", - "pr_warning": "慎选这个选项:用户可以提交一个恶意推送请求以暴露你的密钥。" - }, - "images": { - "desc": "此密钥可用于此处填写的镜像,多个镜像请使用逗号分隔,留空则允许所有镜像", - "images": "可用于以下镜像" - }, - "name": "名称", - "none": "还未添加任何密钥。", - "plugins_only": "仅对插件有效", - "save": "保存密钥", - "saved": "已保存用户密钥", - "secrets": "密钥", - "show": "显示所有密钥", - "value": "值" - }, - "settings": "用户设置" - } - }, - "username": "用户名", - "welcome": "欢迎来到 Woodpecker" + }, + "username": "用户名", + "welcome": "欢迎来到 Woodpecker", + "empty_list": "找不到 {entity} !", + "login_to_cli": "登录到 CLI", + "global_level_secret": "全局密钥", + "org_level_secret": "组织密钥", + "abort": "关于", + "cli_login_success": "登录到 CLI 成功", + "cli_login_failed": "登录到 CLI 失败", + "cli_login_denied": "登录 CLI 被拒绝", + "login_to_cli_description": "点击继续以登录到 CLI。", + "return_to_cli": "您现在可以关闭此选项卡并返回 CLI。" }