v2.17.32

semaphoreui/semaphorev2.17.32Apr 1, 2026by github-actions[bot]

AI Summary

This release focuses on runner reliability, security improvements, and overall stability, including smarter distribution, startup validation, and permission checks.

Key Highlights

  • Smarter runner distribution with random selection for better load balancing
  • Config validation at startup to prevent misconfiguration issues
  • Admin permission check required for restoring projects from backup
  • Fixes for Git branch names containing slashes and nil pointer crashes

New Features

  • Randomize runner selection
  • Config validation at startup
  • Admin permission check for project restore

Full Release Notes

## Semaphore UI v2.17.32 – Release Summary

This release focuses on **runner reliability, security improvements, and overall stability**, along with several bug fixes and translation updates.

### 🚀 Improvements

* **Smarter runner distribution**
  Runners are now selected randomly, improving load balancing and avoiding uneven task distribution across runners.

### 🔐 Security & Safety

* **Config validation at startup**
  The `access_key_encryption` setting is now validated during startup to prevent misconfiguration issues early.
* **Stronger permission checks**
  Restoring projects from backup now requires admin permissions, improving security around sensitive operations.

### 🐛 Bug Fixes

* Fixed nil pointer crash in runner updates when tasks are not part of a pool
* Fixed incorrect handling of Git branch names containing slashes
* Improved runner shutdown logic to ensure progress is uploaded before termination
* Fixed inconsistencies in task status updates
* Minor fix for a missed import

### 🌍 Localization

* Improved Traditional Chinese (zh_TW) translations and consistency
---

## What's Changed
* fix(i18n): improve Traditional Chinese (zh_TW) translations by @tan9 in https://github.com/semaphoreui/semaphore/pull/3701
* fix(config): validate access_key_encryption at startup by @abh in https://github.com/semaphoreui/semaphore/pull/3710
* fix(i18n): improve zh_TW translation consistency by @tan9 in https://github.com/semaphoreui/semaphore/pull/3705
* Fix branch names with slashes truncated in GetRemoteBranches by @Copilot in https://github.com/semaphoreui/semaphore/pull/3717
* Add admin permission check for project restore from backup by @JulianKap in https://github.com/semaphoreui/semaphore/pull/3695
* chore(deps): update dependency axios to v1.13.6 by @renovate[bot] in https://github.com/semaphoreui/semaphore/pull/3692
* fix: nil pointer dereference in UpdateRunner when task not in pool by @cursor[bot] in https://github.com/semaphoreui/semaphore/pull/3727
* feat: randomize runner selection by @agrrh in https://github.com/semaphoreui/semaphore/pull/3722
* fix(runners): gate one-off shutdown on acknowledged progress upload by @fiftin in https://github.com/semaphoreui/semaphore/pull/3738
* fix/status updating by @fiftin in https://github.com/semaphoreui/semaphore/pull/3737

## New Contributors
* @tan9 made their first contribution in https://github.com/semaphoreui/semaphore/pull/3701
* @abh made their first contribution in https://github.com/semaphoreui/semaphore/pull/3710
* @cursor[bot] made their first contribution in https://github.com/semaphoreui/semaphore/pull/3727
* @agrrh made their first contribution in https://github.com/semaphoreui/semaphore/pull/3722

**Full Changelog**: https://github.com/semaphoreui/semaphore/compare/v2.17.31...v2.17.32