temporalio 0.2.0-arm64-darwin → 0.4.0-arm64-darwin
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +2 -0
- data/Gemfile +7 -3
- data/Rakefile +10 -296
- data/lib/temporalio/activity/complete_async_error.rb +1 -1
- data/lib/temporalio/activity/context.rb +18 -2
- data/lib/temporalio/activity/definition.rb +180 -65
- data/lib/temporalio/activity/info.rb +25 -21
- data/lib/temporalio/activity.rb +2 -59
- data/lib/temporalio/api/activity/v1/message.rb +25 -0
- data/lib/temporalio/api/batch/v1/message.rb +6 -1
- data/lib/temporalio/api/cloud/account/v1/message.rb +28 -0
- data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +34 -1
- data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +1 -1
- data/lib/temporalio/api/cloud/identity/v1/message.rb +6 -1
- data/lib/temporalio/api/cloud/namespace/v1/message.rb +8 -1
- data/lib/temporalio/api/cloud/nexus/v1/message.rb +31 -0
- data/lib/temporalio/api/cloud/operation/v1/message.rb +2 -1
- data/lib/temporalio/api/cloud/region/v1/message.rb +2 -1
- data/lib/temporalio/api/cloud/resource/v1/message.rb +23 -0
- data/lib/temporalio/api/cloud/sink/v1/message.rb +24 -0
- data/lib/temporalio/api/cloud/usage/v1/message.rb +31 -0
- data/lib/temporalio/api/command/v1/message.rb +1 -1
- data/lib/temporalio/api/common/v1/message.rb +8 -1
- data/lib/temporalio/api/deployment/v1/message.rb +38 -0
- data/lib/temporalio/api/enums/v1/batch_operation.rb +1 -1
- data/lib/temporalio/api/enums/v1/common.rb +1 -1
- data/lib/temporalio/api/enums/v1/deployment.rb +23 -0
- data/lib/temporalio/api/enums/v1/event_type.rb +1 -1
- data/lib/temporalio/api/enums/v1/failed_cause.rb +1 -1
- data/lib/temporalio/api/enums/v1/nexus.rb +21 -0
- data/lib/temporalio/api/enums/v1/reset.rb +1 -1
- data/lib/temporalio/api/enums/v1/workflow.rb +2 -1
- data/lib/temporalio/api/errordetails/v1/message.rb +3 -1
- data/lib/temporalio/api/failure/v1/message.rb +3 -1
- data/lib/temporalio/api/history/v1/message.rb +3 -1
- data/lib/temporalio/api/nexus/v1/message.rb +3 -2
- data/lib/temporalio/api/operatorservice/v1/service.rb +1 -1
- data/lib/temporalio/api/payload_visitor.rb +1581 -0
- data/lib/temporalio/api/query/v1/message.rb +2 -1
- data/lib/temporalio/api/schedule/v1/message.rb +2 -1
- data/lib/temporalio/api/taskqueue/v1/message.rb +4 -1
- data/lib/temporalio/api/testservice/v1/request_response.rb +31 -0
- data/lib/temporalio/api/testservice/v1/service.rb +23 -0
- data/lib/temporalio/api/workflow/v1/message.rb +9 -1
- data/lib/temporalio/api/workflowservice/v1/request_response.rb +46 -2
- data/lib/temporalio/api/workflowservice/v1/service.rb +1 -1
- data/lib/temporalio/api.rb +2 -0
- data/lib/temporalio/cancellation.rb +34 -14
- data/lib/temporalio/client/async_activity_handle.rb +12 -37
- data/lib/temporalio/client/connection/cloud_service.rb +309 -231
- data/lib/temporalio/client/connection/operator_service.rb +36 -84
- data/lib/temporalio/client/connection/service.rb +6 -5
- data/lib/temporalio/client/connection/test_service.rb +111 -0
- data/lib/temporalio/client/connection/workflow_service.rb +474 -441
- data/lib/temporalio/client/connection.rb +90 -44
- data/lib/temporalio/client/interceptor.rb +199 -60
- data/lib/temporalio/client/schedule.rb +991 -0
- data/lib/temporalio/client/schedule_handle.rb +126 -0
- data/lib/temporalio/client/with_start_workflow_operation.rb +115 -0
- data/lib/temporalio/client/workflow_execution.rb +26 -10
- data/lib/temporalio/client/workflow_handle.rb +41 -98
- data/lib/temporalio/client/workflow_update_handle.rb +3 -5
- data/lib/temporalio/client.rb +247 -44
- data/lib/temporalio/common_enums.rb +17 -0
- data/lib/temporalio/contrib/open_telemetry.rb +470 -0
- data/lib/temporalio/converters/data_converter.rb +4 -7
- data/lib/temporalio/converters/failure_converter.rb +5 -3
- data/lib/temporalio/converters/payload_converter/composite.rb +4 -0
- data/lib/temporalio/converters/payload_converter.rb +6 -8
- data/lib/temporalio/converters/raw_value.rb +20 -0
- data/lib/temporalio/error/failure.rb +1 -1
- data/lib/temporalio/error.rb +11 -2
- data/lib/temporalio/internal/bridge/3.2/temporalio_bridge.bundle +0 -0
- data/lib/temporalio/internal/bridge/3.3/temporalio_bridge.bundle +0 -0
- data/lib/temporalio/internal/bridge/{3.1 → 3.4}/temporalio_bridge.bundle +0 -0
- data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +1 -1
- data/lib/temporalio/internal/bridge/api/common/common.rb +2 -1
- data/lib/temporalio/internal/bridge/api/core_interface.rb +5 -1
- data/lib/temporalio/internal/bridge/api/nexus/nexus.rb +33 -0
- data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +5 -1
- data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +4 -1
- data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +2 -1
- data/lib/temporalio/internal/bridge/client.rb +11 -6
- data/lib/temporalio/internal/bridge/runtime.rb +3 -0
- data/lib/temporalio/internal/bridge/testing.rb +23 -0
- data/lib/temporalio/internal/bridge/worker.rb +2 -0
- data/lib/temporalio/internal/bridge.rb +1 -1
- data/lib/temporalio/internal/client/implementation.rb +468 -71
- data/lib/temporalio/internal/metric.rb +122 -0
- data/lib/temporalio/internal/proto_utils.rb +118 -7
- data/lib/temporalio/internal/worker/activity_worker.rb +69 -29
- data/lib/temporalio/internal/worker/multi_runner.rb +53 -9
- data/lib/temporalio/internal/worker/workflow_instance/child_workflow_handle.rb +54 -0
- data/lib/temporalio/internal/worker/workflow_instance/context.rb +383 -0
- data/lib/temporalio/internal/worker/workflow_instance/details.rb +46 -0
- data/lib/temporalio/internal/worker/workflow_instance/external_workflow_handle.rb +32 -0
- data/lib/temporalio/internal/worker/workflow_instance/externally_immutable_hash.rb +22 -0
- data/lib/temporalio/internal/worker/workflow_instance/handler_execution.rb +25 -0
- data/lib/temporalio/internal/worker/workflow_instance/handler_hash.rb +41 -0
- data/lib/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rb +97 -0
- data/lib/temporalio/internal/worker/workflow_instance/inbound_implementation.rb +62 -0
- data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +400 -0
- data/lib/temporalio/internal/worker/workflow_instance/replay_safe_logger.rb +37 -0
- data/lib/temporalio/internal/worker/workflow_instance/replay_safe_metric.rb +40 -0
- data/lib/temporalio/internal/worker/workflow_instance/scheduler.rb +183 -0
- data/lib/temporalio/internal/worker/workflow_instance.rb +774 -0
- data/lib/temporalio/internal/worker/workflow_worker.rb +239 -0
- data/lib/temporalio/metric.rb +109 -0
- data/lib/temporalio/retry_policy.rb +37 -14
- data/lib/temporalio/runtime/metric_buffer.rb +94 -0
- data/lib/temporalio/runtime.rb +160 -79
- data/lib/temporalio/search_attributes.rb +93 -37
- data/lib/temporalio/testing/activity_environment.rb +44 -16
- data/lib/temporalio/testing/workflow_environment.rb +276 -7
- data/lib/temporalio/version.rb +1 -1
- data/lib/temporalio/worker/activity_executor/thread_pool.rb +9 -217
- data/lib/temporalio/worker/activity_executor.rb +3 -3
- data/lib/temporalio/worker/interceptor.rb +343 -66
- data/lib/temporalio/worker/thread_pool.rb +237 -0
- data/lib/temporalio/worker/tuner.rb +38 -0
- data/lib/temporalio/worker/workflow_executor/thread_pool.rb +235 -0
- data/lib/temporalio/worker/workflow_executor.rb +26 -0
- data/lib/temporalio/worker/workflow_replayer.rb +350 -0
- data/lib/temporalio/worker.rb +235 -58
- data/lib/temporalio/workflow/activity_cancellation_type.rb +20 -0
- data/lib/temporalio/workflow/child_workflow_cancellation_type.rb +21 -0
- data/lib/temporalio/workflow/child_workflow_handle.rb +43 -0
- data/lib/temporalio/workflow/definition.rb +598 -0
- data/lib/temporalio/workflow/external_workflow_handle.rb +41 -0
- data/lib/temporalio/workflow/future.rb +151 -0
- data/lib/temporalio/workflow/handler_unfinished_policy.rb +13 -0
- data/lib/temporalio/workflow/info.rb +104 -0
- data/lib/temporalio/workflow/parent_close_policy.rb +19 -0
- data/lib/temporalio/workflow/update_info.rb +20 -0
- data/lib/temporalio/workflow.rb +575 -0
- data/lib/temporalio/workflow_history.rb +26 -1
- data/lib/temporalio.rb +4 -0
- data/temporalio.gemspec +4 -3
- metadata +75 -8
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 4a71ac59892867ee498d5b736f357b1e691f46da82b9ddbeadafb0e75a1b3296
         | 
