Merge branch 'main' into renovate/eslint-9.x

This commit is contained in:
qwerty287 2024-04-25 08:28:55 +02:00
commit 263d759896
No known key found for this signature in database
GPG key ID: 1218A32A886A5002
22 changed files with 7065 additions and 4620 deletions

View file

@ -1,6 +1,6 @@
steps: steps:
release-helper: release-helper:
image: woodpeckerci/plugin-ready-release-go:1.1.0 image: woodpeckerci/plugin-ready-release-go:1.1.1
pull: true pull: true
settings: settings:
release_branch: ${CI_REPO_DEFAULT_BRANCH} release_branch: ${CI_REPO_DEFAULT_BRANCH}

View file

@ -26,7 +26,7 @@ import (
var logPurgeCmd = &cli.Command{ var logPurgeCmd = &cli.Command{
Name: "purge", Name: "purge",
Usage: "purge a log", Usage: "purge a log",
ArgsUsage: "<repo-id|repo-full-name> <pipeline>", ArgsUsage: "<repo-id|repo-full-name> <pipeline> [step]",
Action: logPurge, Action: logPurge,
} }
@ -45,7 +45,21 @@ func logPurge(c *cli.Context) (err error) {
return err return err
} }
err = client.LogsPurge(repoID, number) stepArg := c.Args().Get(2) //nolint: gomnd
// TODO: Add lookup by name: stepID, err := internal.ParseStep(client, repoID, stepIDOrName)
var stepID int64
if len(stepArg) != 0 {
stepID, err = strconv.ParseInt(stepArg, 10, 64)
if err != nil {
return err
}
}
if stepID > 0 {
err = client.StepLogsPurge(repoID, number, stepID)
} else {
err = client.LogsPurge(repoID, number)
}
if err != nil { if err != nil {
return err return err
} }

View file

