From aab59abcb4553a23d6a979e430cf33f6e70e7288 Mon Sep 17 00:00:00 2001 From: Duncan Mackenzie Date: Wed, 5 Aug 2026 14:29:28 -0700 Subject: [PATCH] Sync hardcoded SDK version pins and flag pages that need a human look MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Several docs hand-authored an exact "install this version" snippet (Java pom.xml/build.gradle, PHP composer.json, Rust Cargo.toml, a Ruby illustrative bundle-add output) that had drifted out of date — Java was 4 releases behind, and the Rust one was a real bug: Cargo's default caret semantics mean a bare "0.5.0" can never resolve to 0.6.0. Extends bin/update-sdk-versions.js with a small explicit whitelist (VERSION_ANCHORS) of these snippets, keyed by regex so only the version number itself is touched. Runs unconditionally alongside the existing sdk-versions.json fetch, so this same commit both fixes today's drift and keeps them in sync going forward via the daily "Update SDK Versions" Action. Pages that name a specific version for a different reason — "requires 1.28.0 or later", or the Worker Deployment Versioning minimum-version table — are never auto-edited (that would just make them wrong), but are now listed (REVIEW_PAGES) in the bot's PR body whenever that SDK's version changes, so a human can glance at whether anything needs a second look. Adds bin/update-sdk-versions.test.js covering the anchor replacements (including the trailing-period and idempotency edge cases) and the review-notes builder. --- .github/workflows/update-sdk-versions.yml | 25 +- bin/update-sdk-versions.js | 231 +++++++++++++++++- bin/update-sdk-versions.test.js | 159 ++++++++++++ .../java/best-practices/testing-suite.mdx | 6 +- docs/develop/java/set-up.mdx | 8 +- docs/develop/php/set-up.mdx | 2 +- docs/develop/ruby/set-up.mdx | 2 +- docs/develop/rust/quickstart.mdx | 10 +- docs/develop/rust/workers/worker-process.mdx | 14 +- 9 files changed, 419 insertions(+), 38 deletions(-) create mode 100644 bin/update-sdk-versions.test.js diff --git a/.github/workflows/update-sdk-versions.yml b/.github/workflows/update-sdk-versions.yml index e850139e25..2da4d7feb0 100644 --- a/.github/workflows/update-sdk-versions.yml +++ b/.github/workflows/update-sdk-versions.yml @@ -33,12 +33,19 @@ jobs: node-version: '20' - name: Fetch latest SDK versions - run: node bin/update-sdk-versions.js --write + id: fetch + run: | + notes="$(node bin/update-sdk-versions.js --write)" + { + echo "review_notes<> "$GITHUB_OUTPUT" - name: Check for changes id: diff run: | - if git diff --quiet src/data/sdk-versions.json; then + if git diff --quiet; then echo "changed=false" >> "$GITHUB_OUTPUT" else echo "changed=true" >> "$GITHUB_OUTPUT" @@ -48,18 +55,26 @@ jobs: if: steps.diff.outputs.changed == 'true' env: GH_TOKEN: ${{ steps.generate_token.outputs.token }} + REVIEW_NOTES: ${{ steps.fetch.outputs.review_notes }} run: | git config user.name "temporal-cicd[bot]" git config user.email "temporal-cicd[bot]@users.noreply.github.com" branch_name="update-sdk-versions-$(date +%Y%m%d)" git checkout -b "$branch_name" - git add src/data/sdk-versions.json - git commit -m "Update SDK version chips" + git add -u + git commit -m "Update SDK version chips and code samples" git push origin "$branch_name" + body="Automated update of the latest SDK versions shown on /develop (src/data/sdk-versions.json) and in the hardcoded install snippets in VERSION_ANCHORS (bin/update-sdk-versions.js), sourced from each SDK's package registry." + if [ -n "$REVIEW_NOTES" ]; then + body="$body + +$REVIEW_NOTES" + fi + gh pr create \ --title "Update SDK version chips" \ - --body "Automated update of the latest SDK versions shown on /develop (src/data/sdk-versions.json), sourced from each SDK's package registry." \ + --body "$body" \ --head "$branch_name" \ --base "main" diff --git a/bin/update-sdk-versions.js b/bin/update-sdk-versions.js index 8f9953026f..b60a13b0fb 100644 --- a/bin/update-sdk-versions.js +++ b/bin/update-sdk-versions.js @@ -4,20 +4,28 @@ // registry and writes src/data/sdk-versions.json. Powers the version chips on // the /develop overview page (src/components/elements/Sdk/SdkOverviewCards). // +// Also keeps a short whitelist of hardcoded "install this version" code +// samples (VERSION_ANCHORS below) in sync, and flags — without editing — +// pages that name a specific SDK version for a different reason, such as +// "requires 1.28.0 or later" (REVIEW_PAGES below). Those are facts about when +// a feature shipped, not something that should track "latest", so a human +// decides whether they still need a look. +// // Each SDK's registry is queried independently: one registry being down, // renamed, or rate-limiting doesn't block updating the other seven. A failed // fetch keeps the previously recorded version rather than clearing it. The -// file is only rewritten when a version actually changed, so a scheduled run -// that finds nothing new produces no diff (and no PR). +// files are only rewritten when a version actually changed, so a scheduled +// run that finds nothing new produces no diff (and no PR). // -// node bin/update-sdk-versions.js # report to stdout -// node bin/update-sdk-versions.js --write # write src/data/sdk-versions.json +// node bin/update-sdk-versions.js # report to stdout, touch nothing +// node bin/update-sdk-versions.js --write # write sdk-versions.json + anchors const https = require("https"); const fs = require("fs"); const path = require("path"); -const OUT_PATH = path.join(__dirname, "..", "src", "data", "sdk-versions.json"); +const REPO_ROOT = path.join(__dirname, ".."); +const OUT_PATH = path.join(REPO_ROOT, "src", "data", "sdk-versions.json"); const USER_AGENT = "temporal-docs-sdk-version-bot (+https://github.com/temporalio/documentation)"; function fetchText(url) { @@ -103,7 +111,183 @@ const FETCHERS = { }, }; +// --------------------------------------------------------------------------- +// VERSION_ANCHORS — hardcoded "install this version" code samples. +// +// These are hand-authored dependency-manifest snippets (pom.xml, build.gradle, +// composer.json, Cargo.toml) or illustrative install output, not Snipsync +// content, so editing them here is safe. Each anchor's regex has two capture +// groups (text immediately before/after the version number) so the +// replacement only ever touches the number itself. +// --------------------------------------------------------------------------- + +const VERSION_NUM = "\\d+\\.\\d+(?:\\.\\d+)?"; + +const VERSION_ANCHORS = [ + // Java — pom.xml + build.gradle snippets + { + sdk: "java", + file: "docs/develop/java/set-up.mdx", + regex: new RegExp(`(temporal-sdk\\s*\\n\\s*)${VERSION_NUM}()`, "g"), + }, + { + sdk: "java", + file: "docs/develop/java/set-up.mdx", + regex: new RegExp(`(temporal-testing\\s*\\n\\s*)${VERSION_NUM}()`, "g"), + }, + { + sdk: "java", + file: "docs/develop/java/set-up.mdx", + regex: new RegExp(`(implementation 'io\\.temporal:temporal-sdk:)${VERSION_NUM}(')`, "g"), + }, + { + sdk: "java", + file: "docs/develop/java/set-up.mdx", + regex: new RegExp(`(testImplementation 'io\\.temporal:temporal-testing:)${VERSION_NUM}(')`, "g"), + }, + { + sdk: "java", + file: "docs/develop/java/best-practices/testing-suite.mdx", + regex: new RegExp(`(temporal-testing\\s*\\n\\s*)${VERSION_NUM}()`, "g"), + }, + { + sdk: "java", + file: "docs/develop/java/best-practices/testing-suite.mdx", + regex: new RegExp(`(testImplementation\\s*\\(?"io\\.temporal:temporal-testing:)${VERSION_NUM}("\\)?)`, "g"), + }, + // PHP — composer.json. Composer convention is a caret on major.minor, so + // the fetched full version (e.g. 2.17.1) is trimmed to 2.17. + { + sdk: "php", + file: "docs/develop/php/set-up.mdx", + regex: new RegExp(`("temporal/sdk":\\s*"\\^)${VERSION_NUM}(")`, "g"), + version: (v) => v.split(".").slice(0, 2).join("."), + }, + // Rust — Cargo.toml snippets + a prose mention. All temporalio-* crates in + // the workspace release in lockstep, so the single "rust" version applies + // to each of them. + { + sdk: "rust", + file: "docs/develop/rust/quickstart.mdx", + regex: new RegExp(`(temporalio-(?:client|common|macros|sdk|sdk-core) = ")${VERSION_NUM}(")`, "g"), + }, + { + sdk: "rust", + file: "docs/develop/rust/workers/worker-process.mdx", + regex: new RegExp(`(temporalio-(?:client|common|macros|sdk|sdk-core|workflow) = ")${VERSION_NUM}(")`, "g"), + }, + { + sdk: "rust", + file: "docs/develop/rust/workers/worker-process.mdx", + regex: new RegExp(`(written against \`temporalio-sdk\` )${VERSION_NUM}()`, "g"), + }, + // Ruby — illustrative `bundle add` output, not a real command. + { + sdk: "ruby", + file: "docs/develop/ruby/set-up.mdx", + regex: new RegExp(`(Installing temporalio )${VERSION_NUM}()`, "g"), + }, +]; + +/** + * Apply every anchor targeting one file to that file's content. Pure string + * transform (no fs) so it's testable without touching real docs files. + * @returns {{content: string, changed: boolean}} + */ +function applyAnchorsToContent(content, anchors, versions) { + let next = content; + let changed = false; + for (const anchor of anchors) { + const raw = versions[anchor.sdk]; + if (!raw) continue; + const newVersion = anchor.version ? anchor.version(raw) : raw; + const replaced = next.replace(anchor.regex, (_match, prefix, suffix) => `${prefix}${newVersion}${suffix ?? ""}`); + if (replaced !== next) { + next = replaced; + changed = true; + } + } + return { content: next, changed }; +} + +/** + * Group VERSION_ANCHORS by file and rewrite each one in place. + * @returns {string[]} relative paths of files actually changed + */ +function applyVersionAnchors(versions, { warnings } = {}) { + const byFile = new Map(); + for (const anchor of VERSION_ANCHORS) { + byFile.set(anchor.file, [...(byFile.get(anchor.file) || []), anchor]); + } + + const changedFiles = []; + for (const [relFile, anchors] of byFile) { + const fullPath = path.join(REPO_ROOT, relFile); + if (!fs.existsSync(fullPath)) { + if (warnings) warnings.push(`version anchor target not found: ${relFile}`); + continue; + } + const content = fs.readFileSync(fullPath, "utf8"); + const result = applyAnchorsToContent(content, anchors, versions); + if (result.changed) { + fs.writeFileSync(fullPath, result.content); + changedFiles.push(relFile); + } + } + return changedFiles; +} + +// --------------------------------------------------------------------------- +// REVIEW_PAGES — pages that name a specific SDK version for a reason other +// than "install the latest" (e.g. "requires 1.28.0 or later", or a minimum +// version table). These encode when a feature shipped, so they must NOT be +// auto-edited to "latest" — that would just make them wrong. Instead, when +// that SDK's version changes, they're listed for a human to glance at. +// --------------------------------------------------------------------------- + +const REVIEW_PAGES = { + go: ["docs/production-deployment/worker-deployments/worker-versioning.mdx"], + java: ["docs/production-deployment/worker-deployments/worker-versioning.mdx"], + dotnet: ["docs/production-deployment/worker-deployments/worker-versioning.mdx"], + ruby: ["docs/production-deployment/worker-deployments/worker-versioning.mdx"], + typescript: ["docs/production-deployment/worker-deployments/worker-versioning.mdx"], + python: [ + "docs/production-deployment/worker-deployments/worker-versioning.mdx", + "docs/production-deployment/worker-deployments/serverless-workers/cloud-run/index.mdx", + "docs/develop/python/integrations/strands-agents.mdx", + "docs/develop/python/integrations/langgraph.mdx", + "docs/develop/python/integrations/langsmith.mdx", + "docs/develop/python/integrations/google-adk.mdx", + "docs/develop/python/integrations/google-genai.mdx", + "docs/guides/durable-gaming-sessions.mdx", + "docs/guides/entity-pattern-loyalty-points.mdx", + "docs/guides/reliable-document-approvals.mdx", + ], +}; + +/** + * @param {string[]} changedIds - SDK ids whose version changed this run + * @returns {string} Markdown block for the PR body, or "" if nothing to flag + */ +function buildReviewNotes(changedIds, versions, previousVersions) { + const sections = []; + for (const id of changedIds) { + const pages = REVIEW_PAGES[id]; + if (!pages || pages.length === 0) continue; + const from = previousVersions[id] ? `${previousVersions[id]} → ` : ""; + sections.push(`- **${id}** ${from}${versions[id]}\n${pages.map((p) => ` - ${p}`).join("\n")}`); + } + if (sections.length === 0) return ""; + return [ + "### SDK version changed — pages that name a specific version, worth a look (not auto-edited)", + "", + ...sections, + ].join("\n"); +} + async function main() { + const write = process.argv.includes("--write"); + const existing = fs.existsSync(OUT_PATH) ? JSON.parse(fs.readFileSync(OUT_PATH, "utf-8")) : { updatedAt: null, versions: {} }; @@ -130,23 +314,46 @@ async function main() { process.exit(1); } + const changedIds = Object.keys(versions).filter((id) => versions[id] !== previousVersions[id]); + // Only bump the timestamp when a version actually changed, so a no-op run // (the common case) produces a byte-identical file and no git diff. - const changed = JSON.stringify(versions) !== JSON.stringify(previousVersions); const output = { - updatedAt: changed ? new Date().toISOString() : existing.updatedAt, + updatedAt: changedIds.length > 0 ? new Date().toISOString() : existing.updatedAt, versions, }; - if (process.argv.includes("--write")) { + if (write) { fs.writeFileSync(OUT_PATH, JSON.stringify(output, null, 2) + "\n"); console.error(`Wrote ${OUT_PATH}`); + + const anchorWarnings = []; + const changedFiles = applyVersionAnchors(versions, { warnings: anchorWarnings }); + anchorWarnings.forEach((w) => console.error(w)); + if (changedFiles.length > 0) { + console.error(`Updated version anchors in:\n ${changedFiles.join("\n ")}`); + } + + const notes = buildReviewNotes(changedIds, versions, previousVersions); + if (notes) console.log(notes); } else { console.log(JSON.stringify(output, null, 2)); } } -main().catch((err) => { - console.error(err); - process.exit(1); -}); +module.exports = { + FETCHERS, + VERSION_ANCHORS, + REVIEW_PAGES, + applyAnchorsToContent, + applyVersionAnchors, + buildReviewNotes, + stripV, +}; + +if (require.main === module) { + main().catch((err) => { + console.error(err); + process.exit(1); + }); +} diff --git a/bin/update-sdk-versions.test.js b/bin/update-sdk-versions.test.js new file mode 100644 index 0000000000..fd32a12a6f --- /dev/null +++ b/bin/update-sdk-versions.test.js @@ -0,0 +1,159 @@ +const { describe, it } = require('node:test'); +const assert = require('node:assert'); +const { + VERSION_ANCHORS, + applyAnchorsToContent, + buildReviewNotes, +} = require('./update-sdk-versions.js'); + +function anchorsFor(file) { + return VERSION_ANCHORS.filter((a) => a.file === file); +} + +describe('applyAnchorsToContent', () => { + it('bumps a Java pom.xml + build.gradle snippet, leaving unrelated text alone', () => { + const content = ` + + io.temporal + temporal-sdk + 1.33.0 + + + io.temporal + temporal-testing + 1.33.0 + test + +implementation 'io.temporal:temporal-sdk:1.33.0' +testImplementation 'io.temporal:temporal-testing:1.33.0' +`; + const { content: next, changed } = applyAnchorsToContent( + content, + anchorsFor('docs/develop/java/set-up.mdx'), + { java: '1.37.0' } + ); + assert.equal(changed, true); + assert.match(next, /temporal-sdk<\/artifactId>\s*\n\s*1\.37\.0<\/version>/); + assert.match(next, /temporal-testing<\/artifactId>\s*\n\s*1\.37\.0<\/version>/); + assert.match(next, /implementation 'io\.temporal:temporal-sdk:1\.37\.0'/); + assert.match(next, /testImplementation 'io\.temporal:temporal-testing:1\.37\.0'/); + assert.doesNotMatch(next, /1\.33\.0/); + }); + + it('bumps both testImplementation call styles in testing-suite.mdx', () => { + const content = ` +testImplementation ("io.temporal:temporal-testing:1.36.0") + +testImplementation("io.temporal:temporal-testing:1.36.0") { + capabilities { + requireCapability("io.temporal:temporal-testing-junit4") + } +} +`; + const { content: next, changed } = applyAnchorsToContent( + content, + anchorsFor('docs/develop/java/best-practices/testing-suite.mdx'), + { java: '1.37.0' } + ); + assert.equal(changed, true); + assert.match(next, /testImplementation \("io\.temporal:temporal-testing:1\.37\.0"\)/); + assert.match(next, /testImplementation\("io\.temporal:temporal-testing:1\.37\.0"\) \{/); + // The unrelated capability string must survive untouched. + assert.match(next, /requireCapability\("io\.temporal:temporal-testing-junit4"\)/); + }); + + it('trims the PHP composer caret to major.minor', () => { + const content = ` "temporal/sdk": "^2.16"`; + const { content: next, changed } = applyAnchorsToContent( + content, + anchorsFor('docs/develop/php/set-up.mdx'), + { php: '2.17.1' } + ); + assert.equal(changed, true); + assert.equal(next, ` "temporal/sdk": "^2.17"`); + }); + + it('bumps every temporalio-* crate in a Cargo.toml snippet to the same version', () => { + const content = ` +[dependencies] +futures = "0.3.32" +temporalio-client = "0.5.0" +temporalio-common = "0.5.0" +temporalio-macros = "0.5.0" +temporalio-sdk = "0.5.0" +temporalio-sdk-core = "0.5.0" +`; + const { content: next, changed } = applyAnchorsToContent( + content, + anchorsFor('docs/develop/rust/quickstart.mdx'), + { rust: '0.6.0' } + ); + assert.equal(changed, true); + assert.match(next, /futures = "0\.3\.32"/); // unrelated crate untouched + assert.doesNotMatch(next, /temporalio[a-z-]* = "0\.5\.0"/); + assert.equal(next.match(/= "0\.6\.0"/g).length, 5); + }); + + it('bumps the worker-process.mdx prose mention and its extra temporalio-workflow crate', () => { + const content = 'The code on this page is written against `temporalio-sdk` 0.5.0.\n\ntemporalio-workflow = "0.5.0"'; + const { content: next, changed } = applyAnchorsToContent( + content, + anchorsFor('docs/develop/rust/workers/worker-process.mdx'), + { rust: '0.6.0' } + ); + assert.equal(changed, true); + assert.match(next, /written against `temporalio-sdk` 0\.6\.0\./); // trailing period preserved + assert.match(next, /temporalio-workflow = "0\.6\.0"/); + }); + + it('bumps the Ruby illustrative bundle-add output', () => { + const content = ' Installing temporalio 0.4.0 (arm64-darwin)'; + const { content: next, changed } = applyAnchorsToContent( + content, + anchorsFor('docs/develop/ruby/set-up.mdx'), + { ruby: '1.6.0' } + ); + assert.equal(changed, true); + assert.equal(next, ' Installing temporalio 1.6.0 (arm64-darwin)'); + }); + + it('is idempotent — re-applying with the same version changes nothing', () => { + const content = `implementation 'io.temporal:temporal-sdk:1.37.0'`; + const once = applyAnchorsToContent(content, anchorsFor('docs/develop/java/set-up.mdx'), { java: '1.37.0' }); + assert.equal(once.changed, false); + assert.equal(once.content, content); + }); + + it('skips an anchor when its SDK has no fetched version', () => { + const content = `implementation 'io.temporal:temporal-sdk:1.33.0'`; + const { content: next, changed } = applyAnchorsToContent(content, anchorsFor('docs/develop/java/set-up.mdx'), {}); + assert.equal(changed, false); + assert.equal(next, content); + }); +}); + +describe('buildReviewNotes', () => { + it('returns "" when no changed SDK has review pages', () => { + const notes = buildReviewNotes(['php'], { php: '2.17.1' }, { php: '2.16.0' }); + assert.equal(notes, ''); + }); + + it('returns "" when nothing changed', () => { + assert.equal(buildReviewNotes([], {}, {}), ''); + }); + + it('lists review pages for a changed SDK with its version transition', () => { + const notes = buildReviewNotes( + ['python'], + { python: '1.32.0' }, + { python: '1.31.0' } + ); + assert.match(notes, /\*\*python\*\* 1\.31\.0 → 1\.32\.0/); + assert.match(notes, /docs\/develop\/python\/integrations\/google-genai\.mdx/); + }); + + it('omits unrelated SDKs even when they also changed', () => { + const notes = buildReviewNotes(['rust'], { rust: '0.7.0' }, { rust: '0.6.0' }); + assert.equal(notes, ''); + }); +}); diff --git a/docs/develop/java/best-practices/testing-suite.mdx b/docs/develop/java/best-practices/testing-suite.mdx index 3e2ca4da54..1c84c9e5fb 100644 --- a/docs/develop/java/best-practices/testing-suite.mdx +++ b/docs/develop/java/best-practices/testing-suite.mdx @@ -58,7 +58,7 @@ as a dependency to your project: io.temporal temporal-testing - 1.36.0 + 1.37.0 test ``` @@ -66,13 +66,13 @@ as a dependency to your project: **[Gradle Groovy DSL](https://gradle.org/):** ```groovy -testImplementation ("io.temporal:temporal-testing:1.36.0") +testImplementation ("io.temporal:temporal-testing:1.37.0") ``` If you need JUnit4 or JUnit5 extensions: ``` -testImplementation("io.temporal:temporal-testing:1.36.0") { +testImplementation("io.temporal:temporal-testing:1.37.0") { capabilities { requireCapability("io.temporal:temporal-testing-junit4") //requireCapability("io.temporal:temporal-testing-junit5") diff --git a/docs/develop/java/set-up.mdx b/docs/develop/java/set-up.mdx index 2e5d012c24..3b22707008 100644 --- a/docs/develop/java/set-up.mdx +++ b/docs/develop/java/set-up.mdx @@ -102,7 +102,7 @@ Gradle directory structure. io.temporal temporal-sdk - 1.33.0 + 1.37.0 @@ -111,7 +111,7 @@ Gradle directory structure. --> io.temporal temporal-testing - 1.33.0 + 1.37.0 test `} @@ -128,8 +128,8 @@ Gradle directory structure. repositories { mavenCentral() } dependencies { - implementation 'io.temporal:temporal-sdk:1.33.0' - testImplementation 'io.temporal:temporal-testing:1.33.0' + implementation 'io.temporal:temporal-sdk:1.37.0' + testImplementation 'io.temporal:temporal-testing:1.37.0' } // Define the main class for the application diff --git a/docs/develop/php/set-up.mdx b/docs/develop/php/set-up.mdx index 873dcea48c..20366c87e7 100644 --- a/docs/develop/php/set-up.mdx +++ b/docs/develop/php/set-up.mdx @@ -89,7 +89,7 @@ composer require temporal/sdk {`{ "name": "myproject/quickstart", "require": { - "temporal/sdk": "^2.16" + "temporal/sdk": "^2.17" }, "autoload": { "psr-4": { diff --git a/docs/develop/ruby/set-up.mdx b/docs/develop/ruby/set-up.mdx index 5ffc3e45e6..bd08f87bde 100644 --- a/docs/develop/ruby/set-up.mdx +++ b/docs/develop/ruby/set-up.mdx @@ -52,7 +52,7 @@ installed, we will execute a Workflow that will output "Hello, Temporal". Fetching gem metadata from https://rubygems.org/... Resolving dependencies... - Installing temporalio 0.4.0 (arm64-darwin) + Installing temporalio 1.6.0 (arm64-darwin) Bundle complete! 1 Gemfile dependency, 6 gems now installed. diff --git a/docs/develop/rust/quickstart.mdx b/docs/develop/rust/quickstart.mdx index eb50df12b4..b15d301a5f 100644 --- a/docs/develop/rust/quickstart.mdx +++ b/docs/develop/rust/quickstart.mdx @@ -66,11 +66,11 @@ futures = "0.3.32" futures-util = "0.3.32" serde = { version = "1", features = ["derive"] } serde_json = "1" -temporalio-client = "0.5.0" -temporalio-common = "0.5.0" -temporalio-macros = "0.5.0" -temporalio-sdk = "0.5.0" -temporalio-sdk-core = "0.5.0" +temporalio-client = "0.6.0" +temporalio-common = "0.6.0" +temporalio-macros = "0.6.0" +temporalio-sdk = "0.6.0" +temporalio-sdk-core = "0.6.0" tokio = { version = "1", features = ["full"] } `} diff --git a/docs/develop/rust/workers/worker-process.mdx b/docs/develop/rust/workers/worker-process.mdx index 53bf0140fe..fe2011c317 100644 --- a/docs/develop/rust/workers/worker-process.mdx +++ b/docs/develop/rust/workers/worker-process.mdx @@ -11,7 +11,7 @@ tags: --- The Rust SDK is in [Public Preview](/evaluate/development-production-features/release-stages#public-preview), and its API can change between releases. -The code on this page is written against `temporalio-sdk` 0.5.0. +The code on this page is written against `temporalio-sdk` 0.6.0. ## Create and run a Worker {/* #run-a-dev-worker */} @@ -20,12 +20,12 @@ The `#[workflow]` and `#[activities]` macros expand to code that refers to the ` ```toml [dependencies] -temporalio-sdk = "0.5.0" -temporalio-client = "0.5.0" -temporalio-sdk-core = "0.5.0" -temporalio-common = "0.5.0" -temporalio-macros = "0.5.0" -temporalio-workflow = "0.5.0" +temporalio-sdk = "0.6.0" +temporalio-client = "0.6.0" +temporalio-sdk-core = "0.6.0" +temporalio-common = "0.6.0" +temporalio-macros = "0.6.0" +temporalio-workflow = "0.6.0" futures = "0.3" tokio = { version = "1", features = ["full"] } url = "2"