Skip to content

Commit 0d3b287

Browse files
authored
Merge branch 'main' into python-nexus-ga
2 parents 5bc1b25 + 5c203e2 commit 0d3b287

212 files changed

Lines changed: 7179 additions & 3776 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ test-results
1212
.docusaurus
1313
.cache-loader
1414
temp/
15+
.claude/*
1516

1617
# Misc
1718
.DS_Store
@@ -23,6 +24,8 @@ temp/
2324
.vs
2425
AGENTS.md
2526
CLAUDE.md
27+
.claude/*
28+
.omc
2629

2730
npm-debug.log*
2831
yarn-debug.log*

docs/best-practices/cloud-access-control.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ This approach ensures near-zero-downtime rotation and prevents authentication fa
3737

3838
For mutual TLS (mTLS) implementations, using Let's Encrypt is not recommended, as it is designed primarily for public-facing services and lacks support for internal certificate requirements.
3939

40-
While we are not making a specific product recommendation, there are several valid options for managing certificates. Many organizations choose vendor solutions such as AWS Private CA, Setigo, Microsoft Certification Authority, or DigiCert for their robust integration and lifecycle features. Alternatively, self-signed certificates are a valid and commonly used approach, even in production environments. If you choose to self-sign, tools like [OpenSSL](https://openssl-library.org/), [CFSSL](https://github.com/cloudflare/cfssl), or [step CLI](https://github.com/smallstep/cli) can help generate and manage certificates effectively.
40+
While we are not making a specific product recommendation, there are several valid options for managing certificates. Many organizations choose vendor solutions such as AWS Private CA, Sectigo, Microsoft Certification Authority, or DigiCert for their robust integration and lifecycle features. Alternatively, self-signed certificates are a valid and commonly used approach, even in production environments. If you choose to self-sign, tools like [OpenSSL](https://openssl-library.org/), [CFSSL](https://github.com/cloudflare/cfssl), or [step CLI](https://github.com/smallstep/cli) can help generate and manage certificates effectively.
4141

4242
Select the option that aligns best with your infrastructure, security requirements, and operational needs.
4343

@@ -56,6 +56,6 @@ One convention is to give certificates a common name that matches the namespace.
5656

5757
#### 2. Use Certificate Filters to restrict access when using shared CAs (e.g., `dev` vs `prod`):
5858

59-
Certificate Filters are an additional way of validating using the client certificate presented during client authenticationGive certificates a common name that matches the namespace. This is not a requirement.
59+
Certificate Filters are an additional way of validating using the client certificate presented during client authentication. Give certificates a common name that matches the namespace. This is not a requirement.
6060

6161
If you do this when using the same CA for dev and prod environments, then you can leverage Certificate Filters to prevent access to production.

docs/best-practices/knowledge-hub.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ To bootstrap your knowledge hub, use the
2727
## What belongs in your knowledge hub
2828

2929
Although Temporal itself has [thorough documentation](https://docs.temporal.io/), not all of it applies to your organization or your teams' use cases.
30-
The knolwedge hub distills the documentation into just the specific information your teams need.
30+
The knowledge hub distills the documentation into just the specific information your teams need.
3131
One way to organize the content is according to where developers are in their journey.
3232
The following sample outline shows what sections to include.
3333

@@ -82,7 +82,7 @@ Include the following items in this section:
8282

8383
## Measuring success of your knowledge hub
8484

85-
After you've created your knolwedge hub, establish metrics to measure its effectiveness for your organization.
85+
After you've created your knowledge hub, establish metrics to measure its effectiveness for your organization.
8686
The following table shows example indicators that organizations use to measure the impact of their knowledge hub,
8787
along with realistic before-and-after targets:
8888

docs/best-practices/managing-namespace.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ Use a custom [Authorizer](/self-hosted-guide/security#authorizer-plugin) on your
106106

107107
If an Authorizer is not set, Temporal uses the `nopAuthority` authorizer that unconditionally allows all API calls.
108108

109-
On Temporal Cloud, [role-based access controls](/cloud/users#namespace-level-permissions) provide namespace-level authorization without custom configuration.
109+
On Temporal Cloud, [role-based access controls](/cloud/manage-access/roles-and-permissions#namespace-level-permissions) provide namespace-level authorization without custom configuration.
110110

111111
### Enable deletion protection (Temporal Cloud only) {#deletion-protection}
112112

docs/best-practices/worker.mdx

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ production-ready Worker image:
5959

6060
{/* SNIPSTART oms-dockerfile-worker */}
6161
[Dockerfile](https://github.com/temporalio/reference-app-orders-go/blob/main/Dockerfile)
62-
6362
```Dockerfile
6463
FROM golang:1.24.1 AS oms-builder
6564

@@ -79,7 +78,6 @@ RUN --mount=type=cache,target=/go/pkg/mod \
7978

8079
FROM busybox AS oms-worker
8180
```
82-
8381
{/* SNIPEND oms-dockerfile-worker */}
8482

8583
This Dockerfile uses a multi-stage build pattern with two stages:
@@ -102,27 +100,25 @@ uses environment variables to configure the Worker:
102100

103101
{/* SNIPSTART oms-billing-worker-deployment {"selectedLines": ["20-35"]} */}
104102
[deployments/k8s/billing-worker-deployment.yaml](https://github.com/temporalio/reference-app-orders-go/blob/main/deployments/k8s/billing-worker-deployment.yaml)
105-
106103
```yaml
107104
# ...
108-
spec:
109-
containers:
110-
- args:
111-
- -k
112-
- supersecretkey
113-
- -s
114-
- billing
115-
env:
116-
- name: FRAUD_API_URL
117-
value: http://billing-api:8084
118-
- name: TEMPORAL_ADDRESS
119-
value: temporal-frontend.temporal:7233
120-
image: ghcr.io/temporalio/reference-app-orders-go-worker:latest
121-
name: billing-worker
122-
imagePullPolicy: Always
123-
enableServiceLinks: false
105+
spec:
106+
containers:
107+
- args:
108+
- -k
109+
- supersecretkey
110+
- -s
111+
- billing
112+
env:
113+
- name: FRAUD_API_URL
114+
value: http://billing-api:8084
115+
- name: TEMPORAL_ADDRESS
116+
value: temporal-frontend.temporal:7233
117+
image: ghcr.io/temporalio/reference-app-orders-go-worker:latest
118+
name: billing-worker
119+
imagePullPolicy: Always
120+
enableServiceLinks: false
124121
```
125-
126122
{/* SNIPEND */}
127123
128124
### Separate Task Queues logically
@@ -150,7 +146,6 @@ Worker reference to avoid this issue.
150146

151147
{/* SNIPSTART oms-billing-worker-go {"selectedLines": ["12-23"]} */}
152148
[app/billing/worker.go](https://github.com/temporalio/reference-app-orders-go/blob/main/app/billing/worker.go)
153-
154149
```go
155150
// ...
156151
// RunWorker runs a Workflow and Activity worker for the Billing system.
@@ -166,7 +161,6 @@ func RunWorker(ctx context.Context, config config.AppConfig, client client.Clien
166161
return w.Run(temporalutil.WorkerInterruptFromContext(ctx))
167162
}
168163
```
169-
170164
{/* SNIPEND */}
171165

172166
### Use Worker Versioning to safely deploy new Workflow code

docs/cli/activity.mdx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ This file is generated from https://github.com/temporalio/cli/blob/main/internal
2727

2828
This page provides a reference for the `temporal` CLI `activity` command. The flags applicable to each subcommand are presented in a table within the heading for the subcommand. Refer to [Global Flags](#global-flags) for flags that you can use with every subcommand.
2929

30+
To use the CLI with Standalone Activities, see the CLI commands in the [Go](/docs/develop/go/standalone-activities.mdx), [Python](/docs/develop/python/standalone-activities.mdx), and [.NET](/docs/develop/dotnet/standalone-activities.mdx) Standalone Activity guides.
31+
3032
## complete
3133

3234
Complete an Activity, marking it as successfully finished. Specify the
@@ -114,7 +116,7 @@ activity timeout, as well as, optionally, the
114116

115117
If the activity may be executing (i.e. it has not yet timed out), the
116118
reset will take effect the next time it fails, heartbeats, or times out.
117-
If is waiting for a retry (i.e. has failed or timed out), the reset
119+
If it is waiting for a retry (i.e. has failed or timed out), the reset
118120
will apply immediately.
119121

120122
If the activity is already paused, it will be unpaused by default.
@@ -136,7 +138,7 @@ reset, handle this error and then re-throw it when you've cleaned up.
136138

137139
If the `reset_heartbeats` flag is set, the heartbeat details will also be cleared.
138140

139-
Specify the Activity Type of ID and Workflow IDs:
141+
Specify the Activity Type or ID and Workflow IDs:
140142

141143
```
142144
temporal activity reset \

docs/cli/cmd-options.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ If set, the Activity will start at a random time within the specified jitter dur
132132

133133
## activity-type
134134

135-
Command is applied to the all running activities with of this type.
135+
Command is applied to all running activities of this type.
136136

137137
## address
138138

docs/cli/setup-cli.mdx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ Install with Homebrew (if available):
5555
brew install temporal
5656
```
5757

58+
Or install with Snap:
59+
60+
```bash
61+
snap install temporal
62+
```
63+
5864
Or download from the CDN:
5965

6066
- [Linux amd64](https://temporal.download/cli/archive/latest?platform=linux&arch=amd64)

docs/cli/workflow.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ Use the following options to change the behavior of this command. You can also u
105105

106106
## delete
107107

108-
Delete a Workflow Executions and its Event History:
108+
Delete a Workflow Execution and its Event History:
109109

110110
```
111111
temporal workflow delete \

docs/cloud/billing-api.mdx

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
---
2+
id: billing-api
3+
title: Cloud Billing API
4+
sidebar_label: Cloud Billing API
5+
description: The Temporal Cloud Billing API provides namespace-level cost attribution through on-demand billing reports.
6+
slug: /cloud/billing-api
7+
toc_max_heading_level: 4
8+
keywords:
9+
- explanation
10+
tags:
11+
- API
12+
- Billing
13+
- Temporal Cloud
14+
---
15+
16+
The Temporal Cloud Billing API provides Namespace-level cost attribution through on-demand billing reports.
17+
Reports are delivered in CSV format and can be accessed via API or downloaded directly for use in FinOps tooling and cost management platforms.
18+
19+
This API is part of the [Cloud Operations API](/ops).
20+
21+
:::tip Support, stability, and dependency info
22+
23+
The Temporal Cloud Billing API is in [Pre-release](/evaluate/development-production-features/release-stages#pre-release).
24+
25+
:::
26+
27+
The Billing API allows you to:
28+
29+
- Generate billing reports for specified invoice months
30+
- Retrieve report status and metadata
31+
- Download CSV reports that can be fed into internal analytics tooling or cloud cost management platforms
32+
33+
The Billing Report contains:
34+
35+
- Accurate Namespace-level cost attribution
36+
- Hourly granularity
37+
- A [FOCUS](https://focus.finops.org/)-friendly data format
38+
39+
For complete request and response schemas, refer to the Schema below.
40+
41+
Billing report generation is **asynchronous**. You initiate report creation, then poll for completion.
42+
43+
## Report data limitations
44+
45+
For pre-release, reports can be generated with hourly granularity only, for the current billing month, and the previous billing month.
46+
47+
## Allowed date ranges
48+
49+
Date ranges must use billing-month boundaries (MM/YYYY).
50+
Requests may include the current billing month.
51+
The data in finalized reports includes usage up to `current_time` \- 24 hours (rounded up to nearest hour).
52+
53+
## Rate limits and concurrency
54+
55+
Rate limits apply to API usage.
56+
57+
### Per-account concurrency
58+
59+
Within a single account:
60+
61+
- Only one billing report per account is generated at a time
62+
- Additional requests are accepted but queued
63+
64+
### Report Generation Latency
65+
66+
Report generation time varies and is not guaranteed. Factors that affect it include the size of the requested date range and overall platform load.
67+
68+
## Best practices
69+
70+
Provide an idempotency key (`async_operation_id`) when retrying requests.
71+
72+
Poll `GetBillingReport` using exponential backoff.
73+
74+
Download reports immediately after generation (URLs expire).
75+
76+
Avoid frequent generation of large overlapping ranges in the current billing period.
77+
78+
## Billing report schema
79+
80+
Billing reports are delivered in CSV format.
81+
82+
Each row represents a charge record.
83+
84+
| Column Name | Description | Example |
85+
| ----- | ----- | ----- |
86+
| BillingAccountID | Temporal Cloud account ID | a2dd6 |
87+
| BillingAccountName | Temporal Cloud account name | temporal |
88+
| BillingCurrency | The currency an account is billed in | USD (cents) |
89+
| BillingPeriodEnd | The exclusive end bound of a billing period | 2024-02-01T00:00:00Z |
90+
| BillingPeriodStart | The inclusive start bound of a billing period | 2024-01-01T00:00:00Z |
91+
| ChargeCategory | The highest level classification of a charge based on how it is billed | Usage |
92+
| ChargeDescription | A self contained summary of the charge’s purpose | Actions \- Tier 1 |
93+
| ChargeFrequency | Indicates how often a charge will occur | Usage-Based |
94+
| ChargePeriodEnd | Time period end from when this charge took place, correlates to data granularity | 2025-10-01T01:00:00.000Z |
95+
| ChargePeriodStart | Time period start from when this charge took place, correlates to data granularity | 2025-10-01T00:00:00.000Z |
96+
| ContractedCost | Cost calculated by multiplying ContractedUnitPrice and PricingQuantity | 100.00 |
97+
| ContractedUnitPrice | The agreed-upon unit price for a single pricing unit of the associated SKU. Inclusive of negotiated discounts | 10.00 |
98+
| InvoiceID | The ID of the invoice for this billing period | in\_XXXXXXXXXXXXXXXXXXXX |
99+
| InvoiceIssuer | The entity responsible for issuing payable invoices | stripe |
100+
| PricingQuantity | The volume of a given SKU used or purchased | 10.00 |
101+
| PricingUnit | The measurement unit used for PricingQuantity | 1 Million Actions |
102+
| Provider | The provider of purchased resources or services | Temporal Technologies |
103+
| Publisher | The publisher of purchased resources or services | Temporal Technologies |
104+
| ResourceID | Namespace name \+ Temporal Cloud account ID | production.a2dd6 |
105+
| ResourceName | Namespace name \+ Temporal Cloud account ID | production.a2dd6 |
106+
| ResourceType | The type of resource the charge applies to | Namespace |
107+
| ServiceCategory | The highest level classification of a service based on the core function of the service | Temporal Cloud |
108+
| ServiceName | An offering that can be purchased from a provider | Temporal Cloud |
109+
| ServiceSubcategory | A secondary classification of the service category for a service based on its core function | Actions |
110+
| SKUID | A unique identifier that represents a specific SKU | essentials-actions |
111+
| SKUMeter | The functionality being metered or measured by a particular SKU in a charge | Actions |
112+
| Tags | Provider and customer defined tags associated with resources | `{"$tmprl_project":["project-id"],"namespace-tag-key":["namespace-tag-value"]}` |
113+
114+
## Generate a report
115+
116+
To generate a report, follow these steps:
117+
118+
1. Create a billing report using `CreateBillingReport`. The response includes a `billing_report_id` and `async_operation_id`.
119+
1. Poll `GetBillingReport` using the `billing_report_id`
120+
1. When the report state becomes `BILLING_REPORT_STATE_GENERATED`, retrieve the download URL
121+
1. Download the report before the URL expires
122+
123+
### Key identifiers
124+
125+
| Identifier | Purpose |
126+
| ----- | ----- |
127+
| `billing_report_id` | Identifies the billing report and is used to retrieve metadata and download URLs |
128+
| `async_operation_id` | Identifies the background operation responsible for generating the report |
129+
130+
The async operation follows the standard Cloud Operations async model (see [Async Operations](/ops#per-identity-rate-limits)).

0 commit comments

Comments
 (0)