Skip to content

Commit f5bf8f9

Browse files
committed
feat(coder): Add PATCH /templateversions/:templateversion endpoint
1 parent 247470b commit f5bf8f9

File tree

13 files changed

+228
-19
lines changed

13 files changed

+228
-19
lines changed

coderd/apidoc/docs.go

Lines changed: 33 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbauthz/querier.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -850,13 +850,13 @@ func (q *querier) UpdateTemplateScheduleByID(ctx context.Context, arg database.U
850850
return updateWithReturn(q.log, q.auth, fetch, q.db.UpdateTemplateScheduleByID)(ctx, arg)
851851
}
852852

853-
func (q *querier) UpdateTemplateVersionByID(ctx context.Context, arg database.UpdateTemplateVersionByIDParams) error {
853+
func (q *querier) UpdateTemplateVersionByID(ctx context.Context, arg database.UpdateTemplateVersionByIDParams) (database.TemplateVersion, error) {
854854
template, err := q.db.GetTemplateByID(ctx, arg.TemplateID.UUID)
855855
if err != nil {
856-
return err
856+
return database.TemplateVersion{}, err
857857
}
858858
if err := q.authorizeContext(ctx, rbac.ActionUpdate, template); err != nil {
859-
return err
859+
return database.TemplateVersion{}, err
860860
}
861861
return q.db.UpdateTemplateVersionByID(ctx, arg)
862862
}

coderd/database/dbfake/databasefake.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3413,9 +3413,9 @@ func (q *fakeQuerier) UpdateTemplateACLByID(_ context.Context, arg database.Upda
34133413
return database.Template{}, sql.ErrNoRows
34143414
}
34153415

3416-
func (q *fakeQuerier) UpdateTemplateVersionByID(_ context.Context, arg database.UpdateTemplateVersionByIDParams) error {
3416+
func (q *fakeQuerier) UpdateTemplateVersionByID(_ context.Context, arg database.UpdateTemplateVersionByIDParams) (database.TemplateVersion, error) {
34173417
if err := validateDatabaseType(arg); err != nil {
3418-
return err
3418+
return database.TemplateVersion{}, err
34193419
}
34203420

34213421
q.mutex.Lock()
@@ -3427,10 +3427,11 @@ func (q *fakeQuerier) UpdateTemplateVersionByID(_ context.Context, arg database.
34273427
}
34283428
templateVersion.TemplateID = arg.TemplateID
34293429
templateVersion.UpdatedAt = arg.UpdatedAt
3430+
templateVersion.Name = arg.Name
34303431
q.templateVersions[index] = templateVersion
3431-
return nil
3432+
return templateVersion, nil
34323433
}
3433-
return sql.ErrNoRows
3434+
return database.TemplateVersion{}, sql.ErrNoRows
34343435
}
34353436

34363437
func (q *fakeQuerier) UpdateTemplateVersionDescriptionByJobID(_ context.Context, arg database.UpdateTemplateVersionDescriptionByJobIDParams) error {

coderd/database/querier.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

Lines changed: 26 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/templateversions.sql

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,15 @@ INSERT INTO
8484
VALUES
8585
($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING *;
8686

87-
-- name: UpdateTemplateVersionByID :exec
87+
-- name: UpdateTemplateVersionByID :one
8888
UPDATE
8989
template_versions
9090
SET
9191
template_id = $2,
92-
updated_at = $3
92+
updated_at = $3,
93+
name = $4
9394
WHERE
94-
id = $1;
95+
id = $1 RETURNING *;
9596

9697
-- name: UpdateTemplateVersionDescriptionByJobID :exec
9798
UPDATE

coderd/templates.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
269269

270270
templateAudit.New = dbTemplate
271271

272-
err = tx.UpdateTemplateVersionByID(ctx, database.UpdateTemplateVersionByIDParams{
272+
_, err = tx.UpdateTemplateVersionByID(ctx, database.UpdateTemplateVersionByIDParams{
273273
ID: templateVersion.ID,
274274
TemplateID: uuid.NullUUID{
275275
UUID: dbTemplate.ID,

coderd/templateversions.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,35 @@ func (api *API) templateVersion(rw http.ResponseWriter, r *http.Request) {
6363
httpapi.Write(ctx, rw, http.StatusOK, convertTemplateVersion(templateVersion, convertProvisionerJob(job), user))
6464
}
6565

66+
// @Summary Patch template version by ID
67+
// @ID patch-template-version-by-id
68+
// @Security CoderSessionToken
69+
// @Produce json
70+
// @Tags Templates
71+
// @Param templateversion path string true "Template version ID" format(uuid)
72+
// @Success 200 {object} codersdk.TemplateVersion
73+
// @Router /templateversions/{templateversion} [patch]
74+
func (api *API) patchTemplateVersion(rw http.ResponseWriter, r *http.Request) {
75+
ctx := r.Context()
76+
templateVersion := httpmw.TemplateVersionParam(r)
77+
var params codersdk.PatchTemplateVersionRequest
78+
if !httpapi.Read(ctx, rw, r, &params) {
79+
return
80+
}
81+
templateVersion, err := api.Database.UpdateTemplateVersionByID(ctx, database.UpdateTemplateVersionByIDParams{
82+
ID: templateVersion.ID,
83+
Name: params.Name,
84+
})
85+
if err != nil {
86+
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
87+
Message: "Error on patching template version.",
88+
Detail: err.Error(),
89+
})
90+
return
91+
}
92+
httpapi.Write(ctx, rw, http.StatusNoContent, templateVersion)
93+
}
94+
6695
// @Summary Cancel template version by ID
6796
// @ID cancel-template-version-by-id
6897
// @Security CoderSessionToken

codersdk/deployment.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ func ParseSSHConfigOption(opt string) (key string, value string, err error) {
199199
return r == ' ' || r == '='
200200
})
201201
if idx == -1 {
202-
return "", "", fmt.Errorf("invalid config-ssh option %q", opt)
202+
return "", "", xerrors.New(fmt.Sprintf("invalid config-ssh option %q", opt))
203203
}
204204
return opt[:idx], opt[idx+1:], nil
205205
}

codersdk/templateversions.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ type TemplateVersionVariable struct {
7676
Sensitive bool `json:"sensitive"`
7777
}
7878

79+
type PatchTemplateVersionRequest struct {
80+
Name string `json:"name"`
81+
}
82+
7983
// TemplateVersion returns a template version by ID.
8084
func (c *Client) TemplateVersion(ctx context.Context, id uuid.UUID) (TemplateVersion, error) {
8185
res, err := c.Request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/templateversions/%s", id), nil)
@@ -291,3 +295,15 @@ func (c *Client) PreviousTemplateVersion(ctx context.Context, organization uuid.
291295
var version TemplateVersion
292296
return version, json.NewDecoder(res.Body).Decode(&version)
293297
}
298+
299+
func (c *Client) UpdateTemplateVersion(ctx context.Context, version, req PatchTemplateVersionRequest) error {
300+
res, err := c.Request(ctx, http.MethodPatch, fmt.Sprintf("/api/v2/templateversions/%s", version), req)
301+
if err != nil {
302+
return err
303+
}
304+
defer res.Body.Close()
305+
if res.StatusCode != http.StatusNoContent {
306+
return ReadBodyAsError(res)
307+
}
308+
return nil
309+
}

docs/api/templates.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,6 +1250,81 @@ curl -X GET http://coder-server:8080/api/v2/templateversions/{templateversion} \
12501250

12511251
To perform this operation, you must be authenticated. [Learn more](authentication.md).
12521252

1253+
## Patch template version by ID
1254+
1255+
### Code samples
1256+
1257+
```shell
1258+
# Example request using curl
1259+
curl -X PATCH http://coder-server:8080/api/v2/templateversions/{templateversion} \
1260+
-H 'Accept: application/json' \
1261+
-H 'Coder-Session-Token: API_KEY'
1262+
```
1263+
1264+
`PATCH /templateversions/{templateversion}`
1265+
1266+
### Parameters
1267+
1268+
| Name | In | Type | Required | Description |
1269+
| ----------------- | ---- | ------------ | -------- | ------------------- |
1270+
| `templateversion` | path | string(uuid) | true | Template version ID |
1271+
1272+
### Example responses
1273+
1274+
> 200 Response
1275+
1276+
```json
1277+
{
1278+
"created_at": "2019-08-24T14:15:22Z",
1279+
"created_by": {
1280+
"avatar_url": "http://example.com",
1281+
"created_at": "2019-08-24T14:15:22Z",
1282+
"email": "user@example.com",
1283+
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
1284+
"last_seen_at": "2019-08-24T14:15:22Z",
1285+
"organization_ids": ["497f6eca-6276-4993-bfeb-53cbbbba6f08"],
1286+
"roles": [
1287+
{
1288+
"display_name": "string",
1289+
"name": "string"
1290+
}
1291+
],
1292+
"status": "active",
1293+
"username": "string"
1294+
},
1295+
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
1296+
"job": {
1297+
"canceled_at": "2019-08-24T14:15:22Z",
1298+
"completed_at": "2019-08-24T14:15:22Z",
1299+
"created_at": "2019-08-24T14:15:22Z",
1300+
"error": "string",
1301+
"error_code": "MISSING_TEMPLATE_PARAMETER",
1302+
"file_id": "8a0cfb4f-ddc9-436d-91bb-75133c583767",
1303+
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
1304+
"started_at": "2019-08-24T14:15:22Z",
1305+
"status": "pending",
1306+
"tags": {
1307+
"property1": "string",
1308+
"property2": "string"
1309+
},
1310+
"worker_id": "ae5fa6f7-c55b-40c1-b40a-b36ac467652b"
1311+
},
1312+
"name": "string",
1313+
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
1314+
"readme": "string",
1315+
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
1316+
"updated_at": "2019-08-24T14:15:22Z"
1317+
}
1318+
```
1319+
1320+
### Responses
1321+
1322+
| Status | Meaning | Description | Schema |
1323+
| ------ | ------------------------------------------------------- | ----------- | -------------------------------------------------------------- |
1324+
| 200 | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK | [codersdk.TemplateVersion](schemas.md#codersdktemplateversion) |
1325+
1326+
To perform this operation, you must be authenticated. [Learn more](authentication.md).
1327+
12531328
## Cancel template version by ID
12541329

12551330
### Code samples

site/src/api/typesGenerated.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,11 @@ export interface PatchGroupRequest {
577577
readonly quota_allowance?: number
578578
}
579579

580+
// From codersdk/templateversions.go
581+
export interface PatchTemplateVersionRequest {
582+
readonly name: string
583+
}
584+
580585
// From codersdk/deployment.go
581586
export interface PprofConfig {
582587
readonly enable: boolean

0 commit comments

Comments
 (0)