\r\n \u003Clink rel=\"alternate icon\" type=\"image/png\" href=\"/favicons/favicon-light-default.png\" id=\"favicon-png\" />\r\n \u003Clink rel=\"icon\" type=\"image/svg+xml\" href=\"/favicons/favicon-light-default.svg\" id=\"favicon-svg\" />\r\n \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n \u003Cmeta name=\"theme-color\" content=\"#65a30d\" />\r\n \u003Ctitle>Woodpecker\u003C/title>\r\n \u003Cscript type=\"\" src=\"/web-config.js\">\u003C/script>\r\n \u003Cscript type=\"module\" crossorigin src=\"/assets/index-4b7b57db.js\">\u003C/script>\r\n \u003Clink rel=\"stylesheet\" href=\"/assets/index-f123c06a.css\">\r\n \u003C/head>\r\n \u003Cbody>\r\n \u003Cdiv id=\"app\">\u003C/div>\r\n\r\n \u003C/body>\r\n\u003C/html>\r\n```\r\n\r\nThat is basically an \"empty\" page. Let's look at the response code:\r\n```\r\n$ curl -I http://localhost:8000/foo\r\nHTTP/1.1 200 OK\r\nX-Woodpecker-Version: next-45319b24\r\n# ...etc.\r\n```\r\n\r\nThat should have returned 404.\r\n\r\nNow let's request a non-existent API endpoint:\r\n```\r\n$ curl -I http://localhost:8000/api/bar\r\nHTTP/1.1 200 OK\r\nX-Woodpecker-Version: next-45319b24\r\n# ...etc.\r\n```\r\n\r\nSame thing.\r\n\r\nNow let's request a real API endpoint, for healthchecks:\r\n```\r\n$ curl http://localhost:8000/api/healthz\r\n\u003C!DOCTYPE html>\r\n\u003Chtml lang=\"en\">\r\n # ...\r\n\u003C/html>\r\n\r\n$ curl -I http://localhost:8000/api/healthz\r\nHTTP/1.1 200 OK\r\nX-Woodpecker-Version: next-45319b24\r\n# ...etc.\r\n```\r\n\r\nSame thing. Also, it should not return a page, only a REST response.\r\n\r\nClean up:\r\n```\r\n$ apk delete curl\r\n$ exit\r\n```\r\n\r\nSummary:\r\n- both existent and non-existent endpoints and pages respond with 200\r\n- that means the `/api/healthz` endpoint is not working: it's a \"proof of life\" rather than \"proof of health\"\r\n- and the health endpoint should only return a json REST response, not a page\r\n\r\n### System Info\r\n\r\n```shell\r\nversion next-45319b24-alpine\r\ndockerised\r\n```\r\n\r\n\r\n### Additional context\r\n\r\n_No response_\r\n\r\n### Validations\r\n\r\n- [X] Read the [Contributing Guidelines](https://github.com/woodpecker-ci/woodpecker/blob/master/CONTRIBUTING.md).\r\n- [X] Read the [docs](https://woodpecker-ci.org/docs/intro).\r\n- [X] Check that there isn't [already an issue](https://github.com/woodpecker-ci/woodpecker/issues) that reports the same bug to avoid creating a duplicate.\r\n- [X] Checked that the bug isn't fixed in the `next` version already [https://woodpecker-ci.org/faq#which-version-of-woodpecker-should-i-use]\r\n- [X] Check that this is a concrete bug. For Q&A join our [Discord Chat Server](https://discord.gg/fcMQqSMXJy) or the [Matrix room](https://matrix.to/#/#woodpecker:matrix.org).",[3167,3168],{"name":3140,"color":3141},{"name":3154,"color":3155},1947,"All pages and API endpoints (including non-existent ones) return 200","2025-03-16T13:50:31Z","https://github.com/woodpecker-ci/woodpecker/issues/1947",0.82791924,{"description":3175,"labels":3176,"number":3178,"owner":3143,"repository":3144,"state":3145,"title":3179,"updated_at":3180,"url":3181,"score":3182},"### Clear and concise description of the problem\r\n\r\nI want to prevent the collaborators with write permission to the repository from accessing specific secrets. \r\n\r\nIn Gitea push access to the protected branches can be limited to the whitelisted users and in Gitlab it can be limited to the maintainers (not developers)\r\n\r\n### Suggested solution\r\n\r\na checkbox at settings#secrets named \"Available only for the protected branches\" (or something similar) which is unchecked by default\r\n\r\n### Alternative\r\n\r\nAs an alternative I tried limiting the secret to a specific image without a shell which runs as a service. This service had a custom entry point which extracted the secret from environment and passed it as a cli flag to the tool which uses the secret. This solution is very involved and adds lots of extra complexity.\r\n\r\n### Additional context\r\n\r\nThis feature already exists in Gitlab CI. See `Protect variable` option in https://docs.gitlab.com/ee/ci/variables/#add-a-cicd-variable-to-a-project\r\n\r\n### Validations\r\n\r\n- [X] Read the [Contributing Guidelines](https://github.com/woodpecker-ci/woodpecker/blob/master/CONTRIBUTING.md) and it was irrelevant for opening issues!\r\n- [X] Read the [docs](https://woodpecker-ci.org/docs/intro).\r\n- [X] Check that there isn't already an [issue](https://github.com/woodpecker-ci/woodpecker/issues) that request the same feature to avoid creating a duplicate.",[3177],{"name":3157,"color":3158},1341,"Add option to expose secrets only to protected branches","2022-10-26T13:09:21Z","https://github.com/woodpecker-ci/woodpecker/issues/1341",0.8280103,{"description":3184,"labels":3185,"number":3192,"owner":3143,"repository":3144,"state":3145,"title":3193,"updated_at":3194,"url":3195,"score":3196},"https://github.com/woodpecker-ci/woodpecker/blob/1c7728fae3b5f2f6ce99580066bed6b2f98167d2/pipeline/frontend/yaml/compiler/convert.go#L101\r\nhttps://github.com/woodpecker-ci/woodpecker/blob/1c7728fae3b5f2f6ce99580066bed6b2f98167d2/pipeline/frontend/yaml/compiler/compiler.go#L97\r\n\r\ninstead of definding on the fly func and passing al secrets onto the compiler, we can inject an function that can directly query the database ... and for cli the args etc...\r\n\r\n",[3186,3189],{"name":3187,"color":3188},"refactor","4f8cc9",{"name":3190,"color":3191},"engine","5319e7",4378,"Refactor: move pipeline compilers getSecretValue() into an compiler Option","2024-11-19T13:08:47Z","https://github.com/woodpecker-ci/woodpecker/issues/4378",0.8302222,{"description":3198,"labels":3199,"number":3201,"owner":3143,"repository":3144,"state":3145,"title":3202,"updated_at":3203,"url":3204,"score":3205},"### Component\n\nserver\n\n### Describe the bug\n\nEven when agents have set to execute multiple parallel workflows but it somehow seems only 3 parallel workflows are being executed and all seems to be assigned to first agent only:\n\nAgents list:\n\n\n\nQueue:\n\n\n\n### Steps to reproduce\n\n1. Restart only server\n2. Check queue size\n\n### Expected behavior\n\nAgents when reconnect back to restarted server should have again assigned new tasks\n\n### System Info\n\n```shell\n{\"source\":\"https://github.com/woodpecker-ci/woodpecker\",\"version\":\"3.0.1\"}\n```\n\n### Additional context\n\n_No response_\n\n### Validations\n\n- [x] Read the [docs](https://woodpecker-ci.org/docs/intro).\n- [x] Check that there isn't [already an issue](https://github.com/woodpecker-ci/woodpecker/issues) that reports the same bug to avoid creating a duplicate.\n- [x] Checked that the bug isn't fixed in the `next` version already [https://woodpecker-ci.org/faq#which-version-of-woodpecker-should-i-use]",[3200],{"name":3140,"color":3141},4815,"Broken queue size if server is restarted but agents are not","2025-02-06T10:05:51Z","https://github.com/woodpecker-ci/woodpecker/issues/4815",0.83648336,{"description":3207,"labels":3208,"number":3210,"owner":3143,"repository":3144,"state":3145,"title":3211,"updated_at":3212,"url":3213,"score":3214},"### Component\r\n\r\nserver\r\n\r\n### Describe the bug\r\n\r\nTwo CI runs are triggered at the same time on PR creation, see the two webhook events below. \r\n\r\n```\r\nRequest URL: https://ci.rknet.org/api/hook?access_token=***\r\nRequest method: POST\r\nContent-Type: application/json\r\nX-GitHub-Delivery: 342485a1-***\r\nX-GitHub-Event: pull_request\r\nX-GitHub-Event-Type: pull_request\r\nX-Gitea-Delivery: 342485a1-***\r\nX-Gitea-Event: pull_request\r\nX-Gitea-Event-Type: pull_request\r\nX-Gitea-Signature: ***\r\nX-Gogs-Delivery: 342485a1-***\r\nX-Gogs-Event: pull_request\r\nX-Gogs-Event-Type: pull_request\r\nX-Gogs-Signature: ***\r\nX-Hub-Signature: sha1=***\r\nX-Hub-Signature-256: sha256=***\r\n\r\n## Response 200\r\n{\"id\":193,\"number\":33,\"author\":\"renovator\",\"parent\":0,\"event\":\"pull_request\",\"status\":\"pending\",\"errors\":null,\"enqueued_at\":1701175158,\"created_at\":1701175158,\"updated_at\":1701175158,\"started_at\":0,\"finished_at\":0,\"deploy_to\":\"\",\"commit\":\"c17d6e7f15201d0a253f83890b1d088e9b34c43d\",\"branch\":\"main\",\"ref\":\"refs/pull/145/head\",\"refspec\":\"renovate/docker-digests:main\",\"clone_url\":\"\",\"title\":\"chore(docker): update docker.io/clux/muslrust:1.74.0-stable docker digest to 37ba39a\",\"message\":\"chore(docker): update docker.io/clux/muslrust:1.74.0-stable docker digest to 37ba39a\",\"timestamp\":0,\"sender\":\"renovator\",\"author_avatar\":\"https://gitea.rknet.org/avatars/188565bedb61ddcc66b2dceedd8aa136\",\"author_email\":\"\",\"forge_url\":\"https://gitea.rknet.org/container/vaultwarden/pulls/145\",\"reviewed_by\":\"\",\"reviewed_at\":0,\"workflows\":[{\"id\":671,\"pipeline_id\":193,\"pid\":1,\"name\":\"build-container\",\"state\":\"pending\",\"children\":[{\"id\":2322,\"uuid\":\"d77cc32e-3a56-41d2-92f5-1772c862ab68\",\"pipeline_id\":193,\"pid\":4,\"ppid\":1,\"name\":\"clone\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"clone\"},{\"id\":2323,\"uuid\":\"42927df2-9032-4aad-84b0-f1b09b1136cc\",\"pipeline_id\":193,\"pid\":5,\"ppid\":1,\"name\":\"security-build\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"plugin\"},{\"id\":2324,\"uuid\":\"f3d81d7a-b1dd-4b12-a045-e21b361a9f74\",\"pipeline_id\":193,\"pid\":6,\"ppid\":1,\"name\":\"security-scan\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"commands\"}]},{\"id\":672,\"pipeline_id\":193,\"pid\":2,\"name\":\"build-package\",\"state\":\"pending\",\"children\":[{\"id\":2325,\"uuid\":\"8eee1203-e26e-45b1-a612-f8840dd19f93\",\"pipeline_id\":193,\"pid\":7,\"ppid\":2,\"name\":\"clone\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"clone\"},{\"id\":2326,\"uuid\":\"8216ee3f-72ac-43cc-b168-0fb9147f47ff\",\"pipeline_id\":193,\"pid\":8,\"ppid\":2,\"name\":\"changelog\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"commands\"}]},{\"id\":673,\"pipeline_id\":193,\"pid\":3,\"name\":\"docs\",\"state\":\"pending\",\"children\":[{\"id\":2327,\"uuid\":\"74a6fcf2-853e-4565-82ae-7956b92ee653\",\"pipeline_id\":193,\"pid\":9,\"ppid\":3,\"name\":\"clone\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"clone\"},{\"id\":2328,\"uuid\":\"81282a99-5e37-47ec-a5da-8c46b8fa0643\",\"pipeline_id\":193,\"pid\":10,\"ppid\":3,\"name\":\"markdownlint\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"commands\"},{\"id\":2329,\"uuid\":\"b0e42cd5-2c17-4f79-9678-81889699cca7\",\"pipeline_id\":193,\"pid\":11,\"ppid\":3,\"name\":\"spellcheck\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"commands\"},{\"id\":2330,\"uuid\":\"a8a273bc-de6b-433c-b335-795bb29a8bec\",\"pipeline_id\":193,\"pid\":12,\"ppid\":3,\"name\":\"link-validation\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"commands\"}]}]}\r\n```\r\n\r\n```\r\nRequest URL: https://ci.rknet.org/api/hook?access_token=****\r\nRequest method: POST\r\nContent-Type: application/json\r\nX-GitHub-Delivery: 563de175-***\r\nX-GitHub-Event: pull_request\r\nX-GitHub-Event-Type: pull_request_sync\r\nX-Gitea-Delivery: 563de175-***\r\nX-Gitea-Event: pull_request\r\nX-Gitea-Event-Type: pull_request_sync\r\nX-Gitea-Signature: ***\r\nX-Gogs-Delivery: 563de175-***\r\nX-Gogs-Event: pull_request\r\nX-Gogs-Event-Type: pull_request_sync\r\nX-Gogs-Signature: ***\r\nX-Hub-Signature: sha1=***\r\nX-Hub-Signature-256: sha256=***\r\n\r\n## Response 200\r\n{\"id\":194,\"number\":34,\"author\":\"renovator\",\"parent\":0,\"event\":\"pull_request\",\"status\":\"pending\",\"errors\":null,\"enqueued_at\":1701175159,\"created_at\":1701175159,\"updated_at\":1701175159,\"started_at\":0,\"finished_at\":0,\"deploy_to\":\"\",\"commit\":\"c17d6e7f15201d0a253f83890b1d088e9b34c43d\",\"branch\":\"main\",\"ref\":\"refs/pull/145/head\",\"refspec\":\"renovate/docker-digests:main\",\"clone_url\":\"\",\"title\":\"chore(docker): update docker.io/clux/muslrust:1.74.0-stable docker digest to 37ba39a\",\"message\":\"chore(docker): update docker.io/clux/muslrust:1.74.0-stable docker digest to 37ba39a\",\"timestamp\":0,\"sender\":\"renovator\",\"author_avatar\":\"https://gitea.rknet.org/avatars/188565bedb61ddcc66b2dceedd8aa136\",\"author_email\":\"\",\"forge_url\":\"https://gitea.rknet.org/container/vaultwarden/pulls/145\",\"reviewed_by\":\"\",\"reviewed_at\":0,\"workflows\":[{\"id\":674,\"pipeline_id\":194,\"pid\":1,\"name\":\"build-container\",\"state\":\"pending\",\"children\":[{\"id\":2331,\"uuid\":\"2e55b6e7-e29f-450e-886b-e57f7f98bcbe\",\"pipeline_id\":194,\"pid\":4,\"ppid\":1,\"name\":\"clone\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"clone\"},{\"id\":2332,\"uuid\":\"419e9fcd-9fdd-4c06-87a7- 15280310afea\",\"pipeline_id\":194,\"pid\":5,\"ppid\":1,\"name\":\"security-build\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"plugin\"},{\"id\":2333,\"uuid\":\"8a6eb1c5-9e26-4cfa-963d-d487ab532bb0\",\"pipeline_id\":194,\"pid\":6,\"ppid\":1,\"name\":\"security-scan\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"commands\"}]},{\"id\":675,\"pipeline_id\":194,\"pid\":2,\"name\":\"build-package\",\"state\":\"pending\",\"children\":[{\"id\":2334,\"uuid\":\"2a48dbb4-75be-405f-a4e2-97a85891f66b\",\"pipeline_id\":194,\"pid\":7,\"ppid\":2,\"name\":\"clone\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"clone\"},{\"id\":2335,\"uuid\":\"54e90fd4-3b5e-4f22-b344-12b3f4caa4b5\",\"pipeline_id\":194,\"pid\":8,\"ppid\":2,\"name\":\"changelog\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"commands\"}]},{\"id\":676,\"pipeline_id\":194,\"pid\":3,\"name\":\"docs\",\"state\":\"pending\",\"children\":[{\"id\":2336,\"uuid\":\"990901af-c9f9-4347-add5-6d7358f37436\",\"pipeline_id\":194,\"pid\":9,\"ppid\":3,\"name\":\"clone\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"clone\"},{\"id\":2337,\"uuid\":\"b72998a4-1fc5-492a-a0d7-c8dd7e181e7c\",\"pipeline_id\":194,\"pid\":10,\"ppid\":3,\"name\":\"markdownlint\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"commands\"},{\"id\":2338,\"uuid\":\"06f2c11a-e255-41f1-a30e-d269a8142d5f\",\"pipeline_id\":194,\"pid\":11,\"ppid\":3,\"name\":\"spellcheck\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"commands\"},{\"id\":2339,\"uuid\":\"a85323cf-b1c1-4a99-bdaf-224ad6e4e22e\",\"pipeline_id\":194,\"pid\":12,\"ppid\":3,\"name\":\"link-validation\",\"state\":\"pending\",\"exit_code\":0,\"type\":\"commands\"}]}],\"changed_files\":[\"Containerfile\"]}\r\n```\r\n\r\n### System Info\r\n\r\n```shell\r\n{\"source\":\"https://github.com/woodpecker-ci/woodpecker\",\"version\":\"next-111a0b4ea5\"}\r\n```\r\n\r\n### Additional context\r\n\r\n_No response_\r\n\r\n### Validations\r\n\r\n- [X] Read the [Contributing Guidelines](https://github.com/woodpecker-ci/woodpecker/blob/main/CONTRIBUTING.md).\r\n- [X] Read the [docs](https://woodpecker-ci.org/docs/intro).\r\n- [X] Check that there isn't [already an issue](https://github.com/woodpecker-ci/woodpecker/issues) that reports the same bug to avoid creating a duplicate.\r\n- [X] Checked that the bug isn't fixed in the `next` version already [https://woodpecker-ci.org/faq#which-version-of-woodpecker-should-i-use]\r\n- [X] Check that this is a concrete bug. For Q&A join our [Discord Chat Server](https://discord.gg/fcMQqSMXJy) or the [Matrix room](https://matrix.to/#/#woodpecker:matrix.org).",[3209],{"name":3140,"color":3141},2888,"PR triggers the CI twice","2024-12-11T08:41:54Z","https://github.com/woodpecker-ci/woodpecker/issues/2888",0.8423619,{"description":3216,"labels":3217,"number":3223,"owner":3143,"repository":3144,"state":3145,"title":3224,"updated_at":3225,"url":3226,"score":3227},"Its sometimes pretty difficult to debug a queue entry and understand what it is about. Therefore it might help to link the pipeline the queue entry is related to.",[3218,3219,3222],{"name":3154,"color":3155},{"name":3220,"color":3221},"ui","46DEA2",{"name":3157,"color":3158},2948,"Link queue entries to pipeline","2024-01-09T04:27:09Z","https://github.com/woodpecker-ci/woodpecker/issues/2948",0.84887266,{"description":3229,"labels":3230,"number":3235,"owner":3143,"repository":3144,"state":3145,"title":3236,"updated_at":3237,"url":3238,"score":3239},"we should add a generation step for CycloneDX / SPDX info.\r\n\r\nhttps://github.com/CycloneDX/cdxgen might work ... but I have to test it :)\r\n\r\nmore info: https://about.gitlab.com/blog/2022/10/25/the-ultimate-guide-to-sboms\r\n\r\nbut in short it's to let woodpecker be used in the US in environments that are regulated by https://www.cisa.gov/sbom",[3231,3234],{"name":3232,"color":3233},"governance","A46EFE",{"name":3157,"color":3158},2849,"Add SBOM info","2024-04-02T08:06:18Z","https://github.com/woodpecker-ci/woodpecker/issues/2849",0.8503377,{"description":3241,"labels":3242,"number":3250,"owner":3143,"repository":3144,"state":3251,"title":3252,"updated_at":3253,"url":3254,"score":3255},"# Currently\r\nbackend does support binding secrets to specific steps (this is set by the secret option of [a step](https://woodpecker-ci.org/docs/usage/secrets)):\r\n\r\nhttps://github.com/woodpecker-ci/woodpecker/blob/442561fea21d01912843c1dd254bb9119d779814/pipeline/frontend/yaml/compiler/convert.go#L116-L121\r\n\r\nmatch is derived from images at:\r\nhttps://github.com/woodpecker-ci/woodpecker/blob/442561fea21d01912843c1dd254bb9119d779814/server/shared/procBuilder.go#L197-L207\r\n\r\n# Expected\r\n\r\nAdd an option to the Vue UI to the secrets edit form to specify a list of images the secrets is allowed to be passed to.\r\nIn the backend it should filter the secrets list based on the allowed images of the secrets. If the images list of a secret is empty, it will can passed to all images.\r\n\r\nTo store the image in datastore add following property to the secret:\r\nhttps://github.com/woodpecker-ci/woodpecker/blob/442561fea21d01912843c1dd254bb9119d779814/server/model/secret.go#L55",[3243,3244,3247],{"name":3220,"color":3221},{"name":3245,"color":3246},"feature","180DBE",{"name":3248,"color":3249},"good first issue","76ea72",607,"closed","Repo Settings: Secrets: add field for image list","2021-12-30T06:26:36Z","https://github.com/woodpecker-ci/woodpecker/issues/607",0.76773214,["Reactive",3257],{},["Set"],["ShallowReactive",3260],{"$fTRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"$fyOF5T4SDNwmpr1nQJXFizB25-2qulvbC-qS9wwRFopo":-1},"/woodpecker-ci/woodpecker/692"]