From b37d25e70d87126fdeaf39d2207f57e8fd744b51 Mon Sep 17 00:00:00 2001 From: Sean Kane Date: Wed, 18 Mar 2026 15:40:01 -0600 Subject: [PATCH 1/6] Add "exposed" operation for system nexus endpoint --- nexusannotations/v1/options.proto | 29 +++++++++++++++++++ temporal/api/workflowservice/v1/service.proto | 5 +++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 nexusannotations/v1/options.proto diff --git a/nexusannotations/v1/options.proto b/nexusannotations/v1/options.proto new file mode 100644 index 000000000..0f817e4a4 --- /dev/null +++ b/nexusannotations/v1/options.proto @@ -0,0 +1,29 @@ +syntax = "proto3"; + +package nexus.v1; + +import "google/protobuf/descriptor.proto"; + +option go_package = "github.com/bergundy/nexus-proto-annotations/go/nexus/v1"; + +extend google.protobuf.ServiceOptions { + optional ServiceOptions service = 8233; +} + +extend google.protobuf.MethodOptions { + optional OperationOptions operation = 8234; +} + +message OperationOptions { + // Nexus operation name (defaults to proto method name). + string name = 1; + // Tags to attach to the operation. Used by code generators to include and exclude operations. + repeated string tags = 2; +} + +message ServiceOptions { + // Nexus service name (defaults to proto service full name). + string name = 1; + // Tags to attach to the service. Used by code generators to include and exclude services. + repeated string tags = 2; +} \ No newline at end of file diff --git a/temporal/api/workflowservice/v1/service.proto b/temporal/api/workflowservice/v1/service.proto index 8b0eb2ce6..7810aa7d8 100644 --- a/temporal/api/workflowservice/v1/service.proto +++ b/temporal/api/workflowservice/v1/service.proto @@ -10,8 +10,9 @@ option ruby_package = "Temporalio::Api::WorkflowService::V1"; option csharp_namespace = "Temporalio.Api.WorkflowService.V1"; -import "temporal/api/workflowservice/v1/request_response.proto"; import "google/api/annotations.proto"; +import "nexusannotations/v1/options.proto"; +import "temporal/api/workflowservice/v1/request_response.proto"; // WorkflowService API defines how Temporal SDKs and other clients interact with the Temporal server // to create and interact with workflows and activities. @@ -385,6 +386,8 @@ service WorkflowService { // (-- api-linter: core::0136::prepositions=disabled // aip.dev/not-precedent: "With" is used to indicate combined operation. --) rpc SignalWithStartWorkflowExecution (SignalWithStartWorkflowExecutionRequest) returns (SignalWithStartWorkflowExecutionResponse) { + option (nexus.v1.operation).tags = "exposed"; + option (google.api.http) = { post: "/namespaces/{namespace}/workflows/{workflow_id}/signal-with-start/{signal_name}" body: "*" From b51776406409a2abb55c0871515dcc2e1820aeea Mon Sep 17 00:00:00 2001 From: Sean Kane Date: Wed, 18 Mar 2026 15:47:36 -0600 Subject: [PATCH 2/6] linter fixes --- nexusannotations/v1/options.proto | 2 +- temporal/api/workflowservice/v1/service.proto | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nexusannotations/v1/options.proto b/nexusannotations/v1/options.proto index 0f817e4a4..a8ef63728 100644 --- a/nexusannotations/v1/options.proto +++ b/nexusannotations/v1/options.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -package nexus.v1; +package nexusannotations.v1; import "google/protobuf/descriptor.proto"; diff --git a/temporal/api/workflowservice/v1/service.proto b/temporal/api/workflowservice/v1/service.proto index 53f4ce2db..9cd8b730d 100644 --- a/temporal/api/workflowservice/v1/service.proto +++ b/temporal/api/workflowservice/v1/service.proto @@ -488,7 +488,7 @@ service WorkflowService { // (-- api-linter: core::0136::prepositions=disabled // aip.dev/not-precedent: "With" is used to indicate combined operation. --) rpc SignalWithStartWorkflowExecution (SignalWithStartWorkflowExecutionRequest) returns (SignalWithStartWorkflowExecutionResponse) { - option (nexus.v1.operation).tags = "exposed"; + option (nexusannotations.v1.operation).tags = "exposed"; option (google.api.http) = { post: "/namespaces/{namespace}/workflows/{workflow_id}/signal-with-start/{signal_name}" From f0760b3a65d27f8c1ea8fe70f4797634cc24afc0 Mon Sep 17 00:00:00 2001 From: Sean Kane Date: Tue, 24 Mar 2026 12:56:09 -0600 Subject: [PATCH 3/6] remove local nexusannotations and use nexus-rpc repo --- nexusannotations/v1/options.proto | 29 ------------------- temporal/api/workflowservice/v1/service.proto | 2 +- 2 files changed, 1 insertion(+), 30 deletions(-) delete mode 100644 nexusannotations/v1/options.proto diff --git a/nexusannotations/v1/options.proto b/nexusannotations/v1/options.proto deleted file mode 100644 index a8ef63728..000000000 --- a/nexusannotations/v1/options.proto +++ /dev/null @@ -1,29 +0,0 @@ -syntax = "proto3"; - -package nexusannotations.v1; - -import "google/protobuf/descriptor.proto"; - -option go_package = "github.com/bergundy/nexus-proto-annotations/go/nexus/v1"; - -extend google.protobuf.ServiceOptions { - optional ServiceOptions service = 8233; -} - -extend google.protobuf.MethodOptions { - optional OperationOptions operation = 8234; -} - -message OperationOptions { - // Nexus operation name (defaults to proto method name). - string name = 1; - // Tags to attach to the operation. Used by code generators to include and exclude operations. - repeated string tags = 2; -} - -message ServiceOptions { - // Nexus service name (defaults to proto service full name). - string name = 1; - // Tags to attach to the service. Used by code generators to include and exclude services. - repeated string tags = 2; -} \ No newline at end of file diff --git a/temporal/api/workflowservice/v1/service.proto b/temporal/api/workflowservice/v1/service.proto index 9cd8b730d..7a0272ebd 100644 --- a/temporal/api/workflowservice/v1/service.proto +++ b/temporal/api/workflowservice/v1/service.proto @@ -11,7 +11,7 @@ option csharp_namespace = "Temporalio.Api.WorkflowService.V1"; import "google/api/annotations.proto"; -import "nexusannotations/v1/options.proto"; +import "nexus-rpc/nexus-proto-annotations/nexusannotations/v1/options.proto"; import "temporal/api/workflowservice/v1/request_response.proto"; import "temporal/api/protometa/v1/annotations.proto"; From 3f17a76966f2981481af4c835db197b2da7447bb Mon Sep 17 00:00:00 2001 From: Sean Kane Date: Wed, 25 Mar 2026 14:15:41 -0600 Subject: [PATCH 4/6] add nexus annotations to buf.yaml --- buf.yaml | 1 + temporal/api/workflowservice/v1/service.proto | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/buf.yaml b/buf.yaml index e984c1439..83dacd99f 100644 --- a/buf.yaml +++ b/buf.yaml @@ -3,6 +3,7 @@ name: buf.build/temporalio/api deps: - buf.build/grpc-ecosystem/grpc-gateway - buf.build/googleapis/googleapis + - buf.build/temporalio/nexus-annotations build: excludes: # Buf won't accept a local dependency on the google protos but we need them diff --git a/temporal/api/workflowservice/v1/service.proto b/temporal/api/workflowservice/v1/service.proto index 7a0272ebd..ff9829271 100644 --- a/temporal/api/workflowservice/v1/service.proto +++ b/temporal/api/workflowservice/v1/service.proto @@ -11,9 +11,9 @@ option csharp_namespace = "Temporalio.Api.WorkflowService.V1"; import "google/api/annotations.proto"; -import "nexus-rpc/nexus-proto-annotations/nexusannotations/v1/options.proto"; -import "temporal/api/workflowservice/v1/request_response.proto"; +import "temporalio/nexus-annotations/nexusannotations/v1/options.proto"; import "temporal/api/protometa/v1/annotations.proto"; +import "temporal/api/workflowservice/v1/request_response.proto"; // WorkflowService API defines how Temporal SDKs and other clients interact with the Temporal server // to create and interact with workflows and activities. From ba43a5688afcda1b8b808b6213ad0f66fdf30bd9 Mon Sep 17 00:00:00 2001 From: Sean Kane Date: Wed, 25 Mar 2026 14:16:06 -0600 Subject: [PATCH 5/6] buf.lock --- buf.lock | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/buf.lock b/buf.lock index fccbfb89d..f43352bf2 100644 --- a/buf.lock +++ b/buf.lock @@ -4,10 +4,15 @@ deps: - remote: buf.build owner: googleapis repository: googleapis - commit: 28151c0d0a1641bf938a7672c500e01d - digest: shake256:49215edf8ef57f7863004539deff8834cfb2195113f0b890dd1f67815d9353e28e668019165b9d872395871eeafcbab3ccfdb2b5f11734d3cca95be9e8d139de + commit: 004180b77378443887d3b55cabc00384 + digest: shake256:d26c7c2fd95f0873761af33ca4a0c0d92c8577122b6feb74eb3b0a57ebe47a98ab24a209a0e91945ac4c77204e9da0c2de0020b2cedc27bdbcdea6c431eec69b - remote: buf.build owner: grpc-ecosystem repository: grpc-gateway - commit: 048ae6ff94ca4476b3225904b1078fad - digest: shake256:e5250bf2d999516c02206d757502b902e406f35c099d0e869dc3e4f923f6870fe0805a9974c27df0695462937eae90cd4d9db90bb9a03489412560baa74a87b6 + commit: 6467306b4f624747aaf6266762ee7a1c + digest: shake256:833d648b99b9d2c18b6882ef41aaeb113e76fc38de20dda810c588d133846e6593b4da71b388bcd921b1c7ab41c7acf8f106663d7301ae9e82ceab22cf64b1b7 + - remote: buf.build + owner: temporalio + repository: nexus-annotations + commit: 599b78404fbe4e78b833d527a1d0da40 + digest: shake256:1f41ef11ccbf31d7318b0fe1915550ba6567c99dc94694d60b117fc1ffc756290ba9766c58b403986f079e2b861b42538e5f8cf0495f744cd390d223b81854ca From ab1b41ddb7dbbff91a3bbb6fe25a8b24d92b92ed Mon Sep 17 00:00:00 2001 From: Sean Kane Date: Wed, 25 Mar 2026 14:25:54 -0600 Subject: [PATCH 6/6] add target to Makefile for downloading updates --- Makefile | 7 ++++- buf.yaml | 2 ++ nexusannotations/v1/options.proto | 29 +++++++++++++++++++ temporal/api/workflowservice/v1/service.proto | 2 +- 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 nexusannotations/v1/options.proto diff --git a/Makefile b/Makefile index b4b33bdb5..3d9580d2a 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ ci-build: install proto http-api-docs install: grpc-install api-linter-install buf-install # Run all linters and compile proto files. -proto: grpc http-api-docs +proto: sync-nexus-annotations grpc http-api-docs ######################################################################## ##### Variables ###### @@ -95,6 +95,11 @@ buf-install: printf $(COLOR) "Install/update buf..." go install github.com/bufbuild/buf/cmd/buf@v1.27.0 +##### Sync external proto dependencies ##### +sync-nexus-annotations: + printf $(COLOR) "Sync nexusannotations from buf.build/temporalio/nexus-annotations..." + buf export buf.build/temporalio/nexus-annotations --output . + ##### Linters ##### api-linter: printf $(COLOR) "Run api-linter..." diff --git a/buf.yaml b/buf.yaml index 83dacd99f..6b9d9eb57 100644 --- a/buf.yaml +++ b/buf.yaml @@ -9,6 +9,8 @@ build: # Buf won't accept a local dependency on the google protos but we need them # to run api-linter, so just tell buf it ignore it - google + # Same for nexusannotations - local copy for api-linter, BSR dep for buf + - nexusannotations breaking: use: - WIRE_JSON diff --git a/nexusannotations/v1/options.proto b/nexusannotations/v1/options.proto new file mode 100644 index 000000000..e137896bb --- /dev/null +++ b/nexusannotations/v1/options.proto @@ -0,0 +1,29 @@ +syntax = "proto3"; + +package nexusannotations.v1; + +import "google/protobuf/descriptor.proto"; + +option go_package = "github.com/nexus-rpc/nexus-proto-annotations/go/nexusannotations/v1"; + +extend google.protobuf.ServiceOptions { + optional ServiceOptions service = 8233; +} + +extend google.protobuf.MethodOptions { + optional OperationOptions operation = 8234; +} + +message OperationOptions { + // Nexus operation name (defaults to proto method name). + string name = 1; + // Tags to attach to the operation. Used by code generators to include and exclude operations. + repeated string tags = 2; +} + +message ServiceOptions { + // Nexus service name (defaults to proto service full name). + string name = 1; + // Tags to attach to the service. Used by code generators to include and exclude services. + repeated string tags = 2; +} diff --git a/temporal/api/workflowservice/v1/service.proto b/temporal/api/workflowservice/v1/service.proto index ff9829271..4d814899f 100644 --- a/temporal/api/workflowservice/v1/service.proto +++ b/temporal/api/workflowservice/v1/service.proto @@ -11,7 +11,7 @@ option csharp_namespace = "Temporalio.Api.WorkflowService.V1"; import "google/api/annotations.proto"; -import "temporalio/nexus-annotations/nexusannotations/v1/options.proto"; +import "nexusannotations/v1/options.proto"; import "temporal/api/protometa/v1/annotations.proto"; import "temporal/api/workflowservice/v1/request_response.proto";