Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package rumdl for openSUSE:Factory checked 
in at 2026-07-13 14:27:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rumdl (Old)
 and      /work/SRC/openSUSE:Factory/.rumdl.new.1991 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rumdl"

Mon Jul 13 14:27:42 2026 rev:86 rq:1365195 version:0.2.31

Changes:
--------
--- /work/SRC/openSUSE:Factory/rumdl/rumdl.changes      2026-07-10 
17:45:23.477586177 +0200
+++ /work/SRC/openSUSE:Factory/.rumdl.new.1991/rumdl.changes    2026-07-13 
14:28:15.787819517 +0200
@@ -1,0 +2,11 @@
+Mon Jul 13 04:49:57 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 0.2.31:
+  * Added
+    - action: install rumdl from GitHub Releases instead of pip
+      (7f69695)
+  * Performance
+    - reflow: optimize inline code mask calculation using
+      pre-extracted spans (27e5507)
+
+-------------------------------------------------------------------

Old:
----
  rumdl-0.2.30.obscpio

New:
----
  rumdl-0.2.31.obscpio

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

Other differences:
------------------
++++++ rumdl.spec ++++++
--- /var/tmp/diff_new_pack.Th4G6X/_old  2026-07-13 14:28:18.643917161 +0200
+++ /var/tmp/diff_new_pack.Th4G6X/_new  2026-07-13 14:28:18.647917298 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           rumdl
-Version:        0.2.30
+Version:        0.2.31
 Release:        0
 Summary:        Markdown Linter written in Rust
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.Th4G6X/_old  2026-07-13 14:28:18.679918391 +0200
+++ /var/tmp/diff_new_pack.Th4G6X/_new  2026-07-13 14:28:18.683918528 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/rvben/rumdl.git</param>
     <param name="scm">git</param>
     <param name="submodules">enable</param>
-    <param name="revision">refs/tags/v0.2.30</param>
+    <param name="revision">refs/tags/v0.2.31</param>
     <param name="match-tag">v*.*.*</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.Th4G6X/_old  2026-07-13 14:28:18.707919349 +0200
+++ /var/tmp/diff_new_pack.Th4G6X/_new  2026-07-13 14:28:18.707919349 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/rvben/rumdl.git</param>
-              <param 
name="changesrevision">12e34feb01c07d62a8161b5ac74940ffe8954c21</param></service></servicedata>
+              <param 
name="changesrevision">ade06b88ce3373f033c02892e135212ce2bfe6d0</param></service></servicedata>
 (No newline at EOF)
 

++++++ rumdl-0.2.30.obscpio -> rumdl-0.2.31.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/.github/workflows/test-action.yml 
new/rumdl-0.2.31/.github/workflows/test-action.yml
--- old/rumdl-0.2.30/.github/workflows/test-action.yml  2026-07-09 
19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/.github/workflows/test-action.yml  2026-07-12 
14:18:05.000000000 +0200
@@ -2,9 +2,9 @@
 on:
   push:
     branches: [main]
-    paths: ["action.yml", "scripts/rumdl-action.sh"]
+    paths: ["action.yml", "scripts/rumdl-action.sh", "__tests__/fixtures/**", 
".github/workflows/test-action.yml"]
   pull_request:
-    paths: ["action.yml", "scripts/rumdl-action.sh"]
+    paths: ["action.yml", "scripts/rumdl-action.sh", "__tests__/fixtures/**", 
".github/workflows/test-action.yml"]
   workflow_dispatch:
 
 concurrency:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/CHANGELOG.md 
new/rumdl-0.2.31/CHANGELOG.md
--- old/rumdl-0.2.30/CHANGELOG.md       2026-07-09 19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/CHANGELOG.md       2026-07-12 14:18:05.000000000 +0200
@@ -70,6 +70,17 @@
 
 
 
