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 # ==============================================================
