From a347f8173882f39e53014b5d7b7567f55f23ae8a Mon Sep 17 00:00:00 2001 From: Daniel Rivas <1887507+danielrs@users.noreply.github.com> Date: Mon, 13 Jan 2025 10:25:34 -0600 Subject: [PATCH 1/4] feat: use generics instead of reflection for AnyPtr --- convert_types.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/convert_types.go b/convert_types.go index f3ebc83d0d8..7c13cfc1aee 100644 --- a/convert_types.go +++ b/convert_types.go @@ -15,7 +15,6 @@ package cloudflare import ( - "reflect" "time" ) @@ -42,10 +41,8 @@ import ( // var _ *uint16 = AnyPtr(uint16(16)).(*uint16) // var _ *uint32 = AnyPtr(uint32(32)).(*uint32) // var _ *uint64 = AnyPtr(uint64(64)).(*uint64) -func AnyPtr(v interface{}) interface{} { - r := reflect.New(reflect.TypeOf(v)) - reflect.ValueOf(r.Interface()).Elem().Set(reflect.ValueOf(v)) - return r.Interface() +func AnyPtr[T any](v T) *T { + return &v } // BytePtr is a helper routine that allocates a new byte value to store v and From dc887d6c6683453f3067643e408db0e8b1ebac7c Mon Sep 17 00:00:00 2001 From: Daniel Rivas <1887507+danielrs@users.noreply.github.com> Date: Mon, 13 Jan 2025 10:37:03 -0600 Subject: [PATCH 2/4] fix: add placement fields in script response Add the `placement` object to script responses in addition to the now deprecated `placement_mode`. --- workers.go | 25 +++++++++++++++++++++++-- workers_test.go | 19 +++++++++++++++---- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/workers.go b/workers.go index 9eaf6973c9f..3faa39982dc 100644 --- a/workers.go +++ b/workers.go @@ -188,8 +188,8 @@ type WorkerMetaData struct { TailConsumers *[]WorkersTailConsumer `json:"tail_consumers,omitempty"` LastDeployedFrom *string `json:"last_deployed_from,omitempty"` DeploymentId *string `json:"deployment_id,omitempty"` - PlacementMode *PlacementMode `json:"placement_mode,omitempty"` - PipelineHash *string `json:"pipeline_hash,omitempty"` + PlacementFields + PipelineHash *string `json:"pipeline_hash,omitempty"` } // WorkerListResponse wrapper struct for API response to worker script list API call. @@ -228,8 +228,29 @@ const ( PlacementModeSmart PlacementMode = "smart" ) +type PlacementStatus string + +// Placement contains all the worker placement information. type Placement struct { + + // Mode is the placement mode for the worker (e.g. "smart"). Mode PlacementMode `json:"mode"` + + // Status is the status of the placement (readonly). + Status PlacementStatus `json:"status,omitempty"` +} + +// PlacementFields contains all the worker placement fields (deprecated and nested). +// This struct is meant to be embedded, it exists for locality of deprecated and regular fields. +type PlacementFields struct { + + // PlacementMode. + // + // Deprecated: Use Placement.Mode instead. + PlacementMode *PlacementMode `json:"placement_mode,omitempty"` + + // Placement. + Placement *Placement `json:"placement,omitempty"` } // DeleteWorker deletes a single Worker. diff --git a/workers_test.go b/workers_test.go index ef0e09987a6..eef17f91855 100644 --- a/workers_test.go +++ b/workers_test.go @@ -240,7 +240,7 @@ type ( CompatibilityDate *string `json:"compatibility_date,omitempty"` Logpush *bool `json:"logpush,omitempty"` TailConsumers *[]WorkersTailConsumer `json:"tail_consumers,omitempty"` - PlacementMode *string `json:"placement_mode,omitempty"` + PlacementFields } workersTestResponseOpt func(r *WorkersTestScriptResponse) ) @@ -307,8 +307,16 @@ func withWorkerLogpush(logpush *bool) workersTestResponseOpt { } //nolint:unused -func withWorkerPlacementMode(mode *string) workersTestResponseOpt { - return func(r *WorkersTestScriptResponse) { r.PlacementMode = mode } +func withWorkerPlacementMode(mode *PlacementMode) workersTestResponseOpt { + return func(r *WorkersTestScriptResponse) { + if mode == nil { + r.PlacementMode = nil + r.Placement = nil + } else { + r.PlacementMode = mode + r.Placement = &Placement{Mode: *mode} + } + } } //nolint:unused @@ -1268,7 +1276,7 @@ func TestUploadWorker_WithSmartPlacementEnabled(t *testing.T) { defer teardown() placementMode := PlacementModeSmart - response := workersScriptResponse(t, withWorkerScript(expectedWorkersModuleWorkerScript), withWorkerPlacementMode(StringPtr("smart"))) + response := workersScriptResponse(t, withWorkerScript(expectedWorkersModuleWorkerScript), withWorkerPlacementMode(AnyPtr(PlacementModeSmart))) handler := func(w http.ResponseWriter, r *http.Request) { assert.Equal(t, http.MethodPut, r.Method, "Expected method 'PUT', got %s", r.Method) @@ -1293,6 +1301,8 @@ func TestUploadWorker_WithSmartPlacementEnabled(t *testing.T) { }) assert.NoError(t, err) assert.Equal(t, placementMode, *worker.PlacementMode) + assert.NotNil(t, worker.Placement) + assert.Equal(t, placementMode, worker.Placement.Mode) }) t.Run("Test disabling placement", func(t *testing.T) { @@ -1308,6 +1318,7 @@ func TestUploadWorker_WithSmartPlacementEnabled(t *testing.T) { }) assert.NoError(t, err) assert.Nil(t, worker.PlacementMode) + assert.Nil(t, worker.Placement) }) } From 965379467e19a48546a01a1f0d9afd25d9041b0c Mon Sep 17 00:00:00 2001 From: Daniel Rivas <1887507+danielrs@users.noreply.github.com> Date: Mon, 13 Jan 2025 11:06:11 -0600 Subject: [PATCH 3/4] chore: changelog for #3825 --- .changelog/3825.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changelog/3825.txt diff --git a/.changelog/3825.txt b/.changelog/3825.txt new file mode 100644 index 00000000000..49a6c891631 --- /dev/null +++ b/.changelog/3825.txt @@ -0,0 +1,7 @@ +```release-note:note +fix: The `placement_mode` attribute in script upload responses has been deprecated. The new attribute `placement.mode` should be used instead. +``` + +```release-note:enhancement +feat: Add new `placement` attribute object in script upload responses. It contains the `mode` and `status` attributes. +``` From eaf799a78ec1f10848a0bf20670c95b9ad0b092a Mon Sep 17 00:00:00 2001 From: Jacob Bednarz Date: Wed, 15 Jan 2025 14:19:05 +1100 Subject: [PATCH 4/4] Apply suggestions from code review --- .changelog/3825.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changelog/3825.txt b/.changelog/3825.txt index 49a6c891631..4e359da8890 100644 --- a/.changelog/3825.txt +++ b/.changelog/3825.txt @@ -1,7 +1,7 @@ ```release-note:note -fix: The `placement_mode` attribute in script upload responses has been deprecated. The new attribute `placement.mode` should be used instead. +workers: The `placement_mode` attribute in script upload responses has been deprecated. The new attribute `placement.mode` should be used instead. ``` ```release-note:enhancement -feat: Add new `placement` attribute object in script upload responses. It contains the `mode` and `status` attributes. +workers: Add new `placement` attribute object in script upload responses. It contains the `mode` and `status` attributes. ```