Skip to content

Add version-gated workflow task chunking v2 #2816

Add version-gated workflow task chunking v2

Add version-gated workflow task chunking v2 #2816

Workflow file for this run

name: Per merge CI
on: # rebuild any PRs and main branch changes
pull_request:
push:
branches:
- main
permissions:
contents: read
actions: write
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build-and-lint:
name: "Format, docs, and lint"
timeout-minutes: ${{ github.ref == 'refs/heads/main' && 15 || 10 }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/setup
with:
mise-install-args: protoc
- run: cargo fmt --all --check
- run: cargo doc --workspace --all-features --no-deps
env:
RUSTDOCFLAGS: "-D warnings"
- run: cargo lint
- run: cargo test-lint
- run: cargo check
- run: git diff --exit-code
test:
name: Unit Tests
timeout-minutes: ${{ matrix.timeoutMinutes || 25 }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, ubuntu-arm, macos-intel, macos-arm, windows-latest]
include:
- os: windows-latest
timeoutMinutes: 30
- os: ubuntu-latest
useWftChunkingV2: "true"
- os: ubuntu-arm
runsOn: ubuntu-24.04-arm64-2-core
timeoutMinutes: 30
- os: macos-arm
runsOn: macos-14
- os: macos-intel
runsOn: macos-26-intel
timeoutMinutes: 40
runs-on: ${{ matrix.runsOn || matrix.os }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/setup
with:
mise-install-args: protoc
# Workaround for https://github.com/actions/runner-images/issues/12432
# from https://github.com/rust-lang/rust/issues/141626#issuecomment-2919419236
# Visual Studio bug tracker https://developercommunity.visualstudio.com/t/Regression-from-1943:-linkexe-crashes/10912960
- name: Setup RUSTFLAGS (Windows)
if: runner.os == 'Windows'
uses: actions/github-script@450193c5abd4cdb17ba9f3ffcfe8f635c4bb6c2a # v9
with:
script: |
core.exportVariable('RUSTFLAGS', '-Csymbol-mangling-version=v0');
- run: cargo test -- --include-ignored --nocapture
env:
TEMPORAL_USE_WFT_CHUNKING_V2: ${{ matrix.useWftChunkingV2 || 'false' }}
- name: Find test executable for cgroup tests
id: find-cgroup-test
if: runner.os == 'Linux' && runner.arch == 'X64'
run: |
test_executable=$(cargo build --tests --message-format json | jq -r 'select(.profile?.test == true and .target?.name == "temporalio_sdk_core" and .executable) | .executable')
cp $test_executable ./core-tests
- name: Upload cgroup test executable
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
if: runner.os == 'Linux' && runner.arch == 'X64'
with:
name: cgroup-tests-linux-x86_64
path: ./core-tests
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: coverage-report
path: tarpaulin-report.html
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: state-machine-coverage
path: machine_coverage/
msrv:
name: "Verify MSRV"
timeout-minutes: ${{ github.ref == 'refs/heads/main' && 15 || 10 }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/setup
with:
mise-install-args: protoc cargo:cargo-msrv
rust-cache-key: msrv
- run: cargo msrv verify
working-directory: ./crates/sdk-core
cgroup-tests:
name: cgroup tests
needs: test
runs-on: ubuntu-latest
container:
image: ubuntu
options: --cpus=1 --memory=512m
env:
CGROUP_TESTS_ENABLED: true
steps:
- name: Download cgroup test executable
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: cgroup-tests-linux-x86_64
- name: Run tests
run: |
chmod +x ./core-tests
./core-tests cgroup_ --nocapture
integ-tests:
name: Integ tests
timeout-minutes: ${{ github.ref == 'refs/heads/main' && 30 || 25 }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, ubuntu-arm, macos-intel, macos-arm, windows-latest]
include:
- os: windows-latest
- os: ubuntu-latest
useWftChunkingV2: "true"
- os: ubuntu-arm
runsOn: ubuntu-24.04-arm64-2-core
- os: macos-arm
runsOn: macos-14
- os: macos-intel
runsOn: macos-26-intel
timeoutMinutes: 40
runs-on: ${{ matrix.runsOn || matrix.os }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/setup
with:
mise-install-args: protoc
# Workaround for https://github.com/actions/runner-images/issues/12432
# from https://github.com/rust-lang/rust/issues/141626#issuecomment-2919419236
# Visual Studio bug tracker https://developercommunity.visualstudio.com/t/Regression-from-1943:-linkexe-crashes/10912960
- name: Setup RUSTFLAGS (Windows)
if: runner.os == 'Windows'
uses: actions/github-script@450193c5abd4cdb17ba9f3ffcfe8f635c4bb6c2a # v9
with:
script: |
core.exportVariable('RUSTFLAGS', '-Csymbol-mangling-version=v0');
- run: cargo integ-test
env:
TEMPORAL_USE_WFT_CHUNKING_V2: ${{ matrix.useWftChunkingV2 || 'false' }}
wasm-workflow-tests:
name: WASM workflow tests
timeout-minutes: ${{ github.ref == 'refs/heads/main' && 30 || 25 }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/setup
with:
mise-install-args: protoc cargo:cargo-component
rust-cache-key: wasm-workflow-tests
- name: Install WASM Rust targets
# Install after rust-toolchain so targets are added to the correct toolchain.
run: rustup target add wasm32-unknown-unknown wasm32-wasip1
- run: cargo integ-test -t wasm_workflow_tests -- --test-threads 1
cloud-tests:
if: github.event.pull_request.head.repo.full_name == '' || github.event.pull_request.head.repo.full_name == 'temporalio/sdk-rust'
name: Cloud tests
env:
TEMPORAL_CLOUD_ADDRESS: https://${{ vars.TEMPORAL_CLIENT_NAMESPACE }}.tmprl.cloud:7233
TEMPORAL_NAMESPACE: ${{ vars.TEMPORAL_CLIENT_NAMESPACE }}
TEMPORAL_CLIENT_CERT: ${{ secrets.TEMPORAL_CLIENT_CERT }}
TEMPORAL_CLIENT_KEY: ${{ secrets.TEMPORAL_CLIENT_KEY }}
timeout-minutes: ${{ github.ref == 'refs/heads/main' && 25 || 20 }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/setup
with:
mise-install-args: protoc
- run: cargo test --features=test-utilities --test cloud_tests
docker-integ-tests:
name: Docker integ tests
env:
TEMPORAL_CLOUD_ADDRESS: https://${{ vars.TEMPORAL_CLIENT_NAMESPACE }}.tmprl.cloud:7233
TEMPORAL_CLOUD_NAMESPACE: ${{ vars.TEMPORAL_CLIENT_NAMESPACE }}
TEMPORAL_CLIENT_CERT: ${{ secrets.TEMPORAL_CLIENT_CERT }}
TEMPORAL_CLIENT_KEY: ${{ secrets.TEMPORAL_CLIENT_KEY }}
DOCKER_PROMETHEUS_RUNNING: true
timeout-minutes: ${{ github.ref == 'refs/heads/main' && 25 || 20 }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/setup
with:
mise-install-args: protoc
- name: Start container for otel-collector and prometheus
uses: hoverkraft-tech/compose-action@d2bee4f07e8ca410d6b196d00f90c12e7d48c33a # v2.6.0
with:
compose-file: ./etc/docker/docker-compose-ci.yaml
- run: cargo integ-test docker_
env:
TMPDIR: ${{ runner.temp }}
- name: Verify worker environment detection inside Docker
run: |
integ_test_binary="$(
find "$GITHUB_WORKSPACE/target/debug/deps" -maxdepth 1 -type f \
-name 'integ_tests-*' -perm -111 \
-printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-
)"
integ_runner_binary="$(
find "$GITHUB_WORKSPACE/target/debug/deps" -maxdepth 1 -type f \
-name 'integ_runner-*' -perm -111 \
-printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-
)"
test -x "$integ_test_binary"
test -x "$integ_runner_binary"
# The CLI is cached under a version-derived name, so the container only finds the one
# the previous step downloaded if it asks for the same version. Cargo's `[env]` does not
# reach a directly invoked binary, hence passing the pin, if any, explicitly.
cli_version_override="$(
sed -n 's/^CLI_VERSION_OVERRIDE = "\(.*\)"$/\1/p' .cargo/config.toml
)"
cli_version_env=()
if [ -n "$cli_version_override" ]; then
cli_version_env=(--env "CLI_VERSION_OVERRIDE=$cli_version_override")
fi
docker run --rm \
--env TMPDIR="$RUNNER_TEMP" \
--env TEMPORAL_TEST_EXPECT_DOCKER=true \
"${cli_version_env[@]}" \
--volume "$RUNNER_TEMP:$RUNNER_TEMP" \
--volume "$GITHUB_WORKSPACE:$GITHUB_WORKSPACE" \
--volume /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro \
--workdir "$GITHUB_WORKSPACE" \
ubuntu:24.04 \
"$integ_runner_binary" --test-executable "$integ_test_binary" \
worker_heartbeat_multiple_workers
examples:
name: "Build and run examples"
timeout-minutes: 15
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/setup
with:
mise-install-args: protoc github:temporalio/cli
- name: Build examples
run: cargo build --examples -p temporalio-sdk --features examples
- name: Start Temporal dev server
run: |
temporal server start-dev --headless &
sleep 5
temporal operator search-attribute create --name CustomKeywordField --type Keyword
temporal operator search-attribute create --name CustomIntField --type Int
- name: Run examples
run: bash ./etc/run-sdk-examples.sh
c-bridge-static-link-test:
name: "C bridge static link test"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/setup
with:
mise-install-args: protoc
- name: Build crate as static library
run: cargo rustc --package temporalio-sdk-core-c-bridge --features xz2-static -- --crate-type=staticlib
- name: Build C test program
run: gcc -I./crates/sdk-core-c-bridge/include crates/sdk-core/tests/c_bridge_smoke_test.c target/debug/deps/libtemporalio_sdk_core_c_bridge.a -lpthread -ldl -lm -o test
- name: Run C test program
run: ./test