| 4 | 
            +
              data.tar.gz: ca0a790947f671ecf638f4f403346fe43350f3152d6449e956595bfe2ee9b9a0
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 49b168ccae5c9fa63d9308aa66b55b9505a2b872da802298c5d2924dac01c4caef7f9432a0f840ba5caf446c90672faf983f07fc54ca08b90b11da49450e34bb
         | 
| 7 | 
            +
              data.tar.gz: b5c592002254c04590580bd1e99a5a10df24ac7c02e3bff008da0535b03147cb5a841916d30337c6ecc7572d018a30f5abb5b4e85394d8538f78b939bddee453
         | 
    
        data/.yardopts
    ADDED
    
    
    
        data/Gemfile
    CHANGED
    
    | @@ -9,15 +9,19 @@ group :development do | |
| 9 9 | 
             
              gem 'activerecord'
         | 
| 10 10 | 
             
              gem 'async'
         | 
| 11 11 | 
             
              gem 'base64'
         | 
| 12 | 
            -
              gem 'grpc', ' | 
| 13 | 
            -
              gem 'grpc-tools'
         | 
| 12 | 
            +
              gem 'grpc', '~> 1.69'
         | 
| 13 | 
            +
              gem 'grpc-tools', '~> 1.69'
         | 
| 14 14 | 
             
              gem 'minitest'
         | 