+
+## [0.2.31](https://github.com/rvben/rumdl/compare/v0.2.30...v0.2.31) - 
2026-07-12
+
+### Added
+
+- **action**: install rumdl from GitHub Releases instead of pip 
([7f69695](https://github.com/rvben/rumdl/commit/7f69695238e1ebffba75a82cf8336e777a965f4a))
+
+### Performance
+
+- **reflow**: optimize inline code mask calculation using pre-extracted spans 
([27e5507](https://github.com/rvben/rumdl/commit/27e55072be01e075a8b6f72b7409c4b29c5f56e1))
+
 ## [0.2.30](https://github.com/rvben/rumdl/compare/v0.2.29...v0.2.30) - 
2026-07-09
 
 ### Added
@@ -78,6 +89,7 @@
 
 ### Fixed
 
+- **MD013**: measure reflow shift against the source content column, so blocks 
nested under a padded list marker keep their position 
([54f1359](https://github.com/rvben/rumdl/commit/54f1359d1a147d1f260210cd160ec86de7de70dc))
 - **lint-context**: keep lazy continuation lines in their list block 
([a17f0af](https://github.com/rvben/rumdl/commit/a17f0af7b7d9c2ab71b7416472f05bb00f928d96))
 
 ## [0.2.29](https://github.com/rvben/rumdl/compare/v0.2.28...v0.2.29) - 
2026-07-09
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/Cargo.lock new/rumdl-0.2.31/Cargo.lock
--- old/rumdl-0.2.30/Cargo.lock 2026-07-09 19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/Cargo.lock 2026-07-12 14:18:05.000000000 +0200
@@ -2283,7 +2283,7 @@
 
 [[package]]
 name = "rumdl"
-version = "0.2.30"
+version = "0.2.31"
 dependencies = [
  "anyhow",
  "assert_cmd",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/Cargo.toml new/rumdl-0.2.31/Cargo.toml
--- old/rumdl-0.2.30/Cargo.toml 2026-07-09 19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/Cargo.toml 2026-07-12 14:18:05.000000000 +0200
@@ -1,6 +1,6 @@
 [package]
 name = "rumdl"
-version = "0.2.30"
+version = "0.2.31"
 edition = "2024"
 rust-version = "1.94.0"
 description = "A fast Markdown linter written in Rust (Ru(st) MarkDown Linter)"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/README.md new/rumdl-0.2.31/README.md
--- old/rumdl-0.2.30/README.md  2026-07-09 19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/README.md  2026-07-12 14:18:05.000000000 +0200
@@ -207,7 +207,7 @@
 mise install rumdl
 
 # Use a specific version for the project
-mise use [email protected]
+mise use [email protected]
 ```
 
 ### Using Nix (macOS/Linux)
@@ -436,7 +436,7 @@
 ```yaml
 repos:
   - repo: https://github.com/rvben/rumdl-pre-commit
-    rev: v0.2.30
+    rev: v0.2.31
     hooks:
       - id: rumdl      # Lint only; add args [--fix] to auto-fix
       - id: rumdl-fmt  # Pure format, always exits 0
@@ -452,7 +452,7 @@
 ```yaml
 repos:
   - repo: https://github.com/rvben/rumdl-pre-commit
-    rev: v0.2.30
+    rev: v0.2.31
     hooks:
       - id: rumdl
         args: [--fix]  # Auto-fix violations in place
@@ -469,7 +469,7 @@
 ```yaml
 repos:
   - repo: https://github.com/rvben/rumdl-pre-commit
-    rev: v0.2.30
+    rev: v0.2.31
     hooks:
       - id: rumdl
         args: [--no-exclude]  # Disable all exclude patterns
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/__tests__/fixtures/malformed/bad.md 
new/rumdl-0.2.31/__tests__/fixtures/malformed/bad.md
--- old/rumdl-0.2.30/__tests__/fixtures/malformed/bad.md        2026-07-09 
19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/__tests__/fixtures/malformed/bad.md        2026-07-12 
14:18:05.000000000 +0200
@@ -1,3 +1,2 @@
 # Bad markdown
-
-## No space after hash
+##No space after hash
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/docs/getting-started/quickstart.md 
new/rumdl-0.2.31/docs/getting-started/quickstart.md
--- old/rumdl-0.2.30/docs/getting-started/quickstart.md 2026-07-09 
19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/docs/getting-started/quickstart.md 2026-07-12 
14:18:05.000000000 +0200
@@ -96,7 +96,7 @@
 ```yaml
 repos:
   - repo: https://github.com/rvben/rumdl-pre-commit
-    rev: v0.2.30  # Use latest version
+    rev: v0.2.31  # Use latest version
     hooks:
       - id: rumdl
 ```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/docs/global-settings.md 
new/rumdl-0.2.31/docs/global-settings.md
--- old/rumdl-0.2.30/docs/global-settings.md    2026-07-09 19:39:55.000000000 
+0200
+++ new/rumdl-0.2.31/docs/global-settings.md    2026-07-12 14:18:05.000000000 
+0200
@@ -1376,7 +1376,7 @@
 
 ```yaml
 - repo: https://github.com/rvben/rumdl-pre-commit
-  rev: v0.2.30
+  rev: v0.2.31
   hooks:
     - id: rumdl
       args: [--config=.rumdl.toml]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/docs/mdformat-comparison.md 
new/rumdl-0.2.31/docs/mdformat-comparison.md
--- old/rumdl-0.2.30/docs/mdformat-comparison.md        2026-07-09 
19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/docs/mdformat-comparison.md        2026-07-12 
14:18:05.000000000 +0200
@@ -232,7 +232,7 @@
 
    # After
    - repo: https://github.com/rvben/rumdl-pre-commit
-     rev: v0.2.30
+     rev: v0.2.31
      hooks:
        - id: rumdl
     ```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/docs/usage/ci-cd.md 
new/rumdl-0.2.31/docs/usage/ci-cd.md
--- old/rumdl-0.2.30/docs/usage/ci-cd.md        2026-07-09 19:39:55.000000000 
+0200
+++ new/rumdl-0.2.31/docs/usage/ci-cd.md        2026-07-12 14:18:05.000000000 
+0200
@@ -40,7 +40,7 @@
 ```yaml
 - uses: rvben/rumdl@v0
   with:
-    version: "0.2.30"
+    version: "0.2.31"
     path: docs/
 ```
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/docs/usage/pre-commit.md 
new/rumdl-0.2.31/docs/usage/pre-commit.md
--- old/rumdl-0.2.30/docs/usage/pre-commit.md   2026-07-09 19:39:55.000000000 
+0200
+++ new/rumdl-0.2.31/docs/usage/pre-commit.md   2026-07-12 14:18:05.000000000 
+0200
@@ -13,7 +13,7 @@
 ```yaml title=".pre-commit-config.yaml"
 repos:
   - repo: https://github.com/rvben/rumdl-pre-commit
-    rev: v0.2.30  # Use latest version
+    rev: v0.2.31  # Use latest version
     hooks:
       - id: rumdl      # Lint only; add args [--fix] to auto-fix
       - id: rumdl-fmt  # Pure format, always exits 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/npm/cli-darwin-arm64/package.json 
new/rumdl-0.2.31/npm/cli-darwin-arm64/package.json
--- old/rumdl-0.2.30/npm/cli-darwin-arm64/package.json  2026-07-09 
19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/npm/cli-darwin-arm64/package.json  2026-07-12 
14:18:05.000000000 +0200
@@ -1,6 +1,6 @@
 {
   "name": "@rumdl/cli-darwin-arm64",
-  "version": "0.2.30",
+  "version": "0.2.31",
   "description": "rumdl binary for macOS ARM64 (Apple Silicon)",
   "license": "MIT",
   "repository": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/npm/cli-darwin-x64/package.json 
new/rumdl-0.2.31/npm/cli-darwin-x64/package.json
--- old/rumdl-0.2.30/npm/cli-darwin-x64/package.json    2026-07-09 
19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/npm/cli-darwin-x64/package.json    2026-07-12 
14:18:05.000000000 +0200
@@ -1,6 +1,6 @@
 {
   "name": "@rumdl/cli-darwin-x64",
-  "version": "0.2.30",
+  "version": "0.2.31",
   "description": "rumdl binary for macOS x64 (Intel)",
   "license": "MIT",
   "repository": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/npm/cli-linux-arm64/package.json 
new/rumdl-0.2.31/npm/cli-linux-arm64/package.json
--- old/rumdl-0.2.30/npm/cli-linux-arm64/package.json   2026-07-09 
19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/npm/cli-linux-arm64/package.json   2026-07-12 
14:18:05.000000000 +0200
@@ -1,6 +1,6 @@
 {
   "name": "@rumdl/cli-linux-arm64",
-  "version": "0.2.30",
+  "version": "0.2.31",
   "description": "rumdl binary for Linux ARM64 (glibc)",
   "license": "MIT",
   "repository": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/npm/cli-linux-arm64-musl/package.json 
new/rumdl-0.2.31/npm/cli-linux-arm64-musl/package.json
--- old/rumdl-0.2.30/npm/cli-linux-arm64-musl/package.json      2026-07-09 
19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/npm/cli-linux-arm64-musl/package.json      2026-07-12 
14:18:05.000000000 +0200
@@ -1,6 +1,6 @@
 {
   "name": "@rumdl/cli-linux-arm64-musl",
-  "version": "0.2.30",
+  "version": "0.2.31",
   "description": "rumdl binary for Linux ARM64 (musl/Alpine)",
   "license": "MIT",
   "repository": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/npm/cli-linux-x64/package.json 
new/rumdl-0.2.31/npm/cli-linux-x64/package.json
--- old/rumdl-0.2.30/npm/cli-linux-x64/package.json     2026-07-09 
19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/npm/cli-linux-x64/package.json     2026-07-12 
14:18:05.000000000 +0200
@@ -1,6 +1,6 @@
 {
   "name": "@rumdl/cli-linux-x64",
-  "version": "0.2.30",
+  "version": "0.2.31",
   "description": "rumdl binary for Linux x64 (glibc)",
   "license": "MIT",
   "repository": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/npm/cli-linux-x64-musl/package.json 
new/rumdl-0.2.31/npm/cli-linux-x64-musl/package.json
--- old/rumdl-0.2.30/npm/cli-linux-x64-musl/package.json        2026-07-09 
19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/npm/cli-linux-x64-musl/package.json        2026-07-12 
14:18:05.000000000 +0200
@@ -1,6 +1,6 @@
 {
   "name": "@rumdl/cli-linux-x64-musl",
-  "version": "0.2.30",
+  "version": "0.2.31",
   "description": "rumdl binary for Linux x64 (musl/Alpine)",
   "license": "MIT",
   "repository": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/npm/cli-win32-x64/package.json 
new/rumdl-0.2.31/npm/cli-win32-x64/package.json
--- old/rumdl-0.2.30/npm/cli-win32-x64/package.json     2026-07-09 
19:39:55.000000000 +0200
+++ new/rumdl-0.2.31/npm/cli-win32-x64/package.json     2026-07-12 
14:18:05.000000000 +0200
@@ -1,6 +1,6 @@
 {
   "name": "@rumdl/cli-win32-x64",
-  "version": "0.2.30",
+  "version": "0.2.31",
   "description": "rumdl binary for Windows x64",
   "license": "MIT",
   "repository": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/npm/rumdl/package.json 
new/rumdl-0.2.31/npm/rumdl/package.json
--- old/rumdl-0.2.30/npm/rumdl/package.json     2026-07-09 19:39:55.000000000 
+0200
+++ new/rumdl-0.2.31/npm/rumdl/package.json     2026-07-12 14:18:05.000000000 
+0200
@@ -1,6 +1,6 @@
 {
   "name": "rumdl",
-  "version": "0.2.30",
+  "version": "0.2.31",
   "description": "A fast Markdown linter written in Rust",
   "license": "MIT",
   "repository": {
@@ -33,12 +33,12 @@
     "node": ">=18.0.0"
   },
   "optionalDependencies": {
-    "@rumdl/cli-darwin-x64": "0.2.30",
-    "@rumdl/cli-darwin-arm64": "0.2.30",
-    "@rumdl/cli-linux-x64": "0.2.30",
-    "@rumdl/cli-linux-arm64": "0.2.30",
-    "@rumdl/cli-linux-x64-musl": "0.2.30",
-    "@rumdl/cli-linux-arm64-musl": "0.2.30",
-    "@rumdl/cli-win32-x64": "0.2.30"
+    "@rumdl/cli-darwin-x64": "0.2.31",
+    "@rumdl/cli-darwin-arm64": "0.2.31",
+    "@rumdl/cli-linux-x64": "0.2.31",
+    "@rumdl/cli-linux-arm64": "0.2.31",
+    "@rumdl/cli-linux-x64-musl": "0.2.31",
+    "@rumdl/cli-linux-arm64-musl": "0.2.31",
+    "@rumdl/cli-win32-x64": "0.2.31"
   }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/scripts/rumdl-action.sh 
new/rumdl-0.2.31/scripts/rumdl-action.sh
--- old/rumdl-0.2.30/scripts/rumdl-action.sh    2026-07-09 19:39:55.000000000 
+0200
+++ new/rumdl-0.2.31/scripts/rumdl-action.sh    2026-07-12 14:18:05.000000000 
+0200
@@ -4,14 +4,180 @@
 
 # Version: use input or default to latest
 rumdl_version="${GHA_RUMDL_VERSION:-}"
+rumdl_cmd="rumdl"
+
+install_via_pip() {
+    if [ -n "$rumdl_version" ]; then
+        echo "Installing rumdl (v$rumdl_version) via pip"
+        pip install rumdl=="$rumdl_version"
+    else
+        echo "Installing rumdl (latest) via pip"
+        pip install rumdl
+    fi
+    rumdl_cmd="rumdl"
+}
+
+# Prints "<target-triple> <archive-ext>" for this runner's OS/arch, or nothing 
if unmapped.
+resolve_target() {
+    local os_name arch_name platform_os platform_arch
+
+    os_name="${RUNNER_OS:-}"
+    case "$os_name" in
+    Linux) platform_os="linux" ;;
+    macOS) platform_os="macos" ;;
+    Windows) platform_os="windows" ;;
+    *)
+        case "$(uname -s)" in
+        Linux*) platform_os="linux" ;;
+        Darwin*) platform_os="macos" ;;
+        MINGW* | MSYS* | CYGWIN*) platform_os="windows" ;;
+        *) platform_os="" ;;
+        esac
+        ;;
+    esac
+
+    arch_name="${RUNNER_ARCH:-}"
+    case "$arch_name" in
+    X64 | x86_64 | AMD64) platform_arch="x86_64" ;;
+    ARM64 | arm64 | aarch64) platform_arch="aarch64" ;;
+    *)
+        case "$(uname -m)" in
+        x86_64 | amd64) platform_arch="x86_64" ;;
+        aarch64 | arm64) platform_arch="aarch64" ;;
+        *) platform_arch="" ;;
+        esac
+        ;;
+    esac
+
+    case "${platform_os}-${platform_arch}" in
+    linux-x86_64) echo "x86_64-unknown-linux-musl tar.gz" ;;
+    linux-aarch64) echo "aarch64-unknown-linux-musl tar.gz" ;;
+    macos-x86_64) echo "x86_64-apple-darwin tar.gz" ;;
+    macos-aarch64) echo "aarch64-apple-darwin tar.gz" ;;
+    windows-x86_64) echo "x86_64-pc-windows-msvc zip" ;;
+    *) echo "" ;;
+    esac
+}
+
+# Portable lowercase sha256 of $1: prefers sha256sum (Linux/Git Bash), falls 
back to
+# shasum -a 256 (macOS default toolset does not guarantee sha256sum).
+sha256_of() {
+    if command -v sha256sum >/dev/null 2>&1; then
+        sha256sum "$1" | awk '{print $1}'
+    else
+        shasum -a 256 "$1" | awk '{print $1}'
+    fi
+}
+
+# Attempts the prebuilt-binary install for target triple $1 / archive 
extension $2.
+# On success, sets rumdl_cmd to the binary's absolute path and returns 0.
+# Returns 1 (graceful fallback to pip) only for the 3 defined cases: 
unparseable "latest"
+# redirect, 404 on the asset, or 404 on its checksum. Any other failure 
(network error,
+# unexpected HTTP status, checksum mismatch) is a hard exit — never silently 
falls back,
+# since that would mask connectivity flakiness or a corrupted/tampered 
download as an
+# unsupported-platform case.
+try_install_binary() {
+    local target="$1" ext="$2" tag effective_url curl_status
+
+    if [ -n "$rumdl_version" ]; then
+        tag="v${rumdl_version}"
+    else
+        curl_status=0
+        effective_url=$(curl -fsSLo /dev/null --retry 3 -w '%{url_effective}' 
"https://github.com/rvben/rumdl/releases/latest";) || curl_status=$?
+        if [ "$curl_status" -ne 0 ]; then
+            echo "::error::Could not reach GitHub to resolve the latest rumdl 
release (curl exit $curl_status)"
+            exit 1
+        fi
+        if [[ "$effective_url" =~ /tag/(v[0-9][^/]*)$ ]]; then
+            tag="${BASH_REMATCH[1]}"
+        else
+            echo "Latest-release redirect did not resolve to a parseable tag 
($effective_url) — falling back to pip"
+            return 1
+        fi
+    fi
+    echo "Resolved release: $tag"
+
+    local asset="rumdl-${tag}-${target}.${ext}"
+    local checksum_asset="${asset}.sha256"
+    local base_url="https://github.com/rvben/rumdl/releases/download/${tag}";
+    local workdir
+    workdir=$(mktemp -d) || exit 1
+
+    local subshell_status=0
+    (
+        cd "$workdir" || exit 1
+
+        echo "Downloading $asset"
+        http_code=$(curl -sL --retry 3 -o "$asset" -w '%{http_code}' 
"${base_url}/${asset}" || echo "000")
+        if [ "$http_code" = "404" ]; then
+            echo "No prebuilt binary published for $target — falling back to 
pip"
+            exit 2
+        elif [ "$http_code" != "200" ]; then
+            echo "::error::Failed to download $asset (HTTP $http_code)"
+            exit 1
+        fi
+
+        echo "Downloading $checksum_asset"
+        http_code=$(curl -sL --retry 3 -o "$checksum_asset" -w '%{http_code}' 
"${base_url}/${checksum_asset}" || echo "000")
+        if [ "$http_code" = "404" ]; then
+            echo "No checksum published for $asset — falling back to pip"
+            exit 2
+        elif [ "$http_code" != "200" ]; then
+            echo "::error::Failed to download $checksum_asset (HTTP 
$http_code)"
+            exit 1
+        fi
+
+        echo "Verifying checksum"
+        expected_hash=$(awk '{print $1}' "$checksum_asset" | tr -d '\r' | tr 
'[:upper:]' '[:lower:]')
+        actual_hash=$(sha256_of "$asset" | tr '[:upper:]' '[:lower:]')
+        if [ "$expected_hash" != "$actual_hash" ]; then
+            echo "::error::Checksum mismatch for $asset (expected 
$expected_hash, got $actual_hash)"
+            exit 1
+        fi
+
+        echo "Extracting $asset"
+        if [ "$ext" = "zip" ]; then
+            if [ -x "/c/Windows/System32/tar.exe" ]; then
+                /c/Windows/System32/tar.exe -xf "$asset"
+            else
+                powershell -NoProfile -Command "Expand-Archive -Path '$asset' 
-DestinationPath '.' -Force"
+            fi
+        else
+            tar -xzf "$asset"
+        fi
+    ) || subshell_status=$?
+
+    case "$subshell_status" in
+    0) : ;;
+    2) return 1 ;;
+    *) exit "$subshell_status" ;;
+    esac
+
+    if [ "$ext" = "zip" ]; then
+        rumdl_cmd="${workdir}/rumdl.exe"
+    else
+        rumdl_cmd="${workdir}/rumdl"
+        chmod +x "$rumdl_cmd"
+    fi
+    echo "Installed rumdl binary: $rumdl_cmd"
+    return 0
+}
 
 echo
-if [ -n "$rumdl_version" ]; then
-    echo "Installing rumdl (v$rumdl_version)"
-    pip install rumdl=="$rumdl_version"
+target_info=$(resolve_target)
+if [ -n "$target_info" ]; then
+    if command -v curl >/dev/null 2>&1; then
+        read -r target ext <<<"$target_info"
+        if ! try_install_binary "$target" "$ext"; then
+            install_via_pip
+        fi
+    else
+        echo "curl not found — falling back to pip"
+        install_via_pip
+    fi
 else
-    echo "Installing rumdl (latest)"
-    pip install rumdl
+    echo "No prebuilt rumdl binary for RUNNER_OS='${RUNNER_OS:-}' 
RUNNER_ARCH='${RUNNER_ARCH:-}' — falling back to pip"
+    install_via_pip
 fi
 
 echo
@@ -75,7 +241,7 @@
 
 # Run rumdl and capture output
 set +e
-results=$(rumdl check "${lint_paths[@]}" "${rumdl_args[@]}" 2>&1)
+results=$("$rumdl_cmd" check "${lint_paths[@]}" "${rumdl_args[@]}" 2>&1)
 exit_code=$?
 set -e
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rumdl-0.2.30/src/utils/text_reflow.rs 
new/rumdl-0.2.31/src/utils/text_reflow.rs
--- old/rumdl-0.2.30/src/utils/text_reflow.rs   2026-07-09 19:39:55.000000000 
+0200
+++ new/rumdl-0.2.31/src/utils/text_reflow.rs   2026-07-12 14:18:05.000000000 
+0200
@@ -123,61 +123,31 @@
 /// Build a boolean mask indicating which character positions are inside 
inline code spans.
 /// Handles single, double, and triple backtick delimiters.
 fn compute_inline_code_mask(text: &str) -> Vec<bool> {
+    let code_spans = extract_code_spans(text);
     let chars: Vec<char> = text.chars().collect();
-    let len = chars.len();
-    let mut mask = vec![false; len];
-    let mut i = 0;
-
-    while i < len {
-        if chars[i] == '`' {
-            // Count opening backticks
-            let open_start = i;
-            let mut backtick_count = 0;
-            while i < len && chars[i] == '`' {
-                backtick_count += 1;
-                i += 1;
-            }
-
-            // Find matching closing backticks (same count)
-            let mut found_close = false;
-            let content_start = i;
-            while i < len {
-                if chars[i] == '`' {
-                    let close_start = i;
-                    let mut close_count = 0;
-                    while i < len && chars[i] == '`' {
-                        close_count += 1;
-                        i += 1;
-                    }
-                    if close_count == backtick_count {
-                        // Mark the content between the delimiters (not the 
backticks themselves)
-                        for item in 
mask.iter_mut().take(close_start).skip(content_start) {
-                            *item = true;
-                        }
-                        // Also mark the opening and closing backticks
-                        for item in 
mask.iter_mut().take(content_start).skip(open_start) {
-                            *item = true;
-                        }
-                        for item in mask.iter_mut().take(i).skip(close_start) {
-                            *item = true;
-                        }
-                        found_close = true;
-                        break;
-                    }
-                } else {
-                    i += 1;
-                }
-            }
-
-            if !found_close {
-                // No matching close — backticks are literal, not code span
-                i = open_start + backtick_count;
-            }
-        } else {
-            i += 1;
+    let mut mask = vec![false; chars.len()];
+    let mut span_it = code_spans.iter().peekable();
+    let mut byte_idx = 0;
+    // Map character indices to byte-offset based code spans in a single pass.
+    // Since code spans are sorted by start offset, we advance the span 
iterator
+    // as our character byte index passes the end of the current span.
+    for (char_idx, ch) in chars.iter().enumerate() {
+        let next_byte_idx = byte_idx + ch.len_utf8();
+        while let Some(span) = span_it.peek() {
+            if span.end <= byte_idx {
+                span_it.next();
+            } else {
+                break;
+            }
+        }
+        if let Some(span) = span_it.peek()
+            && byte_idx >= span.start
+            && byte_idx < span.end
+        {
+            mask[char_idx] = true;
         }
+        byte_idx = next_byte_idx;
     }
-
     mask
 }
 
@@ -823,6 +793,26 @@
     spans
 }
 
+#[derive(Debug, Clone)]
+struct CodeSpan {
+    start: usize,
+    end: usize,
+}
+
+fn extract_code_spans(text: &str) -> Vec<CodeSpan> {
+    let mut spans = Vec::new();
+    let parser = Parser::new(text).into_offset_iter();
+    for (event, range) in parser {
+        if let Event::Code(_) = event {
+            spans.push(CodeSpan {
+                start: range.start,
+                end: range.end,
+            });
+        }
+    }
+    spans
+}
+
 #[derive(Debug, Clone)]
 struct LinkSpan {
     start: usize,

++++++ rumdl.obsinfo ++++++
--- /var/tmp/diff_new_pack.Th4G6X/_old  2026-07-13 14:28:19.823957503 +0200
+++ /var/tmp/diff_new_pack.Th4G6X/_new  2026-07-13 14:28:19.827957640 +0200
@@ -1,5 +1,5 @@
 name: rumdl
-version: 0.2.30
-mtime: 1783618795
-commit: 12e34feb01c07d62a8161b5ac74940ffe8954c21
+version: 0.2.31
+mtime: 1783858685
+commit: ade06b88ce3373f033c02892e135212ce2bfe6d0
 

++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/rumdl/vendor.tar.zst 
/work/SRC/openSUSE:Factory/.rumdl.new.1991/vendor.tar.zst differ: char 7, line 1

Reply via email to