\n\nThis happens on every push. It works fine on a manual run.\n\n### Steps to reproduce\n\nNo clue.\n\n### Expected behavior\n\nWorkflow run starts only one time.\n\n### System Info\n\n```shell\nWoodpecker v3.8.0\nDocker Compose v2.38.2\nDocker v28.3.2\n```\n\n### Additional context\n\ncompose logs:\n\n```\nwpci_agent | Status: Downloaded newer image for woodpeckerci/plugin-git:2.6.5\nwpci_server | {\"level\":\"error\",\"repo_id\":\"1\",\"pipeline_id\":\"21\",\"workflow_id\":\"36\",\"error\":\"stream: not found\",\"time\":\"2025-07-26T05:48:11Z\",\"message\":\"done: cannot close log stream for step 70\"}\nwpci_server | {\"level\":\"error\",\"error\":\"queue: task not found\",\"time\":\"2025-07-26T05:49:14Z\",\"message\":\"queue: evict_at_once: [38]\"}\nwpci_server | {\"level\":\"error\",\"error\":\"sql: no rows in result set\",\"time\":\"2025-07-26T05:49:14Z\",\"message\":\"queue: evict_at_once: [37]\"}\nwpci_agent | {\"level\":\"error\",\"error\":\"rpc error: code = Unknown desc = queue: task canceled\",\"time\":\"2025-07-26T05:49:14Z\",\"message\":\"grpc error: wait(): code: Unknown\"}\nwpci_agent | {\"level\":\"warn\",\"repo\":\"\u003CREPO NAME>\",\"pipeline\":\"22\",\"workflow_id\":\"37\",\"error\":\"rpc error: code = Unknown desc = queue: task canceled\",\"time\":\"2025-07-26T05:49:14Z\",\"message\":\"cancel signal received\"}\nwpci_server | {\"level\":\"error\",\"repo_id\":\"1\",\"pipeline_id\":\"22\",\"workflow_id\":\"37\",\"error\":\"sql: no rows in result set\",\"time\":\"2025-07-26T05:49:15Z\",\"message\":\"queue.Done: cannot ack workflow\"}\nwpci_server | {\"level\":\"error\",\"repo_id\":\"1\",\"pipeline_id\":\"22\",\"workflow_id\":\"37\",\"error\":\"stream: not found\",\"time\":\"2025-07-26T05:49:15Z\",\"message\":\"done: cannot close log stream for step 71\"}\nwpci_server | {\"level\":\"error\",\"repo_id\":\"1\",\"pipeline_id\":\"22\",\"workflow_id\":\"37\",\"error\":\"stream: not found\",\"time\":\"2025-07-26T05:49:15Z\",\"message\":\"done: cannot close log stream for step 72\"}\nwpci_server | {\"level\":\"error\",\"error\":\"sql: no rows in result set\",\"time\":\"2025-07-26T05:49:15Z\",\"message\":\"pull queue item: 38: failed to remove from backup\"}\nwpci_server | {\"level\":\"error\",\"repo_id\":\"1\",\"pipeline_id\":\"22\",\"workflow_id\":\"38\",\"error\":\"stream: not found\",\"time\":\"2025-07-26T05:49:15Z\",\"message\":\"done: cannot close log stream for step 73\"}\nwpci_server | {\"level\":\"error\",\"repo_id\":\"1\",\"pipeline_id\":\"22\",\"workflow_id\":\"38\",\"error\":\"stream: not found\",\"time\":\"2025-07-26T05:49:15Z\",\"message\":\"done: cannot close log stream for step 74\"}\nwpci_agent | latest: Pulling from woodpeckerci/plugin-docker-buildx\n```\n\n.woodpecker/build.yaml\n\n```yaml\nsteps:\n build:\n image: woodpeckerci/plugin-docker-buildx\n when:\n - branch: main\n event: push\n settings:\n # intentionally left out\n```\n\n.woodpecker/deploy.yaml\n\n```yaml\ndepends_on: [ build ]\n\nsteps:\n deploy:\n image: ghcr.io/appleboy/drone-ssh\n when:\n - branch: main\n event: push\n environment:\n # intentionally left out\n settings:\n # intentionally left out\n```\n\ncompose.yaml\n\n```yaml\nservices:\n\n wpci_server:\n image: woodpeckerci/woodpecker-server:v3-alpine\n container_name: wpci_server\n restart: unless-stopped\n ports:\n - 127.0.0.1:9082:9082\n volumes:\n - ./server:/var/lib/woodpecker\n environment:\n - WOODPECKER_FORGEJO=true\n - WOODPECKER_FORGEJO_URL=https://***.org\n - WOODPECKER_FORGEJO_CLIENT=***\n - WOODPECKER_FORGEJO_SECRET=***\n - WOODPECKER_OPEN=false\n - WOODPECKER_ADMIN=***\n - WOODPECKER_HOST=https://***.org\n - WOODPECKER_AGENT_SECRET=***\n - WOODPECKER_GRPC_ADDR=:9090\n - WOODPECKER_SERVER_ADDR=:9082\n - WOODPECKER_PLUGINS_PRIVILEGED=woodpeckerci/plugin-docker-buildx\n \n wpci_agent:\n image: woodpeckerci/woodpecker-agent:v3-alpine\n container_name: wpci_agent\n command: agent\n restart: unless-stopped\n depends_on:\n - wpci_server\n volumes:\n - ./agent:/etc/woodpecker\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - WOODPECKER_SERVER=wpci_server:9090\n - WOODPECKER_AGENT_SECRET=***\n - WOODPECKER_PLUGINS_PRIVILEGED=woodpeckerci/plugin-docker-buildx\n```\n\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/versions]",[3218],{"name":3177,"color":3178},5364,"Workflow run starts two times, fails one immediately","2025-07-26T06:50:04Z","https://github.com/woodpecker-ci/woodpecker/issues/5364",0.7201489,{"description":3225,"labels":3226,"number":3227,"owner":3155,"repository":3156,"state":3201,"title":3228,"updated_at":3229,"url":3230,"score":3231},"### Clear and concise description of the problem\n\nWhen running in smaller environments, running multiple instances (server and agent combo) might be cumbersome / limiting the resources available to an instance and making each instance slow. This is especially pressing, when deploying via container (mostly Kubernetes, Docker does not have Quotas if I remember correctly) with resource quotas set (which is often required to protect services in fairly resource limited setups)\r\n\r\nAdditionally switching between instances and not confusing them might add another layer of user workload.\n\n### Suggested solution\n\nEnable the use of multiple forges in one woodpecker-server (the agent should be pretty much uninfluenced by this), best case allowing for user mappings, so a single login will manage all forges.\n\n### Alternative\n\nAdd a way of at least having multiple authentication sources (effectively forges) and switch between the accounts, while still using the same instance of woodpecker.\n\n### Additional context\n\nI am absolutely unclear whether something like this is feasible, but it would be nice for people having to spread across multiple forges (i.e. Github and their own Gitea instance).\r\n\r\nA nice \"premium\" feature would be if it would be possible to configure multiple forges of the same type in one server instance (which would at least require changing the way the forge-configs are handed over to the instance).\n\n### Validations\n\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.",[],1376,"Enable one Instance to use multiple forges","2022-10-30T16:34:00Z","https://github.com/woodpecker-ci/woodpecker/issues/1376",0.7211651,{"description":3233,"labels":3234,"number":3236,"owner":3155,"repository":3156,"state":3201,"title":3237,"updated_at":3238,"url":3239,"score":3240},"### Clear and concise description of the problem\n\nCurrently there is no way to reliability limit same pipeline with different commits not to be executed in parallel. This can be problematic if pipelines are used to do deployments and canceling running executing pipeline is not an option as that could break deployment.\n\n### Suggested solution\n\nAllow to specify either in pipeline or in repo settings that pipelines for each branch are exclusive/should be queued (similarly how that it is possible to set cancel executing pipelines)\n\n### Additional context\n\nIn our use case if canceling helm deploy in k8s can result in broken deployment state\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 [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.",[3235],{"name":3166,"color":3167},4809,"Limit pipeline parallel execution per-branch","2025-03-20T08:26:00Z","https://github.com/woodpecker-ci/woodpecker/issues/4809",0.7290584,{"description":3242,"labels":3243,"number":3248,"owner":3155,"repository":3156,"state":3201,"title":3249,"updated_at":3250,"url":3251,"score":3252},"Add a own section called `compile` into pipeline config.\r\n\r\nwitch use normal workflow logic (default or custom clone) ... but it's output is no log but an pipeline config.\r\n\r\ntldr: with way we could support **starlark**, jsonnet (#1396), drone >= 1.0, ... without needing to add it to woodpecker core\r\n\r\n## details\r\nwe either could make a special compile pipeline, and show it as own entry, witch trigger the actual pipeline with its config\r\n(if we do so, we need to somehow link them UI/UX wise ...)\r\nor we just use our multi workflow approach ... where one workflow (eventually with a different icon) is the compile and all generated workflows from it are also i it ... (as a compile could create one or more workflows)\r\n\r\nwe need to make sure we dont have a recursion in it -> see permutate example\r\n\r\n## example:\r\n```yaml\r\ncompile:\r\n image: wp/jsonnet\r\n settings:\r\n file: woodpecker.jsonnet\r\n```\r\n```yaml\r\ncompile:\r\n image: wp/replace-image # permutate normal wp pipeline config\r\n\r\npipeline:\r\n normal-steps:\r\n...\r\n```\r\n\r\n## workaround:\r\nuse a [ Configuration Service](https://woodpecker-ci.org/docs/next/administration/external-configuration-api)",[3244,3245],{"name":3166,"color":3167},{"name":3246,"color":3247},"pipeline-config","1BE540",1400,"RFC: pipeline compile step","2023-08-20T15:57:51Z","https://github.com/woodpecker-ci/woodpecker/issues/1400",0.7290661,["Reactive",3254],{},["Set"],["ShallowReactive",3257],{"$fTRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"$fmPPX5QuH7ZDyeCEwv2orwgKA4L-jHk3sP1XmlaVzdf4":-1},"/woodpecker-ci/woodpecker/1450"]