| 15 | 
            +
              # We are intentionally not pinning OTel versions here so that CI tests the latest. This also means that the OTel
         | 
| 16 | 
            +
              # contrib library also does not require specific versions, we are relying on the compatibility rigor of OTel.
         | 
| 17 | 
            +
              gem 'opentelemetry-api'
         | 
| 18 | 
            +
              gem 'opentelemetry-sdk'
         | 
| 15 19 | 
             
              gem 'rake'
         | 
| 16 20 | 
             
              gem 'rake-compiler'
         | 
| 17 21 | 
             
              gem 'rbs', '~> 3.5.3'
         | 
| 18 22 | 
             
              gem 'rb_sys', '~> 0.9.63'
         | 
| 19 23 | 
             
              gem 'rubocop'
         | 
| 20 | 
            -
              gem 'sqlite3' | 
| 24 | 
            +
              gem 'sqlite3'
         | 
| 21 25 | 
             
              gem 'steep', '~> 1.7.1'
         | 
| 22 26 | 
             
              gem 'yard'
         | 
| 23 27 | 
             
            end
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            # rubocop:disable  | 
| 3 | 
            +
            # rubocop:disable Lint/MissingCopEnableDirective, Style/DocumentationMethod
         | 
| 4 4 |  | 
| 5 5 | 
             
            require 'bundler/gem_tasks'
         | 
| 6 6 | 
             
            require 'rb_sys/cargo/metadata'
         | 
| @@ -55,8 +55,9 @@ module CustomizeYardWarnings # rubocop:disable Style/Documentation | |
| 55 55 | 
             
                super
         | 
| 56 56 | 
             
              rescue YARD::Parser::UndocumentableError
         | 
| 57 57 | 
             
                # We ignore if it's an API warning
         | 
| 58 | 
            -
                 | 
| 59 | 
            -
             | 
| 58 | 
            +
                last_file = statement.last.file
         | 
| 59 | 
            +
                raise unless (last_file.start_with?('lib/temporalio/api/') && last_file.count('/') > 3) ||
         | 
| 60 | 
            +
                             last_file.start_with?('lib/temporalio/internal/bridge/api/')
         | 
| 60 61 | 
             
              end
         | 
| 61 62 | 
             
            end
         | 
| 62 63 |  | 
| @@ -64,302 +65,15 @@ YARD::Handlers::Ruby::ConstantHandler.prepend(CustomizeYardWarnings) | |
| 64 65 |  | 
| 65 66 | 
             
            YARD::Rake::YardocTask.new { |t| t.options = ['--fail-on-warning'] }
         | 
| 66 67 |  | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 68 | 
            +
            Rake::Task[:yard].enhance([:copy_parent_files]) do
         | 
| 69 | 
            +
              rm ['LICENSE', 'README.md']
         | 
| 70 | 
            +
            end
         | 
| 69 71 |  | 
| 70 72 | 
             
            namespace :proto do
         | 
| 71 73 | 
             
              desc 'Generate API and Core protobufs'
         | 
| 72 74 | 
             
              task :generate do
         | 
| 73 | 
            -
                 | 
| 74 | 
            -
                 | 
| 75 | 
            -
             | 
| 76 | 
            -
                def generate_protos(api_protos)
         | 
| 77 | 
            -
                  # Generate API to temp dir and move
         | 
