Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package opentofu for openSUSE:Factory checked in at 2025-08-02 00:43:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/opentofu (Old) and /work/SRC/openSUSE:Factory/.opentofu.new.1085 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "opentofu" Sat Aug 2 00:43:09 2025 rev:35 rq:1297059 version:1.10.4 Changes: -------- --- /work/SRC/openSUSE:Factory/opentofu/opentofu.changes 2025-07-17 17:18:34.631282347 +0200 +++ /work/SRC/openSUSE:Factory/.opentofu.new.1085/opentofu.changes 2025-08-02 00:44:36.709674773 +0200 @@ -1,0 +2,12 @@ +Fri Aug 01 12:14:02 UTC 2025 - Johannes Kastl <opensuse_buildserv...@ojkastl.de> + +- Update to version 1.10.4: + * BUG FIXES: + - Fixed crash where sensitive set values used in for_each could + cause a panic. (#3070) + - Fixed incorrect approach to mocking provider "ReadResource" + calls in test. (#3068) + - Reduced calls to ListKeys in azure backend (for rate + limiting). (#3083) + +------------------------------------------------------------------- Old: ---- opentofu-1.10.3.obscpio New: ---- opentofu-1.10.4.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ opentofu.spec ++++++ --- /var/tmp/diff_new_pack.FCc5UK/_old 2025-08-02 00:44:37.885723651 +0200 +++ /var/tmp/diff_new_pack.FCc5UK/_new 2025-08-02 00:44:37.893723983 +0200 @@ -19,7 +19,7 @@ %define executable_name tofu Name: opentofu -Version: 1.10.3 +Version: 1.10.4 Release: 0 Summary: Declaratively manage your cloud infrastructure License: MPL-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.FCc5UK/_old 2025-08-02 00:44:37.925725314 +0200 +++ /var/tmp/diff_new_pack.FCc5UK/_new 2025-08-02 00:44:37.933725646 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/opentofu/opentofu/</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v1.10.3</param> + <param name="revision">v1.10.4</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.FCc5UK/_old 2025-08-02 00:44:37.953726477 +0200 +++ /var/tmp/diff_new_pack.FCc5UK/_new 2025-08-02 00:44:37.957726644 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/opentofu/opentofu/</param> - <param name="changesrevision">1e755e9a8f77a723b06e22971d79c4bc2c71eace</param></service></servicedata> + <param name="changesrevision">6d6c2fa96497c15fd8d0b46dc8db0e6877a88b1b</param></service></servicedata> (No newline at EOF) ++++++ opentofu-1.10.3.obscpio -> opentofu-1.10.4.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.10.3/CHANGELOG.md new/opentofu-1.10.4/CHANGELOG.md --- old/opentofu-1.10.3/CHANGELOG.md 2025-07-15 15:50:38.000000000 +0200 +++ new/opentofu-1.10.4/CHANGELOG.md 2025-07-31 15:22:01.000000000 +0200 @@ -4,6 +4,14 @@ BUG FIXES: +- Fixed crash where sensitive set values used in for_each could cause a panic. ([#3070](https://github.com/opentofu/opentofu/pull/3070)) +- Fixed incorrect approach to mocking provider "ReadResource" calls in test. ([#3068](https://github.com/opentofu/opentofu/pull/3068)) +- Reduced calls to ListKeys in azure backend (for rate limiting). ([#3083](https://github.com/opentofu/opentofu/pull/3083)) + +## 1.10.3 + +BUG FIXES: + - OpenTofu will no longer crash in a rare case where a dynamically-invalid expression has its error suppressed by `try` or `can` and then that expression becomes relevant for deciding whether to report a "change outside of OpenTofu" in the human-oriented plan diff. ([#2988](https://github.com/opentofu/opentofu/pull/2988)) - Ensure provider downloads into temp are cleaned up correctly on windows. ([#2843](https://github.com/opentofu/opentofu/issues/2843)) - Correctly handle structural typed attributes during test provider mocking. ([#2994](https://github.com/opentofu/opentofu/pull/2994)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.10.3/go.mod new/opentofu-1.10.4/go.mod --- old/opentofu-1.10.3/go.mod 2025-07-15 15:50:38.000000000 +0200 +++ new/opentofu-1.10.4/go.mod 2025-07-31 15:22:01.000000000 +0200 @@ -84,8 +84,8 @@ github.com/posener/complete v1.2.3 github.com/spf13/afero v1.9.3 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.588 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts v1.0.588 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag v1.0.233 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts v1.0.587-0.20230206000712-97469a3dcd4e + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag v1.0.233-0.20210823002710-8078545fa058 github.com/tencentyun/cos-go-sdk-v5 v0.7.29 github.com/tombuildsstuff/giovanni v0.15.1 github.com/xanzy/ssh-agent v0.3.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.10.3/go.sum new/opentofu-1.10.4/go.sum --- old/opentofu-1.10.3/go.sum 2025-07-15 15:50:38.000000000 +0200 +++ new/opentofu-1.10.4/go.sum 2025-07-31 15:22:01.000000000 +0200 @@ -1022,10 +1022,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.588 h1:DYtBXB7sVc3EOW5horg8j55cLZynhsLYhHrvQ/jXKKM= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.588/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.194/go.mod h1:yrBKWhChnDqNz1xuXdSbWXG56XawEq0G5j1lg4VwBD4= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts v1.0.588 h1:PlkFOALQZ9BLUyX8EalATUQD5xEn1Sz34C+Rw5VSpvk= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts v1.0.588/go.mod h1:vPvXNb+zBZVJfZCIKWcYxLpGzgScKKgiPUArobWZ+nU= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag v1.0.233 h1:5Tbi+jyZ2MojC6GK8V6hchwtnkP2IuENUTqSisbYOlA= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag v1.0.233/go.mod h1:sX14+NSvMjOhNFaMtP2aDy6Bss8PyFXij21gpY6+DAs= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts v1.0.587-0.20230206000712-97469a3dcd4e h1:0GIBenIbbvtMODPCkmMN9DI3l2BhRo6UzPO3GOSKDXI= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts v1.0.587-0.20230206000712-97469a3dcd4e/go.mod h1:vPvXNb+zBZVJfZCIKWcYxLpGzgScKKgiPUArobWZ+nU= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag v1.0.233-0.20210823002710-8078545fa058 h1:Gad8z68kPfhIpPIQ97k/1kVB+Iq1bW+NTxqjFNsAPrw= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag v1.0.233-0.20210823002710-8078545fa058/go.mod h1:sX14+NSvMjOhNFaMtP2aDy6Bss8PyFXij21gpY6+DAs= github.com/tencentyun/cos-go-sdk-v5 v0.7.29 h1:uwRBzc70Wgtc5iQQCowqecfRT0OpCXUOZzodZHOOEDs= github.com/tencentyun/cos-go-sdk-v5 v0.7.29/go.mod h1:4E4+bQ2gBVJcgEC9Cufwylio4mXOct2iu05WjgEBx1o= github.com/thanhpk/randstr v1.0.4 h1:IN78qu/bR+My+gHCvMEXhR/i5oriVHcTB/BJJIRTsNo= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.10.3/internal/backend/remote-state/azure/arm_client.go new/opentofu-1.10.4/internal/backend/remote-state/azure/arm_client.go --- old/opentofu-1.10.3/internal/backend/remote-state/azure/arm_client.go 2025-07-15 15:50:38.000000000 +0200 +++ new/opentofu-1.10.4/internal/backend/remote-state/azure/arm_client.go 2025-07-31 15:22:01.000000000 +0200 @@ -35,6 +35,8 @@ // azureAdStorageAuth is only here if we're using AzureAD Authentication but is an Authorizer for Storage azureAdStorageAuth *autorest.Authorizer + storageAuthCache autorest.Authorizer + accessKey string environment azure.Environment resourceGroupName string @@ -143,23 +145,22 @@ return &client, nil } -func (c ArmClient) getBlobClient(ctx context.Context) (*blobs.Client, error) { +func (c ArmClient) getStorageAuth(ctx context.Context) (autorest.Authorizer, error) { + if c.storageAuthCache != nil { + return c.storageAuthCache, nil + } + var err error + c.storageAuthCache, err = c.newStorageAuth(ctx) + return c.storageAuthCache, err +} +func (c ArmClient) newStorageAuth(ctx context.Context) (autorest.Authorizer, error) { if c.sasToken != "" { - log.Printf("[DEBUG] Building the Blob Client from a SAS Token") - storageAuth, err := autorest.NewSASTokenAuthorizer(c.sasToken) - if err != nil { - return nil, fmt.Errorf("Error building SAS Token Authorizer: %w", err) - } - - blobsClient := blobs.NewWithEnvironment(c.environment) - c.configureClient(&blobsClient.Client, storageAuth) - return &blobsClient, nil + log.Printf("[DEBUG] Building the Storage Auth from a SAS Token") + return autorest.NewSASTokenAuthorizer(c.sasToken) } if c.azureAdStorageAuth != nil { - blobsClient := blobs.NewWithEnvironment(c.environment) - c.configureClient(&blobsClient.Client, *c.azureAdStorageAuth) - return &blobsClient, nil + return *c.azureAdStorageAuth, nil } accessKey := c.accessKey @@ -184,6 +185,14 @@ if err != nil { return nil, fmt.Errorf("Error building Shared Key Authorizer: %w", err) } + return storageAuth, err +} + +func (c ArmClient) getBlobClient(ctx context.Context) (*blobs.Client, error) { + storageAuth, err := c.getStorageAuth(ctx) + if err != nil { + return nil, err + } blobsClient := blobs.NewWithEnvironment(c.environment) c.configureClient(&blobsClient.Client, storageAuth) @@ -191,45 +200,9 @@ } func (c ArmClient) getContainersClient(ctx context.Context) (*containers.Client, error) { - if c.sasToken != "" { - log.Printf("[DEBUG] Building the Container Client from a SAS Token") - storageAuth, err := autorest.NewSASTokenAuthorizer(c.sasToken) - if err != nil { - return nil, fmt.Errorf("Error building SAS Token Authorizer: %w", err) - } - - containersClient := containers.NewWithEnvironment(c.environment) - c.configureClient(&containersClient.Client, storageAuth) - return &containersClient, nil - } - - if c.azureAdStorageAuth != nil { - containersClient := containers.NewWithEnvironment(c.environment) - c.configureClient(&containersClient.Client, *c.azureAdStorageAuth) - return &containersClient, nil - } - - accessKey := c.accessKey - if accessKey == "" { - log.Printf("[DEBUG] Building the Container Client from an Access Token (using user credentials)") - timeoutCtx, cancel := context.WithTimeout(ctx, time.Duration(c.timeoutSeconds)*time.Second) - defer cancel() - keys, err := c.storageAccountsClient.ListKeys(timeoutCtx, c.resourceGroupName, c.storageAccountName, "") - if err != nil { - return nil, fmt.Errorf("Error retrieving keys for Storage Account %q: %w", c.storageAccountName, err) - } - - if keys.Keys == nil { - return nil, fmt.Errorf("Nil key returned for storage account %q", c.storageAccountName) - } - - accessKeys := *keys.Keys - accessKey = *accessKeys[0].Value - } - - storageAuth, err := autorest.NewSharedKeyAuthorizer(c.storageAccountName, accessKey, autorest.SharedKey) + storageAuth, err := c.getStorageAuth(ctx) if err != nil { - return nil, fmt.Errorf("Error building Shared Key Authorizer: %w", err) + return nil, err } containersClient := containers.NewWithEnvironment(c.environment) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.10.3/internal/command/test_test.go new/opentofu-1.10.4/internal/command/test_test.go --- old/opentofu-1.10.3/internal/command/test_test.go 2025-07-15 15:50:38.000000000 +0200 +++ new/opentofu-1.10.4/internal/command/test_test.go 2025-07-31 15:22:01.000000000 +0200 @@ -1496,6 +1496,18 @@ Type: cty.String, Optional: true, }, + "object_attr": { + Computed: true, + NestedType: &configschema.Object{ + Nesting: configschema.NestingSingle, + Attributes: map[string]*configschema.Attribute{ + "string_attr": { + Type: cty.String, + Computed: true, + }, + }, + }, + }, "computed_value": { Type: cty.String, Computed: true, @@ -1506,14 +1518,12 @@ }, } - streams, _ := terminal.StreamsForTesting(t) - view := views.NewView(streams) + view, done := testView(t) ui := new(cli.MockUi) meta := Meta{ testingOverrides: metaOverridesForProvider(provider.Provider), Ui: ui, View: view, - Streams: streams, ProviderSource: providerSource, } @@ -1521,7 +1531,9 @@ Meta: meta, } - if code := testCmd.Run(nil); code != 0 { - t.Fatalf("expected status code 0 but got %d: %s", code, ui.ErrorWriter) + code := testCmd.Run(nil) + output := done(t) + if code != 0 { + t.Fatalf("expected status code 0 but got %d: %s", code, output.All()) } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.10.3/internal/command/testdata/test/mock_provider_validation/main.tftest.hcl new/opentofu-1.10.4/internal/command/testdata/test/mock_provider_validation/main.tftest.hcl --- old/opentofu-1.10.3/internal/command/testdata/test/mock_provider_validation/main.tftest.hcl 2025-07-15 15:50:38.000000000 +0200 +++ new/opentofu-1.10.4/internal/command/testdata/test/mock_provider_validation/main.tftest.hcl 2025-07-31 15:22:01.000000000 +0200 @@ -2,6 +2,9 @@ mock_resource "test_resource" { defaults = { computed_value = "bar" + object_attr = { + string_attr = "bar" + } } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.10.3/internal/configs/hcl2shim/mock_value_composer.go new/opentofu-1.10.4/internal/configs/hcl2shim/mock_value_composer.go --- old/opentofu-1.10.3/internal/configs/hcl2shim/mock_value_composer.go 2025-07-15 15:50:38.000000000 +0200 +++ new/opentofu-1.10.4/internal/configs/hcl2shim/mock_value_composer.go 2025-07-31 15:22:01.000000000 +0200 @@ -191,7 +191,7 @@ diags = diags.Append(tfdiags.WholeContainingBody( tfdiags.Error, fmt.Sprintf("Invalid override for block field `%v`", k), - "Cannot overridde block value, because it's not present in configuration.", + "Cannot override block value, because it's not present in configuration.", )) continue } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.10.3/internal/lang/evalchecks/eval_for_each.go new/opentofu-1.10.4/internal/lang/evalchecks/eval_for_each.go --- old/opentofu-1.10.3/internal/lang/evalchecks/eval_for_each.go 2025-07-15 15:50:38.000000000 +0200 +++ new/opentofu-1.10.4/internal/lang/evalchecks/eval_for_each.go 2025-07-31 15:22:01.000000000 +0200 @@ -225,7 +225,8 @@ // A set of strings may contain null, which makes it impossible to // convert to a map, so we must return an error - it := forEachVal.ElementIterator() + forEachValUnmarked, _ := forEachVal.UnmarkDeep() + it := forEachValUnmarked.ElementIterator() for it.Next() { item, _ := it.Element() if item.IsNull() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.10.3/internal/lang/evalchecks/eval_for_each_test.go new/opentofu-1.10.4/internal/lang/evalchecks/eval_for_each_test.go --- old/opentofu-1.10.3/internal/lang/evalchecks/eval_for_each_test.go 2025-07-15 15:50:38.000000000 +0200 +++ new/opentofu-1.10.4/internal/lang/evalchecks/eval_for_each_test.go 2025-07-31 15:22:01.000000000 +0200 @@ -744,6 +744,44 @@ }, PlanReturnValue: map[string]cty.Value{}, }, + "sensitive_set": { + Input: cty.SetVal([]cty.Value{cty.StringVal("a")}).Mark(marks.Sensitive), + ValidateExpectedErrs: []expectedErr{ + { + Summary: "Invalid for_each argument", + Detail: "Sensitive values, or values derived from sensitive values, cannot be used as for_each arguments", + CausedByUnknown: false, + CausedBySensitive: true, + }}, + ValidateReturnValue: cty.NullVal(cty.Set(cty.String)), + PlanExpectedErrs: []expectedErr{ + { + Summary: "Invalid for_each argument", + Detail: "Sensitive values, or values derived from sensitive values, cannot be used as for_each arguments", + CausedByUnknown: false, + CausedBySensitive: true, + }}, + PlanReturnValue: map[string]cty.Value{}, + }, + "sensitive_set_elements": { + Input: cty.SetVal([]cty.Value{cty.StringVal("a").Mark(marks.Sensitive)}), + ValidateExpectedErrs: []expectedErr{ + { + Summary: "Invalid for_each argument", + Detail: "Sensitive values, or values derived from sensitive values, cannot be used as for_each arguments", + CausedByUnknown: false, + CausedBySensitive: true, + }}, + ValidateReturnValue: cty.NullVal(cty.Set(cty.String)), + PlanExpectedErrs: []expectedErr{ + { + Summary: "Invalid for_each argument", + Detail: "Sensitive values, or values derived from sensitive values, cannot be used as for_each arguments", + CausedByUnknown: false, + CausedBySensitive: true, + }}, + PlanReturnValue: map[string]cty.Value{}, + }, "string": { Input: cty.StringVal("i am definitely a set"), ValidateExpectedErrs: []expectedErr{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.10.3/internal/tofu/provider_for_test_framework.go new/opentofu-1.10.4/internal/tofu/provider_for_test_framework.go --- old/opentofu-1.10.3/internal/tofu/provider_for_test_framework.go 2025-07-15 15:50:38.000000000 +0200 +++ new/opentofu-1.10.4/internal/tofu/provider_for_test_framework.go 2025-07-31 15:22:01.000000000 +0200 @@ -13,6 +13,7 @@ "github.com/opentofu/opentofu/internal/configs" "github.com/opentofu/opentofu/internal/configs/hcl2shim" "github.com/opentofu/opentofu/internal/providers" + "github.com/opentofu/opentofu/internal/tfdiags" "github.com/zclconf/go-cty/cty" ) @@ -59,14 +60,16 @@ } func (p providerForTest) ReadResource(r providers.ReadResourceRequest) providers.ReadResourceResponse { - resSchema, _ := p.schema.SchemaForResourceType(addrs.ManagedResourceMode, r.TypeName) - - mockValues := p.getMockValuesForManagedResource(r.TypeName) - var resp providers.ReadResourceResponse - resp.NewState, resp.Diagnostics = newMockValueComposer(r.TypeName). - ComposeBySchema(resSchema, r.ProviderMeta, mockValues) + resp.NewState = r.PriorState + if resp.NewState.IsNull() { + resp.Diagnostics = tfdiags.Diagnostics{}.Append(tfdiags.WholeContainingBody( + tfdiags.Error, + fmt.Sprintf("Unexpected null value for prior state in `%v`", r.TypeName), + "While reading a resource from a mock provider, the prior state was found to be missing.", + )) + } return resp } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.10.3/internal/tofu/provider_for_test_framework_test.go new/opentofu-1.10.4/internal/tofu/provider_for_test_framework_test.go --- old/opentofu-1.10.3/internal/tofu/provider_for_test_framework_test.go 1970-01-01 01:00:00.000000000 +0100 +++ new/opentofu-1.10.4/internal/tofu/provider_for_test_framework_test.go 2025-07-31 15:22:01.000000000 +0200 @@ -0,0 +1,36 @@ +// Copyright (c) The OpenTofu Authors +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) 2023 HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tofu + +import ( + "strings" + "testing" + + "github.com/opentofu/opentofu/internal/providers" +) + +func TestProviderForTest_ReadResource(t *testing.T) { + mockProvider := &MockProvider{} + + provider, err := newProviderForTestWithSchema(mockProvider, mockProvider.GetProviderSchema()) + if err != nil { + t.Fatalf("unexpected error: %s", err.Error()) + } + + resp := provider.ReadResource(providers.ReadResourceRequest{ + TypeName: "test", + Private: []byte{}, + }) + + if !resp.Diagnostics.HasErrors() { + t.Fatalf("expected errors but none were found") + } + + errMsg := resp.Diagnostics[0].Description().Summary + if !strings.Contains(errMsg, "Unexpected null value for prior state") { + t.Fatalf("expected prior state not found error but got: %s", errMsg) + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.10.3/version/VERSION new/opentofu-1.10.4/version/VERSION --- old/opentofu-1.10.3/version/VERSION 2025-07-15 15:50:38.000000000 +0200 +++ new/opentofu-1.10.4/version/VERSION 2025-07-31 15:22:01.000000000 +0200 @@ -1 +1 @@ -1.10.3 +1.10.4 ++++++ opentofu.obsinfo ++++++ --- /var/tmp/diff_new_pack.FCc5UK/_old 2025-08-02 00:44:43.325949752 +0200 +++ /var/tmp/diff_new_pack.FCc5UK/_new 2025-08-02 00:44:43.373951747 +0200 @@ -1,5 +1,5 @@ name: opentofu -version: 1.10.3 -mtime: 1752587438 -commit: 1e755e9a8f77a723b06e22971d79c4bc2c71eace +version: 1.10.4 +mtime: 1753968121 +commit: 6d6c2fa96497c15fd8d0b46dc8db0e6877a88b1b ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/opentofu/vendor.tar.gz /work/SRC/openSUSE:Factory/.opentofu.new.1085/vendor.tar.gz differ: char 30, line 1