Deployment and lifecycle management for Nix
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: remove double-cast in deployment:request handle_in path

handle_schema already casts the payload via handle_message, so
handle_deployment_request no longer needs to cast again. Accept the
DeploymentRequest struct directly instead of a raw payload map.

SOW-91

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+18 -16
+1 -1
apps/sower/lib/sower/orchestration.ex
··· 48 48 defdelegate get_deployment!(id), to: Deployment 49 49 defdelegate get_deployment_sid!(sid), to: Deployment 50 50 defdelegate get_deployment_sid(sid), to: Deployment 51 - defdelegate handle_deployment_request(payload, garden), to: Deployment 51 + defdelegate handle_deployment_request(request, garden), to: Deployment 52 52 defdelegate list_deployments(), to: Deployment 53 53 defdelegate list_deployments(garden, opts \\ []), to: Deployment 54 54 defdelegate list_matching_seeds(subscription, limit \\ 10), to: Deployment
+5 -3
apps/sower/lib/sower/orchestration/deployment.ex
··· 331 331 end 332 332 end 333 333 334 - def handle_deployment_request(payload, garden) do 335 - with {:ok, request} <- SowerClient.Orchestration.DeploymentRequest.cast(payload), 336 - {:ok, subscriptions} <- validate_deployment_request(request, garden.id), 334 + def handle_deployment_request( 335 + %SowerClient.Orchestration.DeploymentRequest{} = request, 336 + garden 337 + ) do 338 + with {:ok, subscriptions} <- validate_deployment_request(request, garden.id), 337 339 {:ok, request_id} <- 338 340 process_deployment(request.request_id, subscriptions, garden, force: request.force) do 339 341 {:ok, request_id}
+12 -12
apps/sower/test/sower/orchestration_test.exs
··· 916 916 seed_type: "nixos" 917 917 }) 918 918 919 - # Payload with provided request_id (as the client would generate) 920 - payload = %{ 921 - "subscription_sids" => [subscription.sid], 922 - "request_id" => "req_test_#{System.unique_integer([:positive])}", 923 - "force" => false 924 - } 919 + {:ok, request} = 920 + SowerClient.Orchestration.DeploymentRequest.new(%{ 921 + subscription_sids: [subscription.sid], 922 + force: false 923 + }) 925 924 926 - assert {:ok, request_id} = Orchestration.handle_deployment_request(payload, garden) 925 + assert {:ok, request_id} = Orchestration.handle_deployment_request(request, garden) 927 926 assert is_binary(request_id) 928 927 end 929 928 ··· 942 941 }) 943 942 944 943 # Try to use garden2's subscription with garden1's context (should fail) 945 - payload = %{ 946 - "subscription_sids" => [subscription.sid], 947 - "force" => false 948 - } 944 + {:ok, request} = 945 + SowerClient.Orchestration.DeploymentRequest.new(%{ 946 + subscription_sids: [subscription.sid], 947 + force: false 948 + }) 949 949 950 950 # This should be rejected because garden2 doesn't own the subscription 951 - result = Orchestration.handle_deployment_request(payload, garden2) 951 + result = Orchestration.handle_deployment_request(request, garden2) 952 952 assert result == {:error, :unauthorized} 953 953 end 954 954