develop
feat/executor image in template (#4104)
fix: merge conflict
sec/golangci (#3817)
feat(survey_vars): store survey secret to the database as access key (#4086)
feat(templates): multiple var groups per template (#3796)
feat(be): boltdb to sql migration tool
feat(auth): link LDAP/OIDC logins via external identity instead of email matching (#4025)
test(unit): rename function
Merge pull request #3937 from semaphoreui/runner_timeout_2
fix(integrations): add project id verification
Fix integration survey values not being loaded during webhook execution (#3254)
secret storage (#3128)
fix: add undo migration for 2.20.1
fix(db): migrations for mariadb 12.1
Merge pull request #4024 from semaphoreui/feat/workflow_params
refactor(db): extract db connection class
Implement project invitation system (#3187)
feat(be): ansible-semaphore -> semaphoreui
fix(roles): check user permissions for creating custom roles
fix(runners): use only registered runners
feat/tagged global runner (#3804)
fix(shedule): saving/updaing task props
refactor/sync flag (#3793)
Workflows
fix(vaults): verify template_id on update but not update them.
fix(otp): limit number of tries email otp
feat(views): hidden flag