\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).",[2922,2923],{"name":2911,"color":2912},{"name":2866,"color":2867},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.78549504,{"description":2930,"labels":2931,"number":2936,"owner":2875,"repository":2876,"state":2937,"title":2938,"updated_at":2939,"url":2940,"score":2941},"### Component\n\nserver\n\n### Describe the bug\n\nThe latest next version crashed after trying to access the web UI.\r\nSee the logs below.\r\n\r\nI have tested earlier versions of the server to see when this started failing.\r\nLast working version is next-fe489287fc.\r\nThe error occurs starting with version next-b949c190de\n\n### System Info\n\n```shell\nnext-a0f2ee9506\n```\n\n\n### Additional context\n\n```\r\n7:39AM INF woodpecker/src/github.com/woodpecker-ci/woodpecker/cmd/server/server.go:264 > Starting Woodpecker server with version 'next-a0f2ee9506'\r\n7:39AM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:59 > ip=127.0.0.1 latency=0.182634 method=GET path=/healthz status=204 user-agent=Go-http-client/1.1\r\n7:39AM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:59 > ip= latency=1.196291 method=GET path=/repos status=200 user-agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\"\r\n7:39AM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:59 > ip= latency=1.33865 method=GET path=/web-config.js status=200 user-agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\"\r\n7:39AM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:59 > ip= latency=4.786271 method=GET path=/api/user/repos status=200 user-agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\"\r\n7:39AM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/api/stream.go:63 > user feed: connection opened\r\n7:39AM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:59 > ip= latency=9.65705 method=GET path=/api/user/feed status=200 user-agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\"\r\n7:39AM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:59 > ip= latency=4.402508 method=GET path=/api/user/repos status=200 user-agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\"\r\npanic: runtime error: invalid memory address or nil pointer dereference\r\n[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xc76d3b]\r\n\r\ngoroutine 42 [running]:\r\ngithub.com/woodpecker-ci/woodpecker/server/logging.(*log).Write(0xc0005a40d0, {0x171cbe8, 0xc000608780}, 0xc000e1fd50?, 0xc00061ca00)\r\n /woodpecker/src/github.com/woodpecker-ci/woodpecker/server/logging/log.go:91 +0xfb\r\ngithub.com/woodpecker-ci/woodpecker/server/grpc.(*RPC).Log.func1()\r\n /woodpecker/src/github.com/woodpecker-ci/woodpecker/server/grpc/rpc.go:326 +0x30\r\ncreated by github.com/woodpecker-ci/woodpecker/server/grpc.(*RPC).Log in goroutine 94\r\n /woodpecker/src/github.com/woodpecker-ci/woodpecker/server/grpc/rpc.go:324 +0x211\r\n```\n\n### Validations\n\n- [X] Read the [Contributing Guidelines](https://github.com/woodpecker-ci/woodpecker/blob/main/CONTRIBUTING.md).\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]\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).",[2932,2933],{"name":2911,"color":2912},{"name":2934,"color":2935},"regression","7E192B",2743,"closed","Runtime panic with latest next version","2023-11-05T09:31:08Z","https://github.com/woodpecker-ci/woodpecker/issues/2743",0.7365708,{"description":2943,"labels":2944,"number":2957,"owner":2875,"repository":2876,"state":2937,"title":2958,"updated_at":2959,"url":2960,"score":2961},"# Lets collect ideas for the pipeline config format. 🚀 \r\n\r\nWe should have a critical look at the current config format and propose all possible changes to the format with the following aspects in mind:\r\n- allowing new users to easily understand configs and write own one (=> exp. one way to solve a problem)\r\n- be as generic and extendable as possible\r\n- stick to standards to allow the usage of (parsing) libraries with minimal additional code required\r\n\r\n# General feature requests for the pipeline (can be implemented in the current version already if possible)\r\n\r\n- pipeline config changes\r\n - [x] ~~remove support for `root.pipeline.[step].commands` string values in favor of array lists~~ -> single string is array with one item\r\n - [x] move `root.platform`, `root.branches`, `root.labels`, `root.runs_on`, `root.depends_on` to `root.when.xxx` to match step filters #283\r\n - [x] make `root.when` and `root.pipeline.[step].when` an array of the current with items using the current settings to allow ORs https://github.com/woodpecker-ci/woodpecker/issues/686 (#770,...)\r\n -> non breaking\r\n - [ ] remove `root.Cache` and functionality in favor of plugins? -> need more discussion\r\n - [x] allow multiple when filters #686 \r\n - [x] replace `group` with `needs` if no `needs` is set step will start directly\r\n - [ ] use `needs` instead of `group` #1860\r\n\r\nfrom #393\r\n\r\n# Current idea:\r\n\r\nVersion could be used to run pipeline parsing with some kind of sub-program for that specific version.\r\n\r\nBackend data format / type should not depend on docker types. For example we should not have `networks` as a property in steps.\r\n\r\n```yml\r\nversion: 2\r\n\r\ndepends_on:\r\n - test\r\n - web\r\n\r\nwhen:\r\n - branch: main\r\n event: push\r\n path: docs/\r\n - event: pull_request\r\n path: docs/\r\n\r\nsteps:\r\n - name: Test\r\n plugin: test-java:next\r\n - name: Build\r\n image: node:16-alpine\r\n commands:\r\n - npm run build\r\n depends_on:\r\n - Test\r\n```\r\n",[2945,2948,2951,2954],{"name":2946,"color":2947},"breaking","A1B83C",{"name":2949,"color":2950},"pipeline-config","1BE540",{"name":2952,"color":2953},"summary","C3DC73",{"name":2955,"color":2956},"feedback","4B7070",567,"RFC: Pipeline config","2023-08-20T15:58:32Z","https://github.com/woodpecker-ci/woodpecker/issues/567",0.7483819,{"description":2963,"labels":2964,"number":2969,"owner":2875,"repository":2876,"state":2937,"title":2970,"updated_at":2971,"url":2972,"score":2973},"### Clear and concise description of the problem\n\nWhen I send notify, I want to include the pipeline name, e.g. the miniapp & app-server for below build\r\n\r\n\u003Cimg width=\"648\" alt=\"image\" src=\"https://user-images.githubusercontent.com/1777211/227702720-f1eac3e2-e404-4895-bff7-0d59d0308308.png\">\r\n\n\n### Suggested solution\n\nhow about `CI_PIPELINE_NAME`\n\n### Alternative\n\n_No response_\n\n### Additional context\n\n_No response_\n\n### Validations\n\n- [X] Checked that the feature isn't part of the `next` version already [https://woodpecker-ci.org/faq#which-version-of-woodpecker-should-i-use]\n- [X] Read the [Contributing Guidelines](https://github.com/woodpecker-ci/woodpecker/blob/master/CONTRIBUTING.md).\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 request the same feature to avoid creating a duplicate.",[2965,2966],{"name":2869,"color":2870},{"name":2967,"color":2968},"good first issue","76ea72",1681,"env for pipeline name","2023-04-08T11:15:30Z","https://github.com/woodpecker-ci/woodpecker/issues/1681",0.7548911,{"description":2975,"labels":2976,"number":2978,"owner":2875,"repository":2876,"state":2937,"title":2979,"updated_at":2980,"url":2981,"score":2982},"### Clear and concise description of the problem\n\nIt seems like `index.html` hardcodes assets like this `/web-config.js`, etc.\r\n\r\nServing it under a path like `/ci` means that all URLs are broken.\r\n\r\nI didn't see anything in the documentation or existing issues about serving the web UI at a non-root (`/`) path.\n\n### Suggested solution\n\nPerhaps if `WOODPECKER_HOST` looks like this: `https://DOMAIN/ci`, then Woodpecker CI should infer the path from there and contructs its links correctly (adding a `/ci` prefix automatically).\n\n### Alternative\n\n_No response_\n\n### Additional context\n\n_No response_\n\n### Validations\n\n- [X] Checked that the feature isn't part of the `next` version already [https://woodpecker-ci.org/faq#which-version-of-woodpecker-should-i-use]\n- [X] Read the [Contributing Guidelines](https://github.com/woodpecker-ci/woodpecker/blob/master/CONTRIBUTING.md).\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 request the same feature to avoid creating a duplicate.",[2977],{"name":2869,"color":2870},1636,"Make serving under a subpath work","2023-04-29T15:51:52Z","https://github.com/woodpecker-ci/woodpecker/issues/1636",0.76141196,{"description":2984,"labels":2985,"number":2988,"owner":2875,"repository":2876,"state":2937,"title":2989,"updated_at":2990,"url":2991,"score":2992},"### Component\r\n\r\nserver\r\n\r\n### Describe the bug\r\n\r\nAfter I run a simple rust test job, the server crashes because of `Write called after Handler finished`.\r\n\r\nThis is a new instance, trying to follow the docs as much as possible, on a digital ocean docker container instance.\r\n\r\n### System Info\r\n\r\n\r\nversion:\r\n```\r\nsource\t\"https://github.com/woodpecker-ci/woodpecker\"\r\nversion\t\"0.15.5\"\r\n```\r\n\r\ndocker-compose:\r\n```\r\nversion: '3'\r\n\r\nservices:\r\n woodpecker-server:\r\n image: woodpeckerci/woodpecker-server:latest\r\n restart: always\r\n ports:\r\n - 8000:8000\r\n - 9000:9000\r\n - 80:80\r\n - 443:443\r\n volumes:\r\n - woodpecker-server-data:/var/lib/woodpecker/\r\n environment:\r\n - WOODPECKER_OPEN=true\r\n - WOODPECKER_HOST=https://omitted\r\n - WOODPECKER_AGENT_SECRET=omitted\r\n - WOODPECKER_GITEA=true\r\n - WOODPECKER_GITEA_URL=omitted\r\n - WOODPECKER_GITEA_CLIENT=omitted\r\n - WOODPECKER_GITEA_SECRET=omitted\r\n - WOODPECKER_LETS_ENCRYPT=true\r\n\r\n woodpecker-agent:\r\n image: woodpeckerci/woodpecker-agent:latest\r\n command: agent\r\n restart: always\r\n depends_on:\r\n - woodpecker-server\r\n volumes:\r\n - /var/run/docker.sock:/var/run/docker.sock\r\n environment:\r\n - WOODPECKER_SERVER=woodpecker-server:9000\r\n - WOODPECKER_AGENT_SECRET=omitted\r\n - WOODPECKER_MAX_PROCS=4\r\n\r\nvolumes:\r\n woodpecker-server-data:\r\n```\r\n\r\n.woodpecker.yml:\r\n```\r\npipeline:\r\n test:\r\n image: rust\r\n commands:\r\n - cd rust-folder\r\n - cargo test\r\n```\r\n\r\n\r\n### Additional context\r\n\r\n```\r\nroot@docker-ubuntu-c-2-4gib-nyc1-01:~# docker-compose up -d \r\nRecreating root_woodpecker-server_1 ... done \r\nRecreating root_woodpecker-agent_1 ... done \r\nroot@docker-ubuntu-c-2-4gib-nyc1-01:~# docker-compose logs -f \r\nAttaching to root_woodpecker-agent_1, root_woodpecker-server_1 \r\nwoodpecker-server_1 | {\"time\":\"2022-10-22T17:10:12Z\",\"message\":\"LogLevel = warn\"} \r\nwoodpecker-agent_1 | {\"level\":\"error\",\"error\":\"io: read/write on closed pipe\",\"time\":\"2022-10-22T17:10:42Z\",\"message\":\"copy limited logStream part\"} \r\nwoodpecker-agent_1 | {\"level\":\"error\",\"error\":\"rpc error: code = Unavailable desc = closing transport due to: connection error: desc = \\\"error reading from server: EOF\\\", received prior go\r\naway: code: ENHANCE_YOUR_CALM, debug data: \\\"too_many_pings\\\"\",\"time\":\"2022-10-22T17:11:13Z\",\"message\":\"grpc error: wait(): code: Unavailable: rpc error: code = Unavailable desc = closing tr\r\nansport due to: connection error: desc = \\\"error reading from server: EOF\\\", received prior goaway: code: ENHANCE_YOUR_CALM, debug data: \\\"too_many_pings\\\"\"} \r\nwoodpecker-agent_1 | {\"level\":\"error\",\"error\":\"io: read/write on closed pipe\",\"time\":\"2022-10-22T17:12:47Z\",\"message\":\"copy limited logStream part\"}\r\nwoodpecker-agent_1 | {\"level\":\"error\",\"error\":\"Error response from daemon: Cannot kill container: 0_1428886657477204797_clone: Container acdb5d89928689be75e01b1dee62be669f5d36332a0dddc10bf\r\nfd0710f9e3972 is not running\",\"time\":\"2022-10-22T17:12:47Z\",\"message\":\"could not kill container '0_1428886657477204797_clone'\"}\r\nwoodpecker-agent_1 | {\"level\":\"error\",\"error\":\"Error response from daemon: Cannot kill container: 0_1428886657477204797_step_0: Container cf3fa3e9941773b78245901ae8c3e69613851625d5ea4f6ca0\r\n0ab13d8cc83a14 is not running\",\"time\":\"2022-10-22T17:12:47Z\",\"message\":\"could not kill container '0_1428886657477204797_stage_0'\"}\r\nwoodpecker-server_1 | panic: Write called after Handler finished\r\nwoodpecker-server_1 | \r\nwoodpecker-server_1 | goroutine 189 [running]:\r\nwoodpecker-server_1 | net/http.(*http2responseWriter).write(0xc00045d500?, 0xc000678688?, {0x0?, 0xf93260?, 0x102a820?}, {0x10e7646?, 0xc0000120d8?})\r\nwoodpecker-server_1 | /usr/local/go/src/net/http/h2_bundle.go:6431 +0x150\r\nwoodpecker-server_1 | net/http.(*http2responseWriter).WriteString(0xc0006786c0?, {0x10e7646?, 0xc0000120d8?})\r\nwoodpecker-server_1 | /usr/local/go/src/net/http/h2_bundle.go:6424 +0x2e\r\nwoodpecker-server_1 | io.WriteString({0x7fd7d37bed98, 0xc0000120d8}, {0x10e7646, 0x18})\r\nwoodpecker-server_1 | /usr/local/go/src/io/io.go:312 +0x5d\r\nwoodpecker-server_1 | github.com/gin-gonic/gin.(*responseWriter).WriteString(0xc0006d8400, {0x10e7646, 0x18})\r\nwoodpecker-server_1 | /woodpecker/src/github.com/woodpecker-ci/woodpecker/vendor/github.com/gin-gonic/gin/response_writer.go:85 +0x7b\r\nwoodpecker-server_1 | io.WriteString({0x7fd7d3fefa18, 0xc0006d8400}, {0x10e7646, 0x18})\r\nwoodpecker-server_1 | /usr/local/go/src/io/io.go:312 +0x5d\r\nwoodpecker-server_1 | github.com/woodpecker-ci/woodpecker/server/api.LogStreamSSE.func2()\r\nwoodpecker-server_1 | /woodpecker/src/github.com/woodpecker-ci/woodpecker/server/api/stream.go:199 +0x192\r\nwoodpecker-server_1 | created by github.com/woodpecker-ci/woodpecker/server/api.LogStreamSSE\r\nwoodpecker-server_1 | /woodpecker/src/github.com/woodpecker-ci/woodpecker/server/api/stream.go:179 +0x59b\r\nwoodpecker-agent_1 | {\"level\":\"error\",\"error\":\"rpc error: code = Unavailable desc = error reading from server: EOF\",\"time\":\"2022-10-22T17:12:48Z\",\"message\":\"grpc error: wait(): code: Unava\r\nilable: rpc error: code = Unavailable desc = error reading from server: EOF\"}\r\n\r\n```\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] 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).",[2986,2987],{"name":2911,"color":2912},{"name":2866,"color":2867},1322,"Server crashes after job runs","2023-06-06T12:30:21Z","https://github.com/woodpecker-ci/woodpecker/issues/1322",0.7636964,["Reactive",2994],{},["Set"],["ShallowReactive",2997],{"$fTRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"$fV5EehjnR9qYyReWLWzfi-gzxaD8qqTAD0rBVJvM6ec4":-1},"/woodpecker-ci/woodpecker/2991"]