feat: add user-level parameter autofill (#11731)

This PR solves #10478 by auto-filling previously used template values in create and update workspace flows.

I decided against explicit user values in settings for these reasons:

* Autofill is far easier to implement
* Users benefit from autofill _by default_ — we don't need to teach them new concepts
* If we decide that autofill creates more harm than good, we can remove it without breaking compatibility
This commit is contained in:
Ammar Bandukwala
2024-01-30 16:02:21 -06:00
committed by GitHub
parent aeb4112513
commit adbb025e74
44 changed files with 862 additions and 137 deletions

57
coderd/apidoc/docs.go generated
View File

@ -4142,6 +4142,50 @@ const docTemplate = `{
}
}
},
"/users/{user}/autofill-parameters": {
"get": {
"security": [
{
"CoderSessionToken": []
}
],
"produces": [
"application/json"
],
"tags": [
"Users"
],
"summary": "Get autofill build parameters for user",
"operationId": "get-autofill-build-parameters-for-user",
"parameters": [
{
"type": "string",
"description": "User ID, username, or me",
"name": "user",
"in": "path",
"required": true
},
{
"type": "string",
"description": "Template ID",
"name": "template_id",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/codersdk.UserParameter"
}
}
}
}
}
},
"/users/{user}/convert-login": {
"post": {
"security": [
@ -10493,6 +10537,7 @@ const docTemplate = `{
"api_key",
"user",
"user_data",
"user_workspace_build_parameters",
"organization_member",
"license",
"deployment_config",
@ -10518,6 +10563,7 @@ const docTemplate = `{
"ResourceAPIKey",
"ResourceUser",
"ResourceUserData",
"ResourceUserWorkspaceBuildParameters",
"ResourceOrganizationMember",
"ResourceLicense",
"ResourceDeploymentValues",
@ -11923,6 +11969,17 @@ const docTemplate = `{
}
}
},
"codersdk.UserParameter": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
"codersdk.UserQuietHoursScheduleConfig": {
"type": "object",
"properties": {