Commit graph

5391 commits

Author SHA1 Message Date
6543
eefa64e2d4
Add build option to Makefile for removing static compile flags (#3026)
this make it possible to remove one patch file from
https://gitlab.alpinelinux.org/alpine/aports/-/tree/master/testing/woodpecker
2023-12-27 14:01:56 +02:00
6543
840fca198e
make backend step dag generation deterministic (#3037)
the the generation for backend steps if a dag is used deterministic.

this also fix where the test randomly fail like in:
- https://ci.woodpecker-ci.org/repos/3780/pipeline/11057/30
- https://ci.woodpecker-ci.org/repos/3780/pipeline/11076/25
2023-12-27 12:38:33 +02:00
qwerty287
05f26bab00
Add another testcase (#3035)
Actually wanted to add this to #3030 but @6543 was too fast…
2023-12-27 10:51:39 +01:00
Andy Han
8c4480f281
Fix Wrong badgeUrl repo badge tab when rootPath is not empty (#3033)
Fix #3032
2023-12-27 10:38:27 +01:00
qwerty287
e575ffe72d
Add some tests (#3030) 2023-12-27 10:36:49 +01:00
qwerty287
5cb0ae053a
Fix go report badge (#3031)
mixed up the URLs…
2023-12-27 10:05:13 +01:00
qwerty287
6e298d726d
Update go report card badge (#3029) 2023-12-27 08:57:17 +01:00
qwerty287
c84d7ce1ac
Fix docs label (#3028)
`2.1` -> `2.1.x`
2023-12-27 08:55:22 +01:00
6543
fad31722c1
readme: update go reference badge (#3024) 2023-12-26 21:52:44 +01:00
woodpecker-bot
49764f6eba
🎉 Release 2.1.0 (#2868)
## [2.1.0](https://github.com/woodpecker-ci/woodpecker/releases/tag/2.1.0)
- 2023-12-26

###  Features

- Add pull request closed event
[[#2684](https://github.com/woodpecker-ci/woodpecker/pull/2684)]
- Add depends_on support for steps
[[#2771](https://github.com/woodpecker-ci/woodpecker/pull/2771)]
- gitlab: support nested repos
[[#2981](https://github.com/woodpecker-ci/woodpecker/pull/2981)]
- Support go plugins for forges and agent backends
[[#2751](https://github.com/woodpecker-ci/woodpecker/pull/2751)]

### 📈 Enhancement

- Show default branch on top
[[#3019](https://github.com/woodpecker-ci/woodpecker/pull/3019)]
- Support more addon types
[[#2984](https://github.com/woodpecker-ci/woodpecker/pull/2984)]
- Hide PR tab if PRs are disabled
[[#3004](https://github.com/woodpecker-ci/woodpecker/pull/3004)]
- Switch to ULID
[[#2986](https://github.com/woodpecker-ci/woodpecker/pull/2986)]
- Ignore pipelines without config
[[#2949](https://github.com/woodpecker-ci/woodpecker/pull/2949)]
- Link labels to input and select
[[#2974](https://github.com/woodpecker-ci/woodpecker/pull/2974)]
- Register Agent with hostname
[[#2936](https://github.com/woodpecker-ci/woodpecker/pull/2936)]
- Update slogan & logo
[[#2962](https://github.com/woodpecker-ci/woodpecker/pull/2962)]
- Improve error handling when activating a repository
[[#2965](https://github.com/woodpecker-ci/woodpecker/pull/2965)]
- Add check for storage where repo/org name is empty
[[#2968](https://github.com/woodpecker-ci/woodpecker/pull/2968)]
- Update pipeline icons
[[#2783](https://github.com/woodpecker-ci/woodpecker/pull/2783)]
- Kubernetes refactor
[[#2794](https://github.com/woodpecker-ci/woodpecker/pull/2794)]
- Export changed files via builtin environment variables
[[#2935](https://github.com/woodpecker-ci/woodpecker/pull/2935)]
- Show secrets from org and global level
[[#2873](https://github.com/woodpecker-ci/woodpecker/pull/2873)]
- Only update pipelineStatus in one place
[[#2952](https://github.com/woodpecker-ci/woodpecker/pull/2952)]
- Rename `engine` to `backend`
[[#2950](https://github.com/woodpecker-ci/woodpecker/pull/2950)]
- Add linting for `log.Fatal()`
[[#2946](https://github.com/woodpecker-ci/woodpecker/pull/2946)]
- Remove separate root path config
[[#2943](https://github.com/woodpecker-ci/woodpecker/pull/2943)]
- init CI_COMMIT_TAG if commit ref is a tag
[[#2934](https://github.com/woodpecker-ci/woodpecker/pull/2934)]
- Update go module path for major version 2
[[#2905](https://github.com/woodpecker-ci/woodpecker/pull/2905)]
- Unify date/time dependencies
[[#2891](https://github.com/woodpecker-ci/woodpecker/pull/2891)]
- Add linting for `any`
[[#2893](https://github.com/woodpecker-ci/woodpecker/pull/2893)]
- Fix vite deprecations
[[#2885](https://github.com/woodpecker-ci/woodpecker/pull/2885)]
- Migrate to Xormigrate
[[#2711](https://github.com/woodpecker-ci/woodpecker/pull/2711)]
- Simple security context options (Kubernetes)
[[#2550](https://github.com/woodpecker-ci/woodpecker/pull/2550)]
- Changes PullRequest Index to ForgeRemoteID type
[[#2823](https://github.com/woodpecker-ci/woodpecker/pull/2823)]

### 🐛 Bug Fixes

- Hide queue visualization if nothing to show
[[#3003](https://github.com/woodpecker-ci/woodpecker/pull/3003)]
- fix and lint swagger file
[[#3007](https://github.com/woodpecker-ci/woodpecker/pull/3007)]
- Fix IPv6 host aliases for kubernetes
[[#2992](https://github.com/woodpecker-ci/woodpecker/pull/2992)]
- Fix cli lint throwing error on warnings
[[#2995](https://github.com/woodpecker-ci/woodpecker/pull/2995)]
- Fix static file caching
[[#2975](https://github.com/woodpecker-ci/woodpecker/pull/2975)]
- Gitea driver: ignore GetOrg error if we get a valid user.
[[#2967](https://github.com/woodpecker-ci/woodpecker/pull/2967)]
- feat(k8s): Add a port name to service definition
[[#2933](https://github.com/woodpecker-ci/woodpecker/pull/2933)]
- Fix error container overflow
[[#2957](https://github.com/woodpecker-ci/woodpecker/pull/2957)]
- ignore some errors on repairAllRepos
[[#2792](https://github.com/woodpecker-ci/woodpecker/pull/2792)]
- Allow to restart pipelines that has warnings
[[#2939](https://github.com/woodpecker-ci/woodpecker/pull/2939)]
- Fix skipped pipelines model
[[#2923](https://github.com/woodpecker-ci/woodpecker/pull/2923)]
- fix: Add `backend_options` to service linter entry
[[#2930](https://github.com/woodpecker-ci/woodpecker/pull/2930)]
- Fix flags added multiple times
[[#2914](https://github.com/woodpecker-ci/woodpecker/pull/2914)]
- Fix schema validation with array syntax for clone and services
[[#2920](https://github.com/woodpecker-ci/woodpecker/pull/2920)]
- Fix prometheus docs
[[#2919](https://github.com/woodpecker-ci/woodpecker/pull/2919)]
- Fix podman agent container in v2
[[#2897](https://github.com/woodpecker-ci/woodpecker/pull/2897)]
- Fix bitbucket org fetching
[[#2874](https://github.com/woodpecker-ci/woodpecker/pull/2874)]
- Only deploy docs on `main`
[[#2892](https://github.com/woodpecker-ci/woodpecker/pull/2892)]
- Fix pipeline-related environment
[[#2876](https://github.com/woodpecker-ci/woodpecker/pull/2876)]
- Fix version check partially
[[#2871](https://github.com/woodpecker-ci/woodpecker/pull/2871)]
- Fix unregistering agents when using agent tokens
[[#2870](https://github.com/woodpecker-ci/woodpecker/pull/2870)]

### 📚 Documentation

- [Awesome Woodpecker] added yet another autoscaler
[[#3011](https://github.com/woodpecker-ci/woodpecker/pull/3011)]
- Add cookbook blog and improve docs
[[#3002](https://github.com/woodpecker-ci/woodpecker/pull/3002)]
- Replace multi-pipelines with workflows on docs frontpage
[[#2990](https://github.com/woodpecker-ci/woodpecker/pull/2990)]
- Update README badges
[[#2956](https://github.com/woodpecker-ci/woodpecker/pull/2956)]
- Update 20-kubernetes.md
[[#2927](https://github.com/woodpecker-ci/woodpecker/pull/2927)]
- Add release documentation to CONTRIBUTING
[[#2917](https://github.com/woodpecker-ci/woodpecker/pull/2917)]
- Add nix-attic plugin to the index
[[#2889](https://github.com/woodpecker-ci/woodpecker/pull/2889)]
- Add usage with Tunnelmole to docs
[[#2881](https://github.com/woodpecker-ci/woodpecker/pull/2881)]
- Improve code blocks in docs
[[#2879](https://github.com/woodpecker-ci/woodpecker/pull/2879)]
- Add a blog post
[[#2877](https://github.com/woodpecker-ci/woodpecker/pull/2877)]
- Add documentation on Kubernetes securityContext
[[#2822](https://github.com/woodpecker-ci/woodpecker/pull/2822)]
- Add default page to categories
[[#2869](https://github.com/woodpecker-ci/woodpecker/pull/2869)]
- Use same format for Github docs as used for the other forges
[[#2866](https://github.com/woodpecker-ci/woodpecker/pull/2866)]

### Misc

- chore(deps): update dependency isomorphic-dompurify to v2
[[#3001](https://github.com/woodpecker-ci/woodpecker/pull/3001)]
- fix(deps): update dependency @intlify/unplugin-vue-i18n to v2
[[#2998](https://github.com/woodpecker-ci/woodpecker/pull/2998)]
- Fix go in gitpod
[[#2973](https://github.com/woodpecker-ci/woodpecker/pull/2973)]
- fix(deps): update module google.golang.org/grpc to v1.60.1
[[#2969](https://github.com/woodpecker-ci/woodpecker/pull/2969)]
- chore(deps): update docker.io/alpine docker tag to v3.19
[[#2970](https://github.com/woodpecker-ci/woodpecker/pull/2970)]
- Fix broken gated repos
[[#2959](https://github.com/woodpecker-ci/woodpecker/pull/2959)]
- fix(deps): update golang (packages)
[[#2958](https://github.com/woodpecker-ci/woodpecker/pull/2958)]
- Update docker.io/techknowlogick/xgo Docker tag to go-1.21.5
[[#2926](https://github.com/woodpecker-ci/woodpecker/pull/2926)]
- Update docker.io/golang Docker tag to v1.21.5
[[#2925](https://github.com/woodpecker-ci/woodpecker/pull/2925)]
- Lock file maintenance
[[#2910](https://github.com/woodpecker-ci/woodpecker/pull/2910)]
- Update web npm deps non-major
[[#2909](https://github.com/woodpecker-ci/woodpecker/pull/2909)]
- Update docs npm deps non-major
[[#2908](https://github.com/woodpecker-ci/woodpecker/pull/2908)]
- Update golang (packages)
[[#2904](https://github.com/woodpecker-ci/woodpecker/pull/2904)]
- Update module github.com/google/go-github/v56 to v57
[[#2899](https://github.com/woodpecker-ci/woodpecker/pull/2899)]
- Update dependency marked to v11
[[#2898](https://github.com/woodpecker-ci/woodpecker/pull/2898)]
- Update dependency vite-svg-loader to v5
[[#2837](https://github.com/woodpecker-ci/woodpecker/pull/2837)]
- Update golang (packages)
[[#2894](https://github.com/woodpecker-ci/woodpecker/pull/2894)]
- Update web npm deps non-major
[[#2895](https://github.com/woodpecker-ci/woodpecker/pull/2895)]
- Update web npm deps non-major
[[#2884](https://github.com/woodpecker-ci/woodpecker/pull/2884)]
- Update docker.io/woodpeckerci/plugin-docker-buildx Docker tag to
v2.2.1 [[#2883](https://github.com/woodpecker-ci/woodpecker/pull/2883)]
2023-12-26 19:55:39 +01:00
6543
fdab526f3f
Branchout docs for v2.1 (#3005) 2023-12-26 19:49:12 +01:00
Anbraten
f01ac3f0a3
Add pull request closed event (#2684)
- [x] updates docs
- [x] adjust UI
  - [x] show correct icon
  - [x] show correct link (to pr)
  - [x] add as option in secret edit
- [x] parse webhook
- [x] update tests
  - [x] github merged
  - [x] github closed
  - [x] gitea merged
  - [x] gitea closed
  - [x] bitbucket merged
  - [x] bitbucket closed
  - [x] gitlab merged
  - [x] gitlab closed

closes #286
2023-12-26 19:22:52 +01:00
Patrick Schratz
df73d2c475
Document WOODPECKER_LOG_FILE (#3022)
Missed from #2115 

Also rephrased the description a bit.

---------

Co-authored-by: qwerty287 <80460567+qwerty287@users.noreply.github.com>
2023-12-26 11:18:05 +01:00
devlux
5671956a31
Correct http cache headers for firefox (#3017)
Co-authored-by: Luca Marinucci <luca.marinucci@devlux.ch>
Co-authored-by: Anbraten <anton@ju60.de>
2023-12-26 08:37:13 +01:00
Lukas
28bd6cc690
Show default branch on top (#3019) 2023-12-26 07:37:14 +01:00
qwerty287
d82e151440
Hide queue visualization if nothing to show (#3003) 2023-12-25 13:38:58 +01:00
Weblate
acec955943 Translated using Weblate (Indonesian)
Currently translated at 100.0% (362 of 362 strings)

Co-authored-by: Linerly <linerly@proton.me>
Translate-URL: http://translate.woodpecker-ci.org/projects/woodpecker-ci/ui/id/
Translation: Woodpecker CI/UI
2023-12-24 16:18:11 +00:00
6543
3f1f563180
fix and lint swagger file (#3007)
Co-authored-by: qwerty287 <ndev@web.de>
2023-12-24 15:50:01 +01:00
Tobias Trabelsi
7d43c29c20
[Awesome Woodpecker] added yet another autoscaler (#3011)
Hello there 👋 

we tried a few different autoscaler implementations along out in k8s
runners on arm, but most of them do not play well with a mix of build
agents. so we just build our own.
maybe some other folks find it beneficial so i would propose to list it
here as well.
2023-12-24 15:33:56 +01:00
qwerty287
04d1f9ff5f
Support more addon types (#2984)
Actually support all types that can be possible.

Closes https://github.com/woodpecker-ci/woodpecker/discussions/2520
2023-12-24 13:26:23 +01:00
Anbraten
2b1e5f35de
Add depends_on support for steps (#2771)
Co-authored-by: 6543 <6543@obermui.de>
2023-12-24 12:14:30 +01:00
qwerty287
9d9bcbf363
Hide PR tab if PRs are disabled (#3004)
Closes https://github.com/woodpecker-ci/woodpecker/issues/2988
2023-12-24 11:04:18 +02:00
Weblate
030db4e110 Translated using Weblate (German)
Currently translated at 100.0% (362 of 362 strings)

Co-authored-by: qwerty287 <ndev@web.de>
Translate-URL: http://translate.woodpecker-ci.org/projects/woodpecker-ci/ui/de/
Translation: Woodpecker CI/UI
2023-12-23 16:46:15 +00:00
qwerty287
834b017d0e
Add cookbook blog and improve docs (#3002)
As discussed in
https://github.com/woodpecker-ci/woodpecker/discussions/2932#discussioncomment-7842309
Closes #316
2023-12-23 12:27:36 +01:00
renovate[bot]
b1e8c25743
chore(deps): update dependency isomorphic-dompurify to v2 (#3001) 2023-12-23 10:37:59 +01:00
Anbraten
e5dbbd92c7
Fix gitlab project fetching (#3000) 2023-12-23 09:48:16 +01:00
renovate[bot]
ee038a74e1
fix(deps): update dependency @intlify/unplugin-vue-i18n to v2 (#2998) 2023-12-23 08:21:30 +01:00
6543
0cc0f482df
chore(deps): update golang packages (#2999)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-23 01:33:00 +01:00
6543
f72ca04467
chore(deps): update web npm deps non-major (#2997)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-23 00:54:18 +01:00
6543
eb2a3573df
fix(deps): update docs npm deps non-major (#2996)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-23 00:50:17 +01:00
Thomas Anderson
253d702bc7
Fix IPv6 host aliases for kubernetes (#2992)
Closes #2991


[Tests](https://github.com/woodpecker-ci/woodpecker/pull/2993#issuecomment-1868048169)

---------

Co-authored-by: 6543 <6543@obermui.de>
2023-12-23 00:42:30 +01:00
6543
cd9d425a0d
Fix cli lint throwing error on warnings (#2995)
split out from  #2771

---------

Co-authored-by: Anbraten <anton@ju60.de>
2023-12-23 00:34:17 +02:00
Weblate
f6ca346f13 Translated using Weblate (French)
Currently translated at 100.0% (362 of 362 strings)

Co-authored-by: Michael <misc+weblatewoodp@zarb.org>
Translate-URL: http://translate.woodpecker-ci.org/projects/woodpecker-ci/ui/fr/
Translation: Woodpecker CI/UI
2023-12-22 15:46:15 +00:00
Johan Van de Wauw
d3a7af95a3
Replace multi-pipelines with workflows on docs frontpage (#2990)
Link does not work - workflows seems more appropriate
2023-12-22 12:09:18 +01:00
qwerty287
ce4f952b50
Switch to ULID (#2986)
Closes https://github.com/woodpecker-ci/woodpecker/discussions/2156
2023-12-21 20:23:51 +01:00
Anbraten
619858e0e9
Ignore pipelines without config (#2949)
Co-authored-by: 6543 <6543@obermui.de>
2023-12-21 11:13:25 +01:00
6543
65c62e987f
gitlab: support nested repos (#2981)
close  #2311
2023-12-21 00:55:16 +01:00
6543
2cf873f9bf
bump stable release in faq 2023-12-20 21:15:25 +01:00
qwerty287
dfc2c265b1
Support go plugins for forges and agent backends (#2751)
As of #2520 

Support to load new forges and agent backends at runtime using go's
plugin system. (https://pkg.go.dev/plugin)

I also added a simple example addon (a new forge which just prints log
statements), it should be removed later of course, but you can see an
example.

---------

Co-authored-by: Michalis Zampetakis <mzampetakis@gmail.com>
Co-authored-by: Anbraten <anton@ju60.de>
2023-12-20 14:26:57 +01:00
Lauris BH
6432109daf
Fix static file caching (#2975)
Replaces #2972

Fixes #2483

Removed etag header as etag is used incorrectly, it should be based on
content not startup time and we don't handle it from request headers
anyway.
2023-12-20 10:31:52 +02:00
Lukas
5a7e314f5a
Link labels to input and select (#2974) 2023-12-19 22:32:35 +02:00
Lukas
3704b39e9a
Fix go in gitpod (#2973) 2023-12-19 20:27:08 +01:00
runephilosof-karnovgroup
a28e2e1920
Register Agent with hostname (#2936)
Transfer the agent hostname to the server's model.agent.Name field.

Previously the autoscaler had to create the agent with the server and
get a unique token to pass to the agent at boot up. This allows to get
the right name for the agent while using the shared master agent token
at agent boot up.
Both ways are still supported.
2023-12-19 14:17:36 +01:00
6543
2e7610379e
Update slogan & logo (#2962)
- Update woodpecker slogan to repo too
  we are not just a simple fork anymore 🎉
- use https://github.com/woodpecker-ci/design/blob/main/logo/non-square.svg
2023-12-19 14:12:18 +01:00
6543
1ca549190b
Gitea driver: ignore GetOrg error if we get a valid user. (#2967)
`[POST] /api/repos?forge_remote_id=12345`

```json
{"level":"error","error":"GetOrgByName","time":"2023-12-19T01:03:36Z","caller":"/woodpecker/src/github.com/woodpecker-ci/woodpecker/server/api/repo.go:143","message":"Could not fetch organization from forge."}
```

because `https://codeberg.org/api/v1/orgs/6543` returns an error.
`https://codeberg.org/api/v1/users/6543` do not.

close  #2714
2023-12-19 09:13:39 +01:00
6543
257a76c5ea
Improve error handling when activating a repository (#2965)
Activate Repo:
- Don't drop errors and also always log them on the server.
- Show users only meaningful error messages.
2023-12-19 06:25:59 +01:00
renovate[bot]
7d837e625e
fix(deps): update module google.golang.org/grpc to v1.60.1 (#2969)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [google.golang.org/grpc](https://togithub.com/grpc/grpc-go) | require
| patch | `v1.60.0` -> `v1.60.1` |

---

### Release Notes

<details>
<summary>grpc/grpc-go (google.golang.org/grpc)</summary>

### [`v1.60.1`](https://togithub.com/grpc/grpc-go/releases/tag/v1.60.1)

[Compare
Source](https://togithub.com/grpc/grpc-go/compare/v1.60.0...v1.60.1)

### Bug Fixes

- server: fix two bugs that could lead to panics at shutdown when using
[NumStreamWorkers](https://pkg.go.dev/google.golang.org/grpc#NumStreamWorkers)
(experimental feature).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am" (UTC), Automerge -
"before 4am" (UTC).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/woodpecker-ci/woodpecker).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy45My4xIiwidXBkYXRlZEluVmVyIjoiMzcuOTMuMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: 6543 <6543@obermui.de>
2023-12-19 06:25:39 +01:00
renovate[bot]
7ee0bc4033
chore(deps): update docker.io/alpine docker tag to v3.19 (#2970)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| docker.io/alpine |  | minor | `3.18` -> `3.19` |
| docker.io/alpine | final | minor | `3.18` -> `3.19` |

---

### Configuration

📅 **Schedule**: Branch creation - "every weekend" (UTC), Automerge -
"before 4am" (UTC).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/woodpecker-ci/woodpecker).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy45My4xIiwidXBkYXRlZEluVmVyIjoiMzcuOTMuMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-19 06:10:22 +01:00
6543
ebbac258a2
Add check for storage where repo/org name is empty (#2968)
I just discovered that there is an organization created with name being empty.

we should at least catch it for now in the storage - and later trace
down why we get it in the first place
2023-12-19 06:03:56 +01:00
Anbraten
ba21f29c27
Update pipeline icons (#2783)
![image](https://github.com/woodpecker-ci/woodpecker/assets/6918444/1da704e0-f160-44f4-8b23-e223313c0f11)
2023-12-19 06:00:56 +01:00