Skip to content

Backport for CLI v1.8.3 (monthly public/latest) - #1185

Open
ks-temporal wants to merge 12 commits into
release/1.8.xfrom
ks/tentative-1.8.3
Open

Backport for CLI v1.8.3 (monthly public/latest)#1185
ks-temporal wants to merge 12 commits into
release/1.8.xfrom
ks/tentative-1.8.3

Conversation

@ks-temporal

Copy link
Copy Markdown
Contributor

Backport for CLI v1.8.3 (monthly public/latest)

Cuts the scheduled monthly public/latest release onto release/1.8.x, which was
sitting exactly on v1.8.2 with nothing backported since 2026-07-31.

The governing constraint: this release keeps the embedded dev server on OSS
Server v1.31.2. Everything below follows from that.

main has moved to server v1.32.0-162.0 (a Cloud tag) and go.temporal.io/api
v1.63.x, so main is not publicly releasable and a large share of recent work
cannot ship here.

Summary

Of the 26 commits on main since v1.8.2:

Count
Cherry-picked as-is 10
Dependency bumps folded into one commit 5
New commits authored for this backport 2
Excluded 11

Verified: go build ./... and cliext build clean, make gen produces no diff,
full go test ./... green, binary reports Server 1.31.2, UI 2.50.1.

Included

Cherry-picked from main

Commit Change
#1153 test: fix concurrent start test assertions
#1140 Gate AWS Lambda role/external-id behind --aws-lambda-skip-role-and-external-id
#1137 Delegate help and completion to extensions when applicable
#1167 Add --gcp-cloud-run-scale-down-stabilization-duration
#1176 Fix cliext build, add it to CI workflow
#1149 chore(deps): bump the github-actions group with 3 updates
#1162 chore(deps): bump docker/login-action 4.4.0 → 4.5.2
#1166 chore(deps): bump docker/login-action 4.5.2 → 4.6.0
#1156 fix(activity): remove no-op reset-attempts flag — adjusted, see below
#1061 feat: add temporal options command and declutter help output

New commits

backport: pin compatible dependency set and adjust #1156 for 1.8.x

