Commit Graph
103 Commits
Author SHA1 Message Date
ケイラ 52c4b61391 feat: add search to parameter dropdowns (#18729) 2025-07-15 11:23:49 -06:00
Kacper SawickiandDean Sheather 8202514ce0 feat!: add ability to cancel pending workspace build (#18713)
Closes #17791 

This PR adds ability to cancel workspace builds that are in "pending"
status.

Breaking changes:
- CancelWorkspaceBuild method in codersdk now accepts an optional
request parameter

API:
- Added `expect_status` query parameter to the cancel workspace build
endpoint
- This parameter ensures the job hasn't changed state before canceling
- API returns `412 Precondition Failed` if the job is not in the
expected status
- Valid values: `running` or `pending`
- Wrapped the entire cancel method in a database transaction

UI:
- Added confirmation dialog to the `Cancel` button, since it's a
destructive operation

![image](https://github.com/user-attachments/assets/437aa5f4-5669-45b6-82a0-e46f277114bf)

![image](https://github.com/user-attachments/assets/423b5cb1-a4fb-4a10-933b-c1c73f4b838c)


- Enabled cancel action for pending workspaces (`expect_status=pending`
is sent if workspace is in pending status)

![image](https://github.com/user-attachments/assets/32d35ff1-12e6-4f7b-9f6c-fde9da9de6cf)

---------

Co-authored-by: Dean Sheather <dean@deansheather.com>
2025-07-08 11:02:58 +02:00
Jaayden Halko 90a875d916 chore: implement tests for dynamic parameter component (#18745) 2025-07-03 13:09:59 -04:00
Jaayden Halko 61b6562f9a feat: display descriptions in multi-select component (#18730)
<img width="528" alt="Screenshot 2025-07-02 at 23 06 51"
src="https://github.com/user-attachments/assets/d6223d99-bc1b-4325-8eb6-d87a687bcec8"
/>
2025-07-03 05:55:20 -04:00
ケイラ 0b82f41a24 feat: allow masking workspace parameter inputs (#18595) 2025-07-01 16:27:43 -06:00
Jaayden Halko ad6773360c fix: display error message on delete workspace error (#18654)
resolves coder/preview#155

When deleting a workspace, show an error dialog if deleting the
workspace is not possible.

![Screenshot 2025-06-28 at 10 06
47](https://github.com/user-attachments/assets/650bfb54-6ed9-4f41-a410-1333afeee0a4)
2025-06-30 15:09:51 -04:00
ケイラ d4208d23aa refactor: show icons for multi-select parameter options (#18594) 2025-06-27 10:54:47 -06:00
Asher 48bb534a51 chore: fix idle state icon when disabled (#18554)
When the workspace is off, we set a disabled text/stroke color, but for
the idle icon that also needs a fill, this only changed the outline
making it look weird. Instead, move the disabled logic into the
component so we can apply a matching fill.

I felt it looked too thick with both the outline and fill, so I also
removed the outline.

Really I think maybe the workspace status should be a separate column
rather than disabling these icons, but this maintains the status quo.


Before with mismatching stroke and fill color:


![screenshot](https://github.com/user-attachments/assets/961014b7-1e26-49f0-aa87-834f2f367618)


After with disabled fill and stroke removal:


![screenshot](https://github.com/user-attachments/assets/205e4515-dc01-4437-87ec-a0f8a546da3b)


Enabled fill and stroke removal:


![screenshot](https://github.com/user-attachments/assets/04f5914e-f96c-4c75-8873-e3fc9c854d95)
2025-06-25 10:06:57 -08:00
Jaayden Halko 25f1b76624 fix: handle empty strings for Select component (#18553)
resolve #18361

Its possible for a dynamic parameter option value to be an empty string
which will cause the following error in the Radix Select component. The
solution is to handle empty strings so that they are not set directly in
the component.


`Uncaught Error: A <Select.Item /> must have a value prop that is not an
empty string. This is because the Select value can be set to an empty
string to clear the selection and show the placeholder.`


```
data "coder_parameter" "radio" {
  name         = "radio"
  display_name = "An example of a radio input"
  description  = "The next parameter supports a single value."
  type         = "string"
  form_type    = "dropdown"
  order        = 1
  default      = ""

  option {
    name = "Empty"
    value = "" 
  }
}

```
2025-06-24 16:44:52 -04:00
Jaayden Halko ccf294eaf8 chore: improve visuals of dynamic parameters (#18537)
<img width="343" alt="Screenshot 2025-06-24 at 16 43 22"
src="https://github.com/user-attachments/assets/dc554f63-b825-4e59-896a-d078bae51c4a"
/>
<img width="837" alt="Screenshot 2025-06-24 at 16 43 37"
src="https://github.com/user-attachments/assets/e9e88164-0c87-43b5-9eb1-63fd6ea85095"
/>
2025-06-24 12:57:41 -04:00
Jaayden Halko 31d0c6fb33 feat: add better error display for workspace builds (#18518)
Classic parameters templates

<img width="548" alt="Screenshot 2025-06-23 at 23 27 46"
src="https://github.com/user-attachments/assets/e8e774bf-e201-4a80-a90c-3d6cc3658c20"
/>


Dynamic parameters templates
<img width="541" alt="Screenshot 2025-06-23 at 23 52 05"
src="https://github.com/user-attachments/assets/6a40f144-c0b2-4e16-8137-d31a52b71460"
/>
2025-06-24 09:03:40 -04:00
Jaayden Halko 6877142a0e feat: create experimental template embed page for dynamic params (#17999)
resolves coder/preview#58
2025-06-23 15:47:30 -04:00
Cian Johnston 2f55e29466 fix: complete job and mark workspace as deleted when no provisioners are available (#18465)
Alternate fix for https://github.com/coder/coder/issues/18080

Modifies wsbuilder to complete the provisioner job and mark the
workspace as deleted if it is clear that no provisioner will be able to
pick up the delete build.

This has a significant advantage of not deviating too much from the
current semantics of `POST /api/v2/workspacebuilds`.
https://github.com/coder/coder/pull/18460 ends up returning a 204 on
orphan delete due to no build being created.

Downside is that we have to duplicate some responsibilities of
provisionerdserver in wsbuilder.

There is a slight gotcha to this approach though: if you stop a
provisioner and then immediately try to orphan-delete, the job will
still be created because of the provisioner heartbeat interval. However
you can cancel it and try again.
2025-06-23 14:07:42 +01:00
Cian Johnston 49fcffc266 fix!: stop workspace before update (#18425)
Fixes https://github.com/coder/coder/issues/17840

NOTE: calling this out as a breaking change so that it is highly visible
in the changelog.

* CLI: Modifies `coder update` to stop the workspace if already running.
* UI: Modifies "update" button to always stop the workspace if already
running.
2025-06-23 09:12:37 +01:00
Asher 0a483ea2b7 feat: add idle app status (#18415)
"Idle" is more accurate than "complete" since:

1. AgentAPI only knows if the screen is active; it has no way of knowing
    if the task is complete.
2. The LLM might be done with its current prompt, but that does not mean
    the task is complete either (it likely needs refinement).

The "complete" state will be reserved for future definition.

Additionally, in the case where the screen goes idle but the LLM never
reported a status update, we can get an idle icon without a message, and
it looks kinda janky in the UI so if there is no message I display the
state text.

Closes https://github.com/coder/internal/issues/699
2025-06-20 14:34:31 -08:00
4fe0a4bca2 feat: add ephemeral parameter dialog for workspace start/restart (#18413)
resolves #17709 

FYI, blink created a first draft which was heavily modified.

## Summary

This PR implements ephemeral parameter handling for workspace
start/restart operations when templates use dynamic parameters
(`use_classic_parameter_flow = false`).

<img width="522" alt="Screenshot 2025-06-18 at 14 35 54"
src="https://github.com/user-attachments/assets/450527c0-cc88-4fc3-b0fa-170bdeb5ea51"
/>

<img width="327" alt="Screenshot 2025-06-18 at 14 35 43"
src="https://github.com/user-attachments/assets/ea74bf8e-d127-489d-b406-edfc5ec1e9a8"
/>

![Screenshot 2025-06-18 at 14 41
41](https://github.com/user-attachments/assets/52f1ab99-f3bf-4540-91ac-e385c632de8c)


## Changes

### 1. EphemeralParametersDialog Component
- **New**: `site/src/components/EphemeralParametersDialog/`
- Shows a dialog when starting/restarting workspaces with ephemeral
parameters
- Lists ephemeral parameters with names and descriptions
- Provides options to continue without setting values or navigate to
parameters page

### 2. WorkspaceReadyPage Updates
- Added `checkEphemeralParameters()` function using
`API.getDynamicParameters`
- Modified `handleStart` and `handleRestart` to check for ephemeral
parameters
- Only triggers for templates with `use_classic_parameter_flow = false`
- Shows dialog if ephemeral parameters exist, otherwise proceeds
normally

### 3. BuildParametersPopover Updates
- Added special UI for non-classic parameter flow templates with
ephemeral parameters
- Lists ephemeral parameters with descriptions
- Explains that users must use the workspace parameters page
- Provides direct link to `WorkspaceParametersPageExperimental`

---------

Co-authored-by: blink-so[bot] <211532188+blink-so[bot]@users.noreply.github.com>
Co-authored-by: jaaydenh <1858163+jaaydenh@users.noreply.github.com>
Co-authored-by: Jaayden Halko <jaayden@coder.com>
2025-06-20 15:04:36 -04:00
Jaayden HalkoandSteven Masley 5944b1c595 chore: remove local storage based optin/optout (#18344)
This removes the opt-in and opt-out buttons for dynamic parameters on
the create workspace page and the workspace parameters settings page.

---------

Co-authored-by: Steven Masley <stevenmasley@gmail.com>
2025-06-12 13:37:07 -04:00
f126931219 chore: remove dynamic-parameters experiment (#18290)
Co-authored-by: blink-so[bot] <211532188+blink-so[bot]@users.noreply.github.com>
Co-authored-by: jaaydenh <1858163+jaaydenh@users.noreply.github.com>
Co-authored-by: Steven Masley <stevenmasley@gmail.com>
2025-06-12 12:15:05 -04:00
Jaayden Halkoandblink-so[bot] 508fba83dd feat: handle update build for dynamic params (#18226)
resolves coder/preview#110

---------

Co-authored-by: blink-so[bot] <211532188+blink-so[bot]@users.noreply.github.com>
2025-06-05 16:35:23 -04:00
Bruno Quaresma 45d46c8c0a refactor: minor task page design adjustments (#18187)
**Before:**
<img width="1624" alt="Screenshot 2025-06-02 at 13 38 45"
src="https://github.com/user-attachments/assets/545400e9-18d6-44a3-9f21-a51ceceedc8e"
/>

**After:**
<img width="1624" alt="Screenshot 2025-06-02 at 13 40 18"
src="https://github.com/user-attachments/assets/1b0b89f0-8cd6-4afd-8800-786e43ae4b52"
/>

- Show output links
- Move workspace app bar to top of screen
- Remove redundant task status indicators
- Update "building your task" to "Building your workspace" to be more
transparent
- Change “Open IDE” language to “Open Locally”

Closes:
- https://github.com/coder/coder/issues/18181
- https://github.com/coder/coder/issues/18162
2025-06-02 14:52:55 -03:00
Jaayden Halko 87c4948c1d fix: do not block form control rendering for dynamic parameters on parsing error (#18185)
Defer to backend diagnostics when the values cannot be parsed and allow
the form control to render so the user can select a different option.
2025-06-02 13:40:06 -04:00
Bruno Quaresma a19539ce83 refactor: improve app status and statuses (#18121)
#### 1. Gray out status icons when the workspace is not running. 

**Before:**
<img width="1624" alt="Screenshot 2025-05-29 at 21 33 45"
src="https://github.com/user-attachments/assets/7916e707-e5ae-4226-8234-39c42f0ec8c4"
/>

**After:**
<img width="1624" alt="Screenshot 2025-05-29 at 21 35 07"
src="https://github.com/user-attachments/assets/52fd8553-414d-4c49-a44e-7a530f0d522d"
/>

#### 2. Truncate long messages

**Before**
<img width="1213" alt="Screenshot 2025-05-29 at 21 28 50"
src="https://github.com/user-attachments/assets/b76b7a4d-7ef0-41a0-822c-c32c98f997fc"
/>

**After**
<img width="1206" alt="Screenshot 2025-05-29 at 21 25 42"
src="https://github.com/user-attachments/assets/fb3f3916-a4a4-4697-b7d1-0b4873b6e528"
/>

#### 3. Disable "show more" button if there is one single status
2025-05-29 22:39:18 -03:00
Bruno Quaresma d779126ee3 chore: rollback PR #18081 (#18104)
Rollback https://github.com/coder/coder/pull/18081
2025-05-29 13:12:13 -03:00
Jaayden HalkoandSteven Masley 177bda3187 fix: autofill with workspace build parameters from the latest build (#18091)
Set the form parameters using autofill parameters based on the workspace
build parameters for the latest build

---------

Co-authored-by: Steven Masley <stevenmasley@gmail.com>
2025-05-29 11:24:55 -04:00
Bruno Quaresma 2ec7404197 chore: make owner_name and owner_username consistent (#18081)
We've been using owner_name inconsistently as username. So this PR fixes
it by making the attribute naming more consistent.
2025-05-28 17:25:32 -03:00
Bruno Quaresma bc3b8d5a51 feat: add task page (#18076)
**Demo:**


![image](https://github.com/user-attachments/assets/ca59ba92-a73a-4613-ae41-910f3f0455d2)
2025-05-28 15:19:05 -03:00
Jaayden Halko 5b9c40481f feat: add form_type error (#18067)
Normally parameters had red text for error diagnostics. The goal here is
to make errors more obvious when the form_type is error meaning the
parameter could not be processed correctly.

<img width="543" alt="Screenshot 2025-05-27 at 18 35 50"
src="https://github.com/user-attachments/assets/2265553e-34a3-4526-8209-6253d541f784"
/>
2025-05-27 15:35:11 -04:00
Cian Johnston ce134bc63a fix: handle invalid provisioning timings in ui (#18058)
Relates to https://github.com/coder/coder/issues/15432

* Adds a storybook entry for zero values in provisioner timings.
* Coerces a 'zero' start time to an 'instant'.
* Improves timing chart handling for large timeframes. Previously, this
would have caused the tab to run out of memory when encountering a
`time.Time{}`.
* Render 'instants' as 'invalid' in timing chart.
2025-05-27 15:10:57 +01:00
Bruno Quaresma afaa20e166 chore: add proxy provider decorator for storybook (#18023) 2025-05-26 22:39:44 -03:00
Bruno Quaresma aec64e0c73 chore: remove unused exports (#18038) 2025-05-26 16:17:21 -03:00
Bruno Quaresma f3311400d1 chore: upgrade tanstack/react-query to 5.77.0 (#18039) 2025-05-26 16:16:55 -03:00
Bruno Quaresma 5cdda2ea7d chore: replace date-fns by dayjs (#18022)
This change replaces date-fns with dayjs throughout the codebase for
more consistent date/time handling and to reduce bundle size. It also
tries to make the formatting and usage consistent.

**Why dayjs over date-fns?**
Just because we were using dayjs more broadly. Its formatting
capabilities, were also easier to extend.
2025-05-25 00:32:36 -03:00
Jaayden Halko 516fb4489e feat: display required badge instead of diagnostic text when extra code = required (#18006)
The tooltip hover uses the summary text from the diagnostic

<img width="562" alt="Screenshot 2025-05-23 at 12 51 51"
src="https://github.com/user-attachments/assets/2246abc7-dc1c-4dc2-8303-bee62d152e21"
/>
2025-05-23 10:43:17 -04:00
Bruno Quaresma b4daf36d0b refactor: refactor activity column in the workspaces table (#17976)
The goal is to better integrate the activity column data with the
existent data:
- Make the message one line, the full message is in the tooltip, and
display the state at the bottom. This way, it is visually consistent
with the other columns like status, name and template.
- Moved the app, and uri, to the actions column, instead of showing them
together with the message in the activity column.

**Previous:**
<img width="1512" alt="Screenshot 2025-05-21 at 17 28 46"
src="https://github.com/user-attachments/assets/ea9188a5-d82e-416c-b961-edf0104f66c6"
/>

**After:**
<img width="1512" alt="Screenshot 2025-05-21 at 17 28 57"
src="https://github.com/user-attachments/assets/f50dbe82-cd3e-4448-9fa2-bde9193166d6"
/>
2025-05-22 20:03:13 -04:00
Bruno Quaresma e1934fe119 chore: replace MUI icons with Lucide icons - update 18 (#17958)
1. PersonOutline → UserIcon
2. Apps → LayoutGridIcon
3. Delete → TrashIcon
4. InsertDriveFile → FileIcon
2025-05-21 16:11:23 -03:00
Bruno Quaresma cbfe975cc8 refactor: show unhealthy status on workspace status indicator (#17956)
Instead of showing a "yellow question icon" on the side of the status,
to let the user aware of unhealthy agents, we could make it yellow and
use a tooltip.

Before:
<img width="1512" alt="Screenshot 2025-05-20 at 18 13 15"
src="https://github.com/user-attachments/assets/afee470e-9dd4-4c32-b2bc-b9f66eac60fa"
/>

After:
<img width="1512" alt="Screenshot 2025-05-20 at 18 13 26"
src="https://github.com/user-attachments/assets/5769828b-f23c-45a5-8017-c4a88f085d0f"
/>
2025-05-21 15:57:32 -03:00
Jaayden Halko 3a6d5f5bba fix: update textarea to fit content height and set a max height (#17946) 2025-05-21 10:56:01 -04:00
Bruno Quaresma 36224f263f chore: replace MUI icons with Lucide icons - 17 (#17957)
1. ExpandMoreOutlined → ChevronDownIcon
2. Error/ErrorIcon → CircleAlertIcon
3. CheckCircle → CircleCheckIcon
4. Warning → TriangleAlertIcon
2025-05-20 22:24:17 -03:00
Jaayden Halko dc21016151 fix: get presets working correctly with dynamic params (#17923)
This adds a few fixes to get presets working correctly with dynamic
params

1. Changes to preset params need to be rendered and displayed correctly
2. Changes to preset params need to be sent to the websocket
3. Changes to preset params need to be marked as touched so they won't
be automatically changed later because of dynamic defaults. Dynamic
defaults means any default parameter value can be changed by the
websocket response unless edited by the user, set by autofill or set by
a preset.
2025-05-19 18:20:40 -04:00
Jaayden Halko d6cb9b49b7 feat: setup url autofill for dynamic parameters (#17739)
resolves coder/preview#80

Parameter autofill allows setting parameters from the url using the
format param.[param name]=["purple","green"]

Example:

http://localhost:8080/templates/coder/scratch/workspace?param.list=%5b%22purple%22%2c%22green%22%5d%0a

The goal is to maintain feature parity of for autofill with dynamic
parameters.

Note: user history autofill is no longer being used and is being
removed.
2025-05-16 18:05:33 -04:00
Bruno Quaresma 3011eca0c5 chore: replace MUI icons with Lucide icons - 16 (#17862)
Close -> XIcon
WarningOutlined -> TriangleAlertIcon
FileCopyOutlined -> CopyIcon
KeyboardArrowRight -> ChevronRightIcon
Add -> PlusIcon
Send -> SendIcon
ChevronRight -> ChevronRightIcon
MoreHorizOutlined -> EllipsisIcon
2025-05-15 15:42:09 -03:00
Bruno Quaresma 952c254046 fix: fix duplicated agent logs (#17806)
Fix https://github.com/coder/coder/issues/16355
2025-05-15 15:21:33 -03:00
Bruno Quaresma 6ff6e95417 chore: replace MUI icons with Lucide icons - 13 (#17831)
OpenInNew -> ExternalLinkIcon
InfoOutlined -> InfoIcon
CloudDownload -> CloudDownloadIcon
CloudUpload -> CloudUploadIcon
Compare -> GitCompareArrowsIcon
SettingsEthernet -> GaugeIcon
WebAsset -> AppWindowIcon
2025-05-15 11:43:35 -03:00
Bruno Quaresma fcbdd1a28e refactor: replace badge by status indicator (#17811)
**Why?**
In the workspaces page, it is using the status indicator, and not the
badge anymore, so to keep the UI consistent, I'm replacing the badge by
the indicator in the workspace page too.

**Before:**
<img width="672" alt="Screenshot 2025-05-13 at 19 14 17"
src="https://github.com/user-attachments/assets/0e8ea4bd-68d1-4d27-b81b-f79f15cabb2c"
/>

**After:**
<img width="672" alt="Screenshot 2025-05-13 at 19 14 21"
src="https://github.com/user-attachments/assets/45719262-011e-4fc8-9ebe-fe9e33d9d572"
/>
2025-05-14 09:11:25 -03:00
Bruno Quaresma 67e40244a4 feat: add extra workspace actions in the workspaces table (#17775)
**Demo:**
<img width="1624" alt="Screenshot 2025-05-12 at 16 53 36"
src="https://github.com/user-attachments/assets/7f125b31-5ce8-4c1f-8e26-c3136346cae3"
/>
2025-05-13 18:53:43 -03:00
Bruno Quaresma 15bd7a3add chore: replace MUI icons with Lucide icons - 5 (#17750)
Replacements:

MUI | Lucide
OpenInNewOutlined | ExternalLinkIcon
HelpOutline | CircleHelpIcon
ErrorOutline | CircleAlertIcon
2025-05-12 13:36:51 -03:00
Bruno Quaresma aa4b764025 chore: replace MUI icons - 3 (#17733)
1. Replaced TaskAlt with CircleCheckBigIcon in:
   - Paywall.tsx
   - PopoverPaywall.tsx
  
2. Replaced InfoOutlined with InfoIcon in:
   - ChangeVersionDialog.tsx
   - WorkspaceNotifications.tsx
   - Pill.stories.tsx
   
3. Replaced ErrorOutline/ErrorOutlineIcon with CircleAlertIcon in:
   - workspace.tsx
   - WorkspaceStatusBadge.tsx
   - AppLink.tsx
2025-05-09 15:09:03 -03:00
Bruno Quaresma b0a4ef01a8 chore: replace MUI icons - 2 (#17732)
Replace icons: 

Check | CheckIcon
KeyboardArrowDown | ChevronDownIcon
KeyboardArrowUp | ChevronUpIcon
2025-05-09 14:44:10 -03:00
Bruno Quaresma 0b8fd7e403 chore: fix :first-child warning (#17727)
Fix the following warning:

```
The pseudo class ":first-child" is potentially unsafe when doing server-side rendering.
```
2025-05-09 11:11:00 -03:00
Bruno Quaresma f897981e78 chore: extract app access logic for reuse (#17724)
We are starting to add app links in many places in the UI, and to make
it consistent, this PR extracts the most core logic into the
modules/apps for reuse.

Related to https://github.com/coder/coder/issues/17311
2025-05-09 10:41:52 -03:00