Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-awscrt for openSUSE:Factory 
checked in at 2026-08-09 21:41:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-awscrt (Old)
 and      /work/SRC/openSUSE:Factory/.python-awscrt.new.16738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-awscrt"

Sun Aug  9 21:41:20 2026 rev:10 rq:1370218 version:0.36.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-awscrt/python-awscrt.changes      
2026-07-07 21:09:10.302679893 +0200
+++ /work/SRC/openSUSE:Factory/.python-awscrt.new.16738/python-awscrt.changes   
2026-08-09 21:41:24.958690139 +0200
@@ -1,0 +2,12 @@
+Thu Aug  6 21:38:38 UTC 2026 - John Paul Adrian Glaubitz 
<[email protected]>
+
+- Update to version 0.36.1
+  * update submodules by @sbSteveK in (#756)
+- from version 0.36.0
+  * Regression Labeler Fix by @azkrishpy in (#751)
+  * fix doc on direct_io with outdated behavior by @TingDaoK in (#752)
+  * Add test for auto-PUBACK on QoS 1 publish received by @sfod in (#753)
+  * Update deprecated OpenBSD CI job by @sfod in (#754)
+  * CRT version bump by @DmitriyMusatkin in (#755)
+
+-------------------------------------------------------------------

Old:
----
  awscrt-0.35.0.tar.gz

New:
----
  awscrt-0.36.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-awscrt.spec ++++++
--- /var/tmp/diff_new_pack.Sw72pC/_old  2026-08-09 21:41:25.666714329 +0200
+++ /var/tmp/diff_new_pack.Sw72pC/_new  2026-08-09 21:41:25.666714329 +0200
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-awscrt
-Version:        0.35.0
+Version:        0.36.1
 Release:        0
 Summary:        A common runtime for AWS Python projects
 License:        Apache-2.0

++++++ awscrt-0.35.0.tar.gz -> awscrt-0.36.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aws-crt-python-0.35.0/.github/workflows/ci.yml 
new/aws-crt-python-0.36.1/.github/workflows/ci.yml
--- old/aws-crt-python-0.35.0/.github/workflows/ci.yml  2026-06-25 
01:29:43.000000000 +0200
+++ new/aws-crt-python-0.36.1/.github/workflows/ci.yml  2026-07-22 
19:44:45.000000000 +0200
@@ -7,7 +7,7 @@
       - 'docs'
 
 env:
-  BUILDER_VERSION: v0.9.93
+  BUILDER_VERSION: v0.9.96
   BUILDER_SOURCE: releases
   BUILDER_HOST: https://d19elf31gohf1l.cloudfront.net
   PACKAGE_NAME: aws-crt-python
@@ -382,7 +382,7 @@
       fail-fast: false
       matrix:
         # OpenBSD only supports the two most recent releases
-        version: ['7.4', '7.5']
+        version: ['7.8', '7.9']
     permissions:
       id-token: write # This is required for requesting the JWT
     steps:
@@ -396,7 +396,7 @@
         with:
           submodules: true
       - name: Build ${{ env.PACKAGE_NAME }} + consumers
-        uses: cross-platform-actions/[email protected]
+        uses: cross-platform-actions/[email protected]
         with:
           operating_system: openbsd
           version: ${{ matrix.version }}
@@ -404,7 +404,7 @@
           shell: bash
           environment_variables: AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY 
AWS_SESSION_TOKEN AWS_DEFAULT_REGION
           run: |
-            sudo pkg_add awscli py3-pip py3-urllib3
+            sudo pkg_add awscli%v2 py3-pip py3-urllib3
             python3 -c "from urllib.request import urlretrieve; 
urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ 
env.BUILDER_VERSION }}/builder.pyz', 'builder')"
             chmod a+x builder
             ./builder build -p ${{ env.PACKAGE_NAME }}
@@ -424,15 +424,19 @@
           submodules: true
 
       - name: Build ${{ env.PACKAGE_NAME }} + consumers
-        uses: cross-platform-actions/[email protected]
+        uses: cross-platform-actions/[email protected]
         with:
           operating_system: freebsd
-          version: '14.0'
+          version: '14.1'
           cpu_count: 4
+          memory: 8G
           shell: bash
           environment_variables: AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY 
AWS_SESSION_TOKEN AWS_DEFAULT_REGION
           run: |
-            sudo pkg install -y python3 devel/py-pip net/py-urllib3 
devel/py-awscli cmake
+            export ASSUME_ALWAYS_YES=yes
+            sudo -E pkg bootstrap -f
+            sudo -E pkg update -f
+            sudo -E pkg install -y python3 devel/py-pip net/py-urllib3 
devel/py-awscli cmake
             python3 -c "from urllib.request import urlretrieve; 
urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ 
env.BUILDER_VERSION }}/builder.pyz', 'builder')"
             chmod a+x builder
             ./builder build -p ${{ env.PACKAGE_NAME }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/aws-crt-python-0.35.0/.github/workflows/issue-regression-labeler.yml 
new/aws-crt-python-0.36.1/.github/workflows/issue-regression-labeler.yml
--- old/aws-crt-python-0.35.0/.github/workflows/issue-regression-labeler.yml    
2026-06-25 01:29:43.000000000 +0200
+++ new/aws-crt-python-0.36.1/.github/workflows/issue-regression-labeler.yml    
2026-07-22 19:44:45.000000000 +0200
@@ -24,9 +24,12 @@
     - name: Manage regression label
       env:
         GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        IS_REGRESSION: ${{ steps.check_regression.outputs.is_regression }}
+        ISSUE_NUMBER: ${{ github.event.issue.number }}
+        REPO: ${{ github.repository }}
       run: |
-        if [ "${{ steps.check_regression.outputs.is_regression }}" == "true" 
]; then
-          gh issue edit ${{ github.event.issue.number }} --add-label 
"potential-regression" -R ${{ github.repository }}
+        if [ "$IS_REGRESSION" == "true" ]; then
+          gh issue edit "$ISSUE_NUMBER" --add-label "potential-regression" -R 
"$REPO"
         else
-          gh issue edit ${{ github.event.issue.number }} --remove-label 
"potential-regression" -R ${{ github.repository }}
+          gh issue edit "$ISSUE_NUMBER" --remove-label "potential-regression" 
-R "$REPO"
         fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aws-crt-python-0.35.0/awscrt/s3.py 
new/aws-crt-python-0.36.1/awscrt/s3.py
--- old/aws-crt-python-0.35.0/awscrt/s3.py      2026-06-25 01:29:43.000000000 
+0200
+++ new/aws-crt-python-0.36.1/awscrt/s3.py      2026-07-22 19:44:45.000000000 
+0200
@@ -187,15 +187,10 @@
     Enable direct IO to bypass the OS cache. Helpful when the disk I/O 
outperforms the kernel cache.
 
     - Currently only Linux supports direct I/O. On unsupported platforms, the 
request transparently
-      falls back to buffered I/O and a warning is logged.
+        falls back to buffered I/O and a warning is logged.
     - Supported for both upload (send_filepath) and download (recv_filepath).
-    - For upload, part_size MUST be page-aligned when direct_io is enabled 
(hard fail otherwise).
-      The client controls part_size and is responsible for ensuring alignment.
-    - For download, this is a best-effort optimization. The request 
transparently falls back to
-      buffered I/O (logging a warning) if any of the following preconditions 
are not met:
-      part_size is not page-aligned, recv_file_position is not page-aligned 
(WRITE_TO_POSITION),
-      existing file size is not page-aligned (CREATE_OR_APPEND), or the last 
part has an
-      unaligned length (only that part falls back).
+    - This is a BEST-EFFORT optimization. The request transparently falls back 
to
+        buffered I/O (logging a warning) when direct io write fails.
     - Check NOTES for O_DIRECT for additional info 
https://man7.org/linux/man-pages/man2/openat.2.html
 
     In summary, O_DIRECT is a potentially powerful tool that should be used 
with caution.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aws-crt-python-0.35.0/test/test_mqtt5.py 
new/aws-crt-python-0.36.1/test/test_mqtt5.py
--- old/aws-crt-python-0.35.0/test/test_mqtt5.py        2026-06-25 
01:29:43.000000000 +0200
+++ new/aws-crt-python-0.36.1/test/test_mqtt5.py        2026-07-22 
19:44:45.000000000 +0200
@@ -1708,7 +1708,7 @@
         payload = str(uuid.uuid4())
         payload_bytes = payload.encode("utf-8")
 
-        NO_REDELIVERY_WAIT = 60.0
+        NO_REDELIVERY_WAIT = 35.0
 
         future_first_delivery = Future()
         future_unexpected_redelivery = Future()
@@ -1767,7 +1767,7 @@
         # Immediately invoke the publish acknowledgement using the acquired 
handle
         client.invoke_publish_acknowledgement(puback_handle_holder[0])
 
-        # Wait 60 seconds and confirm the broker does NOT re-deliver the 
message
+        # Wait 35 seconds and confirm the broker does NOT re-deliver the 
message
         # (because we sent the publish acknowledgement via 
invoke_publish_acknowledgement)
         redelivered = future_unexpected_redelivery.done() or \
             (not future_unexpected_redelivery.done() and
@@ -1956,6 +1956,86 @@
     def test_manual_publish_acknowledgement_qos0_acquire_is_none(self):
         
test_retry_wrapper(self._test_manual_publish_acknowledgement_qos0_acquire_is_none)
 
+    # Verify that the client sends PUBACK automatically when
+    # acquire_publish_acknowledgement_control() is not called.
+    # Confirmed by the absence of broker re-delivery.
+    def _test_auto_puback_no_duplicate(self):
+        input_host_name = _get_env_variable("AWS_TEST_MQTT5_IOT_CORE_HOST")
+        input_cert = _get_env_variable("AWS_TEST_MQTT5_IOT_CORE_RSA_CERT")
+        input_key = _get_env_variable("AWS_TEST_MQTT5_IOT_CORE_RSA_KEY")
+
+        client_id = create_client_id()
+        topic_filter = "test/MQTT5_AutoPuback_Python_" + client_id
+        payload = "hello"
+        payload_bytes = payload.encode("utf-8")
+
+        NO_REDELIVERY_WAIT = 35.0
+
+        future_first_delivery = Future()
+        future_unexpected_redelivery = Future()
+
+        def on_publish_received(publish_received_data: 
mqtt5.PublishReceivedData):
+            received_payload = publish_received_data.publish_packet.payload
+            if not future_first_delivery.done():
+                # First delivery: do NOT call 
acquire_publish_acknowledgement_control().
+                # The client should automatically send PUBACK.
+                future_first_delivery.set_result(received_payload)
+            elif received_payload == payload_bytes and not 
future_unexpected_redelivery.done():
+                # A second delivery of the same payload means the broker 
re-sent, this should NOT happen
+                future_unexpected_redelivery.set_result(received_payload)
+
+        tls_ctx_options = 
io.TlsContextOptions.create_client_with_mtls_from_path(
+            input_cert,
+            input_key
+        )
+        client_options = mqtt5.ClientOptions(
+            host_name=input_host_name,
+            port=8883
+        )
+        client_options.connect_options = 
mqtt5.ConnectPacket(client_id=client_id)
+        client_options.tls_ctx = io.ClientTlsContext(tls_ctx_options)
+
+        callbacks = Mqtt5TestCallbacks()
+        callbacks.on_publish_received = on_publish_received
+
+        client = self._create_client(client_options=client_options, 
callbacks=callbacks)
+        client.start()
+        callbacks.future_connection_success.result(TIMEOUT)
+
+        # Subscribe to the topic with QoS 1
+        subscriptions = [mqtt5.Subscription(topic_filter=topic_filter, 
qos=mqtt5.QoS.AT_LEAST_ONCE)]
+        subscribe_packet = mqtt5.SubscribePacket(subscriptions=subscriptions)
+        subscribe_future = client.subscribe(subscribe_packet=subscribe_packet)
+        suback_packet = subscribe_future.result(TIMEOUT)
+        self.assertIsInstance(suback_packet, mqtt5.SubackPacket)
+
+        # Publish a QoS 1 message with a unique UUID payload
+        publish_packet = mqtt5.PublishPacket(
+            payload=payload,
+            topic=topic_filter,
+            qos=mqtt5.QoS.AT_LEAST_ONCE)
+        publish_future = client.publish(publish_packet=publish_packet)
+        publish_completion_data = publish_future.result(TIMEOUT)
+        self.assertIsInstance(publish_completion_data.puback, 
mqtt5.PubackPacket)
+
+        # Wait for the first delivery
+        first_payload = future_first_delivery.result(TIMEOUT)
+        self.assertEqual(first_payload, payload_bytes)
+
+        # Wait 35 seconds and confirm the broker does NOT re-deliver the 
message
+        # (because auto-PUBACK was sent without calling 
acquire_publish_acknowledgement_control)
+        redelivered = 
self._wait_for_future_timeout(future_unexpected_redelivery, NO_REDELIVERY_WAIT)
+        self.assertFalse(redelivered,
+                         "Auto-PUBACK should have been sent "
+                         "(acquire_publish_acknowledgement_control() was not 
called), "
+                         "verified by absence of re-delivery")
+
+        client.stop()
+        callbacks.future_stopped.result(TIMEOUT)
+
+    def test_auto_puback_no_duplicate(self):
+        test_retry_wrapper(self._test_auto_puback_no_duplicate)
+
     # ==============================================================
     #             RETAIN TEST CASES
     # ==============================================================

Reply via email to