Dependency bumps are applied directly rather than cherry-picked, because taking
them as-is pulls go.temporal.io/api past what server v1.31.2 can compile
against (see Dependency ceiling below). Covers the isatty, x/tools, grpc, echo
and testify bumps (#1145, #1148, #1132, #1175, #1174).

Also pins cliext to a tagged SDK. main currently pins
go.temporal.io/sdk v1.46.1-0.20260720184640-f34dc3da35ab — a commit SHA — in
cliext/go.mod, which reaches the root build through
replace github.com/temporalio/cli/cliext => ./cliext. That violates the
tagged-dependencies rule for a public release. main should be fixed
separately.

fix(activity): use correct update-mask path for --task-queue

Fixes a real, currently-shipping bug. v1.8.2 sends update-mask path
task_queue_name, which the server's ParseFieldMask normalizes to
taskQueueName and which never matches its taskQueue.name key — so
temporal activity update-options --task-queue silently does nothing.

Verified A/B against the embedded server v1.31.2:

  • with task_queue.name → task queue updates as expected
  • with task_queue_name (what v1.8.2 ships) → unchanged

The fix exists upstream only inside #1092, which cannot be backported, so it is
extracted here as a one-liner.

Dependency ceiling

server v1.31.2 does not compile against go.temporal.io/apiv1.62.10:
that release adds CountNexusOperationExecutions to the WorkflowServiceClient
interface, which v1.31.2's clientImpl, metricClient and retryableClient do
not implement.

Because api is a transitive dependency, Go's minimal version selection drags it
upward whenever anything that depends on it is bumped. That caps everything:

Dependency Ceiling Reason
go.temporal.io/api v1.62.9 v1.62.10 breaks server v1.31.2
github.com/temporalio/ui-server/v2 v2.50.1 v2.51.0 → api v1.62.13; v2.53.x → api v1.63.x
go.temporal.io/sdk v1.42.0 v1.43.1 → api v1.62.12; v1.46.0 → api v1.63.x
go.temporal.io/sdk/contrib/envconfig v1.0.0 v1.0.1 changed DefaultConfigFilePath to one return value; cliext/config.oauth.go expects two

Resulting set — every Temporal direct dependency unchanged from v1.8.2 except
an api patch bump:

go.temporal.io/api                   v1.62.9   (was v1.62.8)
go.temporal.io/server                v1.31.2   unchanged
go.temporal.io/sdk                   v1.41.1   unchanged
go.temporal.io/sdk/contrib/envconfig v1.0.0    unchanged
github.com/temporalio/ui-server/v2   v2.50.1   unchanged

Note for the UI team: this release ships UI Server v2.50.1, unchanged.
The natural assumption would be v2.53.3, but that requires api v1.63.5.

Excluded, and why

Requires OSS Server v1.32.x / api v1.63.x

Commit Reason
#1172 bump server for Nexus Query support The server bump itself — out of scope for this line
#1092 single SAA operator actions Uses Pause/Unpause/Reset ActivityExecutionRequest and UpdateActivityExecutionOptionsRequest, absent from api v1.62.x
#1152 enable SAA operator and batch commands in dev server Needs activity.EnableStandaloneActivityOperatorCommands and dynamicconfig.FrontendEnableBatchOperationsForStandaloneActivities, absent from server v1.31.2
#1159 drop activity unpause --reset-attempts/--reset-heartbeats Authored on top of #1092; its diff context already uses the new RPC names
#1150 reject update-options --start-delay for workflow Activities Needs ActivityOptions.StartDelay, new in api v1.63.5, via unbackported prerequisite #1113
#1131 render links on activity describe Needs ActivityExecutionInfo.GetLinks and DescribeActivityExecutionResponse.GetCallbacks, new in api v1.63.5
#1151 bump UI server v2.53.1 Requires api v1.63.4
#1164 bump UI server v2.53.3 Requires api v1.63.5

Excluded for other reasons

#1114 — staged connection diagnosis for opaque dial failures.
Depends on #1017 (Unwrap System Nexus Operations in event history), which
introduced dialClientWithCodec and was never backported. On release/1.8.x
only the two-value dialClient exists, and git silently misapplies #1114's
hunks into it, producing three-value returns from a two-value function. Pulling
in #1017 is too large for a patch release.

#1158 — docs: clarify --query targets Workflow Activities.
Pure documentation describing Standalone Activity semantics
("Omit --workflow-id to target a Standalone Activity…"). That behavior does
not exist on this line, so backporting it would ship misleading help text.

#1155 — fix(activity): include options in batch update-options.
The change itself is correct, but batch update-options applies nothing on
server v1.31.2. Probed directly: after a batch run, task queue is unchanged and
schedule_to_close_timeout is still 0s. Its new test
TestActivityOptionsUpdate_BatchMatchAll fails consistently (3/3). Deferred to
the release that carries the server bump.

Reviewer notes

#1156 was adjusted rather than taken verbatim. Upstream, activity reset
had already lost --reset-heartbeats to an earlier SAA commit, so taking
main's version would have removed both flags at once. Only --reset-attempts
is a no-op, the surviving help text still documents --reset-heartbeats, and
its removal belongs to #1159 (excluded). This backport therefore removes only
--reset-attempts and keeps the batch path on c.ResetHeartbeats rather than
hardcoding true. Worth a careful look.

Known flaky test. TestHelp_AllFlag_ShorterCommandPathWinsi failed on one
full-suite run and passed on the next; it passes 5/5 in isolation. It arrives
with #1137 and exists identically on main, so it is inherited rather than
introduced — but expect occasional red CI.

Pre-existing go vet findings (two lock-copy, one context leak) are
byte-identical to the v1.8.2 baseline. Not introduced here.

chaptersix and others added 12 commits August 31, 2026 13:34
## What changed?

Supersedes #1094, whose contributor is no longer responding. This branch
replays Nanook’s two authored commits unchanged so their contribution
remains credited, then adds a small maintainer follow-up to restore the
successful `client.Dial` guard and preserve the accepted cleanup/logging
review suggestions.

## Validation

- `go test ./internal/temporalcli -run
'^TestServer_StartDev_ConcurrentStarts$' -count=1`

## Notes

The original PR remains open and untouched.

---------

Co-authored-by: Nanook <nanookclaw@users.noreply.github.com>
(cherry picked from commit b646628)
…-role-and-external-id (#1140)

## What changed?

### Why

`create-version` and `update-version-compute-config` currently require
`--aws-lambda-assume-role-arn` and
`--aws-lambda-assume-role-external-id` whenever
`--aws-lambda-function-arn` is set. The Temporal server governs whether
these are actually mandatory via the global
`require_role_and_external_id` setting (default `true`), so a role-less
config is valid against servers where that setting is disabled — e.g.
local dev against LocalStack. CLI's validation needs to be relaxed to
allow role less config creation.

### How

This PR allows the role less config by adding a new CLI parameter
`--aws-lambda-skip-role-and-external-id`. By default the CLI keeps
requiring both(role and id) fields and fails fast with an actionable
client-side error that names the missing flag. Passing the flag
specifically opts out of the client-side check and defers entirely to
the server's policy.

### Testing

With flag set as default true
```
mani@manis-MacBook-Pro temporal-cli % ./temporal worker deployment create-version --address 127.0.0.1:7333 --deployment-name test-deploy --build-id b-noRole \
  --aws-lambda-function-arn arn:aws:lambda:us-east-1:123456789012:function:MyExampleFunction:1
Error: missing required AWS Lambda provider detail: role

mani@manis-MacBook-Pro temporal-cli % ./temporal worker deployment create-version --address 127.0.0.1:7333 --deployment-name test-deploy --build-id b-noEid \
  --aws-lambda-function-arn arn:aws:lambda:us-east-1:123456789012:function:MyExampleFunction:1 \
  --aws-lambda-assume-role-arn arn:aws:iam::123456789012:role/MyServiceRole
Error: missing required AWS Lambda provider detail: role_external_id

mani@manis-MacBook-Pro temporal-cli % ./temporal worker deployment create-version --address 127.0.0.1:7333 --deployment-name test-deploy --build-id b-skipRole \
  --aws-lambda-function-arn arn:aws:lambda:us-east-1:123456789012:function:MyExampleFunction:1 \
  --aws-lambda-assume-role-arn arn:aws:iam::123456789012:role/MyServiceRole \
  --aws-lambda-skip-role-and-external-id
Error: AWS Lambda provider detail "role" must not be set when --aws-lambda-skip-role-and-external-id is passed

mani@manis-MacBook-Pro temporal-cli % ./temporal worker deployment create-version --address 127.0.0.1:7333 --deployment-name test-deploy --build-id b-skipOnly \
  --aws-lambda-function-arn arn:aws:lambda:us-east-1:123456789012:function:MyExampleFunction:1 \
  --aws-lambda-skip-role-and-external-id
Error: error creating worker deployment version: no Worker Deployment found with name 'test-deploy'; does your Worker Deployment have pollers?

mani@manis-MacBook-Pro temporal-cli % ./temporal worker deployment create-version --address 127.0.0.1:7333 --deployment-name test-deploy --build-id b-skipEid \
  --aws-lambda-function-arn arn:aws:lambda:us-east-1:123456789012:function:MyExampleFunction:1 \
  --aws-lambda-assume-role-external-id external-id \
  --aws-lambda-skip-role-and-external-id
Error: AWS Lambda provider detail "role_external_id" must not be set when --aws-lambda-skip-role-and-external-id is passed

mani@manis-MacBook-Pro temporal-cli % ./temporal worker deployment update-version-compute-config --address 127.0.0.1:7333 --deployment-name test-deploy --build-id b-skipRole \
  --aws-lambda-function-arn arn:aws:lambda:us-east-1:123456789012:function:MyExampleFunction:1 \
  --aws-lambda-assume-role-arn arn:aws:iam::123456789012:role/MyServiceRole \
  --aws-lambda-skip-role-and-external-id
Error: AWS Lambda provider detail "role" must not be set when --aws-lambda-skip-role-and-external-id is passed

mani@manis-MacBook-Pro temporal-cli % ./temporal worker deployment update-version-compute-config --address 127.0.0.1:7333 --deployment-name test-deploy --build-id b-skipOnly \
  --aws-lambda-function-arn arn:aws:lambda:us-east-1:123456789012:function:MyExampleFunction:1 \
  --aws-lambda-skip-role-and-external-id
Error: error updating worker deployment version compute config: build ID 'b-skipOnly' not found in Worker Deployment 'test-deploy'
mani@manis-MacBook-Pro temporal-cli %
```

for when the local server's require_role_and_external_id flag is set to
false
```
mani@manis-MacBook-Pro temporal-cli % ./temporal worker deployment create-version --address 127.0.0.1:7333 --deployment-name skip-demo --build-id skip-test-1 \
  --aws-lambda-function-arn arn:aws:lambda:us-east-1:123456789012:function:MyExampleFunction:1 \
  --aws-lambda-skip-role-and-external-id
Error: error creating worker deployment version: no Worker Deployment found with name 'skip-demo'; does your Worker Deployment have pollers?
mani@manis-MacBook-Pro temporal-cli % ./temporal worker deployment create-version --address 127.0.0.1:7333 --deployment-name skip-demo --build-id role-test-1 \
  --aws-lambda-function-arn arn:aws:lambda:us-east-1:123456789012:function:MyExampleFunction:1 \
  --aws-lambda-assume-role-arn arn:aws:iam::123456789012:role/MyServiceRole \
  --aws-lambda-assume-role-external-id external-id
Error: error creating worker deployment version: no Worker Deployment found with name 'skip-demo'; does your Worker Deployment have pollers?
mani@manis-MacBook-Pro temporal-cli % ./temporal worker deployment create-version --address 127.0.0.1:7333 --deployment-name skip-demo --build-id skip-neg-1 \
  --aws-lambda-function-arn arn:aws:lambda:us-east-1:123456789012:function:MyExampleFunction:1 \
  --aws-lambda-assume-role-arn arn:aws:iam::123456789012:role/MyServiceRole \
  --aws-lambda-skip-role-and-external-id
Error: AWS Lambda provider detail "role" must not be set when --aws-lambda-skip-role-and-external-id is passed

mani@manis-MacBook-Pro temporal-cli % ./temporal worker deployment update-version-compute-config --address 127.0.0.1:7333 --deployment-name skip-demo --build-id poller-build --aws-lambda-function-arn arn:aws:lambda:us-east-1:123456789012:function:MyExampleFunction:1 --aws-lambda-skip-role-and-external-id

Error: error updating worker deployment version compute config: default: lambda GetFunction failed: operation error Lambda: GetFunction, get identity: get credentials: failed to refresh cached credentials, no EC2 IMDS role found, operation error ec2imds: GetMetadata, request canceled, context deadline exceeded
mani@manis-MacBook-Pro temporal-cli %
```

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit 6e3ae1e)
Shell completion always sets __complete as the first argument, so to
delegate to extensions, `temporal __complete cloud n` needs to be
rewritten as `temporal-cloud __complete n`. `help` can be invoked the
same way

## Related issues

CLDDX-150

## What changed?

* `tryExecuteExtension` delegates `help` and shell completion to
extensions that match the remaining arguments
* extensions are registered during shell completion, so "temporal <TAB>"
will show them

## Checklist

**Design**
* [x] This feature does not depend on Cloud-only APIs or behavior (it
works against an OSS server)

**Tests**
* [x] Added unit test(s) (`func TestXxx`) where applicable

## Manual tests

**Setup**
Install at least one extension, like the [cloud
cli](https://github.com/temporalio/cloud-cli#quick-install) (`brew
install temporalio/prerelease/temporal-cloud` on Mac or Linux with
homebrew installed)

**Happy path**

```
$ temporal <TAB>
activity    -- Operate on Activity Executions
batch       -- Manage running batch jobs
cloud       -- An extension command located at /opt/homebrew/bin/temporal-cloud
completion  -- Generate the autocompletion script for the specified shell
config      -- Manage config files (EXPERIMENTAL)
env         -- Manage environments
help        -- Help about any command
nexus       -- Start, list, and operate on Nexus Operations
operator    -- Manage Temporal deployments
schedule    -- Perform operations on Schedules
server      -- Run Temporal Server
task-queue  -- Manage Task Queues
worker      -- Read or update Worker state
workflow    -- Start, list, and operate on Workflows

$ temporal cl<TAB>
temporal cloud

$ temporal cloud <TAB>
account          -- Manage Temporal Cloud account
apikey           -- Manage Temporal Cloud API keys
async-operation  -- Manage async operations
connectivity     -- Manage Temporal Cloud connectivity rules
custom-role      -- [Experimental] Manage Temporal Cloud custom roles
help             -- Help about any command
login            -- Authenticate with Temporal Cloud
logout           -- Clear Temporal Cloud authentication credentials
namespace        -- Manage Temporal Cloud namespaces
nexus            -- Manage Temporal Cloud Nexus Operations
region           -- Manage Temporal Cloud regions
service-account  -- Manage Temporal Cloud service accounts
user             -- Manage Temporal Cloud users
user-group       -- Manage Temporal Cloud user groups
whoami           -- Display the current authenticated identity
```

```
$ temporal help --all
...
Available Commands:
  activity    Operate on Activity Executions
  batch       Manage running batch jobs
  cloud       An extension command located at /opt/homebrew/bin/temporal-cloud
  completion  Generate the autocompletion script for the specified shell
  config      Manage config files (EXPERIMENTAL)
  env         Manage environments
  help        Help about any command
  nexus       Start, list, and operate on Nexus Operations
  operator    Manage Temporal deployments
  schedule    Perform operations on Schedules
  server      Run Temporal Server
  task-queue  Manage Task Queues
  worker      Read or update Worker state
  workflow    Start, list, and operate on Workflows
...

temporal help cloud
The Temporal Cloud CLI provides commands for managing and operating Temporal Cloud resources,
including namespaces, users, and account settings.

Example:

temporal cloud namespace get --namespace my-namespace.my-account

Usage:
  temporal cloud [command]

Available Commands:
  account         Manage Temporal Cloud account
  apikey          Manage Temporal Cloud API keys
  async-operation Manage async operations
  connectivity    Manage Temporal Cloud connectivity rules
  custom-role     [Experimental] Manage Temporal Cloud custom roles
  help            Help about any command
  login           Authenticate with Temporal Cloud
  logout          Clear Temporal Cloud authentication credentials
  namespace       Manage Temporal Cloud namespaces
  nexus           Manage Temporal Cloud Nexus Operations
  region          Manage Temporal Cloud regions
  service-account Manage Temporal Cloud service accounts
  user            Manage Temporal Cloud users
  user-group      Manage Temporal Cloud user groups
  whoami          Display the current authenticated identity
```

**Error case**

```
temporal z<TAB>
```

(no completions shown)

Behavior remains unchanged when an unknown argument is passed to
`temporal help`:

```
$ temporal help zzz
The Temporal CLI manages, monitors, and debugs Temporal apps. It lets you run
a local Temporal Service, start Workflow Executions, pass messages to running
Workflows, inspect state, and more.
...
```

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
(cherry picked from commit ba78f94)
## Related issues

<!-- Closes #123 -->
Closes: https://temporalio.atlassian.net/browse/COM-241

## What changed?

<!-- Describe what this PR does at a high level. -->
Adds `--gcp-cloud-run-scale-down-stabilization-duration` to
`temporal worker deployment create-version` and
`temporal worker deployment update-version-compute-config`.

**UX difference:** the GCP Cloud Run scaler's scale-down stabilization
window was
previously hard-coded to 90s, so a worker pool running long or bursty
activities
could be scaled down out from under in-flight work. Users can now
configure it:

```
# before: not settable — always 90s
# after:
temporal worker deployment create-version ... \
    --gcp-cloud-run-scale-down-stabilization-duration 10m   # hold capacity 10m after demand
```

Details:
- The flag is a **duration** (`90s`, `5m`, `10m`), matching the CLI's
convention
for time-valued flags (`cliext.FlagDuration`, like
`--schedule-to-close-timeout`,
`--retention`). It joins the existing all-or-none GCP Cloud Run scaler
group, so
  `--gcp-cloud-run-min-instances`, `--gcp-cloud-run-max-instances`,
`--gcp-cloud-run-initial-instances`,
`--gcp-cloud-run-utilization-target`, and
`--gcp-cloud-run-scale-down-stabilization-duration` must all be set
together.
- Behavior: after the scaler last saw unmet task demand, it waits this
long before
it may scale the pool down. Defaults to `90s` when unset; `0s` disables
the wait.
- The CLI converts the duration to milliseconds and sends it under the
rate-based
scaler's existing `no_sync_quiet_ms` config key, which the server (WCI)
already
  validates and applies — **no server-side change is required**.
- `describe-version` surfaces the value as a duration string (JSON
`scaleDownStabilization`, e.g. `"5m 0s"`, formatted the same way as
schedule
  durations; the text summary shows the same).

## Checklist

<!-- Your PR should satisfy all these requirements. However, feel free
to remove items that don't apply to the PR. Consider giving this
checklist to an AI agent before opening your PR. -->

**Stability**
- [x] Breaking changes are marked with 💥 in the PR title and release
notes — *no breaking changes; the flag joins an as-yet-unreleased flag
group*
- [x] Changes to JSON output (`-o json` / `-o jsonl`) are treated as
breaking changes — *`describe-version` gains an additive
`scaleDownStabilizationMs` field; the GCP scaler JSON block is not in a
tagged release yet, so no released output changes*

**Design**
- [x] This feature does not depend on Cloud-only APIs or behavior (it
works against an OSS server)
- [x] New commands follow `temporal <noun> <verb>` structure — *no new
commands; flag added to existing commands*
- [x] New flags are named after the API concept, not the implementation
mechanism — *`scale-down-stabilization-duration` names the behavior (cf.
k8s HPA "stabilization window"), not the internal `no_sync_quiet_ms`
key*
- [x] New flags don't duplicate an existing flag that serves the same
purpose
- [x] New flags do not have short aliases without strong justification —
*no alias*
- [x] Experimental features are marked with `(Experimental)` in
`commands.yaml` — *both commands already carry a "This is an
experimental feature" note*

**Help text** (see style guide at the top of `commands.yaml`)
- [x] All flags shown in help text and examples are implemented and
functional — *the GCP examples include all five flags so they stay
copy-pasteable*
- [x] Summaries use sentence case and have no trailing period — *no new
command summaries*
- [x] Long descriptions end with a period and include at least one
example invocation
- [x] Examples use long flags (`--namespace`, not `-n`), one flag per
line
- [x] Placeholder values use `YourXxx` form (`YourWorkflowId`,
`YourNamespace`)

**Behavior**
- [x] Results go to stdout; errors and warnings go to stderr
- [x] Error messages are lowercase with no trailing punctuation

**Tests**
- [x] Added functional test(s) (`SharedServerSuite`) —
group/negative/sub-millisecond/wrong-provider cases in
`TestCreateWorkerDeploymentVersion_Errors`; carried in `...UpdateModes`
- [x] Added unit test(s) (`func TestXxx`) —
`TestGCPCloudRunScalerDetails`,
`TestFormatComputeConfigProto_ScalerBounds`

## Manual tests

<!-- Edit the code samples below to provide setup and happy-path and
error-path testing instructions. -->

**Setup**
```
temporal server start-dev --headless
```
> A full `--gcp-cloud-run-*` create also needs a real Cloud Run worker
pool +
> service account (the server validates the provider). The error-path
checks
> below run entirely against the dev server (they fail client-side,
before the
> RPC). The runtime effect was verified separately via an in-process WCI
> integration test.

**Happy path**
```
$ temporal worker deployment create-version \
    --deployment-name YourDeployment \
    --build-id YourBuildId \
    --gcp-cloud-run-project YourGcpProject \
    --gcp-cloud-run-region us-central1 \
    --gcp-cloud-run-worker-pool YourWorkerPool \
    --gcp-cloud-run-service-account YourServiceAccount@YourGcpProject.iam.gserviceaccount.com \
    --gcp-cloud-run-min-instances 0 \
    --gcp-cloud-run-max-instances 10 \
    --gcp-cloud-run-initial-instances 2 \
    --gcp-cloud-run-utilization-target 0.8 \
    --gcp-cloud-run-scale-down-stabilization-duration 5m
Successfully created worker deployment version

$ temporal worker deployment describe-version \
    --deployment-name YourDeployment \
    --build-id YourBuildId
# summary: gcp-cloud-run (min 0, initial 2, max 10, utilization 0.8, scale-down-stabilization 5m 0s)
# --output json includes "scaleDownStabilization": "5m 0s" on the scaler
```

**Error case**
```
# incomplete group (all five must be set together):
$ temporal worker deployment create-version \
    --deployment-name YourDeployment --build-id YourBuildId \
    --gcp-cloud-run-project YourGcpProject --gcp-cloud-run-region us-central1 \
    --gcp-cloud-run-worker-pool YourWorkerPool \
    --gcp-cloud-run-service-account YourServiceAccount@YourGcpProject.iam.gserviceaccount.com \
    --gcp-cloud-run-scale-down-stabilization-duration 5m
Error: --gcp-cloud-run-min-instances, --gcp-cloud-run-max-instances, --gcp-cloud-run-initial-instances, --gcp-cloud-run-utilization-target, and --gcp-cloud-run-scale-down-stabilization-duration must be set together
$ echo $?
1

# negative (incl. sub-millisecond, which must not silently truncate to 0):
$ temporal worker deployment create-version \
    --deployment-name YourDeployment --build-id YourBuildId \
    --gcp-cloud-run-project YourGcpProject --gcp-cloud-run-region us-central1 \
    --gcp-cloud-run-worker-pool YourWorkerPool \
    --gcp-cloud-run-service-account YourServiceAccount@YourGcpProject.iam.gserviceaccount.com \
    --gcp-cloud-run-min-instances 0 --gcp-cloud-run-max-instances 10 \
    --gcp-cloud-run-initial-instances 2 --gcp-cloud-run-utilization-target 0.8 \
    --gcp-cloud-run-scale-down-stabilization-duration=-1us
Error: --gcp-cloud-run-scale-down-stabilization-duration cannot be negative

# sub-millisecond precision is rejected rather than silently rounded:
$ temporal worker deployment create-version ... \
    --gcp-cloud-run-scale-down-stabilization-duration 500us
Error: --gcp-cloud-run-scale-down-stabilization-duration must be a whole number of milliseconds

# on a non-GCP provider:
$ temporal worker deployment create-version \
    --deployment-name YourDeployment --build-id YourBuildId \
    --aws-lambda-function-arn YourFunctionArn \
    --aws-lambda-skip-role-and-external-id \
    --gcp-cloud-run-scale-down-stabilization-duration 5m
Error: the Cloud Run scaling flags are only valid with --gcp-cloud-run-worker-pool
```

**Composition** <!-- How might a user combine this with existing
commands? e.g. using the output of one command as input to another -->
```
# Raise the stabilization window on an existing version (all five flags are
# re-supplied, since they are one all-or-none group), then confirm via describe.
$ temporal worker deployment update-version-compute-config \
    --deployment-name YourDeployment --build-id YourBuildId \
    --gcp-cloud-run-worker-pool YourWorkerPool \
    --gcp-cloud-run-min-instances 0 --gcp-cloud-run-max-instances 10 \
    --gcp-cloud-run-initial-instances 2 --gcp-cloud-run-utilization-target 0.8 \
    --gcp-cloud-run-scale-down-stabilization-duration 10m
Successfully updated worker deployment version compute config

$ temporal worker deployment describe-version \
    --deployment-name YourDeployment --build-id YourBuildId --output json
# scaler now shows "scaleDownStabilization": "10m 0s"
```

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit fb00858)
## Related issues

None directly, it came up while I was looking at adding structure to
some of the auth failures in the client

I couldn't find anywhere that the cliext tests were getting executed,
and attempting to build `cliext` by itself fails with

```
./client.go:137:11: profile.Authority undefined (type "go.temporal.io/sdk/contrib/envconfig".ClientConfigProfile has no field or method Authority)
./config.oauth.go:144:20: assignment mismatch: 1 variable but envconfig.DefaultConfigFilePath returns 2 values
```

## What changed

* Added cliext tests to CI workflow (causes the above failures to
surface in the CI workflow)
* Updated `cliext/go.mod` to use the same versions (as applicable) of
packages as are used in the main `go.mod` (fixes the failures)
* Added `test` as a Makefile target (convenience when making changes
across `cliext` and the main package)

(cherry picked from commit bbd111c)
Bumps the github-actions group with 3 updates:
[actions/checkout](https://github.com/actions/checkout),
[actions/setup-go](https://github.com/actions/setup-go) and
[actions/setup-python](https://github.com/actions/setup-python).

Updates `actions/checkout` from 7.0.0 to 7.0.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/releases">actions/checkout's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.1</h2>
<h2>What's Changed</h2>
<ul>
<li>skip running unsafe pr check if input is default by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2518">actions/checkout#2518</a></li>
<li>trim only ascii whitespace for branch by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2521">actions/checkout#2521</a></li>
<li>escape values passed to --unset by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2530">actions/checkout#2530</a></li>
<li>Various dependency updates</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v7...v7.0.1">https://github.com/actions/checkout/compare/v7...v7.0.1</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>v7.0.1</h2>
<ul>
<li>Skip running unsafe pr check if input is default by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2518">actions/checkout#2518</a></li>
<li>Trim only ascii whitespace for branch by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2521">actions/checkout#2521</a></li>
<li>Escape values passed to --unset by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2530">actions/checkout#2530</a></li>
<li>Various dependency updates</li>
</ul>
<h2>v7.0.0</h2>
<ul>
<li>Block checking out fork PR for pull_request_target and workflow_run
by <a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
<li>Various dependency updates</li>
</ul>
<h2>v6.0.3</h2>
<ul>
<li>Fix checkout init for SHA-256 repositories by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
<li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
</ul>
<h2>v6.0.2</h2>
<ul>
<li>Fix tag handling: preserve annotations and explicit fetch-tags by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2356">actions/checkout#2356</a></li>
</ul>
<h2>v6.0.1</h2>
<ul>
<li>Add worktree support for persist-credentials includeIf by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
</ul>
<h2>v6.0.0</h2>
<ul>
<li>Persist creds to a separate file by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>Update README to include Node.js 24 support details and requirements
by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
</ul>
<h2>v5.0.1</h2>
<ul>
<li>Port v6 cleanup to v5 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<h2>v5.0.0</h2>
<ul>
<li>Update actions checkout to use node 24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li>
</ul>
<h2>v4.3.1</h2>
<ul>
<li>Port v6 cleanup to v4 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li>
</ul>
<h2>v4.3.0</h2>
<ul>
<li>docs: update README.md by <a
href="https://github.com/motss"><code>@​motss</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li>
<li>Add internal repos for checking out multiple repositories by <a
href="https://github.com/mouismail"><code>@​mouismail</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li>
<li>Documentation update - add recommended permissions to Readme by <a
href="https://github.com/benwells"><code>@​benwells</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li>
<li>Adjust positioning of user email note and permissions heading by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2044">actions/checkout#2044</a></li>
<li>Update README.md by <a
href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2194">actions/checkout#2194</a></li>
<li>Update CODEOWNERS for actions by <a
href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2224">actions/checkout#2224</a></li>
<li>Update package dependencies by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2236">actions/checkout#2236</a></li>
</ul>
<h2>v4.2.2</h2>
<ul>
<li><code>url-helper.ts</code> now leverages well-known environment
variables by <a href="https://github.com/jww3"><code>@​jww3</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li>
<li>Expand unit test coverage for <code>isGhes</code> by <a
href="https://github.com/jww3"><code>@​jww3</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li>
</ul>
<h2>v4.2.1</h2>
<ul>
<li>Check out other refs/* by commit if provided, fall back to ref by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/checkout/commit/3d3c42e5aac5ba805825da76410c181273ba90b1"><code>3d3c42e</code></a>
prep v7.0.1 release (<a
href="https://redirect.github.com/actions/checkout/issues/2531">#2531</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/28802689a136bfcdb721715abd713740beecbe07"><code>2880268</code></a>
escape values passed to --unset (<a
href="https://redirect.github.com/actions/checkout/issues/2530">#2530</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/12cd2235efa0937479335606d7c3ac9f6c0973b1"><code>12cd223</code></a>
trim only ascii whitespace for branch (<a
href="https://redirect.github.com/actions/checkout/issues/2521">#2521</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/62661c4e71a304b2823ed026347b8d34c3eac541"><code>62661c4</code></a>
skip running unsafe pr check if input is default (<a
href="https://redirect.github.com/actions/checkout/issues/2518">#2518</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/e8d4307400f9427dba7cb98e488d6ab85f1cec5f"><code>e8d4307</code></a>
Bump the minor-actions-dependencies group with 2 updates (<a
href="https://redirect.github.com/actions/checkout/issues/2499">#2499</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/631c942040754b6e095e929c1677c07e10ed4f87"><code>631c942</code></a>
eslint 9 (<a
href="https://redirect.github.com/actions/checkout/issues/2474">#2474</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/4f1f4aec02e41874fa0262ea8ff5172d7978ad1e"><code>4f1f4ae</code></a>
Bump actions/upload-artifact from 4 to 7 (<a
href="https://redirect.github.com/actions/checkout/issues/2476">#2476</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/ba097532fb203f7e88c9c3c0b899b49469908a92"><code>ba09753</code></a>
Bump actions/checkout from 6 to 7 (<a
href="https://redirect.github.com/actions/checkout/issues/2488">#2488</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/b9e0990d219a03df7633c93f6f005a8fecbcab22"><code>b9e0990</code></a>
Bump docker/login-action from 3.3.0 to 4.2.0 (<a
href="https://redirect.github.com/actions/checkout/issues/2479">#2479</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/e8cb398be4a550817e382abf69e4c12c76fce1f2"><code>e8cb398</code></a>
Bump docker/build-push-action from 6.5.0 to 7.2.0 (<a
href="https://redirect.github.com/actions/checkout/issues/2478">#2478</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/checkout/compare/9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0...3d3c42e5aac5ba805825da76410c181273ba90b1">compare
view</a></li>
</ul>
</details>
<br />

Updates `actions/setup-go` from 6.5.0 to 7.0.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-go/releases">actions/setup-go's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Migrate to ESM and upgrade dependencies by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-go/pull/763">actions/setup-go#763</a></li>
<li>chore(deps): bump <code>@​actions/cache</code> to 6.2.0 by <a
href="https://github.com/philip-gai"><code>@​philip-gai</code></a> in <a
href="https://redirect.github.com/actions/setup-go/pull/771">actions/setup-go#771</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/philip-gai"><code>@​philip-gai</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-go/pull/771">actions/setup-go#771</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-go/compare/v6...v7.0.0">https://github.com/actions/setup-go/compare/v6...v7.0.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-go/commit/b7ad1dad31e06c5925ef5d2fc7ad053ef454303e"><code>b7ad1da</code></a>
chore(deps): bump <code>@​actions/cache</code> to 6.2.0 (<a
href="https://redirect.github.com/actions/setup-go/issues/771">#771</a>)</li>
<li><a
href="https://github.com/actions/setup-go/commit/0778a10ce47b5d450cf60fb94fafad4330008a35"><code>0778a10</code></a>
Migrate to ESM and upgrade dependencies (<a
href="https://redirect.github.com/actions/setup-go/issues/763">#763</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-go/compare/924ae3a1cded613372ab5595356fb5720e22ba16...b7ad1dad31e06c5925ef5d2fc7ad053ef454303e">compare
view</a></li>
</ul>
</details>
<br />

Updates `actions/setup-python` from 6.3.0 to 7.0.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-python/releases">actions/setup-python's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements</h3>
<ul>
<li>Migrate to ESM and upgrade dependencies by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1330">actions/setup-python#1330</a></li>
<li>Pin SHA commits and update docs with latest versions by <a
href="https://github.com/HarithaVattikuti"><code>@​HarithaVattikuti</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1338">actions/setup-python#1338</a></li>
<li>Remove the pip-install input by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a> in
<a
href="https://redirect.github.com/actions/setup-python/pull/1336">actions/setup-python#1336</a></li>
</ul>
<h3>Bug Fix</h3>
<ul>
<li>Fix to Classify stderr warning messages as warnings instead of
errors in annotations by <a
href="https://github.com/lmvysakh"><code>@​lmvysakh</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1335">actions/setup-python#1335</a></li>
<li>Validate and retry manifest fetch to prevent silent failures by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1332">actions/setup-python#1332</a></li>
</ul>
<h3>Dependency Upgrade</h3>
<ul>
<li>Bump certifi from 2020.6.20 to 2024.7.4 in
/<strong>tests</strong>/data by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1328">actions/setup-python#1328</a></li>
<li>Remove EOL Python versions and Bumps numpy text fixture by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1333">actions/setup-python#1333</a></li>
<li>Upgrade <code>@​actions/cache</code> to 6.2.0 by <a
href="https://github.com/philip-gai"><code>@​philip-gai</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1337">actions/setup-python#1337</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/lmvysakh"><code>@​lmvysakh</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/1335">actions/setup-python#1335</a></li>
<li><a
href="https://github.com/philip-gai"><code>@​philip-gai</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/1337">actions/setup-python#1337</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-python/compare/v6...v7.0.0">https://github.com/actions/setup-python/compare/v6...v7.0.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-python/commit/5fda3b95a4ea91299a34e894583c3862153e4b97"><code>5fda3b9</code></a>
Pin SHA commits and update docs with latest versions (<a
href="https://redirect.github.com/actions/setup-python/issues/1338">#1338</a>)</li>
<li><a
href="https://github.com/actions/setup-python/commit/4ab7e95f05e168b4356aebde89dd84f59c283d8e"><code>4ab7e95</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/setup-python/issues/1337">#1337</a>
from actions/philip-gai/bump-actions-cache-6-2-0</li>
<li><a
href="https://github.com/actions/setup-python/commit/0f3a009f475dbea83c0371cd85d099690fee8c5c"><code>0f3a009</code></a>
Remove the pip-install input (<a
href="https://redirect.github.com/actions/setup-python/issues/1336">#1336</a>)</li>
<li><a
href="https://github.com/actions/setup-python/commit/f8cf4291c8b8e273ddd26e569454615c7315d932"><code>f8cf429</code></a>
Migrate to ESM and upgrade dependencies (<a
href="https://redirect.github.com/actions/setup-python/issues/1330">#1330</a>)</li>
<li><a
href="https://github.com/actions/setup-python/commit/54baeea5b34417d10a7479663a23cca53ea209b5"><code>54baeea</code></a>
Validate and retry manifest fetch to prevent silent failures (<a
href="https://redirect.github.com/actions/setup-python/issues/1332">#1332</a>)</li>
<li><a
href="https://github.com/actions/setup-python/commit/c7092773a316760f4ecfe498e4af668a4dafeac5"><code>c709277</code></a>
Annotation code fix (<a
href="https://redirect.github.com/actions/setup-python/issues/1335">#1335</a>)</li>
<li><a
href="https://github.com/actions/setup-python/commit/6849080452e69b330395e8a6d23cf90f56d76a1a"><code>6849080</code></a>
remove EOL Python versions and Bumps numpy text fixture (<a
href="https://redirect.github.com/actions/setup-python/issues/1333">#1333</a>)</li>
<li><a
href="https://github.com/actions/setup-python/commit/0903b469fbf4441aadfe4f4b249dc5b1fba3a73e"><code>0903b46</code></a>
Bump certifi from 2020.6.20 to 2024.7.4 in /<strong>tests</strong>/data
(<a
href="https://redirect.github.com/actions/setup-python/issues/1328">#1328</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-python/compare/ece7cb06caefa5fff74198d8649806c4678c61a1...5fda3b95a4ea91299a34e894583c3862153e4b97">compare
view</a></li>
</ul>
</details>
<br />

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
(cherry picked from commit 9fcadd6)
…ub-actions group (#1162)

Bumps the github-actions group with 1 update:
[docker/login-action](https://github.com/docker/login-action).

Updates `docker/login-action` from 4.4.0 to 4.5.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/docker/login-action/releases">docker/login-action's
releases</a>.</em></p>
<blockquote>
<h2>v4.5.2</h2>
<ul>
<li>Surface Docker Hub OIDC error responses by <a
href="https://github.com/crazy-max"><code>@​crazy-max</code></a> in <a
href="https://redirect.github.com/docker/login-action/pull/1058">docker/login-action#1058</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/docker/login-action/compare/v4.5.1...v4.5.2">https://github.com/docker/login-action/compare/v4.5.1...v4.5.2</a></p>
<h2>v4.5.1</h2>
<ul>
<li>Support <code>dhi.io</code> as Docker Hub OIDC registry by <a
href="https://github.com/crazy-max"><code>@​crazy-max</code></a> in <a
href="https://redirect.github.com/docker/login-action/pull/1054">docker/login-action#1054</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/docker/login-action/compare/v4.5.0...v4.5.1">https://github.com/docker/login-action/compare/v4.5.0...v4.5.1</a></p>
<h2>v4.5.0</h2>
<ul>
<li><a href="https://github.com/docker/login-action#docker-hub">Docker
Hub OIDC</a> login support by <a
href="https://github.com/crazy-max"><code>@​crazy-max</code></a> in <a
href="https://redirect.github.com/docker/login-action/pull/1048">docker/login-action#1048</a></li>
<li>Bump <code>@​aws-sdk/client-ecr</code> and
<code>@​aws-sdk/client-ecr-public</code> to 3.1091.0 in <a
href="https://redirect.github.com/docker/login-action/pull/1037">docker/login-action#1037</a></li>
<li>Bump <code>@​docker/actions-toolkit</code> from 0.92.0 to 0.94.0 in
<a
href="https://redirect.github.com/docker/login-action/pull/1044">docker/login-action#1044</a>
<a
href="https://redirect.github.com/docker/login-action/pull/1050">docker/login-action#1050</a></li>
<li>Bump brace-expansion from 1.1.13 to 1.1.16 in <a
href="https://redirect.github.com/docker/login-action/pull/1046">docker/login-action#1046</a></li>
<li>Bump js-yaml from 5.2.0 to 5.2.1 in <a
href="https://redirect.github.com/docker/login-action/pull/1038">docker/login-action#1038</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/docker/login-action/compare/v4.4.0...v4.5.0">https://github.com/docker/login-action/compare/v4.4.0...v4.5.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/docker/login-action/commit/371161bbe7024a29a25c5e19bfcbc0804fe9ad2c"><code>371161b</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1058">#1058</a>
from crazy-max/fix-dockerhub-oidc-error-handling</li>
<li><a
href="https://github.com/docker/login-action/commit/5dc73df38ebcfa6f96479901e253d172c3e35849"><code>5dc73df</code></a>
chore: update generated content</li>
<li><a
href="https://github.com/docker/login-action/commit/2aa1edee0b06c23880529064a4f7d7d3d2f9bc87"><code>2aa1ede</code></a>
surface Docker Hub OIDC error responses</li>
<li><a
href="https://github.com/docker/login-action/commit/abd2ef45e78c5afb21d64d4ca52ee8550d9572c7"><code>abd2ef4</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1055">#1055</a>
from crazy-max/test-registry-auth-oidc</li>
<li><a
href="https://github.com/docker/login-action/commit/d49d3a9839fef51322fa44989a44fdc43fccfc22"><code>d49d3a9</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1054">#1054</a>
from crazy-max/oidc-missing-dhi</li>
<li><a
href="https://github.com/docker/login-action/commit/b58b17c30b4db92a4ed049b213cae512b12e460b"><code>b58b17c</code></a>
test: cover Docker Hub OIDC with registry-auth</li>
<li><a
href="https://github.com/docker/login-action/commit/be646c21cec26cea303e29290d5f6ba6fde8e606"><code>be646c2</code></a>
chore: update generated content</li>
<li><a
href="https://github.com/docker/login-action/commit/d77c059cb9956cedaa427dc022d89f39acba678f"><code>d77c059</code></a>
support dhi.io as Docker Hub OIDC registry</li>
<li><a
href="https://github.com/docker/login-action/commit/06fb636fac595d6fb4b28a5dfcb21a6f5091859c"><code>06fb636</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1037">#1037</a>
from docker/dependabot/npm_and_yarn/aws-sdk-dependen...</li>
<li><a
href="https://github.com/docker/login-action/commit/a8bc9539118a762b0e5788b53a50907977cc1b8d"><code>a8bc953</code></a>
[dependabot skip] chore: update generated content</li>
<li>Additional commits viewable in <a
href="https://github.com/docker/login-action/compare/af1e73f918a031802d376d3c8bbc3fe56130a9b0...371161bbe7024a29a25c5e19bfcbc0804fe9ad2c">compare
view</a></li>
</ul>
</details>
<br />

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=docker/login-action&package-manager=github_actions&previous-version=4.4.0&new-version=4.5.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
(cherry picked from commit cf93128)
…ub-actions group (#1166)

Bumps the github-actions group with 1 update:
[docker/login-action](https://github.com/docker/login-action).

Updates `docker/login-action` from 4.5.2 to 4.6.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/docker/login-action/releases">docker/login-action's
releases</a>.</em></p>
<blockquote>
<h2>v4.6.0</h2>
<ul>
<li>Harden buildx scoped config path handling by <a
href="https://github.com/crazy-max"><code>@​crazy-max</code></a> in <a
href="https://redirect.github.com/docker/login-action/pull/1059">docker/login-action#1059</a></li>
<li>Bump <code>@​aws-sdk/client-ecr</code> and
<code>@​aws-sdk/client-ecr-public</code> to 3.1095.0 in <a
href="https://redirect.github.com/docker/login-action/pull/1051">docker/login-action#1051</a></li>
<li>Bump js-yaml from 5.2.1 to 5.2.2 in <a
href="https://redirect.github.com/docker/login-action/pull/1057">docker/login-action#1057</a></li>
<li>Bump postcss from 8.5.10 to 8.5.22 in <a
href="https://redirect.github.com/docker/login-action/pull/1056">docker/login-action#1056</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/docker/login-action/compare/v4.5.2...v4.6.0">https://github.com/docker/login-action/compare/v4.5.2...v4.6.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/docker/login-action/commit/dbcb813823bdd20940b903addbd779551569679f"><code>dbcb813</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1051">#1051</a>
from docker/dependabot/npm_and_yarn/aws-sdk-dependen...</li>
<li><a
href="https://github.com/docker/login-action/commit/5bcb015ee6ec720ecdeaef2dc1164122e9b209fc"><code>5bcb015</code></a>
[dependabot skip] chore: update generated content</li>
<li><a
href="https://github.com/docker/login-action/commit/b30b2f2d3196c1714318ba0c3c3bec211d949752"><code>b30b2f2</code></a>
build(deps): bump the aws-sdk-dependencies group across 1 directory with
2 up...</li>
<li><a
href="https://github.com/docker/login-action/commit/9087f1e6d666fe0292409e3c819680c18526e108"><code>9087f1e</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1057">#1057</a>
from docker/dependabot/npm_and_yarn/js-yaml-5.2.2</li>
<li><a
href="https://github.com/docker/login-action/commit/0009830ea169ca16c24c0ea4cac1c325bfa3aee4"><code>0009830</code></a>
[dependabot skip] chore: update generated content</li>
<li><a
href="https://github.com/docker/login-action/commit/23255232d3e43c8f0052d9a0dba82a515a88ce92"><code>2325523</code></a>
build(deps): bump js-yaml from 5.2.1 to 5.2.2</li>
<li><a
href="https://github.com/docker/login-action/commit/4ec1d4a769e8b05a89a7396551dc38b329211688"><code>4ec1d4a</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1056">#1056</a>
from docker/dependabot/npm_and_yarn/postcss-8.5.22</li>
<li><a
href="https://github.com/docker/login-action/commit/5fc99ba47bca274c5a499688f71c7ea79c0ea1b3"><code>5fc99ba</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1053">#1053</a>
from docker/dependabot/github_actions/aws-actions/co...</li>
<li><a
href="https://github.com/docker/login-action/commit/e512bd59d16c53d79ea5c0f0e345fe554453c4bb"><code>e512bd5</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1052">#1052</a>
from docker/dependabot/github_actions/codeql-actions...</li>
<li><a
href="https://github.com/docker/login-action/commit/a146c91b8f371700d323bae808af7cbdc2766ed5"><code>a146c91</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1059">#1059</a>
from crazy-max/harden-buildx-scope-paths</li>
<li>Additional commits viewable in <a
href="https://github.com/docker/login-action/compare/371161bbe7024a29a25c5e19bfcbc0804fe9ad2c...dbcb813823bdd20940b903addbd779551569679f">compare
view</a></li>
</ul>
</details>
<br />

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=docker/login-action&package-manager=github_actions&previous-version=4.5.2&new-version=4.6.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
(cherry picked from commit 71115ab)
Context:
https://github.com/temporalio/api/blob/main/temporal/api/workflowservice/v1/request_response.proto#L2355-L2429

`temporal activity reset --reset-attempts` was exposed despite the reset
API having no corresponding request field. Reset always starts the
Activity from attempt one.

Removed the no-op flag from `activity reset`, stopped populating the
unused batch field, clarified reset help text, and regenerated command
bindings.

- `go test ./internal/temporalcli -run
'TestSharedServerSuite/TestActivity' -count=1`
- `gofmt`
- `git diff --check`

- [x] This change works against an OSS server.
- [x] All remaining documented flags are functional.
- [x] No JSON output changes.

(cherry picked from commit 7d311e4)
- Adds `temporal options` command (kubectl-style) that displays global
and connection flags in a table with env var and config key columns
- Hides global flags from root `--help` and connection flags from
subcommand `--help`, replacing them with a hint to `temporal options`
- Adds `hide-from-help`, `config-key`, and `Description()` support to
the option set YAML spec and code generator
- Shortens flag descriptions to remove info now shown in dedicated table
columns

```
$ temporal --help
...
Flags:
      --client-connect-timeout duration   ...
      --color string                      ...
      --command-timeout duration          ...
      ... (15 more global flags)
```

```
$ temporal --help
...
Use "temporal options" for global and connection options.
```

```
$ temporal options
Global options
...
  FLAG                                ENV                    DESCRIPTION
  --env string                        TEMPORAL_ENV           Active environment name ...
  ...

Connection options
...
  FLAG                              ENV                       CONFIG KEY        DESCRIPTION
  --address string                  TEMPORAL_ADDRESS          address           Temporal Service gRPC endpoint ...
  --api-key string                  TEMPORAL_API_KEY          api_key           API key for request
  ...
```

- [x] `go build ./cmd/temporal`
- [x] `go test ./internal/temporalcli/ -run TestHelp`
- [ ] Verify `temporal --help` no longer shows global flags
- [ ] Verify `temporal workflow --help` no longer shows connection flags
- [ ] Verify `temporal workflow list --help` shows only command-specific
flags
- [ ] Verify `temporal options` displays both tables with correct
env/config columns
- [ ] Verify all flags still work when passed on the command line

---------

Co-authored-by: Ross Nelson <axcess1@me.com>
(cherry picked from commit 9112b4e)
- api v1.62.9 (ceiling for server v1.31.2: v1.62.10 adds
  CountNexusOperationExecutions to WorkflowServiceClient)
- sdk v1.41.1, envconfig v1.0.0, ui-server v2.50.1
- safe non-Temporal bumps: go-isatty, x/tools, grpc, echo, testify
- #1156 backport keeps --reset-heartbeats (its removal belongs to #1159)
- cliext pinned to tagged sdk (main uses a pseudo-version)
v1.8.2 sends "task_queue_name", which ParseFieldMask normalizes to
"taskQueueName" and never matches the server's "taskQueue.name" key,
so 'activity update-options --task-queue' silently no-ops.

Cherry-picked as a one-liner from #1092 (whose full SAA change requires
api v1.63.x). Verified against embedded server v1.31.2.
@ks-temporal
ks-temporal marked this pull request as ready for review August 31, 2026 21:43
@ks-temporal
ks-temporal requested a review from a team as a code owner August 31, 2026 21:43
@ks-temporal
ks-temporal requested a review from chaptersix August 31, 2026 21:43

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 917dee1099

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

[heartbeat details](#reset-heartbeats).
This restarts the activity as if it were first being scheduled: the
attempt count returns to one, its per-attempt timeouts are re-armed, and
its [heartbeat details](#reset-heartbeats) are cleared.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Document heartbeat clearing as conditional

When temporal activity reset is run without --reset-heartbeats, the request sets ResetHeartbeat from the false flag value, so existing heartbeat details are retained. This sentence now says they are always cleared, contradicting both the implementation and the later help text that makes clearing conditional on the flag; users relying on the new description may unintentionally preserve stale heartbeat data.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest keeping "optionally" there, e.g., "and its" => "and, optionally, its"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

up to you on this one, I don't have a strong opinion.

awsLambdaFunctionARN string,
awsLambdaAssumeRoleARN string,
awsLambdaAssumeRoleExternalID string,
awsLambdaSkipRoleAndExternalID bool,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Treat the skip toggle as an AWS flag

When --aws-lambda-skip-role-and-external-id is combined with GCP flags or with --remove, this new boolean is omitted from both computeProviderConfig's awsSet calculation and the update command's removal-conflict guard. Consequently these explicitly contradictory combinations succeed and silently ignore the AWS option, unlike every other --aws-lambda-* flag; include the true toggle in both presence checks.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should forward this comment to Compute team.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might now be an issue but probably worth asking

Comment thread cliext/option-sets.yaml
Comment on lines +44 to 45
description: Log level.
default: never

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the start-dev log-level exception

For temporal server start-dev, commands.server.go overrides an unchanged log level to warn, while the new temporal options table derives and displays (default never) from this declaration. The removed description was the only documentation of that exception, and global flags are now hidden from normal help, so users inspecting the new canonical options output receive an incorrect default for the dev server.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description was changed to remove Default is "never" for most commands and "warn" for "server start-dev" in one of the included PRs. Is this correct (for Alex)?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I need to fix that.

@chaptersix

Copy link
Copy Markdown
Contributor

#1156 was adjusted rather than taken verbatim. Upstream, activity reset
had already lost --reset-heartbeats to an earlier SAA commit, so taking
main's version would have removed both flags at once. Only --reset-attempts
is a no-op, the surviving help text still documents --reset-heartbeats, and
its removal belongs to #1159 (excluded). This backport therefore removes only
--reset-attempts and keeps the batch path on c.ResetHeartbeats rather than
hardcoding true. Worth a careful look.

does this make sense to you? I don't have much context?

@chaptersix

Copy link
Copy Markdown
Contributor

#1186

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants