## Changelog

### BREAKING CHANGES

- Switched to a darker, more neutral color scheme

  ![Dark](https://user-images.githubusercontent.com/22407953/283922030-f697fcbe-3113-4352-9aa7-f1124c76efc6.png)

  > Light mode is coming soon!

- Workspace activity is only bumped by 1 hour if the user is still active after the default autostop duration (#10704) (@Emyrk)

  ![Autostop screenshot](https://user-images.githubusercontent.com/22407953/283919406-4c00600e-3b68-40ff-8377-34f5c00805c8.png)

  > If the user is still using their workspace after 5 hours, the workspace will stay alive for an additional hour. If the user is still using their workspace after 6 hours, the workspace will stay alive for an additional hour, and so on. The previous behavior bumped the schedule by 5 hours every time.

### Features

- Add API versions to workspace agents to avoid incompatible changes (#10419) (@spikecurtis)
- Add observability configuration values to deployment page (#10471) (@Emyrk)
- Add `log-dir` flag to vscodessh for debuggability (#10514) (@kylecarbs)
- Allow users to duplicate workspaces by parameters (#10362) (@Parkreiner) (#10604) (@mtojek)
- Expose prometheus port in helm chart (#10448) (@pjmckee)
- Add list of user's groups to Accounts page (#10522) (@Parkreiner)
- Add configurable cipher suites for tls listening (#10505) (@Emyrk)
- Expose app insights as Prometheus metrics (#10346) (@mtojek)
- Parse resource metadata values as markdown (#10521) (@aslilac)
- Implement bitbucket-server external auth defaults (#10520) (@Emyrk)
- Expose parameter insights as Prometheus metrics (#10574) (@mtojek)
- Add docs for Bitbucket Server external auth config (#10617) (@ericpaulsen)
- Add `orphan` option to workspace delete in UI (#10654) (@Kira-Pilot)
- Allow autostop to be specified in minutes and seconds (#10707) (@Kira-Pilot)
- Prompt for misspelled parameter names (#10350) (@johnstcn)
- Add template filter support to exp scaletest cleanup and traffic (#10558) (@mafredri)
- Create workspace using parameters from existing workspace
- Allow showing schedules for multiple workspaces (#10596) (@johnstcn)
- Add parameter to force healthcheck in `/api/v2//debug/health` (#10677) (@johnstcn)
- Allow configuring database health check threshold (#10623) (@johnstcn)
- Add stop and start batch actions (#10565) (@BrunoQuaresma)
- Add annotation to display values of type serpent.Duration correctly (#10667) (@johnstcn)
- Add refresh button on health page (#10719) (@johnstcn)

### Bug fixes

- fix: update tailscale to fixed STUN probe version (#10439) (@spikecurtis)
- fix: disable t.Parallel on TestPortForward (#10449) (@spikecurtis)
- fix: schedule autobuild directly on TestExecutorAutostopTemplateDisabled (#10453) (@spikecurtis)
- fix: add support for custom auth header with client secret (#10513) (@kylecarbs)
- fix: allow users to use quiet hours endpoint (#10547) (@deansheather)
- fix: use `DefaultTransport` in `exchangeWithClientSecret` if nil (#10551) (@kylecarbs)
- fix: upgrade tailscale to fix STUN probes on dual stack (#10535) (@spikecurtis)
- fix: stop SSHKeysPage from flaking (#10553) (@Parkreiner)
- fix: disable pagination nav buttons correctly (#10561) (@Parkreiner)
- fix: hide promote/archive buttons for template versions from users without permission (#10555) (@aslilac)
- fix: display all metadata items alongside daily_cost (#10554) (@Kira-Pilot)
- fix: remove stray 0 when no data is in users table (#10584) (@Parkreiner)
- fix: case insensitive magic label (#10592) (@Emyrk)
- fix: improve language of latest build error (#10593) (@kylecarbs)
- fix: disable autostart for flakey test (#10598) (@sreya)
- fix: remove accidental scrollbar from deployment banner (#10616) (@Parkreiner)
- fix: handle SIGHUP from OpenSSH (#10638) (@spikecurtis)
- fix: add missing focus state styling to buttons and checkboxes (#10614) (@Parkreiner)
- fix: update HealthcheckDatabaseReport mocks (#10655) (@Kira-Pilot)
- fix: prevent db deadlock when workspaces go dormant (#10618) (@sreya)
- fix: lock log sink against concurrent write and close (#10668) (@spikecurtis)
- fix: disable flaky test TestSSH/RemoteForward_Unix_Signal (#10711) (@spikecurtis)
- fix: disable autoupdate workspace setting when template setting enabled (#10662) (@sreya)
- fix: show all experiments in deployments list if opted into (#10722) (@Kira-Pilot)
- fix: close ssh sessions gracefully (#10732) (@spikecurtis)
- fix: accept legacy redirect HTTP environment variables (#10748) (@spikecurtis)
- fix(coderd): fix memory leak in `watchWorkspaceAgentMetadata` (#10685) (@mafredri)
- fix(coderd/rbac): allow user admin all perms on ResourceUserData (#10556) (@johnstcn)
- fix(scripts): forward all necessary ports for remote playwright (#10606) (@mafredri)
- fix(site): fix favicon theme (#10497) (@BrunoQuaresma)
- fix(site): fix health tooltip on deployment bar (#10502) (@BrunoQuaresma)
- fix(site): fix dialog loading buttons displaying text over the spinner (#10501) (@BrunoQuaresma)
- fix(site): fix user dropdown width (#10523) (@BrunoQuaresma)
- fix(site): fix agent log error (#10557) (@BrunoQuaresma)
- fix(site): fix bottom bar height (#10579) (@BrunoQuaresma)
- fix(site): fix daylight savings date range issue (#10595) (@BrunoQuaresma)
- fix(site): fix group name validation (#10739) (@BrunoQuaresma)
- fix(site): fix scroll when having many build options (#10744) (@BrunoQuaresma)
- fix(site): prevent overwriting of newest workspace data during optimistic updates (#10751) (@BrunoQuaresma)
- fix(site/src/api): getDeploymentDAUs: truncate tz_offset to whole number (#10563) (@johnstcn)

### Code refactoring

- refactor: revamp pagination UI view logic (#10567) (@Parkreiner)
- refactor(cli): extract workspace list parameters (#10605) (@johnstcn)
- refactor(site): minor improvements on users page popovers (#10492) (@BrunoQuaresma)
- refactor(site): remove version and last built from workspace header (#10495) (@BrunoQuaresma)
- refactor(site): simplify proxy menu (#10496) (@BrunoQuaresma)
- refactor(site): make minor design tweaks and fix issues on more options menus (#10493) (@BrunoQuaresma)
- refactor(site): improve first workspace creation time (#10510) (@BrunoQuaresma)
- refactor(site): add minor design improvements on the setup page (#10511) (@BrunoQuaresma)
- refactor(site): handle edge cases for non-admin users with no workspaces and templates (#10517) (@BrunoQuaresma)
- refactor(site): improve templates empty state (#10518) (@BrunoQuaresma)
- refactor(site): add version back to workspace header (#10552) (@BrunoQuaresma)
- refactor(site): use generated Healthcheck API entities (#10650) (@mtojek)
- refactor(site): adjust a few colors (#10750) (@BrunoQuaresma)
- refactor(site): add minor tweaks to the workspace delete dialog (#10758) (@BrunoQuaresma)
- refactor(site): replace secondary by primary color (#10757) (@BrunoQuaresma)
- refactor(site): add minor improvements to the schedule controls (#10756) (@BrunoQuaresma)

### Tests

- e36503afd test(codersdk/agentsdk): fix context cancel flush test (#10560) (@mafredri)

### Continuous integration

- e976f5041 ci: bump the github-actions group with 2 updates (#10537) (@app/dependabot)
- 4f3925d0b ci: close likely-no issues automatically (#10569) (@ammario)
- 076db3148 ci: use actions/setup-go builtin cache (#10608) (@matifali)
- 715bbd3ed ci: bump go to version 1.20.11 (#10631) (@matifali)
- be0436afb ci: bump terraform version to 1.5.7 to match embedded terraform version (#10630) (@matifali)
- 3f4791c9d ci: bump the github-actions group with 4 updates (#10649) (@app/dependabot)
- c14c1cce1 ci: bump the github-actions group with 1 update (#10694) (@app/dependabot)

### Other changes

- 5f0417d14 Fix nix-shell on macos (#10591) (@anunayasri)
- 3200b85d8 Revert "chore: bump go.uber.org/goleak from 1.2.1 to 1.3.0 (#10398)" (#10444) (@spikecurtis)
- 8ddc8b344 site: new dark theme (#10331) (@aslilac)
- fc249fab1 skip TestCollectInsights (#10749) (@mtojek)

Compare: [`v2.3.3...v2.4.0`](https://github.com/coder/coder/compare/v2.3.3...v2.4.0)

## Container image

- `docker pull ghcr.io/coder/coder:v2.4.0`

## Install/upgrade

Refer to our docs to [install](https://coder.com/docs/install) or [upgrade](https://coder.com/docs/admin/upgrade) Coder, or use a release asset below.