| 78 | 
            -
                  FileUtils.rm_rf('tmp-proto')
         | 
| 79 | 
            -
                  FileUtils.mkdir_p('tmp-proto')
         | 
| 80 | 
            -
                  sh 'bundle exec grpc_tools_ruby_protoc ' \
         | 
| 81 | 
            -
                     '--proto_path=ext/sdk-core/sdk-core-protos/protos/api_upstream ' \
         | 
| 82 | 
            -
                     '--proto_path=ext/sdk-core/sdk-core-protos/protos/api_cloud_upstream ' \
         | 
| 83 | 
            -
                     '--proto_path=ext/additional_protos ' \
         | 
| 84 | 
            -
                     '--ruby_out=tmp-proto ' \
         | 
| 85 | 
            -
                     "#{api_protos.join(' ')}"
         | 
| 86 | 
            -
             | 
| 87 | 
            -
                  # Walk all generated Ruby files and cleanup content and filename
         | 
| 88 | 
            -
                  Dir.glob('tmp-proto/temporal/api/**/*.rb') do |path|
         | 
| 89 | 
            -
                    # Fix up the import
         | 
| 90 | 
            -
                    content = File.read(path)
         | 
| 91 | 
            -
                    content.gsub!(%r{^require 'temporal/(.*)_pb'$}, "require 'temporalio/\\1'")
         | 
| 92 | 
            -
                    File.write(path, content)
         | 
| 93 | 
            -
             | 
| 94 | 
            -
                    # Remove _pb from the filename
         | 
| 95 | 
            -
                    FileUtils.mv(path, path.sub('_pb', ''))
         | 
| 96 | 
            -
                  end
         | 
| 97 | 
            -
             | 
| 98 | 
            -
                  # Move from temp dir and remove temp dir
         | 
| 99 | 
            -
                  FileUtils.cp_r('tmp-proto/temporal/api', 'lib/temporalio')
         | 
| 100 | 
            -
                  FileUtils.rm_rf('tmp-proto')
         | 
| 101 | 
            -
                end
         | 
| 102 | 
            -
             | 
| 103 | 
            -
                # Generate from API with Google ones removed
         | 
| 104 | 
            -
                generate_protos(Dir.glob('ext/sdk-core/sdk-core-protos/protos/api_upstream/**/*.proto').reject do |proto|
         | 
| 105 | 
            -
                  proto.include?('google')
         | 
| 106 | 
            -
                end)
         | 
| 107 | 
            -
             | 
| 108 | 
            -
                # Generate from Cloud API
         | 
| 109 | 
            -
                generate_protos(Dir.glob('ext/sdk-core/sdk-core-protos/protos/api_cloud_upstream/**/*.proto'))
         | 
| 110 | 
            -
             | 
| 111 | 
            -
                # Generate additional protos
         | 
| 112 | 
            -
                generate_protos(Dir.glob('ext/additional_protos/**/*.proto'))
         | 
| 113 | 
            -
             | 
| 114 | 
            -
                # Write files that will help with imports. We are requiring the
         | 
| 115 | 
            -
                # request_response and not the service because the service depends on Google
         | 
| 116 | 
            -
                # API annotations we don't want to have to depend on.
         | 
| 117 | 
            -
                File.write(
         | 
| 118 | 
            -
                  'lib/temporalio/api/cloud/cloudservice.rb',
         | 
| 119 | 
            -
                  <<~TEXT
         | 
| 120 | 
            -
                    # frozen_string_literal: true
         | 
| 121 | 
            -
             | 
| 122 | 
            -
                    require 'temporalio/api/cloud/cloudservice/v1/request_response'
         | 
| 123 | 
            -
                  TEXT
         | 
| 124 | 
            -
                )
         | 
| 125 | 
            -
                File.write(
         | 
| 126 | 
            -
                  'lib/temporalio/api/workflowservice.rb',
         | 
| 127 | 
            -
                  <<~TEXT
         | 
| 128 | 
            -
                    # frozen_string_literal: true
         | 
| 129 | 
            -
             | 
| 130 | 
            -
                    require 'temporalio/api/workflowservice/v1/request_response'
         | 
| 131 | 
            -
                  TEXT
         | 
| 132 | 
            -
                )
         | 
| 133 | 
            -
                File.write(
         | 
| 134 | 
            -
                  'lib/temporalio/api/operatorservice.rb',
         | 
| 135 | 
            -
                  <<~TEXT
         | 
| 136 | 
            -
                    # frozen_string_literal: true
         | 
| 137 | 
            -
             | 
| 138 | 
            -
                    require 'temporalio/api/operatorservice/v1/request_response'
         | 
| 139 | 
            -
                  TEXT
         | 
| 140 | 
            -
                )
         | 
