What woodpecker-ci/woodpecker shipped
Written by FoxPlug from the repository's own releases; not affiliated with Woodpecker-ci. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/woodpecker-ci/woodpecker; Woodpecker-ci did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of November 2, 2026
What shipped
- Pipelines whose workflows depend on each other in a cycle now fail instead of being accepted and waiting forever. Pull request #7471
- Datastore reads now report SQLite database lock errors instead of incorrectly reporting record not found. Pull request #7503
- Bitbucket webhooks whose repository full name has no owner are now rejected instead of causing a panic and a 500 response. Pull request #7507
- Gitea and Forgejo webhook body signatures are now checked where secrets are already stored in the forge. Pull request #7407
- Enabling a single repository on Bitbucket no longer looks up all repositories in the forge, which was slow with many repositories. Pull request #7491
- Gitea and Forgejo pull request file collection now keeps previous paths of renamed files so when.path constraints match the change. Pull request #7492
- Log store errors are returned to the agent again, except for duplicate entries. Pull request #7501
- Files pagination for Gitea and Forgejo is fixed after the previous change broke it. Pull request #7500
- A new built-in CI_FORGE_HOST environment variable exposes the forge host, taken from the forge configuration. Pull request #7391
- Encryption setup no longer fails or enables and immediately disables encryption when no key is given or the disable flag is set. Pull request #7464
Why it matters
This week closes several long-standing failure modes: dependency cycles in workflows now fail fast, Bitbucket webhook input can no longer panic the handler, and database read errors are reported as what they are rather than as missing records. Gitea and Forgejo users get working signature checks and correct renamed-file detection, and Bitbucket repository enabling is faster on instances with many repositories.
Changelog entry
- Fail pipelines whose workflows depend on each other in a cycle Pull request #7471
- Report SQLite database lock on reads instead of record not found Pull request #7503
- Reject Bitbucket webhooks whose repository full name has no owner Pull request #7507
- Check webhook body signatures for Gitea and Forgejo where already set up Pull request #7407
- Avoid looking up all Bitbucket repositories when enabling only one Pull request #7491
- Preserve previous pull request file paths for Gitea and Forgejo Pull request #7492
- Fix files pagination for Gitea and Forgejo Pull request #7500
- Return log store errors to the agent, except for duplicate entries Pull request #7501
- Add CI_FORGE_HOST as a built-in environment variable Pull request #7391
- Fix encryption setup without key or with disable flag Pull request #7464
- Show the latest release of plugins in the plugin index if it exists Pull request #7480
- Add small margin between log groups Pull request #7485
This week: pipelines with workflow dependency cycles now fail instead of hanging; SQLite lock errors are reported correctly; Bitbucket webhooks without an owner are rejected; Gitea and Forgejo webhook signatures are enforced; renamed pull request files are detected.
This week's changes to Woodpecker: pipelines whose workflows depend on each other in a cycle now fail instead of waiting forever, and database read errors from SQLite lock contention are reported as such rather than as missing records. Bitbucket webhooks whose repository full name has no owner are rejected instead of panicking the handler, and enabling a single repository on Bitbucket no longer requires looking up every repository. Gitea and Forgejo now enforce webhook body signatures where secrets are already stored, keep previous paths of renamed pull request files so path constraints match, and have working files pagination again. Log store errors are returned to the agent except for duplicate entries, and a new CI_FORGE_HOST variable is available.
Week of October 26, 2026
What shipped
- Released 3.20.1, which restores drone envsubst and fixes the step log group UX after 3.20.0 shipped an unintended breaking change. Release
- Restored drone envsubst in the 3.20.x line with regression tests to unbreak the release. Pull request #7433
- Fixed queued
depends_onworkflows running and reporting success after a failed dependency when a server restart cleared the in-memory dependency status. Pull request #7395
Why it matters
This week brought 3.20.1 to replace 3.20.0, which carried an unintended breaking change, and restored drone envsubst with regression tests. It also closed several correctness bugs that affected real pipelines: depends_on gates running after a failed dependency, annotated tag commit SHAs, GitLab tag authors, and a server panic on workflow save errors. Together these make upgrades safer and pipeline results more trustworthy.
Changelog entry
- Release 3.20.1: restore drone envsubst and fix step log group UX Release
- Restore drone envsubst with regression tests to unbreak the 3.20.x line Pull request #7433
- Fix
depends_onworkflows running after a failed dependency on queue reload Pull request #7395
Woodpecker 3.20.1 is out and restores drone envsubst; use it instead of 3.20.0, which had an unintended breaking change. Also this week: fixes for depends_on gates after queue reload, annotated tag commit SHAs, GitLab tag pipeline authors, and a panic on workflow save failures.
Woodpecker 3.20.1 is released and restores drone envsubst with regression tests; 3.20.0 had an unintended breaking change, so use 3.20.1. Alongside the release, several pipeline correctness fixes landed: depends_on gates no longer run and report success after a failed dependency when the queue reloads, annotated tags on GitLab, Gitea and Forgejo now resolve to the commit SHA, GitLab tag pipelines take the author from webhook metadata, and saving workflows no longer panics the server on a transient database error. Image tag detection for registries with a port is fixed, and revoked environment admins now stay revoked until restart.
Week of October 19, 2026
What shipped
- Kubernetes backend now reports an error instead of a success when a pod disappears before its exit status can be observed. Pull request #7357
- GitLab token rotation no longer invalidates clone credentials for pipelines that are already running. Pull request #7344
- The server recovers from panics during config parsing so user-controlled config cannot crash the whole process. Pull request #7348
- Org-level secret and registry retrieval now scopes on org and repository instead of org alone. Pull request #7365
- The agent now applies the keepalive time and timeout flags instead of leaving both values at zero. Pull request #7351
- The HTTP config extension now receives the restart flag so it can tell a restarted pipeline from a new one. Pull request #7384
- A CI_REPO_ID environment variable exposes the internal repository ID to pipelines. Pull request #7295
- Organizations and users can be restricted to run pipelines only on their own agents. Pull request #7359
- CLI lint prefers the detected Woodpecker config in a directory over unrelated YAML files. Pull request #6634
- Deploying a pipeline now sets the pipeline author to the session user. Pull request #7358
Why it matters
This week fixes several cases where pipelines could behave incorrectly: a missing Kubernetes pod was reported as success, GitLab token rotation broke running pipelines, and keepalive settings were ignored. It also hardens the server against crashes from config parsing and tightens scoping for org-level secrets and registries.
Changelog entry
- Kubernetes: report an error when a pod is missing and no container termination was observed. Pull request #7357
- GitLab: token rotation no longer invalidates clone credentials of running pipelines. Pull request #7344
- Server: recover from config parsing panics. Pull request #7348
- Harden org-level secret and registry retrieval scoping. Pull request #7365
- Agent: respect keepalive time and timeout flags. Pull request #7351
- Send restart flag to the HTTP config extension. Pull request #7384
- Add CI_REPO_ID environment variable. Pull request #7295
- Add option to restrict organizations and users to their own agents. Pull request #7359
- CLI lint prefers the detected Woodpecker config. Pull request #6634
- Set pipeline author to the session user on deploy. Pull request #7358
- StepFinished on the log store now returns errors. Pull request #7346
- Forward OOM errors correctly. Pull request #7313
This week: Kubernetes no longer reports vanished pods as successful, GitLab token rotation stops breaking running pipelines, the server survives config parse panics, agent keepalive flags work, and CI_REPO_ID is now available to pipelines.
This week in Woodpecker: the Kubernetes backend no longer reports a step as successful when a pod disappears without an observed exit status. GitLab token rotation no longer invalidates clone credentials for running pipelines. The server recovers from panics in config parsing, so user-controlled config cannot take the whole process down. The agent now applies the keepalive time and timeout flags. Org-level secret and registry retrieval is scoped more strictly. Pipelines get a CI_REPO_ID variable, and the HTTP config extension receives the restart flag.
Week of October 12, 2026
What shipped
- Fixed server panics that occurred while parsing configuration. Pull request #7336
- Stopped logging bearer credentials at trace level, so webhook tokens no longer end up in application, proxy or container logs. Pull request #7317
- Pipeline creation now retries when SQLite returns a transient database is locked error. Pull request #7264
- The login page now only links http and https error URIs, so javascript
error_urivalues are not rendered as links. Pull request #7318 - Token refresh for Gitea, GitLab, Forgejo and GitHub now forces the oauth2 token exchange instead of reusing a stale token. Pull request #7167
- Woodpecker now falls back to read only permissions when the forge permission sync fails. Pull request #7282
- The Kubernetes backend now returns an error when a step's backend options cannot be parsed instead of starting the pod with empty options. Pull request #7312
- Restarting a pipeline no longer copies the reviewer and review time from the previous run. Pull request #7287
- Token expiry is now persisted when an existing user signs in again, so the stored expiry matches the new credential pair. Pull request #7304
- Queue scheduling calculations were sped up by avoiding repeated dependency scans for every pending task. Pull request #7303
Why it matters
This week closes several problems that affected day to day use: crashes while parsing config, credentials appearing in logs, failed pipeline creation on SQLite, and broken token refresh for several forges. It also hardens security around forge permission sync and login page links, and fixes known bugs such as wrong merge request numbers on GitLab and failed Repair Repository for Bitbucket Datacenter repos with spaces.
Changelog entry
- Fix server panics while parsing config Pull request #7336
- Do not log bearer credentials at trace level Pull request #7317
- Retry pipeline creation on SQLite database lock Pull request #7264
- Only link http(s) error URIs on the login page Pull request #7318
- Force oauth2 token exchange in forge Refresh for Gitea, GitLab, Forgejo and GitHub Pull request #7167
- Fall back to read only if the forge permission sync fails Pull request #7282
- Return an error when Kubernetes backend options cannot be parsed Pull request #7312
- Drop reviewer metadata when restarting a pipeline Pull request #7287
- Persist token expiry when existing users sign in Pull request #7304
- Use merge request IID in GitLab pull request list Pull request #7259
- Enable crons created without the enabled field Pull request #7339
- Ignore GitLab tag deletion webhooks Pull request #7289
This week: config parsing panics fixed, bearer credentials no longer logged, SQLite lock retries for pipeline creation, login page links only http(s), forced token refresh for several forges, read only fallback when permission sync fails.
This week's changes: fixed server panics while parsing config, stopped logging bearer credentials at trace level, added retries for pipeline creation when SQLite reports a locked database, restricted login page error links to http and https, forced the oauth2 token exchange in refresh for Gitea, GitLab, Forgejo and GitHub, and added a read only fallback when forge permission sync fails. Also: Kubernetes backend now errors on unparsable backend options, pipeline restarts no longer copy reviewer metadata, token expiry is persisted on existing user sign in, queue scheduling is faster, and the GitLab pull request list now uses the merge request IID.
Week of October 5, 2026
What shipped
- The global queue paused flag is now persisted, so a queue paused by an admin stays paused after a server restart instead of resuming dispatch. Pull request #7256
- Long-poll RPCs from agents are now released during server shutdown, so a graceful stop no longer waits on agents holding Next or Wait polls open. Pull request #7189
- Step logs are no longer lost when a pipeline ends with skipped workflows, and log entries arriving in sub-second pace are now sent in one-second batches. Pull request #7240
- A race on concurrent pipeline config persistence was fixed, so two webhooks for the same commit no longer both insert and one fail with a 500. Pull request #7192
- Users are reloaded from the store before an OAuth token refresh, avoiding calls to the forge with a stale or already-used refresh token. Pull request #7176
- GitLab project permissions inherited from a parent group are now resolved for repositories, so projects reached only via a group are no longer denied. Pull request #7172
- An infinite hook pagination loop on Bitbucket Cloud was fixed, which had caused repository activation to fail with an empty error. Pull request #7210
- Registry addresses in host:port form, such as 10.0.1.32:5000, can now be saved without adding an http scheme. Pull request #7235
- Cli exec now also sanitizes secrets, mimicking server-agent execution and sharing more of that code. Pull request #6877
- A version endpoint was added to the API, matching what the specification already described. Pull request #7232
Why it matters
This week brought a stable release with security and bug fixes, plus fixes for queue state, shutdown behavior, and lost step logs that affect everyday pipeline runs. The queue paused state now survives restarts, agents no longer block a graceful server shutdown, and step logs are kept when a pipeline ends with skipped workflows. It also fixed a config persistence race and a stale OAuth refresh path that could cause failed requests.
Changelog entry
- Persist the queue paused state across server restarts Pull request #7256
- Release agents waiting on long polls during server shutdown Pull request #7189
- Fix step logs lost when a pipeline ends with skipped workflows Pull request #7240
- Fix race condition on concurrent pipeline config persist Pull request #7192
- Reload user from store before refreshing OAuth token Pull request #7176
- Resolve group-inherited project permissions for GitLab repositories Pull request #7172
- Fix infinite hook pagination loop on Bitbucket Cloud Pull request #7210
- Accept host:port registry addresses Pull request #7235
- Sanitize secrets in cli exec Pull request #6877
- Add version endpoint to the API Pull request #7232
- Fix GitHub webhook parse panic Pull request #7257
- Fix dependency security issues Pull request #7253
Fixed: queue pause survives restarts, agents no longer block shutdown, step logs kept when skipped workflows end a pipeline, config race resolved, and GitLab group-inherited permissions work. Registry host:port addresses now save, and cli exec sanitizes secrets.
This week we fixed several issues affecting pipeline runs. A paused queue now stays paused after a server restart instead of resuming dispatch. Agents holding long polls no longer block a graceful server shutdown. Step logs are kept when a pipeline ends with skipped workflows, and logs arriving quickly are batched each second. Concurrent webhooks for the same commit no longer race on config persistence. GitLab projects reached only through a parent group now resolve permissions correctly. Registry addresses in host:port form can be saved, cli exec sanitizes secrets, and the API version endpoint matches the spec. A stable release with security and bug fixes also shipped.
Week of September 28, 2026
What shipped
- Upgraded to Go 1.27 with new language features and improvements enforced across the codebase. Pull request #7153
- Database now stores workflow and step dependencies to enable frontend pipeline dependency visualization. Pull request #6130
- Added configurable default user namespace support for Kubernetes pods with non-root override option. Pull request #6943
- Fixed GitLab commit status updates failing when server rejects certain status transitions. Pull request #7217
- Resolved workspace volume mismatch when using CLI exec with the Kubernetes backend. Pull request #7150
- Local backend now supports custom shell paths for non-standard shell installations. Pull request #7194
- Fixed CLI shell completion by enabling the required flag for tab completion generation. Pull request #7203
- Fixed URL detection in build logs when ANSI escape codes surround URLs. Pull request #7196
- Fixed Nix development environment by disabling static linking and restoring pnpm functionality. Pull request #7193
- Updated vulnerable documentation dependencies in pnpm lockfile. Pull request #7204
Why it matters
This week brings infrastructure upgrades with Go 1.27, key database changes for pipeline visualization, and fixes for multiple backend issues. GitLab integration improvements and Kubernetes backend fixes address production pain points, while shell and CLI enhancements improve developer experience.
Changelog entry
- Adopt Go v1.27 with language improvements and updated toolchain requirements Pull request #7153
- Store workflow and step dependencies in database for pipeline visualization Pull request #6130
- Add configurable default user namespace support for Kubernetes pods Pull request #6943
- Ignore GitLab status transition errors when setting commit status Pull request #7217
- Fix workspace volume mismatch in CLI exec with Kubernetes backend Pull request #7150
- Support custom shell paths in local backend Pull request #7194
- Fix CLI shell completion by enabling shell completion flag Pull request #7203
- Fix URL detection in build logs when combined with ANSI escape codes Pull request #7196
- Fix Nix development environment by disabling static linking Pull request #7193
- Update vulnerable documentation dependencies Pull request #7204
- Align renovate configuration with pnpm minimum release age policy Pull request #7220
- Remove remaining Gitpod artifacts Pull request #7216
Go 1.27 adoption complete, dependency graph storage merged for frontend visualization, GitLab status transition fixes, Kubernetes CLI exec workspace resolution, custom shell paths for local backend.
This week's updates bring significant improvements across Woodpecker CI. We've upgraded to Go 1.27 with all its enhancements. The database now stores pipeline dependencies, enabling better visualization in the UI. GitLab integration is more robust with proper status transition handling. Kubernetes users will see resolved workspace volume issues with CLI exec. Additional fixes include custom shell path support for the local backend, restored CLI completion, and corrected URL detection in logs with ANSI escapes.
Week of September 14, 2026
What shipped
- The SDK's AgentList endpoint now supports pagination options like other list endpoints, fixing silent truncation at 50 agents. Pull request #7155
- Pipelines that error before their configuration is persisted can now be restarted instead of failing with a not found error. Pull request #7120
- Matrix environment variables are no longer injected into the default clone step. Pull request #7157
- Short multi-line secret lines are now skipped to prevent processing issues. Pull request #7144
- Directories are now ignored when fetching files. Pull request #7145
- Documentation now covers manual Linux binary installation including extraction, environment setup, and systemd service configuration. Pull request #7160
Why it matters
This week includes fixes for pipeline restart behavior and SDK pagination consistency, addressing cases where users hit silent failures. Additional improvements handle matrix variables, secret processing, and file fetching more correctly.
Changelog entry
- Add AgentListWithOpts with pagination options to SDK Pull request #7155
- Fix pipeline restart when config was not persisted before error Pull request #7120
- Prevent matrix environment variables from being injected into default clone step Pull request #7157
- Skip short multi-line secret lines during processing Pull request #7144
- Ignore directories when fetching files Pull request #7145
- Document manual Linux binary installation with systemd setup Pull request #7160
New fixes: AgentList pagination in SDK, pipeline restarts after config failures, matrix env var injection prevention, multi-line secret handling, and directory filtering. Plus Linux binary installation docs.
This week's updates improve reliability and consistency across Woodpecker. The SDK's AgentList now supports pagination options properly, pipelines can restart even when configuration wasn't persisted, and matrix environment variables no longer leak into clone steps. We also fixed secret processing for multi-line content and added documentation for manual Linux binary installation with systemd service setup.