## semaphoreui/semaphore — v2.19.8…v2.20.0-alpha1

_142 commits._

### Features
- **feat: survey variable for multi select** (c7f9d2f)
- **feat(auth): implement oidcSuccessRedirectURL function and add tests** (eb42b2a)
- **feat(ui): add component for card** (9f2675f)
- **feat: update docs** (baa1443)
- **feat(survey_vars): store survey secret to the database as access key (#4086)** (081425d)
- **feat(secrets): TLS unverify checkbox for vault** (b7244aa)
- **agents: add plan** (3678a3c)
- **feat(config): move runner options to RunnersConfig struct** (0fa1aa9)
- **feat(ssh): config for script host key checking** (928f36a)
- **feat(metrics): add enabled flag to metrics configuration and update authentication middleware** (72d7959)
- **feat(metrics): add authentication middleware for metrics endpoint and update config** (fbbd142)
- **feat(templates): load playbooks style** (cefb449)
- **feat(metrics): integrate Prometheus metrics for task status tracking** (9798394)
- **feat(metrics): add Prometheus metrics support and tests** (8b2c75b)
- **feat(auth): link LDAP/OIDC logins via external identity instead of email matching (#4025)** (1201b3c)

### Fixes
- **fix(db): error message validation** (be471c4)
- **Merge pull request #4124 from semaphoreui/cursor/critical-bug-investigation-89f2** (818a49a)
- **fix(tasks): JSON-encode multi-select survey vars in shell CLI args** (bb29248)
- **fix: validate survey backend** (eb29c3e)
- **fix: survey vars reset default value** (75df270)
- **fix: normalize array in reduce** (af22185)
- **fix: normalize select values while loading** (1e91d68)
- **fix: add a check for an empty array** (f8e6ae0)
- **fix: pass multi-select survey vars as JSON to env target and terraform -var** (a6e899a)
- **fix(ui): bottom padding for template form** (ff0cf4c)
- **fix(deps): update module github.com/go-git/go-git/v5 to v5.19.2** (5d54d2b)
- **fix: add undo migration for 2.20.1** (0bd3589)
- **fix(dredd): init apps** (57e1d63)
- **fix: branch and use correct function** (9bea2a6)
- **fix(secrets): do not remove synchronized fields and readoly fields** (36b2706)
- **fix: merge conflict** (2582d70)
- **fix(schedules): use server cron validator** (4a16ade)
- **fix(git): use correct packages after refactoring** (fa9dabf)
- **fix(integrations): add project id verification** (1af4c10)
- **fix(templates): remove extra field** (4ccee04)
- **fix: bug reports** (048df99)
- **fix(integrations): verify integation id in API requests** (eb28b3a)
- **fix(git): add end-of-options flag** (2a39153)
- **fix(api): return after write error 400 to header.** (2455883)
- **fix(backups): do not backup runner token** (0ab87d6)
- **fix(tasks): verify commit hash format** (18703c7)
- **fix(vaults): verify template_id on update but not update them.** (8ed3b37)
- **Merge pull request #3820 from semaphoreui/copilot/fix-integrations-json-forwarding** (5a4c102)
- **fix(community): hide Storage tab** (c23daa6)
- **fix(deps): update module modernc.org/sqlite to v1.54.0** (0fa2172)
- **fix(deps): update module github.com/go-ldap/ldap/v3 to v3.4.14** (16bd002)
- **Potential fix for pull request finding** (a1d9e34)
- **fix(db): close uninitialized db without null pointer panic** (706502f)
- **fix(deps): update module modernc.org/sqlite to v1.53.0** (fe3c35d)
- **fix(deps): update module golang.org/x/crypto to v0.54.0** (70372dc)
- **fix(deps): update module github.com/coreos/go-oidc/v3 to v3.20.0** (bc3fd04)
- **fix: preserve JSON objects/arrays when extracting integration variables** (d822c24)

### Backend
- **Merge pull request #4112 from befika/sem-197-problem-pocketid-oidc-provider** (0d08a61)
- **Merge pull request #4118 from kurarrr/feat/multi-select-survey-vars** (80b78a3)
- **Apply suggestions from code review** (7a5cd9a)
- **Merge pull request #4082 from semaphoreui/dependabot/npm_and_yarn/web/shell-quote-1.10.0** (b082189)
- **Merge pull request #4083 from semaphoreui/dependabot/npm_and_yarn/web/svgo-2.8.3** (3678cd4)
- **Merge pull request #4084 from semaphoreui/dependabot/npm_and_yarn/web/fast-uri-3.1.4** (8e97a92)
- **Merge pull request #4115 from semaphoreui/renovate/cron-parser-5.x-lockfile** (5783c18)
- **Merge pull request #4074 from semaphoreui/renovate/prettier-3.x-lockfile** (7f63f49)
- **Merge pull request #4114 from semaphoreui/renovate/axios-1.x-lockfile** (91dd4bd)
- **Merge pull request #4113 from semaphoreui/renovate/github.com-go-git-go-git-v5-5.x** (3b65bd3)
- **Apply suggestion from @coderabbitai[bot]** (903b5d3)
- **Merge pull request #4098 from semaphoreui/renovate/openai-7.x** (1140e0a)
- **feat/executor image in template (#4104)** (013abf8)
- **Merge pull request #4088 from semaphoreui/renovate/openai-6.x-lockfile** (08fe6cc)
- **agents: improve CLAUDE.md** (3c953e4)
- **Merge branch 'develop' of github.com:semaphoreui/semaphore into develop** (79e3d89)
- **Merge pull request #4054 from befika/feat/prometheus-metrics** (c7a309b)
- **Merge branch 'develop' into feat/prometheus-metrics** (09587e2)
- **Merge branch 'develop' of github.com:semaphoreui/semaphore into develop** (98b4d89)
- **Merge pull request #4064 from semaphoreui/renovate/openai-6.x-lockfile** (df0b7b1)
- **Merge branch 'develop' of github.com:semaphoreui/semaphore into develop** (759c654)
- **Merge pull request #4059 from semaphoreui/renovate/actions-setup-go-7.x** (8e18a2a)
- **Merge pull request #4058 from semaphoreui/renovate/github.com-go-ldap-ldap-v3-3.x** (93c074c)
- **Merge pull request #4060 from semaphoreui/renovate/modernc.org-sqlite-1.x** (42c9189)
- **Merge pull request #4056 from semaphoreui/renovate/openai-6.x-lockfile** (333e71e)
- **Merge branch 'develop' of github.com:befika/semaphore into feat/prometheus-metrics** (549e739)
- **Merge pull request #4050 from semaphoreui/renovate/actions-setup-node-7.x** (0bc2a0e)
- **Merge pull request #4048 from semaphoreui/renovate/docker-setup-qemu-action-4.x** (f85052c)
- **Merge pull request #4031 from semaphoreui/renovate/github.com-coreos-go-oidc-v3-3.x** (66742c7)
- **Merge pull request #4043 from semaphoreui/renovate/docker-login-action-4.x** (056964e)
- **Merge pull request #4044 from semaphoreui/renovate/docker-metadata-action-6.x** (9c7215e)
- **Merge pull request #4042 from semaphoreui/renovate/docker-build-push-action-7.x** (8a9f5d7)
- **Merge pull request #4021 from semaphoreui/renovate/go-1.x** (4ae88bb)
- **Merge pull request #4035 from semaphoreui/renovate/modernc.org-sqlite-1.x** (98a4317)
- **Merge pull request #4036 from semaphoreui/renovate/actions-cache-6.x** (d20df6e)
- **Merge pull request #4041 from semaphoreui/renovate/nanoid-6.x-lockfile** (160347d)
- **Merge pull request #4037 from semaphoreui/renovate/actions-checkout-7.x** (c477f8d)
- **Merge pull request #4040 from semaphoreui/renovate/cron-parser-5.x-lockfile** (f7f7e25)
- **Merge pull request #4029 from semaphoreui/renovate/openai-6.x-lockfile** (ca63266)
- **Merge pull request #4030 from semaphoreui/renovate/prettier-3.x-lockfile** (fe8e132)
- **Merge pull request #4032 from semaphoreui/renovate/golang.org-x-crypto-0.x** (c9a736f)
- **Merge pull request #3666 from semaphoreui/renovate/nyc-18.x** (ba882dd)
- **Merge pull request #3437 from semaphoreui/renovate/actions-setup-go-6.x** (6797811)
- **Merge pull request #3507 from semaphoreui/renovate/alpine-3.x** (085d483)
- **Merge pull request #3442 from semaphoreui/renovate/major-github-artifact-actions** (92e2158)
- **Merge pull request #3438 from semaphoreui/renovate/actions-setup-node-6.x** (ff7e339)
- **Merge pull request #3990 from semaphoreui/renovate/cron-parser-5.x-lockfile** (9899b1a)
- **Initial plan** (2445909)

### Tests
- **test(unit): fix test** (68c5869)
- **test(unit): rename function** (e06fe8c)
- **test(backup): add test for non-existing token in backup** (f1fdaf7)
- **test(dredd): add apps env var** (0f134a9)

### Docs
- **docs: update docs link** (d1238fa)
- **docs(security): update sla** (d7f41ea)

### Chore
- **chore: fix syntax errors** (fa8edce)
- **chore: parameterize the message text** (2914186)
- **chore(deps-dev): bump fast-uri from 3.1.2 to 3.1.5 in /web** (f2e60b0)
- **chore(deps-dev): bump svgo from 2.8.2 to 2.8.3 in /web** (59a4ff0)
- **chore(deps-dev): bump shell-quote from 1.8.4 to 1.10.0 in /web** (4c32c08)
- **chore(deps): update dependency cron-parser to v5.7.0** (cf72f34)
- **chore(deps): update dependency prettier to v3.9.6** (fad8939)
- **chore(deps): update dependency axios to v1.19.0** (ccec84e)
- **chore(deps): update dependency openai to v7** (9d11c02)
- **chore(deps): update dependency openai to v6.49.0** (2724354)
- **ci(releases): send gpg pass to task** (7f9f661)
- **ci: GPG security@semaphoreui.com** (cd314c1)
- **chore(deps): update dependency openai to v6.48.0** (13f8288)
- **ci: update gpg** (742e876)
- **chore: update deps** (ded97b5)
- **chore(deps): update actions/setup-go action to v7** (7891f46)
- **chore(deps): update dependency openai to v6.47.0** (2bc8db5)
- **refactor(auth): merge migrations** (e0c6973)
- **chore(deps): update actions/setup-node action to v7** (ae3066c)
- **chore(deps): update docker/setup-qemu-action action to v4** (a5d8947)
- **chore(deps): update docker/metadata-action action to v6** (47e62b9)
- **chore(deps): update docker/login-action action to v4** (2e96bcb)
- **chore(deps): update docker/build-push-action action to v7** (24a3f0d)
- **chore(deps): update dependency nanoid to v6** (349538b)
- **chore(deps): update dependency cron-parser to v5.6.2** (f7ee2c2)
- **chore(deps): update actions/checkout action to v7** (2361102)
- **chore(deps): update actions/cache action to v6** (ce7431f)
- **chore(deps): update dependency openai to v6.46.0** (378a4b3)
- **chore(deps): update dependency prettier to v3.9.5** (283ce17)
- **chore(deps): update dependency nyc to v18** (3ee2151)
- **chore(deps): update github artifact actions** (721386e)
- **chore(deps): update actions/setup-node action to v6** (9958a70)
- **chore(deps): update actions/setup-go action to v6** (fe709bb)
- **chore(deps): update dependency go to v1.26.5** (6c0f3c6)
- **chore(deps): update dependency cron-parser to v5.6.1** (bafef32)
- **chore(deps): update alpine docker tag to v3.24** (5b2674f)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/semaphoreui/semaphore?utm_source=github-action)._