| 141 | 
            -
                File.write(
         | 
| 142 | 
            -
                  'lib/temporalio/api.rb',
         | 
| 143 | 
            -
                  <<~TEXT
         | 
| 144 | 
            -
                    # frozen_string_literal: true
         | 
| 145 | 
            -
             | 
| 146 | 
            -
                    require 'temporalio/api/cloud/cloudservice'
         | 
| 147 | 
            -
                    require 'temporalio/api/common/v1/grpc_status'
         | 
| 148 | 
            -
                    require 'temporalio/api/errordetails/v1/message'
         | 
| 149 | 
            -
                    require 'temporalio/api/operatorservice'
         | 
| 150 | 
            -
                    require 'temporalio/api/workflowservice'
         | 
| 151 | 
            -
             | 
| 152 | 
            -
                    module Temporalio
         | 
| 153 | 
            -
                      # Raw protocol buffer models.
         | 
| 154 | 
            -
                      module Api
         | 
| 155 | 
            -
                      end
         | 
| 156 | 
            -
                    end
         | 
| 157 | 
            -
                  TEXT
         | 
| 158 | 
            -
                )
         | 
| 159 | 
            -
             | 
| 160 | 
            -
                # Write the service classes that have the RPC calls
         | 
| 161 | 
            -
                def write_service_file(qualified_service_name:, file_name:, class_name:, service_enum:)
         | 
| 162 | 
            -
                  # Do service lookup
         | 
| 163 | 
            -
                  desc = Google::Protobuf::DescriptorPool.generated_pool.lookup(qualified_service_name)
         | 
| 164 | 
            -
                  raise 'Failed finding service descriptor' unless desc
         | 
| 165 | 
            -
             | 
| 166 | 
            -
                  # Open file to generate Ruby code
         | 
| 167 | 
            -
                  File.open("lib/temporalio/client/connection/#{file_name}.rb", 'w') do |file|
         | 
| 168 | 
            -
                    file.puts <<~TEXT
         | 
| 169 | 
            -
                      # frozen_string_literal: true
         | 
| 170 | 
            -
             | 
| 171 | 
            -
                      # Generated code.  DO NOT EDIT!
         | 
| 172 | 
            -
             | 
| 173 | 
            -
                      require 'temporalio/api'
         | 
| 174 | 
            -
                      require 'temporalio/client/connection/service'
         | 
| 175 | 
            -
                      require 'temporalio/internal/bridge/client'
         | 
| 176 | 
            -
             | 
| 177 | 
            -
                      module Temporalio
         | 
| 178 | 
            -
                        class Client
         | 
| 179 | 
            -
                          class Connection
         | 
| 180 | 
            -
                            # #{class_name} API.
         | 
| 181 | 
            -
                            class #{class_name} < Service
         | 
| 182 | 
            -
                              # @!visibility private
         | 
| 183 | 
            -
                              def initialize(connection)
         | 