@ -359,20 +359,6 @@ when:
- platform: [linux/*, windows/amd64] - platform: [linux/*, windows/amd64]
``` ```
<!-- markdownlint-disable no-duplicate-heading -->
#### `environment`
<!-- markdownlint-enable no-duplicate-heading -->
Execute a step for deployment events matching the target deployment environment:
```yaml
when:
- environment: production
- event: deployment
```
#### `matrix` #### `matrix`
Execute a step for a single matrix permutation: Execute a step for a single matrix permutation:
@ -758,7 +744,7 @@ Workflows that should run even on failure should set the `runs_on` tag. See [her
Woodpecker gives the ability to configure privileged mode in the YAML. You can use this parameter to launch containers with escalated capabilities. Woodpecker gives the ability to configure privileged mode in the YAML. You can use this parameter to launch containers with escalated capabilities.
:::info :::info
Privileged mode is only available to trusted repositories and for security reasons should only be used in private environments. See [project settings](./71-project-settings.md#trusted) to enable trusted mode. Privileged mode is only available to trusted repositories and for security reasons should only be used in private environments. See [project settings](./75-project-settings.md#trusted) to enable trusted mode.
::: :::
```diff ```diff

View file

@ -6,7 +6,7 @@ In case there is a single configuration in `.woodpecker.yaml` Woodpecker will cr
By placing the configurations in a folder which is by default named `.woodpecker/` Woodpecker will create a pipeline with multiple workflows each named by the file they are defined in. Only `.yml` and `.yaml` files will be used and files in any subfolders like `.woodpecker/sub-folder/test.yaml` will be ignored. By placing the configurations in a folder which is by default named `.woodpecker/` Woodpecker will create a pipeline with multiple workflows each named by the file they are defined in. Only `.yml` and `.yaml` files will be used and files in any subfolders like `.woodpecker/sub-folder/test.yaml` will be ignored.
You can also set some custom path like `.my-ci/pipelines/` instead of `.woodpecker/` in the [project settings](./71-project-settings.md). You can also set some custom path like `.my-ci/pipelines/` instead of `.woodpecker/` in the [project settings](./75-project-settings.md).
## Benefits of using workflows ## Benefits of using workflows

View file

@ -3,7 +3,7 @@
Woodpecker gives the ability to define Docker volumes in the YAML. You can use this parameter to mount files or folders on the host machine into your containers. Woodpecker gives the ability to define Docker volumes in the YAML. You can use this parameter to mount files or folders on the host machine into your containers.
:::note :::note
Volumes are only available to trusted repositories and for security reasons should only be used in private environments. See [project settings](./71-project-settings.md#trusted) to enable trusted mode. Volumes are only available to trusted repositories and for security reasons should only be used in private environments. See [project settings](./75-project-settings.md#trusted) to enable trusted mode.
::: :::
```diff ```diff

View file

@ -0,0 +1,62 @@
# Linter
Woodpecker automatically lints your workflow files for errors, deprecations and bad habits. Errors and warnings are shown in the UI for any pipelines.
![errors and warnings in UI](./linter-warnings-errors.png)
## Running the linter from CLI
You can run the linter also manually from the CLI:
```shell
woodpecker-cli lint <workflow files>
```
## Bad habit warnings
Woodpecker warns you if your configuration contains some bad habits.
### Event filter for all steps
All your items in `when` blocks should have an `event` filter, so no step runs on all events. This is recommended because if new events are added, your steps probably shouldn't run on those as well.
Examples of an **incorrect** config for this rule:
```yaml
when:
- branch: main
- event: tag
```
This will trigger the warning because the first item (`branch: main`) does not filter with an event.
```yaml
steps:
- name: test
when:
branch: main
- name: deploy
when:
event: tag
```
Examples of a **correct** config for this rule:
```yaml
when:
- branch: main
event: push
- event: tag
```
```yaml
steps:
- name: test
when:
event: [tag, push]
- name: deploy
when:
- event: tag
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

View file

@ -11,6 +11,7 @@ Some versions need some changes to the server configuration or the pipeline conf
- Deprecated uppercasing all secret env vars, instead, the value of the `secrets` property is used. [Read more](./20-usage/40-secrets.md#use-secrets-in-commands) - Deprecated uppercasing all secret env vars, instead, the value of the `secrets` property is used. [Read more](./20-usage/40-secrets.md#use-secrets-in-commands)
- Deprecated alternative names for secrets, use `environment` with `from_secret` - Deprecated alternative names for secrets, use `environment` with `from_secret`
- Deprecated slice definition for env vars - Deprecated slice definition for env vars
- Deprecated `environment` filter, use `when.evaluate`
## 2.0.0 ## 2.0.0
@ -66,7 +67,7 @@ Some versions need some changes to the server configuration or the pipeline conf
Only projects created after updating will have an empty value by default. Existing projects will stick to the current pipeline path which is `.drone.yml` in most cases. Only projects created after updating will have an empty value by default. Existing projects will stick to the current pipeline path which is `.drone.yml` in most cases.
Read more about it at the [Project Settings](./20-usage/71-project-settings.md#pipeline-path) Read more about it at the [Project Settings](./20-usage/75-project-settings.md#pipeline-path)
- From version `0.15.0` ongoing there will be three types of docker images: `latest`, `next` and `x.x.x` with an alpine variant for each type like `latest-alpine`. - From version `0.15.0` ongoing there will be three types of docker images: `latest`, `next` and `x.x.x` with an alpine variant for each type like `latest-alpine`.
If you used `latest` before to try pre-release features you should switch to `next` after this release. If you used `latest` before to try pre-release features you should switch to `next` after this release.

View file

@ -43,7 +43,7 @@
}, },
"devDependencies": { "devDependencies": {
"@docusaurus/module-type-aliases": "^3.1.0", "@docusaurus/module-type-aliases": "^3.1.0",
"@docusaurus/tsconfig": "3.1.1", "@docusaurus/tsconfig": "3.2.1",
"@docusaurus/types": "^3.1.0", "@docusaurus/types": "^3.1.0",
"@types/node": "^20.11.30", "@types/node": "^20.11.30",
"@types/react": "^18.2.67", "@types/react": "^18.2.67",

File diff suppressed because it is too large Load diff

View file

@ -640,7 +640,7 @@ You can manually configure the clone step in your workflow for customization:
```diff ```diff
+clone: +clone:
+ git: + - name: git
+ image: woodpeckerci/plugin-git + image: woodpeckerci/plugin-git
steps: steps:
@ -666,7 +666,7 @@ Example configuration to use a custom clone plugin:
```diff ```diff
clone: clone:
git: - name: git
+ image: octocat/custom-git-plugin + image: octocat/custom-git-plugin
``` ```

View file

@ -19,6 +19,12 @@ type DeprecationErrorData struct {
Docs string `json:"docs"` Docs string `json:"docs"`
} }
type BadHabitErrorData struct {
File string `json:"file"`
Field string `json:"field"`
Docs string `json:"docs"`
}
func GetLinterData(e *types.PipelineError) *LinterErrorData { func GetLinterData(e *types.PipelineError) *LinterErrorData {
if e.Type != types.PipelineErrorTypeLinter { if e.Type != types.PipelineErrorTypeLinter {
return nil return nil

View file

@ -305,7 +305,39 @@ func (l *Linter) lintDeprecations(config *WorkflowConfig) (err error) {
Data: errors.DeprecationErrorData{ Data: errors.DeprecationErrorData{
File: config.File, File: config.File,
Field: fmt.Sprintf("steps.%s.secrets[%d]", step.Name, i), Field: fmt.Sprintf("steps.%s.secrets[%d]", step.Name, i),
Docs: "https://woodpecker-ci.org/docs/usage/workflow-syntax#event", Docs: "https://woodpecker-ci.org/docs/usage/secrets#use-secrets-in-settings-and-environment",
},
IsWarning: true,
})
}
}
}
for i, c := range parsed.When.Constraints {
if !c.Environment.IsEmpty() {
err = multierr.Append(err, &errorTypes.PipelineError{
Type: errorTypes.PipelineErrorTypeDeprecation,
Message: "environment filters are deprecated, use evaluate with CI_PIPELINE_DEPLOY_TARGET",
Data: errors.DeprecationErrorData{
File: config.File,
Field: fmt.Sprintf("when[%d].environment", i),
Docs: "https://woodpecker-ci.org/docs/usage/workflow-syntax#evaluate",
},
IsWarning: true,
})
}
}
for _, step := range parsed.Steps.ContainerList {
for i, c := range step.When.Constraints {
if !c.Environment.IsEmpty() {
err = multierr.Append(err, &errorTypes.PipelineError{
Type: errorTypes.PipelineErrorTypeDeprecation,
Message: "environment filters are deprecated, use evaluate with CI_PIPELINE_DEPLOY_TARGET",
Data: errors.DeprecationErrorData{
File: config.File,
Field: fmt.Sprintf("steps.%s.when[%d].environment", step.Name, i),
Docs: "https://woodpecker-ci.org/docs/usage/workflow-syntax#evaluate",
}, },
IsWarning: true, IsWarning: true,
}) })
@ -351,10 +383,11 @@ func (l *Linter) lintBadHabits(config *WorkflowConfig) (err error) {
if field != "" { if field != "" {
err = multierr.Append(err, &errorTypes.PipelineError{ err = multierr.Append(err, &errorTypes.PipelineError{
Type: errorTypes.PipelineErrorTypeBadHabit, Type: errorTypes.PipelineErrorTypeBadHabit,
Message: "Please set an event filter on all when branches", Message: "Please set an event filter for all steps or the whole workflow on all items of the when block",
Data: errors.LinterErrorData{ Data: errors.BadHabitErrorData{
File: config.File, File: config.File,
Field: field, Field: field,
Docs: "https://woodpecker-ci.org/docs/usage/linter#event-filter-for-all-steps",
}, },
IsWarning: true, IsWarning: true,
}) })

View file

@ -189,11 +189,11 @@ func TestBadHabits(t *testing.T) {
}{ }{
{ {
from: "steps: { build: { image: golang } }", from: "steps: { build: { image: golang } }",
want: "Please set an event filter on all when branches", want: "Please set an event filter for all steps or the whole workflow on all items of the when block",
}, },
{ {
from: "when: [{branch: xyz}, {event: push}]\nsteps: { build: { image: golang } }", from: "when: [{branch: xyz}, {event: push}]\nsteps: { build: { image: golang } }",
want: "Please set an event filter on all when branches", want: "Please set an event filter for all steps or the whole workflow on all items of the when block",
}, },
} }

View file

@ -60,7 +60,7 @@
"prettier": "^3.2.4", "prettier": "^3.2.4",
"replace-in-file": "^7.1.0", "replace-in-file": "^7.1.0",
"tinycolor2": "^1.6.0", "tinycolor2": "^1.6.0",
"typescript": "5.4.3", "typescript": "5.4.5",
"typescript-eslint": "^7.6.0", "typescript-eslint": "^7.6.0",
"unplugin-icons": "^0.18.2", "unplugin-icons": "^0.18.2",
"unplugin-vue-components": "^0.26.0", "unplugin-vue-components": "^0.26.0",

View file

@ -37,7 +37,7 @@ dependencies:
version: 2.1.3 version: 2.1.3
pinia: pinia:
specifier: ^2.1.7 specifier: ^2.1.7
version: 2.1.7(typescript@5.4.3)(vue@3.4.21) version: 2.1.7(typescript@5.4.5)(vue@3.4.21)
prismjs: prismjs:
specifier: ^1.29.0 specifier: ^1.29.0
version: 1.29.0 version: 1.29.0
@ -46,7 +46,7 @@ dependencies:
version: 7.6.0 version: 7.6.0
vue: vue:
specifier: ^3.4.15 specifier: ^3.4.15
version: 3.4.21(typescript@5.4.3) version: 3.4.21(typescript@5.4.5)
vue-i18n: vue-i18n:
specifier: ^9.9.0 specifier: ^9.9.0
version: 9.10.2(vue@3.4.21) version: 9.10.2(vue@3.4.21)
@ -78,10 +78,10 @@ devDependencies:
version: 7.5.8 version: 7.5.8
'@typescript-eslint/eslint-plugin': '@typescript-eslint/eslint-plugin':
specifier: ^7.0.0 specifier: ^7.0.0
version: 7.4.0(@typescript-eslint/parser@7.4.0)(eslint@9.0.0)(typescript@5.4.3) version: 7.4.0(@typescript-eslint/parser@7.4.0)(eslint@9.0.0)(typescript@5.4.5)
'@typescript-eslint/parser': '@typescript-eslint/parser':
specifier: ^7.0.0 specifier: ^7.0.0
version: 7.4.0(eslint@9.0.0)(typescript@5.4.3) version: 7.4.0(eslint@9.0.0)(typescript@5.4.5)
'@vitejs/plugin-vue': '@vitejs/plugin-vue':
specifier: ^5.0.3 specifier: ^5.0.3
version: 5.0.4(vite@5.2.7)(vue@3.4.21) version: 5.0.4(vite@5.2.7)(vue@3.4.21)
@ -131,11 +131,11 @@ devDependencies:
specifier: ^1.6.0 specifier: ^1.6.0
version: 1.6.0 version: 1.6.0
typescript: typescript:
specifier: 5.4.3 specifier: 5.4.5
version: 5.4.3 version: 5.4.5
typescript-eslint: typescript-eslint:
specifier: ^7.6.0 specifier: ^7.6.0
version: 7.7.0(eslint@9.0.0)(typescript@5.4.3) version: 7.7.0(eslint@9.0.0)(typescript@5.4.5)
unplugin-icons: unplugin-icons:
specifier: ^0.18.2 specifier: ^0.18.2
version: 0.18.5(@vue/compiler-sfc@3.4.21) version: 0.18.5(@vue/compiler-sfc@3.4.21)
@ -159,7 +159,7 @@ devDependencies:
version: 9.4.2(eslint@9.0.0) version: 9.4.2(eslint@9.0.0)
vue-tsc: vue-tsc:
specifier: ^2.0.0 specifier: ^2.0.0
version: 2.0.7(typescript@5.4.3) version: 2.0.7(typescript@5.4.5)
windicss: windicss:
specifier: ^3.5.6 specifier: ^3.5.6
version: 3.5.6 version: 3.5.6
@ -785,7 +785,7 @@ packages:
peerDependencies: peerDependencies:
vue: ^3.0.0 vue: ^3.0.0
dependencies: dependencies:
vue: 3.4.21(typescript@5.4.3) vue: 3.4.21(typescript@5.4.5)
dev: false dev: false
/@nodelib/fs.scandir@2.1.5: /@nodelib/fs.scandir@2.1.5:
@ -993,7 +993,7 @@ packages:
resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
dev: false dev: false
/@typescript-eslint/eslint-plugin@7.4.0(@typescript-eslint/parser@7.4.0)(eslint@9.0.0)(typescript@5.4.3): /@typescript-eslint/eslint-plugin@7.4.0(@typescript-eslint/parser@7.4.0)(eslint@9.0.0)(typescript@5.4.5):
resolution: {integrity: sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==} resolution: {integrity: sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
@ -1005,10 +1005,10 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@eslint-community/regexpp': 4.10.0 '@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.4.0(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/parser': 7.4.0(eslint@9.0.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.4.0 '@typescript-eslint/scope-manager': 7.4.0
'@typescript-eslint/type-utils': 7.4.0(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/type-utils': 7.4.0(eslint@9.0.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.4.0(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/utils': 7.4.0(eslint@9.0.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.4.0 '@typescript-eslint/visitor-keys': 7.4.0
debug: 4.3.4 debug: 4.3.4
eslint: 9.0.0 eslint: 9.0.0
@ -1016,13 +1016,13 @@ packages:
ignore: 5.3.1 ignore: 5.3.1
natural-compare: 1.4.0 natural-compare: 1.4.0
semver: 7.6.0 semver: 7.6.0
ts-api-utils: 1.3.0(typescript@5.4.3) ts-api-utils: 1.3.0(typescript@5.4.5)
typescript: 5.4.3 typescript: 5.4.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0)(eslint@9.0.0)(typescript@5.4.3): /@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0)(eslint@9.0.0)(typescript@5.4.5):
resolution: {integrity: sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==} resolution: {integrity: sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
@ -1034,10 +1034,10 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@eslint-community/regexpp': 4.10.0 '@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.7.0(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/parser': 7.7.0(eslint@9.0.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.7.0 '@typescript-eslint/scope-manager': 7.7.0
'@typescript-eslint/type-utils': 7.7.0(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/type-utils': 7.7.0(eslint@9.0.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.7.0 '@typescript-eslint/visitor-keys': 7.7.0
debug: 4.3.4 debug: 4.3.4
eslint: 9.0.0 eslint: 9.0.0
@ -1045,13 +1045,13 @@ packages:
ignore: 5.3.1 ignore: 5.3.1
natural-compare: 1.4.0 natural-compare: 1.4.0
semver: 7.6.0 semver: 7.6.0
ts-api-utils: 1.3.0(typescript@5.4.3) ts-api-utils: 1.3.0(typescript@5.4.5)
typescript: 5.4.3 typescript: 5.4.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/parser@7.4.0(eslint@9.0.0)(typescript@5.4.3): /@typescript-eslint/parser@7.4.0(eslint@9.0.0)(typescript@5.4.5):
resolution: {integrity: sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==} resolution: {integrity: sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
@ -1063,16 +1063,16 @@ packages:
dependencies: dependencies:
'@typescript-eslint/scope-manager': 7.4.0 '@typescript-eslint/scope-manager': 7.4.0
'@typescript-eslint/types': 7.4.0 '@typescript-eslint/types': 7.4.0
'@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.3) '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.4.0 '@typescript-eslint/visitor-keys': 7.4.0
debug: 4.3.4 debug: 4.3.4
eslint: 9.0.0 eslint: 9.0.0
typescript: 5.4.3 typescript: 5.4.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.4.3): /@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.4.5):
resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==} resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
@ -1084,11 +1084,11 @@ packages:
dependencies: dependencies:
'@typescript-eslint/scope-manager': 7.7.0 '@typescript-eslint/scope-manager': 7.7.0
'@typescript-eslint/types': 7.7.0 '@typescript-eslint/types': 7.7.0
'@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.3) '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.7.0 '@typescript-eslint/visitor-keys': 7.7.0
debug: 4.3.4 debug: 4.3.4
eslint: 9.0.0 eslint: 9.0.0
typescript: 5.4.3 typescript: 5.4.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
@ -1109,7 +1109,7 @@ packages:
'@typescript-eslint/visitor-keys': 7.7.0 '@typescript-eslint/visitor-keys': 7.7.0
dev: true dev: true
/@typescript-eslint/type-utils@7.4.0(eslint@9.0.0)(typescript@5.4.3): /@typescript-eslint/type-utils@7.4.0(eslint@9.0.0)(typescript@5.4.5):
resolution: {integrity: sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==} resolution: {integrity: sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
@ -1119,17 +1119,17 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.3) '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.4.0(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/utils': 7.4.0(eslint@9.0.0)(typescript@5.4.5)
debug: 4.3.4 debug: 4.3.4
eslint: 9.0.0 eslint: 9.0.0
ts-api-utils: 1.3.0(typescript@5.4.3) ts-api-utils: 1.3.0(typescript@5.4.5)
typescript: 5.4.3 typescript: 5.4.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/type-utils@7.7.0(eslint@9.0.0)(typescript@5.4.3): /@typescript-eslint/type-utils@7.7.0(eslint@9.0.0)(typescript@5.4.5):
resolution: {integrity: sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==} resolution: {integrity: sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
@ -1139,12 +1139,12 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.3) '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.4.5)
debug: 4.3.4 debug: 4.3.4
eslint: 9.0.0 eslint: 9.0.0
ts-api-utils: 1.3.0(typescript@5.4.3) ts-api-utils: 1.3.0(typescript@5.4.5)
typescript: 5.4.3 typescript: 5.4.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
@ -1159,7 +1159,7 @@ packages:
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
dev: true dev: true
/@typescript-eslint/typescript-estree@7.4.0(typescript@5.4.3): /@typescript-eslint/typescript-estree@7.4.0(typescript@5.4.5):
resolution: {integrity: sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==} resolution: {integrity: sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
@ -1175,13 +1175,13 @@ packages:
is-glob: 4.0.3 is-glob: 4.0.3
minimatch: 9.0.3 minimatch: 9.0.3
semver: 7.6.0 semver: 7.6.0
ts-api-utils: 1.3.0(typescript@5.4.3) ts-api-utils: 1.3.0(typescript@5.4.5)
typescript: 5.4.3 typescript: 5.4.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/typescript-estree@7.7.0(typescript@5.4.3): /@typescript-eslint/typescript-estree@7.7.0(typescript@5.4.5):
resolution: {integrity: sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==} resolution: {integrity: sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
@ -1197,13 +1197,13 @@ packages:
is-glob: 4.0.3 is-glob: 4.0.3
minimatch: 9.0.4 minimatch: 9.0.4
semver: 7.6.0 semver: 7.6.0
ts-api-utils: 1.3.0(typescript@5.4.3) ts-api-utils: 1.3.0(typescript@5.4.5)
typescript: 5.4.3 typescript: 5.4.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/utils@7.4.0(eslint@9.0.0)(typescript@5.4.3): /@typescript-eslint/utils@7.4.0(eslint@9.0.0)(typescript@5.4.5):
resolution: {integrity: sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==} resolution: {integrity: sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
@ -1214,7 +1214,7 @@ packages:
'@types/semver': 7.5.8 '@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 7.4.0 '@typescript-eslint/scope-manager': 7.4.0
'@typescript-eslint/types': 7.4.0 '@typescript-eslint/types': 7.4.0
'@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.3) '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.5)
eslint: 9.0.0 eslint: 9.0.0
semver: 7.6.0 semver: 7.6.0
transitivePeerDependencies: transitivePeerDependencies:
@ -1222,7 +1222,7 @@ packages:
- typescript - typescript
dev: true dev: true
/@typescript-eslint/utils@7.7.0(eslint@9.0.0)(typescript@5.4.3): /@typescript-eslint/utils@7.7.0(eslint@9.0.0)(typescript@5.4.5):
resolution: {integrity: sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==} resolution: {integrity: sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
@ -1233,7 +1233,7 @@ packages:
'@types/semver': 7.5.8 '@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 7.7.0 '@typescript-eslint/scope-manager': 7.7.0
'@typescript-eslint/types': 7.7.0 '@typescript-eslint/types': 7.7.0
'@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.3) '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5)
eslint: 9.0.0 eslint: 9.0.0
semver: 7.6.0 semver: 7.6.0
transitivePeerDependencies: transitivePeerDependencies:
@ -1265,7 +1265,7 @@ packages:
vue: ^3.2.25 vue: ^3.2.25
dependencies: dependencies:
vite: 5.2.7(@types/node@20.12.2) vite: 5.2.7(@types/node@20.12.2)
vue: 3.4.21(typescript@5.4.3) vue: 3.4.21(typescript@5.4.5)
dev: true dev: true
/@volar/language-core@2.1.5: /@volar/language-core@2.1.5:
@ -1325,7 +1325,7 @@ packages:
resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==} resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==}
dev: false dev: false
/@vue/language-core@2.0.7(typescript@5.4.3): /@vue/language-core@2.0.7(typescript@5.4.5):
resolution: {integrity: sha512-Vh1yZX3XmYjn9yYLkjU8DN6L0ceBtEcapqiyclHne8guG84IaTzqtvizZB1Yfxm3h6m7EIvjerLO5fvOZO6IIQ==} resolution: {integrity: sha512-Vh1yZX3XmYjn9yYLkjU8DN6L0ceBtEcapqiyclHne8guG84IaTzqtvizZB1Yfxm3h6m7EIvjerLO5fvOZO6IIQ==}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
@ -1339,7 +1339,7 @@ packages:
computeds: 0.0.1 computeds: 0.0.1
minimatch: 9.0.3 minimatch: 9.0.3
path-browserify: 1.0.1 path-browserify: 1.0.1
typescript: 5.4.3 typescript: 5.4.5
vue-template-compiler: 2.7.16 vue-template-compiler: 2.7.16
dev: true dev: true
@ -1368,7 +1368,7 @@ packages:
dependencies: dependencies:
'@vue/compiler-ssr': 3.4.21 '@vue/compiler-ssr': 3.4.21
'@vue/shared': 3.4.21 '@vue/shared': 3.4.21
vue: 3.4.21(typescript@5.4.3) vue: 3.4.21(typescript@5.4.5)
/@vue/shared@3.4.21: /@vue/shared@3.4.21:
resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==}
@ -2105,8 +2105,8 @@ packages:
'@typescript-eslint/parser': ^7.0.0 '@typescript-eslint/parser': ^7.0.0
eslint: ^8.56.0 eslint: ^8.56.0
dependencies: dependencies:
'@typescript-eslint/eslint-plugin': 7.4.0(@typescript-eslint/parser@7.4.0)(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/eslint-plugin': 7.4.0(@typescript-eslint/parser@7.4.0)(eslint@9.0.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.4.0(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/parser': 7.4.0(eslint@9.0.0)(typescript@5.4.5)
eslint: 9.0.0 eslint: 9.0.0
eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@9.0.0) eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@9.0.0)
transitivePeerDependencies: transitivePeerDependencies:
@ -2153,7 +2153,7 @@ packages:
eslint-import-resolver-webpack: eslint-import-resolver-webpack:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/parser': 7.4.0(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/parser': 7.4.0(eslint@9.0.0)(typescript@5.4.5)
debug: 3.2.7 debug: 3.2.7
eslint: 9.0.0 eslint: 9.0.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
@ -2171,7 +2171,7 @@ packages:
'@typescript-eslint/parser': '@typescript-eslint/parser':
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/parser': 7.4.0(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/parser': 7.4.0(eslint@9.0.0)(typescript@5.4.5)
array-includes: 3.1.8 array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5 array.prototype.findlastindex: 1.2.5
array.prototype.flat: 1.3.2 array.prototype.flat: 1.3.2
@ -3306,7 +3306,7 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'} engines: {node: '>=8.6'}
/pinia@2.1.7(typescript@5.4.3)(vue@3.4.21): /pinia@2.1.7(typescript@5.4.5)(vue@3.4.21):
resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==} resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==}
peerDependencies: peerDependencies:
'@vue/composition-api': ^1.4.0 '@vue/composition-api': ^1.4.0
@ -3319,8 +3319,8 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@vue/devtools-api': 6.6.1 '@vue/devtools-api': 6.6.1
typescript: 5.4.3 typescript: 5.4.5
vue: 3.4.21(typescript@5.4.3) vue: 3.4.21(typescript@5.4.5)
vue-demi: 0.14.7(vue@3.4.21) vue-demi: 0.14.7(vue@3.4.21)
dev: false dev: false
@ -3747,13 +3747,13 @@ packages:
dependencies: dependencies:
is-number: 7.0.0 is-number: 7.0.0
/ts-api-utils@1.3.0(typescript@5.4.3): /ts-api-utils@1.3.0(typescript@5.4.5):
resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
engines: {node: '>=16'} engines: {node: '>=16'}
peerDependencies: peerDependencies:
typescript: '>=4.2.0' typescript: '>=4.2.0'
dependencies: dependencies:
typescript: 5.4.3 typescript: 5.4.5
dev: true dev: true
/tsconfig-paths@3.15.0: /tsconfig-paths@3.15.0:
@ -3825,7 +3825,7 @@ packages:
possible-typed-array-names: 1.0.0 possible-typed-array-names: 1.0.0
dev: true dev: true
/typescript-eslint@7.7.0(eslint@9.0.0)(typescript@5.4.3): /typescript-eslint@7.7.0(eslint@9.0.0)(typescript@5.4.5):
resolution: {integrity: sha512-wZZ+7mTQJCn4mGAvzdERtL4vwKGM/mF9cMSMeKUllz3Hgbd1Mdd5L60Q+nJmCio9RB4OyMMr0EX4Ry2Q7jiAyw==} resolution: {integrity: sha512-wZZ+7mTQJCn4mGAvzdERtL4vwKGM/mF9cMSMeKUllz3Hgbd1Mdd5L60Q+nJmCio9RB4OyMMr0EX4Ry2Q7jiAyw==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
@ -3835,17 +3835,17 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0)(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0)(eslint@9.0.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.7.0(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/parser': 7.7.0(eslint@9.0.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.4.3) '@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.4.5)
eslint: 9.0.0 eslint: 9.0.0
typescript: 5.4.3 typescript: 5.4.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/typescript@5.4.3: /typescript@5.4.5:
resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==}
engines: {node: '>=14.17'} engines: {node: '>=14.17'}
hasBin: true hasBin: true
@ -3924,7 +3924,7 @@ packages:
minimatch: 9.0.3 minimatch: 9.0.3
resolve: 1.22.8 resolve: 1.22.8
unplugin: 1.10.0 unplugin: 1.10.0
vue: 3.4.21(typescript@5.4.3) vue: 3.4.21(typescript@5.4.5)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- supports-color - supports-color
@ -3991,7 +3991,7 @@ packages:
vue: '>=3.2.13' vue: '>=3.2.13'
dependencies: dependencies:
svgo: 3.2.0 svgo: 3.2.0
vue: 3.4.21(typescript@5.4.3) vue: 3.4.21(typescript@5.4.5)
dev: true dev: true
/vite@5.2.7(@types/node@20.12.2): /vite@5.2.7(@types/node@20.12.2):
@ -4042,7 +4042,7 @@ packages:
'@vue/composition-api': '@vue/composition-api':
optional: true optional: true
dependencies: dependencies:
vue: 3.4.21(typescript@5.4.3) vue: 3.4.21(typescript@5.4.5)
dev: false dev: false
/vue-eslint-parser@9.4.2(eslint@9.0.0): /vue-eslint-parser@9.4.2(eslint@9.0.0):
@ -4072,7 +4072,7 @@ packages:
'@intlify/core-base': 9.10.2 '@intlify/core-base': 9.10.2
'@intlify/shared': 9.10.2 '@intlify/shared': 9.10.2
'@vue/devtools-api': 6.6.1 '@vue/devtools-api': 6.6.1
vue: 3.4.21(typescript@5.4.3) vue: 3.4.21(typescript@5.4.5)
dev: false dev: false
/vue-router@4.3.0(vue@3.4.21): /vue-router@4.3.0(vue@3.4.21):
@ -4081,7 +4081,7 @@ packages:
vue: ^3.2.0 vue: ^3.2.0
dependencies: dependencies:
'@vue/devtools-api': 6.6.1 '@vue/devtools-api': 6.6.1
vue: 3.4.21(typescript@5.4.3) vue: 3.4.21(typescript@5.4.5)
dev: false dev: false
/vue-template-compiler@2.7.16: /vue-template-compiler@2.7.16:
@ -4091,19 +4091,19 @@ packages:
he: 1.2.0 he: 1.2.0
dev: true dev: true
/vue-tsc@2.0.7(typescript@5.4.3): /vue-tsc@2.0.7(typescript@5.4.5):
resolution: {integrity: sha512-LYa0nInkfcDBB7y8jQ9FQ4riJTRNTdh98zK/hzt4gEpBZQmf30dPhP+odzCa+cedGz6B/guvJEd0BavZaRptjg==} resolution: {integrity: sha512-LYa0nInkfcDBB7y8jQ9FQ4riJTRNTdh98zK/hzt4gEpBZQmf30dPhP+odzCa+cedGz6B/guvJEd0BavZaRptjg==}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
dependencies: dependencies:
'@volar/typescript': 2.1.5 '@volar/typescript': 2.1.5
'@vue/language-core': 2.0.7(typescript@5.4.3) '@vue/language-core': 2.0.7(typescript@5.4.5)
semver: 7.6.0 semver: 7.6.0
typescript: 5.4.3 typescript: 5.4.5
dev: true dev: true
/vue@3.4.21(typescript@5.4.3): /vue@3.4.21(typescript@5.4.5):
resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
@ -4116,7 +4116,7 @@ packages:
'@vue/runtime-dom': 3.4.21 '@vue/runtime-dom': 3.4.21
'@vue/server-renderer': 3.4.21(vue@3.4.21) '@vue/server-renderer': 3.4.21(vue@3.4.21)
'@vue/shared': 3.4.21 '@vue/shared': 3.4.21
typescript: 5.4.3 typescript: 5.4.5
/webpack-sources@3.2.3: /webpack-sources@3.2.3:
resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}

View file

@ -43,10 +43,10 @@
}, },
"not_allowed": "Du darfst nicht auf die Server-Einstellungen zugreifen", "not_allowed": "Du darfst nicht auf die Server-Einstellungen zugreifen",
"orgs": { "orgs": {
"delete_confirm": "Möchtest du diese Organisation wirklich löschen? Das wird auch alle Repositories löschen, die dieser Organisation gehören.", "delete_confirm": "Möchtest du diese Organisation wirklich löschen? Das wird auch alle Repositorys löschen, die dieser Organisation gehören.",
"delete_org": "Organisation löschen", "delete_org": "Organisation löschen",
"deleted": "Organisation gelöscht", "deleted": "Organisation gelöscht",
"desc": "Organisationen mit Repositories auf diesem Server", "desc": "Organisationen mit Repositorys auf diesem Server",
"none": "Es gibt noch keine Organisationen.", "none": "Es gibt noch keine Organisationen.",
"org_settings": "Organisations-Einstellungen", "org_settings": "Organisations-Einstellungen",
"orgs": "Organisationen", "orgs": "Organisationen",
@ -74,14 +74,14 @@
"waiting_for": "wartet auf" "waiting_for": "wartet auf"
}, },
"repos": { "repos": {
"desc": "Repositories, die auf dem Server aktiviert sind oder waren", "desc": "Repositorys, die auf dem Server aktiviert sind oder waren",
"disabled": "Deaktiviert", "disabled": "Deaktiviert",
"none": "Es gibt noch keine Repositories.", "none": "Es gibt noch keine Repositorys.",
"repair": { "repair": {
"repair": "Alle reparieren", "repair": "Alle reparieren",
"success": "Repositories repariert" "success": "Repositorys repariert"
}, },
"repos": "Repositories", "repos": "Repositorys",
"settings": "Repository-Einstellungen", "settings": "Repository-Einstellungen",
"view": "Repository anzeigen" "view": "Repository anzeigen"
}, },
@ -89,7 +89,7 @@
"add": "Geheimnis hinzufügen", "add": "Geheimnis hinzufügen",
"created": "Globales Geheimnis erstellt", "created": "Globales Geheimnis erstellt",
"deleted": "Globales Geheimnis gelöscht", "deleted": "Globales Geheimnis gelöscht",
"desc": "Globale Geheimnisse können an alle Repositories als Umgebungsvariablen übergeben werden.", "desc": "Globale Geheimnisse können an alle Repositorys als Umgebungsvariablen übergeben werden.",
"events": { "events": {
"events": "Verfügbar für folgende Ereignisse", "events": "Verfügbar für folgende Ereignisse",
"pr_warning": "Bitte sei vorsichtig mit dieser Option, da eine böswillige Person über einen Pull-Request deine Geheimnisse erhalten könnte." "pr_warning": "Bitte sei vorsichtig mit dieser Option, da eine böswillige Person über einen Pull-Request deine Geheimnisse erhalten könnte."
@ -118,7 +118,7 @@
"avatar_url": "URL des Profilbilds", "avatar_url": "URL des Profilbilds",
"cancel": "Abbrechen", "cancel": "Abbrechen",
"created": "Benutzer erstellt", "created": "Benutzer erstellt",
"delete_confirm": "Möchtest du diesen Benutzer wirklich löschen? Das wird auch alle Repositories löschen, die diesem Benutzer gehören.", "delete_confirm": "Möchtest du diesen Benutzer wirklich löschen? Das wird auch alle Repositorys löschen, die diesem Benutzer gehören.",
"delete_user": "Benutzer löschen", "delete_user": "Benutzer löschen",
"deleted": "Benutzer gelöscht", "deleted": "Benutzer gelöscht",
"desc": "Auf diesem Server registrierte Benutzer", "desc": "Auf diesem Server registrierte Benutzer",
@ -158,7 +158,7 @@
"add": "Geheimnis hinzufügen", "add": "Geheimnis hinzufügen",
"created": "Organisations-Geheimnis erstellt", "created": "Organisations-Geheimnis erstellt",
"deleted": "Organisations-Geheimnis gelöscht", "deleted": "Organisations-Geheimnis gelöscht",
"desc": "Organisation-Geheimnisse können an alle Repositories der Organisation als Umgebungsvariablen übergeben werden.", "desc": "Organisation-Geheimnisse können an alle Repositorys der Organisation als Umgebungsvariablen übergeben werden.",
"events": { "events": {
"events": "Verfügbar für folgende Ereignisse", "events": "Verfügbar für folgende Ereignisse",
"pr_warning": "Bitte sei vorsichtig mit dieser Option, da eine böswillige Person über einen Pull-Request deine Geheimnisse erhalten könnte." "pr_warning": "Bitte sei vorsichtig mit dieser Option, da eine böswillige Person über einen Pull-Request deine Geheimnisse erhalten könnte."
@ -204,7 +204,7 @@
"enable": "Aktivieren", "enable": "Aktivieren",
"enabled": "Bereits aktiviert", "enabled": "Bereits aktiviert",
"list_reloaded": "Repository-Liste neu geladen", "list_reloaded": "Repository-Liste neu geladen",
"reload": "Repositories neu laden", "reload": "Repositorys neu laden",
"success": "Repository aktiviert" "success": "Repository aktiviert"
}, },
"manual_pipeline": { "manual_pipeline": {
@ -232,7 +232,8 @@
"log_auto_scroll_off": "Schalte automatisches folgen aus", "log_auto_scroll_off": "Schalte automatisches folgen aus",
"log_download": "Herunterladen", "log_download": "Herunterladen",
"restart": "Neustarten", "restart": "Neustarten",
"restart_success": "Pipeline neu gestartet" "restart_success": "Pipeline neu gestartet",
"log_delete": "Löschen"
}, },
"config": "Konfiguration", "config": "Konfiguration",
"errors": "Fehler ({count})", "errors": "Fehler ({count})",
@ -282,7 +283,9 @@
"step_not_started": "Dieser Schritt hat noch nicht begonnen.", "step_not_started": "Dieser Schritt hat noch nicht begonnen.",
"tasks": "Vorgänge", "tasks": "Vorgänge",
"warnings": "Warnungen ({count})", "warnings": "Warnungen ({count})",
"we_got_some_errors": "Oh nein, es gab einige Fehler!" "we_got_some_errors": "Oh nein, es gab einige Fehler!",
"log_delete_confirm": "Möchtest du die Logs diesen Schrittes wirklich löschen?",
"log_delete_error": "Es gab einen Fehler beim Löschen der Logs des Schrittes"
}, },
"pull_requests": "Pull-Requests", "pull_requests": "Pull-Requests",
"settings": { "settings": {
@ -383,7 +386,7 @@
"internal": "Intern" "internal": "Intern"
}, },
"private": { "private": {
"desc": "Nur du und andere Besitzer des Repositories können dieses Projekt sehen.", "desc": "Nur du und andere Besitzer des Repositorys können dieses Projekt sehen.",
"private": "Privat" "private": "Privat"
}, },
"public": { "public": {
@ -397,7 +400,7 @@
"desc": "Deployments von erolgreichen Pipelines erlauben. Nur benutzen, wenn du allen Nutzern mit Push-Zugriff vertraust." "desc": "Deployments von erolgreichen Pipelines erlauben. Nur benutzen, wenn du allen Nutzern mit Push-Zugriff vertraust."
} }
}, },
"not_allowed": "Zugriff auf die Einstellungen dieses Repositories nicht erlaubt", "not_allowed": "Zugriff auf die Einstellungen dieses Repositorys nicht erlaubt",
"registries": { "registries": {
"add": "Registry hinzufügen", "add": "Registry hinzufügen",
"address": { "address": {
@ -443,10 +446,10 @@
}, },
"settings": "Einstellungen" "settings": "Einstellungen"
}, },
"user_none": "Diese Organisation / dieser Benutzer hat noch keine Repositories." "user_none": "Diese Organisation / dieser Benutzer hat noch keine Repositorys."
}, },
"repos": "Repos", "repos": "Repos",
"repositories": "Repositories", "repositories": "Repositorys",
"running_version": "Du verwendest Woodpecker {0}", "running_version": "Du verwendest Woodpecker {0}",
"search": "Suche…", "search": "Suche…",
"time": { "time": {
@ -492,7 +495,7 @@
"add": "Geheimnis hinzufügen", "add": "Geheimnis hinzufügen",
"created": "Benutzer-Geheimnis erstellt", "created": "Benutzer-Geheimnis erstellt",
"deleted": "Benutzer-Geheimnis gelöscht", "deleted": "Benutzer-Geheimnis gelöscht",
"desc": "Benutzer-Geheimnisse können an alle Repositories des Benutzers als Umgebungsvariablen übergeben werden.", "desc": "Benutzer-Geheimnisse können an alle Repositorys des Benutzers als Umgebungsvariablen übergeben werden.",
"events": { "events": {
"events": "Verfügbar für folgende Ereignisse", "events": "Verfügbar für folgende Ereignisse",
"pr_warning": "Bitte sei vorsichtig mit dieser Option, da eine böswillige Person über einen Pull-Request deine Geheimnisse erhalten könnte." "pr_warning": "Bitte sei vorsichtig mit dieser Option, da eine böswillige Person über einen Pull-Request deine Geheimnisse erhalten könnte."

View file

@ -11,13 +11,16 @@
}" }"
/> />
<span>[{{ error.type }}]</span> <span>[{{ error.type }}]</span>
<span v-if="isLinterError(error) || isDeprecationError(error)" class="whitespace-nowrap"> <span
v-if="isLinterError(error) || isDeprecationError(error) || isBadHabitError(error)"
class="whitespace-nowrap"
>
<span v-if="error.data?.file" class="font-bold">{{ error.data?.file }}: </span> <span v-if="error.data?.file" class="font-bold">{{ error.data?.file }}: </span>
<span>{{ error.data?.field }}</span> <span>{{ error.data?.field }}</span>
</span> </span>
<span v-else /> <span v-else />
<a <a
v-if="isDeprecationError(error)" v-if="isDeprecationError(error) || isBadHabitError(error)"
:href="error.data?.docs" :href="error.data?.docs"
target="_blank" target="_blank"
class="underline col-span-full col-start-2 md:col-span-auto md:col-start-auto" class="underline col-span-full col-start-2 md:col-span-auto md:col-start-auto"
@ -52,6 +55,10 @@ function isDeprecationError(
): error is PipelineError<{ file: string; field: string; docs: string }> { ): error is PipelineError<{ file: string; field: string; docs: string }> {
return error.type === 'deprecation'; return error.type === 'deprecation';
} }
function isBadHabitError(error: PipelineError): error is PipelineError<{ file?: string; field: string; docs: string }> {
return error.type === 'bad_habit';
}
</script> </script>
<style scoped> <style scoped>

View file

@ -36,11 +36,11 @@ const (
pathRepair = "%s/api/repos/%d/repair" pathRepair = "%s/api/repos/%d/repair"
pathPipelines = "%s/api/repos/%d/pipelines" pathPipelines = "%s/api/repos/%d/pipelines"
pathPipeline = "%s/api/repos/%d/pipelines/%v" pathPipeline = "%s/api/repos/%d/pipelines/%v"
pathLogs = "%s/api/repos/%d/logs/%d/%d" pathPipelineLogs = "%s/api/repos/%d/logs/%d"
pathStepLogs = "%s/api/repos/%d/logs/%d/%d"
pathApprove = "%s/api/repos/%d/pipelines/%d/approve" pathApprove = "%s/api/repos/%d/pipelines/%d/approve"
pathDecline = "%s/api/repos/%d/pipelines/%d/decline" pathDecline = "%s/api/repos/%d/pipelines/%d/decline"
pathStop = "%s/api/repos/%d/pipelines/%d/cancel" pathStop = "%s/api/repos/%d/pipelines/%d/cancel"
pathLogPurge = "%s/api/repos/%d/logs/%d"
pathRepoSecrets = "%s/api/repos/%d/secrets" pathRepoSecrets = "%s/api/repos/%d/secrets"
pathRepoSecret = "%s/api/repos/%d/secrets/%s" pathRepoSecret = "%s/api/repos/%d/secrets/%s"
pathRepoRegistries = "%s/api/repos/%d/registry" pathRepoRegistries = "%s/api/repos/%d/registry"
@ -297,14 +297,28 @@ func (c *client) PipelineKill(repoID, pipeline int64) error {
return err return err
} }
// PipelineLogs returns the pipeline logs for the specified step. // LogsPurge purges the pipeline all steps logs for the specified pipeline.
func (c *client) LogsPurge(repoID, pipeline int64) error {
uri := fmt.Sprintf(pathPipelineLogs, c.addr, repoID, pipeline)
err := c.delete(uri)
return err
}
// StepLogEntries returns the pipeline logs for the specified step.
func (c *client) StepLogEntries(repoID, num, step int64) ([]*LogEntry, error) { func (c *client) StepLogEntries(repoID, num, step int64) ([]*LogEntry, error) {
uri := fmt.Sprintf(pathLogs, c.addr, repoID, num, step) uri := fmt.Sprintf(pathStepLogs, c.addr, repoID, num, step)
var out []*LogEntry var out []*LogEntry
err := c.get(uri, &out) err := c.get(uri, &out)
return out, err return out, err
} }
// StepLogsPurge purges the pipeline logs for the specified step.
func (c *client) StepLogsPurge(repoID, pipelineNumber, stepID int64) error {
uri := fmt.Sprintf(pathStepLogs, c.addr, repoID, pipelineNumber, stepID)
err := c.delete(uri)
return err
}
// Deploy triggers a deployment for an existing pipeline using the // Deploy triggers a deployment for an existing pipeline using the
// specified target environment. // specified target environment.
func (c *client) Deploy(repoID, pipeline int64, env string, params map[string]string) (*Pipeline, error) { func (c *client) Deploy(repoID, pipeline int64, env string, params map[string]string) (*Pipeline, error) {
@ -317,13 +331,6 @@ func (c *client) Deploy(repoID, pipeline int64, env string, params map[string]st
return out, err return out, err
} }
// LogsPurge purges the pipeline logs for the specified pipeline.
func (c *client) LogsPurge(repoID, pipeline int64) error {
uri := fmt.Sprintf(pathLogPurge, c.addr, repoID, pipeline)
err := c.delete(uri)
return err
}
// Registry returns a registry by hostname. // Registry returns a registry by hostname.
func (c *client) Registry(repoID int64, hostname string) (*Registry, error) { func (c *client) Registry(repoID int64, hostname string) (*Registry, error) {
out := new(Registry) out := new(Registry)

View file

@ -118,6 +118,9 @@ type Client interface {
// LogsPurge purges the pipeline logs for the specified pipeline. // LogsPurge purges the pipeline logs for the specified pipeline.
LogsPurge(repoID, pipeline int64) error LogsPurge(repoID, pipeline int64) error
// StepLogsPurge purges the pipeline logs for the specified step.
StepLogsPurge(repoID, pipelineNumber, stepID int64) error
// Registry returns a registry by hostname. // Registry returns a registry by hostname.
Registry(repoID int64, hostname string) (*Registry, error) Registry(repoID int64, hostname string) (*Registry, error)

View file

@ -183,7 +183,10 @@ type (
// Info provides queue stats. // Info provides queue stats.
Info struct { Info struct {
Stats struct { Pending []Task `json:"pending"`
WaitingOnDeps []Task `json:"waiting_on_deps"`
Running []Task `json:"running"`
Stats struct {
Workers int `json:"worker_count"` Workers int `json:"worker_count"`
Pending int `json:"pending_count"` Pending int `json:"pending_count"`
WaitingOnDeps int `json:"waiting_on_deps_count"` WaitingOnDeps int `json:"waiting_on_deps_count"`