From 2e93200b1c5917bcdf8a307cbd4070805111a80a Mon Sep 17 00:00:00 2001 From: Veeral Patel Date: Mon, 7 Sep 2026 12:43:26 -0700 Subject: [PATCH 1/6] Fix TypeScript kitchen sink against SDK 1.23.0 protobufjs 8 test-kitchensink (typescript) has been failing on every PR since 2026-08-26, when @temporalio/common 1.23.0 was published. The generated worker package floats on "^1.22.0" with no lockfile, so it picks up 1.23.0, which imports protobufjs/ext/protojson - a module that only exists in protobufjs 8. Two separate things then go wrong. First, sdkbuild's generated package.json pins protobufjs to 7.5.1, so the import cannot resolve at all: Error: Cannot find module 'protobufjs/ext/protojson' That pin is dropped in temporalio/features#sdkbuild-drop-protobufjs-override, wired up here with a temporary replace directive. Second, with protobufjs 8 present, the kitchen sink payload converter fails instead: TypeError: type must be a Type at fromJson (protobufjs/ext/protojson.js:865) at ProtobufJsonPayloadConverter.fromPayload protojson.fromJson checks `type instanceof Type` against its own protobufjs copy. Our generated root builds its Types from `require("protobufjs/light")`, and because the prepared build directory lives inside workers/typescript, that resolves by walking up to workers/typescript/node_modules - a different copy from the one pnpm links for the SDK. Same version, different class identity, so the check fails. This never mattered before because SDK <= 1.22.0 used proto3-json-serializer, which is duck-typed. Declaring protobufjs in MoreDependencies gives the prepared package its own top-level protobufjs, which pnpm links to the same physical copy the SDK resolves, so there is one Type class again. omes moves to protobufjs 8 and protobufjs-cli 2 to match, mirroring sdk-typescript#2303. Verified locally: 40/40 typescript kitchen sink tests pass against the pushed features commit with no local replace, versus 40 failures before. SDK=go kitchen sink still passes, and the typescript worker's lint, prettier and harness tests are green. --- go.mod | 11 +- go.sum | 8 ++ internal/workerctl/build.go | 7 ++ workers/typescript/package-lock.json | 158 ++++++++------------------- workers/typescript/package.json | 4 +- 5 files changed, 70 insertions(+), 118 deletions(-) diff --git a/go.mod b/go.mod index eb1b301b..2c16ea98 100644 --- a/go.mod +++ b/go.mod @@ -42,7 +42,7 @@ require ( require ( github.com/andybalholm/brotli v1.1.0 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/ebitengine/purego v0.9.0 // indirect github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect github.com/go-ole/go-ole v1.2.6 // indirect @@ -58,7 +58,7 @@ require ( github.com/nexus-rpc/nexus-proto-annotations v0.1.0 // indirect github.com/nexus-rpc/sdk-go v0.7.0 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/robfig/cron v1.2.0 // indirect github.com/stretchr/objx v0.5.2 // indirect @@ -69,7 +69,7 @@ require ( golang.org/x/net v0.55.0 // indirect golang.org/x/sys v0.45.0 // indirect golang.org/x/text v0.37.0 // indirect - golang.org/x/time v0.6.0 // indirect + golang.org/x/time v0.14.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect ) @@ -82,4 +82,9 @@ replace ( // Local dev of the nested harness/api module; downstream consumers ignore this and use // the real pseudo-version required above instead. github.com/temporalio/omes/workers/go/harness/api => ./workers/go/harness/api + // TEMPORARY: sdkbuild's generated package.json pins protobufjs to 7.5.1, which has no + // ext/protojson, so @temporalio/common >= 1.23.0 cannot load. Points at + // temporalio/features#sdkbuild-drop-protobufjs-override. Drop this replace and bump the + // require above once that lands on features main. + github.com/temporalio/features => github.com/temporalio/features v0.0.0-20260906235338-5ab9dbc1dc8c ) diff --git a/go.sum b/go.sum index ae2a9d4b..5fb80baa 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/ebitengine/purego v0.9.0 h1:mh0zpKBIXDceC63hpvPuGLiJ8ZAa3DfrFTudmfi8A4k= github.com/ebitengine/purego v0.9.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a h1:yDWHCSQ40h88yih2JAcL6Ls/kVkSE8GFACTGVnMPruw= @@ -76,6 +78,8 @@ github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= @@ -105,6 +109,8 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/temporalio/features v0.0.0-20260427223549-86e4c0deedd7 h1:gBLwgyi8xw0oqZgxMwxTRGIfP8RxtI7r1igm3G6aXGY= github.com/temporalio/features v0.0.0-20260427223549-86e4c0deedd7/go.mod h1:BUWwBMK+Ga5h9xPTS7+kmutSIfY4K1gfSH8eG7fSbU0= +github.com/temporalio/features v0.0.0-20260906235338-5ab9dbc1dc8c h1:KD7WPkD3r/urLEWYWq6ODfVysqYM/Ofr+qXk8sRQlTE= +github.com/temporalio/features v0.0.0-20260906235338-5ab9dbc1dc8c/go.mod h1:Lo/kKS4Xz8QhK1DFa3B/lmaBiQCeFbGdob4i8ewuZQE= github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4= github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4= github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso= @@ -179,6 +185,8 @@ golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= diff --git a/internal/workerctl/build.go b/internal/workerctl/build.go index 14fb072a..dac3ea4b 100644 --- a/internal/workerctl/build.go +++ b/internal/workerctl/build.go @@ -232,6 +232,13 @@ func (b *Builder) buildTypeScript(ctx context.Context, baseDir string) (sdkbuild MoreDependencies: map[string]string{ "@grpc/proto-loader": "^0.8.0", "winston": "^3.11.0", + // The kitchen sink payload converter hands protobufjs Type instances + // from our generated root to the SDK's converters, which check them + // with `instanceof`. Declaring protobufjs here makes the prepared + // package resolve the same physical copy the SDK does; without it, + // our generated code walks up to workers/typescript/node_modules and + // gets a second copy whose Type class is a different identity. + "protobufjs": "^8.8.0", }, Stdout: b.stdout, Stderr: b.stderr, diff --git a/workers/typescript/package-lock.json b/workers/typescript/package-lock.json index 1567397e..342a7e97 100644 --- a/workers/typescript/package-lock.json +++ b/workers/typescript/package-lock.json @@ -29,8 +29,8 @@ "eslint-config-prettier": "^9.1.0", "nodemon": "^2.0.12", "prettier": "^3.1.1", - "protobufjs": "7.5.1", - "protobufjs-cli": "^1.0.0", + "protobufjs": "^8.8.0", + "protobufjs-cli": "^2.7.0", "ts-node": "^10.8.1", "typescript": "^5.9.3", "typescript-eslint": "^8.10.0" @@ -2519,79 +2519,27 @@ } }, "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "estraverse": "^5.2.0", + "esutils": "^2.0.2" }, "bin": { "escodegen": "bin/escodegen.js", "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=4.0" + "node": ">=6.0" }, "optionalDependencies": { "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2603,19 +2551,6 @@ "node": ">=0.10.0" } }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint": { "version": "9.39.3", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.3.tgz", @@ -4041,57 +3976,67 @@ "node": ">=14.0.0" } }, - "node_modules/protobufjs": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.1.tgz", - "integrity": "sha512-3qx3IRjR9WPQKagdwrKjO3Gu8RgQR2qqw+1KnigWhoVjFqegIj1K3bP11sGqhxrO46/XL7lekuG4jmjL+4cLsw==", + "node_modules/proto3-json-serializer/node_modules/protobufjs": { + "version": "7.6.6", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.6.tgz", + "integrity": "sha512-dYDWdjSl5RNb7SgPxGQcRU+GtvP7s2fpkrY0r432PcOIaZ0/rBcxEZnQN67iJhFuQiVw754JDoPruPCNdGsbjg==", "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.1", + "@protobufjs/fetch": "^1.1.1", "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", "@types/node": ">=13.7.0", - "long": "^5.0.0" + "long": "^5.3.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/protobufjs": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-8.8.0.tgz", + "integrity": "sha512-N3xhQ5yyBx3vQq4gubBfASzYhJGNzeDbjqBpu61g7UVylsN/qyffU96TKWD3GbbLOKF82VGNRNvv1+BFgE31Eg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "long": "^5.3.2" }, "engines": { "node": ">=12.0.0" } }, "node_modules/protobufjs-cli": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.2.0.tgz", - "integrity": "sha512-+YvqJEmsmZHGzE5j0tvEzFeHm0sX7pzRFpyj7+GazhkS4Y0r+jgbioVvFxxSWIlPzUel/lxeOnLChBmV8NmyHA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-2.7.0.tgz", + "integrity": "sha512-wjrZPibf/U73dDJMh9jCqjyeDH7t6+OMD16vKp/Z1CY7yyVE/pX5a9EvCq89p3ADHo+KyaLknA5lxyaaM252KA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "chalk": "^4.0.0", - "escodegen": "^1.13.0", - "espree": "^9.0.0", + "escodegen": "^2.0.0", + "espree": "^9.6.1", "estraverse": "^5.1.0", - "glob": "^8.0.0", - "jsdoc": "^4.0.0", - "minimist": "^1.2.0", - "semver": "^7.1.2", - "tmp": "^0.2.1", - "uglify-js": "^3.7.7" + "glob": "^8.1.0", + "jsdoc": "^4.0.5", + "minimist": "^1.2.8", + "tmp": "^0.2.7" }, "bin": { "pbjs": "bin/pbjs", - "pbts": "bin/pbts" + "pbts": "bin/pbts", + "protoc-gen-pbjs": "bin/protoc-gen-pbjs" }, "engines": { "node": ">=12.0.0" }, "peerDependencies": { - "protobufjs": "^7.0.0" + "protobufjs": "^8.8.0" } }, "node_modules/protobufjs-cli/node_modules/espree": { @@ -4610,9 +4555,9 @@ } }, "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", "dev": true, "license": "MIT", "engines": { @@ -4788,19 +4733,6 @@ "dev": true, "license": "MIT" }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", diff --git a/workers/typescript/package.json b/workers/typescript/package.json index dd88be39..c473828f 100644 --- a/workers/typescript/package.json +++ b/workers/typescript/package.json @@ -47,8 +47,8 @@ "eslint-config-prettier": "^9.1.0", "nodemon": "^2.0.12", "prettier": "^3.1.1", - "protobufjs": "7.5.1", - "protobufjs-cli": "^1.0.0", + "protobufjs": "^8.8.0", + "protobufjs-cli": "^2.7.0", "ts-node": "^10.8.1", "typescript": "^5.9.3", "typescript-eslint": "^8.10.0" From 51575e02055b9f00aad41b6b03ac0f894284c979 Mon Sep 17 00:00:00 2001 From: Veeral Patel Date: Mon, 7 Sep 2026 12:53:49 -0700 Subject: [PATCH 2/6] Move the TypeScript worker to SDK 1.23.0 The previous commit put omes on protobufjs 8 while mise.toml still pinned the TypeScript SDK to 1.22.0. That mismatch broke the Docker paths, which pass the exact mise.toml version to prepare-worker rather than the caret range from package.json: TypeError: root must be an instance of a protobufjs Root SDK 1.22.0's converters expect a root built by protobufjs 7, and ours was now built by 8. The kitchen sink test path did not hit this because it reads "^1.22.0" from package.json and floats to 1.23.0 on its own, so that path was already consistent. Pinning the SDK to 1.23.0 makes every path agree: 1.23.0 with protobufjs 8 everywhere. Applies the sync-sdk:typescript recipe from mise.toml. Also commits the go.sum that `go mod tidy` produces. The previous commit carried an incomplete go.sum, so every job running `go run ./cmd/dev` appended the missing lines and then failed the shared `git diff --exit-code` step with "worker has uncommitted formatting changes". --- go.mod | 13 +- go.sum | 8 - mise.toml | 2 +- workers/typescript/package-lock.json | 228 +++++++++------------------ workers/typescript/package.json | 12 +- 5 files changed, 87 insertions(+), 176 deletions(-) diff --git a/go.mod b/go.mod index 2c16ea98..7fbd930c 100644 --- a/go.mod +++ b/go.mod @@ -40,13 +40,14 @@ require ( github.com/prometheus/procfs v0.11.1 // indirect ) +require github.com/golang/mock v1.6.0 + require ( github.com/andybalholm/brotli v1.1.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/ebitengine/purego v0.9.0 // indirect github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect github.com/go-ole/go-ole v1.2.6 // indirect - github.com/golang/mock v1.6.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -77,14 +78,14 @@ require ( // This is dumb, but necesary because Go (for some commands) can't figure out the transitive // local-replace inside of the features module itself, so we have to help it. replace ( - github.com/temporalio/features/features => github.com/temporalio/features/features v0.0.0-20260324215619-e5868d9ba03f - github.com/temporalio/features/harness/go => github.com/temporalio/features/harness/go v0.0.0-20260324215619-e5868d9ba03f - // Local dev of the nested harness/api module; downstream consumers ignore this and use - // the real pseudo-version required above instead. - github.com/temporalio/omes/workers/go/harness/api => ./workers/go/harness/api // TEMPORARY: sdkbuild's generated package.json pins protobufjs to 7.5.1, which has no // ext/protojson, so @temporalio/common >= 1.23.0 cannot load. Points at // temporalio/features#sdkbuild-drop-protobufjs-override. Drop this replace and bump the // require above once that lands on features main. github.com/temporalio/features => github.com/temporalio/features v0.0.0-20260906235338-5ab9dbc1dc8c + github.com/temporalio/features/features => github.com/temporalio/features/features v0.0.0-20260324215619-e5868d9ba03f + github.com/temporalio/features/harness/go => github.com/temporalio/features/harness/go v0.0.0-20260324215619-e5868d9ba03f + // Local dev of the nested harness/api module; downstream consumers ignore this and use + // the real pseudo-version required above instead. + github.com/temporalio/omes/workers/go/harness/api => ./workers/go/harness/api ) diff --git a/go.sum b/go.sum index 5fb80baa..ecb802d5 100644 --- a/go.sum +++ b/go.sum @@ -6,7 +6,6 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -76,7 +75,6 @@ github.com/pelletier/go-toml/v2 v2.4.3 h1:GTRvJQutkOSftxIFD5xw9aepkYNuPWmVJpffdD github.com/pelletier/go-toml/v2 v2.4.3/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -107,8 +105,6 @@ github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/temporalio/features v0.0.0-20260427223549-86e4c0deedd7 h1:gBLwgyi8xw0oqZgxMwxTRGIfP8RxtI7r1igm3G6aXGY= -github.com/temporalio/features v0.0.0-20260427223549-86e4c0deedd7/go.mod h1:BUWwBMK+Ga5h9xPTS7+kmutSIfY4K1gfSH8eG7fSbU0= github.com/temporalio/features v0.0.0-20260906235338-5ab9dbc1dc8c h1:KD7WPkD3r/urLEWYWq6ODfVysqYM/Ofr+qXk8sRQlTE= github.com/temporalio/features v0.0.0-20260906235338-5ab9dbc1dc8c/go.mod h1:Lo/kKS4Xz8QhK1DFa3B/lmaBiQCeFbGdob4i8ewuZQE= github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4= @@ -134,8 +130,6 @@ go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09 go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= go.temporal.io/api v1.63.5 h1:c11+kPYHkXXL3UiShPdbMD+xtvqGsbTibUA9ypmiCa4= go.temporal.io/api v1.63.5/go.mod h1:SrlW2JMwVlDP4nRWSNznUFqnSHd+YeMDS1BkYo63HCQ= -go.temporal.io/sdk v1.47.0 h1:lZ39w1+uWSjHTL0F3mSc0t4XUnKX8CCcWxqSiLbaHnc= -go.temporal.io/sdk v1.47.0/go.mod h1:ilKs0twgP4JpP8pfhIgZumnOEyBiYn6ZO/ta//NnKMU= go.temporal.io/sdk v1.48.0 h1:WDctKDVuh0Z8Nf7euAyqs/EwcPg1JTIIq1Fut8Tq118= go.temporal.io/sdk v1.48.0/go.mod h1:SHv3+fLzD0GGZAwf0xNSvu8UmO1nFgG9WBSYoowApIk= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -183,8 +177,6 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= -golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= -golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/mise.toml b/mise.toml index 1dbbb3af..054208f7 100644 --- a/mise.toml +++ b/mise.toml @@ -22,7 +22,7 @@ go = "1.48.0" java = "1.37.0" python = "1.31.0" ruby = "1.6.0" -typescript = "1.22.0" +typescript = "1.23.0" [_.server] ref = "abcb94873061dd55e80745cbcc84037abdf22d53" diff --git a/workers/typescript/package-lock.json b/workers/typescript/package-lock.json index 342a7e97..cf27f47e 100644 --- a/workers/typescript/package-lock.json +++ b/workers/typescript/package-lock.json @@ -10,17 +10,17 @@ "dependencies": { "@grpc/grpc-js": "^1.14.3", "@grpc/proto-loader": "^0.8.0", - "@temporalio/activity": "^1.22.0", - "@temporalio/client": "^1.22.0", - "@temporalio/common": "^1.22.0", - "@temporalio/worker": "^1.22.0", - "@temporalio/workflow": "^1.22.0", + "@temporalio/activity": "^1.23.0", + "@temporalio/client": "^1.23.0", + "@temporalio/common": "^1.23.0", + "@temporalio/worker": "^1.23.0", + "@temporalio/workflow": "^1.23.0", "commander": "^11.1.0", "long": "^5.2.3", "winston": "^3.11.0" }, "devDependencies": { - "@temporalio/testing": "^1.22.0", + "@temporalio/testing": "^1.23.0", "@tsconfig/node24": "^24.0.4", "@types/node": "^24.1.0", "@typescript-eslint/eslint-plugin": "^8.10.0", @@ -1215,30 +1215,30 @@ } }, "node_modules/@temporalio/activity": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@temporalio/activity/-/activity-1.22.0.tgz", - "integrity": "sha512-hrPeELIMloFWVrwmDfG1lh3uFNkaYp1ZHpcpWmJniTeSyxqCqLdil4lBOv11FByb6HeKxE6rsvOOUohulyVhRg==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@temporalio/activity/-/activity-1.23.0.tgz", + "integrity": "sha512-BVeiizVD08yk0Ls6MhKCK+g3fPIWbVM9MLx+o990KwhCaZtRM6o1+du1/qfIIShHl6YjHk+H0ewkx2x14QQ6bA==", "license": "MIT", "dependencies": { - "@temporalio/client": "1.22.0", - "@temporalio/common": "1.22.0" + "@temporalio/client": "1.23.0", + "@temporalio/common": "1.23.0" }, "engines": { "node": ">= 20.3.0" } }, "node_modules/@temporalio/client": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@temporalio/client/-/client-1.22.0.tgz", - "integrity": "sha512-b02ty0uDly6/ZRKlbavs5GjXVTry/GB4tkq0v1NH4H7x+nTo/OK0u5Ms8Nni8D+aar3xff9lzIpXNwu/Dp3P3w==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@temporalio/client/-/client-1.23.0.tgz", + "integrity": "sha512-E9nXZPiKDGEDbPpRi0EyQ9i1x70fEIG26aMXZO88kKslKZnEKNPphs06xIic7bhuDoSrPsgVfdDap6o3l6IO2A==", "license": "MIT", "dependencies": { "@grpc/grpc-js": "^1.12.4", - "@temporalio/common": "1.22.0", - "@temporalio/proto": "1.22.0", + "@temporalio/common": "1.23.0", + "@temporalio/proto": "1.23.0", "abort-controller": "^3.0.0", - "long": "^5.2.3", - "nexus-rpc": "^0.0.2", + "long": "^5.3.2", + "nexus-rpc": "^0.0.3", "uuid": "^11.1.0" }, "engines": { @@ -1246,124 +1246,101 @@ } }, "node_modules/@temporalio/common": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@temporalio/common/-/common-1.22.0.tgz", - "integrity": "sha512-1NpQpo/y6XU1ULbo/bXgBEhl6qQnOeB79NrsSJdjI38/hfXPom2IYGJcIxOFfsQICQ0zePEKzB9Yyo31KNpIxA==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@temporalio/common/-/common-1.23.0.tgz", + "integrity": "sha512-TaZYb/ruzgzJ8jd42EqRUCI4ispLZETt2Jigc9szES6q9edDmfncRw143HyvPi7b8n9naohYmA/IxTe9COH/dg==", "license": "MIT", "dependencies": { - "@temporalio/proto": "1.22.0", - "long": "^5.2.3", + "@temporalio/proto": "1.23.0", + "long": "^5.3.2", "ms": "3.0.0-canary.1", - "nexus-rpc": "^0.0.2", - "proto3-json-serializer": "^2.0.0" + "nexus-rpc": "^0.0.3", + "protobufjs": "^8.7.1" }, "engines": { "node": ">= 20.3.0" } }, "node_modules/@temporalio/core-bridge": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@temporalio/core-bridge/-/core-bridge-1.22.0.tgz", - "integrity": "sha512-mJ5agqtfW+GBPYl+ivYLrBpKJ3oFOw8ogcoizNrxYCzwJeprGFiEgHDb/jzyvECR4HAy5s9zQFJYNyTruXXFMw==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@temporalio/core-bridge/-/core-bridge-1.23.0.tgz", + "integrity": "sha512-sid14odlYnci9WgB+iDLyxFbzkq+qBbRPp+CW9U1v+DLRfHlFJwpznQ1AZl4mHjtAZRGQFvDsDG0XNncl9ESSA==", "license": "MIT", "dependencies": { "@grpc/grpc-js": "^1.12.4", - "@temporalio/common": "1.22.0" + "@temporalio/common": "1.23.0" }, "engines": { "node": ">= 20.3.0" } }, "node_modules/@temporalio/nexus": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@temporalio/nexus/-/nexus-1.22.0.tgz", - "integrity": "sha512-4S1ZZdSNjrO9IUyhWxweIidvNn1X/ihEl+P2fOn/Ky38YRx9G+8wtV6g6lqG8zUrtEv//uqFw+HsRMziE2y4tg==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@temporalio/nexus/-/nexus-1.23.0.tgz", + "integrity": "sha512-mObGNp3thR+mTXdtKXpUvFpsdjEI9xpVjewhblKXao7Nqv6xrs7RpFiLdKfJhkEvDyfRgIk/dH5RkiCbZ58I9w==", "license": "MIT", "dependencies": { - "@temporalio/client": "1.22.0", - "@temporalio/common": "1.22.0", - "@temporalio/proto": "1.22.0", - "long": "^5.2.3", - "nexus-rpc": "^0.0.2" + "@temporalio/client": "1.23.0", + "@temporalio/common": "1.23.0", + "@temporalio/proto": "1.23.0", + "long": "^5.3.2", + "nexus-rpc": "^0.0.3" }, "engines": { "node": ">= 20.3.0" } }, "node_modules/@temporalio/proto": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@temporalio/proto/-/proto-1.22.0.tgz", - "integrity": "sha512-X7NVa0Z6HK3l9irZR48FKwZ9w9YXetCdF2z2KCIRr0W7Kul64Wt9o5hwvSXShAtrZuCEEHH8WO/ffHTXxJieLg==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@temporalio/proto/-/proto-1.23.0.tgz", + "integrity": "sha512-90JWnYEs1wyq97/SXkQGknRVMr/BCV9sZ0pOnK3fHTedVinfvz3/PBVFkeAJyU3CJqMQGnzRs9IIfsBTT1icrA==", "license": "MIT", "dependencies": { - "long": "^5.2.3", - "protobufjs": "^7.6.4" + "long": "^5.3.2", + "protobufjs": "^8.7.1" }, "engines": { "node": ">= 20.3.0" } }, - "node_modules/@temporalio/proto/node_modules/protobufjs": { - "version": "7.6.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.5.tgz", - "integrity": "sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.5", - "@protobufjs/eventemitter": "^1.1.1", - "@protobufjs/fetch": "^1.1.1", - "@protobufjs/float": "^1.0.2", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.1", - "@types/node": ">=13.7.0", - "long": "^5.3.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/@temporalio/testing": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@temporalio/testing/-/testing-1.22.0.tgz", - "integrity": "sha512-LWIVkJZHLKsuuXLeTZ9VuN6Sjt79BJTl9KKTQ84dOysPj+tMGTET8TEZasBhCuocS0qFGrh00c5e4RzXjfnLLA==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@temporalio/testing/-/testing-1.23.0.tgz", + "integrity": "sha512-4e52YlZ+u6rCoDwsWJpDLfNwEoM2PM0KQXhbAOWc4DE2QsIuSD5ZrecQs4Ud7Z1BBzMTcFDmIyCjGw/O852QTw==", "dev": true, "license": "MIT", "dependencies": { - "@temporalio/activity": "1.22.0", - "@temporalio/client": "1.22.0", - "@temporalio/common": "1.22.0", - "@temporalio/core-bridge": "1.22.0", - "@temporalio/proto": "1.22.0", - "@temporalio/worker": "1.22.0", - "@temporalio/workflow": "1.22.0" + "@temporalio/activity": "1.23.0", + "@temporalio/client": "1.23.0", + "@temporalio/common": "1.23.0", + "@temporalio/core-bridge": "1.23.0", + "@temporalio/proto": "1.23.0", + "@temporalio/worker": "1.23.0", + "@temporalio/workflow": "1.23.0" }, "engines": { "node": ">= 20.3.0" } }, "node_modules/@temporalio/worker": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@temporalio/worker/-/worker-1.22.0.tgz", - "integrity": "sha512-axRHhUsovFlqDtXZxUnhRLV7WmC6qOMUCij13lw4glT5yRH62k8wIZqcT3naEfvLSzoDxjt2xM7me3VvTRSaow==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@temporalio/worker/-/worker-1.23.0.tgz", + "integrity": "sha512-k1MrK10lD1s7U66PFqAwGlQMRsVrfU5nCB+CjIAg5RyL7JpOzidDCz/E/jB2HobXzZnxtMcDBfBHh/BYUoyhxw==", "license": "MIT", "dependencies": { "@grpc/grpc-js": "^1.12.4", "@swc/core": "^1.3.102", - "@temporalio/activity": "1.22.0", - "@temporalio/client": "1.22.0", - "@temporalio/common": "1.22.0", - "@temporalio/core-bridge": "1.22.0", - "@temporalio/nexus": "1.22.0", - "@temporalio/proto": "1.22.0", - "@temporalio/workflow": "1.22.0", + "@temporalio/activity": "1.23.0", + "@temporalio/client": "1.23.0", + "@temporalio/common": "1.23.0", + "@temporalio/core-bridge": "1.23.0", + "@temporalio/nexus": "1.23.0", + "@temporalio/proto": "1.23.0", + "@temporalio/workflow": "1.23.0", "heap-js": "^2.6.0", "memfs": "^4.6.0", - "nexus-rpc": "^0.0.2", - "protobufjs": "^7.6.4", + "nexus-rpc": "^0.0.3", + "protobufjs": "^8.7.1", "rxjs": "^7.8.1", "source-map": "^0.7.4", "source-map-loader": "^5.0.0", @@ -1376,38 +1353,15 @@ "node": ">= 20.3.0" } }, - "node_modules/@temporalio/worker/node_modules/protobufjs": { - "version": "7.6.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.5.tgz", - "integrity": "sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.5", - "@protobufjs/eventemitter": "^1.1.1", - "@protobufjs/fetch": "^1.1.1", - "@protobufjs/float": "^1.0.2", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.1", - "@types/node": ">=13.7.0", - "long": "^5.3.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/@temporalio/workflow": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@temporalio/workflow/-/workflow-1.22.0.tgz", - "integrity": "sha512-31Ax529+TvfH2RCexOhiCyM3lARJJoVzrnRUS1gX+jl+mka+pRRnEUx4B572mZz0oOlCCxbiztHZF72wwwWZDA==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@temporalio/workflow/-/workflow-1.23.0.tgz", + "integrity": "sha512-dHQnYmxU/QN7VfTmdfCfpdfTS1w0hoW/NQ7Zefr55QnqLwZw+E0Vn6S4fAbJrpfHrsAmezUZQFVLi+Z4Sq+jzA==", "license": "MIT", "dependencies": { - "@temporalio/common": "1.22.0", - "@temporalio/proto": "1.22.0", - "nexus-rpc": "^0.0.2" + "@temporalio/common": "1.23.0", + "@temporalio/proto": "1.23.0", + "nexus-rpc": "^0.0.3" }, "engines": { "node": ">= 20.3.0" @@ -3680,9 +3634,9 @@ "license": "MIT" }, "node_modules/nexus-rpc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/nexus-rpc/-/nexus-rpc-0.0.2.tgz", - "integrity": "sha512-IWjIExdVYlmwXuzHdY/Q3lXCv1gbqoAXPazQhy2w4Xgtgha3H0OOujEESVPQcFUFMWm+pAk2gKnb57g8S41JZg==", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/nexus-rpc/-/nexus-rpc-0.0.3.tgz", + "integrity": "sha512-ksIBeYHDv6FHAR1h3Vwk0kQ6REhdo1STqDHXMzu/yn/VN/XzgOor2IUjewG6paoA7IgxlIPZoOU/PD78PC6HTg==", "license": "MIT", "engines": { "node": ">= 20.0.0" @@ -3964,46 +3918,10 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/proto3-json-serializer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz", - "integrity": "sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==", - "license": "Apache-2.0", - "dependencies": { - "protobufjs": "^7.2.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/proto3-json-serializer/node_modules/protobufjs": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.6.tgz", - "integrity": "sha512-dYDWdjSl5RNb7SgPxGQcRU+GtvP7s2fpkrY0r432PcOIaZ0/rBcxEZnQN67iJhFuQiVw754JDoPruPCNdGsbjg==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.5", - "@protobufjs/eventemitter": "^1.1.1", - "@protobufjs/fetch": "^1.1.1", - "@protobufjs/float": "^1.0.2", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.1", - "@types/node": ">=13.7.0", - "long": "^5.3.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/protobufjs": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-8.8.0.tgz", "integrity": "sha512-N3xhQ5yyBx3vQq4gubBfASzYhJGNzeDbjqBpu61g7UVylsN/qyffU96TKWD3GbbLOKF82VGNRNvv1+BFgE31Eg==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "long": "^5.3.2" diff --git a/workers/typescript/package.json b/workers/typescript/package.json index c473828f..7635ff4a 100644 --- a/workers/typescript/package.json +++ b/workers/typescript/package.json @@ -28,17 +28,17 @@ "dependencies": { "@grpc/grpc-js": "^1.14.3", "@grpc/proto-loader": "^0.8.0", - "@temporalio/activity": "^1.22.0", - "@temporalio/client": "^1.22.0", - "@temporalio/common": "^1.22.0", - "@temporalio/worker": "^1.22.0", - "@temporalio/workflow": "^1.22.0", + "@temporalio/activity": "^1.23.0", + "@temporalio/client": "^1.23.0", + "@temporalio/common": "^1.23.0", + "@temporalio/worker": "^1.23.0", + "@temporalio/workflow": "^1.23.0", "commander": "^11.1.0", "long": "^5.2.3", "winston": "^3.11.0" }, "devDependencies": { - "@temporalio/testing": "^1.22.0", + "@temporalio/testing": "^1.23.0", "@tsconfig/node24": "^24.0.4", "@types/node": "^24.1.0", "@typescript-eslint/eslint-plugin": "^8.10.0", From f5dcfc9ab973576ddbc58bda8f41b0626d6f5bf5 Mon Sep 17 00:00:00 2001 From: Veeral Patel Date: Mon, 7 Sep 2026 12:56:07 -0700 Subject: [PATCH 3/6] Tidy workers/go after the features bump Pointing the root module at the newer features commit pulls three indirect dependencies forward (go-spew, go-difflib, golang.org/x/time), and workers/go depends on the root module via a local replace, so its go.mod and go.sum inherit those versions. Without this, every job that shells out through ./cmd/dev re-resolved them, leaving workers/go/go.{mod,sum} modified and failing the shared `git diff --exit-code` step. --- workers/go/go.mod | 6 +++--- workers/go/go.sum | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/workers/go/go.mod b/workers/go/go.mod index 6afc773d..54522a40 100644 --- a/workers/go/go.mod +++ b/workers/go/go.mod @@ -43,7 +43,7 @@ require ( github.com/cilium/ebpf v0.11.0 // indirect github.com/containerd/cgroups/v3 v3.0.3 // indirect github.com/coreos/go-systemd/v22 v22.3.2 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/ebitengine/purego v0.9.0 // indirect github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect github.com/go-ole/go-ole v1.2.6 // indirect @@ -63,7 +63,7 @@ require ( github.com/opencontainers/runtime-spec v1.0.2 // indirect github.com/parquet-go/parquet-go v0.25.1 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/prometheus/client_model v0.5.0 // indirect github.com/prometheus/common v0.46.0 // indirect @@ -83,7 +83,7 @@ require ( golang.org/x/sync v0.20.0 // indirect golang.org/x/sys v0.45.0 // indirect golang.org/x/text v0.37.0 // indirect - golang.org/x/time v0.6.0 // indirect + golang.org/x/time v0.14.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect google.golang.org/protobuf v1.36.11 // indirect diff --git a/workers/go/go.sum b/workers/go/go.sum index df46dd05..5b65a81d 100644 --- a/workers/go/go.sum +++ b/workers/go/go.sum @@ -45,8 +45,9 @@ github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2 github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/ebitengine/purego v0.9.0 h1:mh0zpKBIXDceC63hpvPuGLiJ8ZAa3DfrFTudmfi8A4k= github.com/ebitengine/purego v0.9.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a h1:yDWHCSQ40h88yih2JAcL6Ls/kVkSE8GFACTGVnMPruw= @@ -114,8 +115,9 @@ github.com/pelletier/go-toml/v2 v2.4.3 h1:GTRvJQutkOSftxIFD5xw9aepkYNuPWmVJpffdD github.com/pelletier/go-toml/v2 v2.4.3/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= @@ -221,8 +223,8 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= -golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= -golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= From e7c3dab7a59b399d1dc1edeaff3c8517f487eb91 Mon Sep 17 00:00:00 2001 From: Veeral Patel Date: Mon, 7 Sep 2026 13:16:37 -0700 Subject: [PATCH 4/6] Handle protobufjs 8 long shapes in numify throughput_stress against the TypeScript worker failed every workflow task with: TypeError: n.toNumber is not a function at numify (workerlib/kitchensink/proto_help.ts:72) at handleAction (workerlib/kitchensink/workflows/kitchen_sink.ts:137) numify assumed a 64-bit field is either a plain number or a protobufjs Long with a toNumber method. In the main thread protojson does hand back a real Long, but inside the Workflow sandbox the long library is not wired up, so the value arrives as a Long-shaped object with no prototype methods and the call blows up. Every workflow task then failed and the scenario timed out after five minutes. Handles bigint, decimal string, a real Long, and a plain {low, high, unsigned} object, recombining the 32-bit halves in the last case. The comment above the function already noted protobuf will not use Long consistently here; this extends it to the shapes protobufjs 8 adds. throughput_stress now completes in 3.8s (2 iterations, 2 continue-as-new, 8 workflows) where it previously timed out, and the 40-test kitchen sink suite still passes. --- .../workerlib/kitchensink/proto_help.ts | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/workers/typescript/workerlib/kitchensink/proto_help.ts b/workers/typescript/workerlib/kitchensink/proto_help.ts index 9c7c41d4..a6bdc715 100644 --- a/workers/typescript/workerlib/kitchensink/proto_help.ts +++ b/workers/typescript/workerlib/kitchensink/proto_help.ts @@ -61,13 +61,38 @@ export function durationConvert(d: IDuration | null | undefined): number { } // I just cannot get protobuf to use Long consistently. For whatever insane reason for child -// workflows it reverts to using number. -export function numify(n: number | Long | undefined | null): number { +// workflows it reverts to using number. Under protobufjs 8 a 64-bit field decoded inside the +// Workflow sandbox arrives as a plain {low, high, unsigned} object with no Long prototype, +// because the sandbox does not have the long library wired up, so toNumber() is missing. The +// bigint and string branches are defensive: protobufjs can represent 64-bit values either way +// depending on how the root is configured. +export function numify( + n: + | number + | bigint + | string + | Long + | { low: number; high: number; unsigned?: boolean } + | undefined + | null, +): number { if (!n) { return 0; } if (typeof n === 'number') { return n; } - return n.toNumber(); + if (typeof n === 'bigint') { + return Number(n); + } + if (typeof n === 'string') { + return Number(n); + } + if (typeof (n as Long).toNumber === 'function') { + return (n as Long).toNumber(); + } + // Plain Long-shaped object: recombine the 32-bit halves. + const { low, high, unsigned } = n as { low: number; high: number; unsigned?: boolean }; + const hi = unsigned ? high >>> 0 : high; + return hi * 0x100000000 + (low >>> 0); } From 8e6fa03215af7f141f89372bb040b418825e0d54 Mon Sep 17 00:00:00 2001 From: Veeral Patel Date: Mon, 7 Sep 2026 13:43:01 -0700 Subject: [PATCH 5/6] Build the Ruby worker image from a Debian snapshot The three Ruby image jobs fail intermittently on every PR in this repo: E: Failed to fetch .../libc-dev-bin_2.31-13+deb11u14_amd64.deb 404 Not Found clang pulls in libc6-i386, which Depends on an exact glibc version, so installing it upgrades libc6, libc6-dev and libc-dev-bin to whatever bullseye-security currently advertises. Some deb.debian.org CDN edges serve an index advertising a glibc point release whose .deb is no longer in their pool. Which edge you get decides whether the build works: the same commit had build-project (ruby) pass while build-worker (ruby) failed, and the file downloads fine from other edges. Acquire::Retries does not help, because a 404 is a definitive response rather than a transient one - confirmed by trying it. Choosing a different clang package does not help either; every variant pulls libc6-i386 and so the glibc upgrade. Pinning glibc to the older build in bullseye/main would work but means an --allow-downgrades downgrade past security fixes. snapshot.debian.org serves immutable index/pool pairs, so they can never disagree and this failure mode is gone by construction. The installed versions are unchanged - clang 1:11.0-51+nmu5 and libprotoc 3.12.4-1+deb11u1, same as before - only the source differs. The snapshot timestamp is an ARG so it can be bumped when the pinned glibc needs newer security fixes. Verified by building the full image locally: all 18 build stages pass, including prepare-worker. --- dockerfiles/ruby.Dockerfile | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/dockerfiles/ruby.Dockerfile b/dockerfiles/ruby.Dockerfile index 7f9a1d4c..92c763e1 100644 --- a/dockerfiles/ruby.Dockerfile +++ b/dockerfiles/ruby.Dockerfile @@ -2,10 +2,21 @@ ARG TARGETARCH FROM --platform=linux/$TARGETARCH ruby:3.3-bullseye AS build -# Install protobuf compiler -RUN apt-get update \ +# Install protobuf compiler and clang. +# +# Sourced from snapshot.debian.org rather than deb.debian.org. clang pulls in +# libc6-i386, which Depends on an exact glibc version, so installing it upgrades +# the whole glibc set to whatever bullseye-security currently advertises. Some +# deb.debian.org CDN edges serve an index advertising a glibc point release whose +# .deb is no longer in their pool, which fails the build with a 404 that varies by +# edge and cannot be retried (404 is not transient). Snapshot serves immutable +# index/pool pairs, so they can never disagree. +ARG DEBIAN_SNAPSHOT=20260901T000000Z +RUN printf 'deb https://snapshot.debian.org/archive/debian/%s bullseye main\ndeb https://snapshot.debian.org/archive/debian-security/%s bullseye-security main\ndeb https://snapshot.debian.org/archive/debian/%s bullseye-updates main\n' \ + "$DEBIAN_SNAPSHOT" "$DEBIAN_SNAPSHOT" "$DEBIAN_SNAPSHOT" > /etc/apt/sources.list \ + && apt-get update -o Acquire::Check-Valid-Until=false \ && DEBIAN_FRONTEND=noninteractive \ - apt-get install --no-install-recommends --assume-yes \ + apt-get install -o Acquire::Check-Valid-Until=false --no-install-recommends --assume-yes \ clang=1:11.0-51+nmu5 \ protobuf-compiler=3.12.4-1+deb11u1 libprotobuf-dev=3.12.4-1+deb11u1 From 5d7f206b488bddb9913cf0a766e0d01167fb9ba3 Mon Sep 17 00:00:00 2001 From: Veeral Patel Date: Mon, 7 Sep 2026 13:48:53 -0700 Subject: [PATCH 6/6] Retry snapshot fetches for the emulated arm64 Ruby build Sourcing from snapshot fixed the single-arch Ruby jobs (build-worker and build-project both pass now), but the multi-arch Docker Hub push job then failed on its emulated arm64 leg: E: Failed to fetch https://snapshot.debian.org/.../libclang-common-11-dev_11.0.1-2_arm64.deb 503 first byte timeout Snapshot is slower than the CDN and answers 503 under load. Unlike the 404 this replaced, a 503 is transient, so Acquire::Retries genuinely applies here. Also raises the fetch timeout, since the emulated arm64 leg is slow. Verified by building the apt stage natively for arm64: clang 11.0.1-2 and libprotoc 3.12.4 install cleanly, and arm64 does not even need the glibc upgrade that triggers this on amd64 (its snapshot glibc is already u13). --- dockerfiles/ruby.Dockerfile | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/dockerfiles/ruby.Dockerfile b/dockerfiles/ruby.Dockerfile index 92c763e1..beefa11c 100644 --- a/dockerfiles/ruby.Dockerfile +++ b/dockerfiles/ruby.Dockerfile @@ -10,13 +10,19 @@ FROM --platform=linux/$TARGETARCH ruby:3.3-bullseye AS build # deb.debian.org CDN edges serve an index advertising a glibc point release whose # .deb is no longer in their pool, which fails the build with a 404 that varies by # edge and cannot be retried (404 is not transient). Snapshot serves immutable -# index/pool pairs, so they can never disagree. +# index/pool pairs, so they can never disagree. Snapshot is slower than the CDN +# and can answer 503 under load, especially for the emulated arm64 leg of the +# multi-arch build, so allow retries and a generous timeout - unlike a 404, a 503 +# is transient and worth retrying. ARG DEBIAN_SNAPSHOT=20260901T000000Z RUN printf 'deb https://snapshot.debian.org/archive/debian/%s bullseye main\ndeb https://snapshot.debian.org/archive/debian-security/%s bullseye-security main\ndeb https://snapshot.debian.org/archive/debian/%s bullseye-updates main\n' \ "$DEBIAN_SNAPSHOT" "$DEBIAN_SNAPSHOT" "$DEBIAN_SNAPSHOT" > /etc/apt/sources.list \ - && apt-get update -o Acquire::Check-Valid-Until=false \ + && apt-get update -o Acquire::Check-Valid-Until=false -o Acquire::Retries=8 \ + -o Acquire::http::Timeout=120 -o Acquire::https::Timeout=120 \ && DEBIAN_FRONTEND=noninteractive \ - apt-get install -o Acquire::Check-Valid-Until=false --no-install-recommends --assume-yes \ + apt-get install -o Acquire::Check-Valid-Until=false -o Acquire::Retries=8 \ + -o Acquire::http::Timeout=120 -o Acquire::https::Timeout=120 \ + --no-install-recommends --assume-yes \ clang=1:11.0-51+nmu5 \ protobuf-compiler=3.12.4-1+deb11u1 libprotobuf-dev=3.12.4-1+deb11u1