| 184 | 
            -
                                super(connection, Internal::Bridge::Client::#{service_enum})
         | 
| 185 | 
            -
                              end
         | 
| 186 | 
            -
                    TEXT
         | 
| 187 | 
            -
             | 
| 188 | 
            -
                    desc.each do |method|
         | 
| 189 | 
            -
                      # Camel case to snake case
         | 
| 190 | 
            -
                      rpc = method.name.gsub(/([A-Z])/, '_\1').downcase.delete_prefix('_')
         | 
| 191 | 
            -
                      file.puts <<-TEXT
         | 
| 192 | 
            -
             | 
| 193 | 
            -
                    # Calls #{class_name}.#{method.name} API call.
         | 
| 194 | 
            -
                    #
         | 
| 195 | 
            -
                    # @param request [#{method.input_type.msgclass}] API request.
         | 
| 196 | 
            -
                    # @param rpc_retry [Boolean] Whether to implicitly retry known retryable errors.
         | 
| 197 | 
            -
                    # @param rpc_metadata [Hash<String, String>, nil] Headers to include on the RPC call.
         | 
| 198 | 
            -
                    # @param rpc_timeout [Float, nil] Number of seconds before timeout.
         | 
| 199 | 
            -
                    # @return [#{method.output_type.msgclass}] API response.
         | 
| 200 | 
            -
                    def #{rpc}(request, rpc_retry: false, rpc_metadata: nil, rpc_timeout: nil)
         | 
| 201 | 
            -
                      invoke_rpc(
         | 
| 202 | 
            -
                        rpc: '#{rpc}',
         | 
| 203 | 
            -
                        request_class: #{method.input_type.msgclass},
         | 
| 204 | 
            -
                        response_class: #{method.output_type.msgclass},
         | 
| 205 | 
            -
                        request:,
         | 
| 206 | 
            -
                        rpc_retry:,
         | 
| 207 | 
            -
                        rpc_metadata:,
         | 
| 208 | 
            -
                        rpc_timeout:
         | 
| 209 | 
            -
                      )
         | 
| 210 | 
            -
                    end
         | 
| 211 | 
            -
                      TEXT
         | 
| 212 | 
            -
                    end
         | 
| 213 | 
            -
             | 
| 214 | 
            -
                    file.puts <<~TEXT
         | 
| 215 | 
            -
                            end
         | 
| 216 | 
            -
                          end
         | 
| 217 | 
            -
                        end
         | 
| 218 | 
            -
                      end
         | 
| 219 | 
            -
                    TEXT
         | 
| 220 | 
            -
                  end
         | 
| 221 | 
            -
             | 
| 222 | 
            -
                  # Open file to generate RBS code
         | 
| 223 | 
            -
                  # TODO(cretz): Improve this when RBS proto is supported
         | 
| 224 | 
            -
                  File.open("sig/temporalio/client/connection/#{file_name}.rbs", 'w') do |file|
         | 
| 225 | 
            -
                    file.puts <<~TEXT
         | 
| 226 | 
            -
                      # Generated code.  DO NOT EDIT!
         | 
| 227 | 
            -
             | 
| 228 | 
            -
                      module Temporalio
         | 
| 229 | 
            -
                        class Client
         | 
| 230 | 
            -
                          class Connection
         | 
| 231 | 
            -
                            class #{class_name} < Service
         | 
| 232 | 
            -
                              def initialize: (Connection) -> void
         | 
| 233 | 
            -
                    TEXT
         | 
| 234 | 
            -
             | 
| 235 | 
            -
                    desc.each do |method|
         | 
| 236 | 
            -
                      # Camel case to snake case
         | 
| 237 | 
            -
                      rpc = method.name.gsub(/([A-Z])/, '_\1').downcase.delete_prefix('_')
         | 
| 238 | 
            -
                      file.puts <<-TEXT
         | 
| 239 | 
            -
                    def #{rpc}: (untyped request, ?rpc_retry: bool, ?rpc_metadata: Hash[String, String]?, ?rpc_timeout: Float?) -> untyped
         | 
| 240 | 
            -
                      TEXT
         | 
| 241 | 
            -
                    end
         | 
| 242 | 
            -
             | 
| 243 | 
            -
                    file.puts <<~TEXT
         | 
| 244 | 
            -
                            end
         | 
| 245 | 
            -
                          end
         | 
| 246 | 
            -
                        end
         | 
| 247 | 
            -
                      end
         | 
| 248 | 
            -
                    TEXT
         | 
| 249 | 
            -
                  end
         | 
| 250 | 
            -
                end
         | 
| 251 | 
            -
             | 
| 252 | 
            -
                require './lib/temporalio/api/workflowservice/v1/service'
         | 
| 253 | 
            -
                write_service_file(
         | 
| 254 | 
            -
                  qualified_service_name: 'temporal.api.workflowservice.v1.WorkflowService',
         | 
| 255 | 
            -
                  file_name: 'workflow_service',
         | 
| 256 | 
            -
                  class_name: 'WorkflowService',
         | 
| 257 | 
            -
                  service_enum: 'SERVICE_WORKFLOW'
         | 
| 258 | 
            -
                )
         | 
| 259 | 
            -
                require './lib/temporalio/api/operatorservice/v1/service'
         | 
| 260 | 
            -
                write_service_file(
         | 
| 261 | 
            -
                  qualified_service_name: 'temporal.api.operatorservice.v1.OperatorService',
         | 
| 262 | 
            -
                  file_name: 'operator_service',
         | 
| 263 | 
            -
                  class_name: 'OperatorService',
         | 
| 264 | 
            -
                  service_enum: 'SERVICE_OPERATOR'
         | 
| 265 | 
            -
                )
         | 
| 266 | 
            -
                require './lib/temporalio/api/cloud/cloudservice/v1/service'
         | 
| 267 | 
            -
                write_service_file(
         | 
| 268 | 
            -
                  qualified_service_name: 'temporal.api.cloud.cloudservice.v1.CloudService',
         | 
| 269 | 
            -
                  file_name: 'cloud_service',
         | 
| 270 | 
            -
                  class_name: 'CloudService',
         | 
| 271 | 
            -
                  service_enum: 'SERVICE_CLOUD'
         | 
| 272 | 
            -
                )
         | 
| 273 | 
            -
             | 
| 274 | 
            -
                # Generate Rust code
         | 
| 275 | 
            -
                def generate_rust_match_arm(file:, qualified_service_name:, service_enum:, trait:)
         | 
| 276 | 
            -
                  # Do service lookup
         | 
| 277 | 
            -
                  desc = Google::Protobuf::DescriptorPool.generated_pool.lookup(qualified_service_name)
         | 
| 278 | 
            -
                  file.puts <<~TEXT
         | 
| 279 | 
            -
                    #{service_enum} => match call.rpc.as_str() {
         | 
| 280 | 
            -
                  TEXT
         | 
| 281 | 
            -
             | 
| 282 | 
            -
                  desc.to_a.sort_by(&:name).each do |method|
         | 
| 283 | 
            -
                    # Camel case to snake case
         | 
| 284 | 
            -
                    rpc = method.name.gsub(/([A-Z])/, '_\1').downcase.delete_prefix('_')
         | 
| 285 | 
            -
                    file.puts <<~TEXT
         | 
| 286 | 
            -
                      "#{rpc}" => rpc_call!(self, callback, call, #{trait}, #{rpc}),
         | 
| 287 | 
            -
                    TEXT
         | 
| 288 | 
            -
                  end
         | 
| 289 | 
            -
                  file.puts <<~TEXT
         | 
| 290 | 
            -
                      _ => Err(error!("Unknown RPC call {}", call.rpc)),
         | 
| 291 | 
            -
                    },
         | 
| 292 | 
            -
                  TEXT
         | 
| 293 | 
            -
                end
         | 
| 294 | 
            -
                File.open('ext/src/client_rpc_generated.rs', 'w') do |file|
         | 
| 295 | 
            -
                  file.puts <<~TEXT
         | 
| 296 | 
            -
                    // Generated code.  DO NOT EDIT!
         | 
| 297 | 
            -
             | 
| 298 | 
            -
                    use magnus::{Error, Ruby};
         | 
| 299 | 
            -
                    use temporal_client::{CloudService, OperatorService, WorkflowService};
         | 
| 300 | 
            -
             | 
| 301 | 
            -
                    use super::{error, rpc_call};
         | 
| 302 | 
            -
                    use crate::{
         | 
| 303 | 
            -
                        client::{Client, RpcCall, SERVICE_CLOUD, SERVICE_OPERATOR, SERVICE_WORKFLOW},
         | 
| 304 | 
            -
                        util::AsyncCallback,
         | 
| 305 | 
            -
                    };
         | 
| 306 | 
            -
             | 
| 307 | 
            -
                    impl Client {
         | 
| 308 | 
            -
                        pub fn invoke_rpc(&self, service: u8, callback: AsyncCallback, call: RpcCall) -> Result<(), Error> {
         | 
| 309 | 
            -
                            match service {
         | 
| 310 | 
            -
                  TEXT
         | 
| 311 | 
            -
                  generate_rust_match_arm(
         | 
| 312 | 
            -
                    file:,
         | 
| 313 | 
            -
                    qualified_service_name: 'temporal.api.workflowservice.v1.WorkflowService',
         | 
| 314 | 
            -
                    service_enum: 'SERVICE_WORKFLOW',
         | 
| 315 | 
            -
                    trait: 'WorkflowService'
         | 
| 316 | 
            -
                  )
         | 
| 317 | 
            -
                  generate_rust_match_arm(
         | 
| 318 | 
            -
                    file:,
         | 
| 319 | 
            -
                    qualified_service_name: 'temporal.api.operatorservice.v1.OperatorService',
         | 
| 320 | 
            -
                    service_enum: 'SERVICE_OPERATOR',
         | 
| 321 | 
            -
                    trait: 'OperatorService'
         | 
| 322 | 
            -
                  )
         | 
| 323 | 
            -
                  generate_rust_match_arm(
         | 
| 324 | 
            -
                    file:,
         | 
| 325 | 
            -
                    qualified_service_name: 'temporal.api.cloud.cloudservice.v1.CloudService',
         | 
| 326 | 
            -
                    service_enum: 'SERVICE_CLOUD',
         | 
| 327 | 
            -
                    trait: 'CloudService'
         | 
| 328 | 
            -
                  )
         | 
| 329 | 
            -
                  file.puts <<~TEXT
         | 
| 330 | 
            -
                                _ => Err(error!("Unknown service")),
         | 
| 331 | 
            -
                            }
         | 
| 332 | 
            -
                        }
         | 
| 333 | 
            -
                    }
         | 
| 334 | 
            -
                  TEXT
         | 
| 335 | 
            -
                end
         | 
| 336 | 
            -
                sh 'cargo', 'fmt', '--', 'ext/src/client_rpc_generated.rs'
         | 
| 337 | 
            -
             | 
| 338 | 
            -
                # Generate core protos
         | 
| 339 | 
            -
                FileUtils.rm_rf('lib/temporalio/internal/bridge/api')
         | 
| 340 | 
            -
                # Generate API to temp dir
         | 
| 341 | 
            -
                FileUtils.rm_rf('tmp-proto')
         | 
| 342 | 
            -
                FileUtils.mkdir_p('tmp-proto')
         | 
| 343 | 
            -
                sh 'bundle exec grpc_tools_ruby_protoc ' \
         | 
| 344 | 
            -
                   '--proto_path=ext/sdk-core/sdk-core-protos/protos/api_upstream ' \
         | 
| 345 | 
            -
                   '--proto_path=ext/sdk-core/sdk-core-protos/protos/local ' \
         | 
| 346 | 
            -
                   '--ruby_out=tmp-proto ' \
         | 
| 347 | 
            -
                   "#{Dir.glob('ext/sdk-core/sdk-core-protos/protos/local/**/*.proto').join(' ')}"
         | 
| 348 | 
            -
                # Walk all generated Ruby files and cleanup content and filename
         | 
| 349 | 
            -
                Dir.glob('tmp-proto/temporal/sdk/**/*.rb') do |path|
         | 
| 350 | 
            -
                  # Fix up the imports
         | 
| 351 | 
            -
                  content = File.read(path)
         | 
| 352 | 
            -
                  content.gsub!(%r{^require 'temporal/(.*)_pb'$}, "require 'temporalio/\\1'")
         | 
| 353 | 
            -
                  content.gsub!(%r{^require 'temporalio/sdk/core/(.*)'$}, "require 'temporalio/internal/bridge/api/\\1'")
         | 
| 354 | 
            -
                  File.write(path, content)
         | 
| 355 | 
            -
             | 
| 356 | 
            -
                  # Remove _pb from the filename
         | 
| 357 | 
            -
                  FileUtils.mv(path, path.sub('_pb', ''))
         | 
| 358 | 
            -
                end
         | 
| 359 | 
            -
                # Move from temp dir and remove temp dir
         | 
| 360 | 
            -
                FileUtils.mkdir_p('lib/temporalio/internal/bridge/api')
         | 
| 361 | 
            -
                FileUtils.cp_r(Dir.glob('tmp-proto/temporal/sdk/core/*'), 'lib/temporalio/internal/bridge/api')
         | 
| 362 | 
            -
                FileUtils.rm_rf('tmp-proto')
         | 
| 75 | 
            +
                require_relative 'extra/proto_gen'
         | 
| 76 | 
            +
                ProtoGen.new.run
         | 
| 363 77 | 
             
              end
         | 
| 364 78 | 
             
            end
         | 
| 365 79 |  | 
| @@ -380,7 +94,7 @@ Rake::Task[:build].enhance([:copy_parent_files]) do | |
| 380 94 | 
             
            end
         | 
| 381 95 |  | 
| 382 96 | 
             
            task :rust_lint do
         | 
| 383 | 
            -
              sh 'cargo', 'clippy'
         | 
| 97 | 
            +
              sh 'cargo', 'clippy', '-p', 'temporalio_bridge', '--no-deps', '--', '-Dwarnings'
         | 
| 384 98 | 
             
              sh 'cargo', 'fmt', '--check'
         | 
| 385 99 | 
             
            end
         | 
| 386 100 |  | 
| @@ -3,7 +3,7 @@ | |
| 3 3 | 
             
            require 'temporalio/error'
         | 
| 4 4 |  | 
| 5 5 | 
             
            module Temporalio
         | 
| 6 | 
            -
               | 
| 6 | 
            +
              module Activity
         | 
| 7 7 | 
             
                # Context accessible only within an activity. Use {current} to get the current context. Contexts are fiber or thread
         | 
| 8 8 | 
             
                # local so may not be available in a newly started thread from an activity and may have to be propagated manually.
         | 
| 9 9 | 
             
                class Context
         | 
| @@ -48,6 +48,12 @@ module Temporalio | |
| 48 48 | 
             
                    raise NotImplementedError
         | 
| 49 49 | 
             
                  end
         | 
| 50 50 |  | 
| 51 | 
            +
                  # @return [Object, nil] Activity class instance. This should always be present except for advanced cases where the
         | 
| 52 | 
            +
                  #   definition was manually created without any instance getter/creator.
         | 
| 53 | 
            +
                  def instance
         | 
| 54 | 
            +
                    raise NotImplementedError
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 51 57 | 
             
                  # Record a heartbeat on the activity.
         | 
| 52 58 | 
             
                  #
         | 
| 53 59 | 
             
                  # Heartbeats should be used for all non-immediately-returning, non-local activities and they are required to
         | 
| @@ -101,7 +107,17 @@ module Temporalio | |
| 101 107 | 
             
                    }.freeze
         | 
| 102 108 | 
             
                  end
         | 
| 103 109 |  | 
| 104 | 
            -
                  #  | 
| 110 | 
            +
                  # @return [Metric::Meter] Metric meter to create metrics on, with some activity-specific attributes already set.
         | 
| 111 | 
            +
                  # @raise [RuntimeError] Called within a {Testing::ActivityEnvironment} and it was not set.
         | 
| 112 | 
            +
                  def metric_meter
         | 
| 113 | 
            +
                    raise NotImplementedError
         | 
| 114 | 
            +
                  end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                  # @return [Client] Temporal client this activity worker is running in.
         | 
| 117 | 
            +
                  # @raise [RuntimeError] Called within a {Testing::ActivityEnvironment} and it was not set.
         | 
| 118 | 
            +
                  def client
         | 
| 119 | 
            +
                    raise NotImplementedError
         | 
| 120 | 
            +
                  end
         | 
| 105 121 | 
             
                end
         | 
| 106 122 | 
             
              end
         | 
| 107 123 | 
             
            end
         |