Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package melange for openSUSE:Factory checked in at 2026-01-21 14:18:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/melange (Old) and /work/SRC/openSUSE:Factory/.melange.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "melange" Wed Jan 21 14:18:39 2026 rev:132 rq:1328424 version:0.39.0 Changes: -------- --- /work/SRC/openSUSE:Factory/melange/melange.changes 2026-01-19 18:41:29.886481890 +0100 +++ /work/SRC/openSUSE:Factory/.melange.new.1928/melange.changes 2026-01-21 14:18:44.678339525 +0100 @@ -1,0 +2,7 @@ +Wed Jan 21 06:09:54 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 0.39.0: + * feat: add retry with backoff to git-checkout (#2301) + * build(deps): bump the gomod group with 2 updates (#2303) + +------------------------------------------------------------------- Old: ---- melange-0.38.1.obscpio New: ---- melange-0.39.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ melange.spec ++++++ --- /var/tmp/diff_new_pack.NEYAmc/_old 2026-01-21 14:18:47.030437735 +0100 +++ /var/tmp/diff_new_pack.NEYAmc/_new 2026-01-21 14:18:47.038438068 +0100 @@ -17,7 +17,7 @@ Name: melange -Version: 0.38.1 +Version: 0.39.0 Release: 0 Summary: Build APKs from source code License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.NEYAmc/_old 2026-01-21 14:18:47.106440908 +0100 +++ /var/tmp/diff_new_pack.NEYAmc/_new 2026-01-21 14:18:47.118441409 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/chainguard-dev/melange</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v0.38.1</param> + <param name="revision">v0.39.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.NEYAmc/_old 2026-01-21 14:18:47.194444583 +0100 +++ /var/tmp/diff_new_pack.NEYAmc/_new 2026-01-21 14:18:47.202444917 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/chainguard-dev/melange</param> - <param name="changesrevision">017bceff95746e8caafa409c82355278f7dc3c02</param></service></servicedata> + <param name="changesrevision">3942cd9a018273b6fbbebc4597fdba081c3d750c</param></service></servicedata> (No newline at EOF) ++++++ melange-0.38.1.obscpio -> melange-0.39.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.38.1/go.mod new/melange-0.39.0/go.mod --- old/melange-0.38.1/go.mod 2026-01-18 18:12:25.000000000 +0100 +++ new/melange-0.39.0/go.mod 2026-01-20 15:43:08.000000000 +0100 @@ -3,10 +3,10 @@ go 1.25.0 require ( - chainguard.dev/apko v1.0.3 + chainguard.dev/apko v1.0.4 github.com/chainguard-dev/clog v1.8.0 github.com/chainguard-dev/go-pkgconfig v0.0.0-20240404163941-6351b37b2a10 - github.com/chainguard-dev/yam v0.2.44 + github.com/chainguard-dev/yam v0.2.45 github.com/charmbracelet/log v0.4.2 github.com/docker/cli v29.1.5+incompatible github.com/docker/docker v28.5.2+incompatible @@ -75,7 +75,7 @@ require ( chainguard.dev/go-grpc-kit v0.17.15 // indirect - chainguard.dev/sdk v0.1.46 // indirect + chainguard.dev/sdk v0.1.47 // indirect cloud.google.com/go/auth v0.18.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.38.1/go.sum new/melange-0.39.0/go.sum --- old/melange-0.38.1/go.sum 2026-01-18 18:12:25.000000000 +0100 +++ new/melange-0.39.0/go.sum 2026-01-20 15:43:08.000000000 +0100 @@ -1,9 +1,9 @@ -chainguard.dev/apko v1.0.3 h1:wFFXYyNx5mpcvLL3eQ59r1hEMiY+aDPOx2y6lDaaves= -chainguard.dev/apko v1.0.3/go.mod h1:hiAOfLcuA+U2uwmwU1DPORZ7UJAdlooKmNI0qwYsyM4= +chainguard.dev/apko v1.0.4 h1:yelNSoarpWWm2vWFKy9Ys7UK2OJp1U7gP8ZpxRUogZU= +chainguard.dev/apko v1.0.4/go.mod h1:jW8B5bVi+WqTL5HS50mpe0KlOMB0SG7Xj4yjOM2ryWs= chainguard.dev/go-grpc-kit v0.17.15 h1:y+FBjta2lsC0XxlkG+W5P1VxYl0zG74GRvoYN2o+p7s= chainguard.dev/go-grpc-kit v0.17.15/go.mod h1:1wAVAX2CCamtFlfMs9PFzfgQQxX1/TQyF6cbWApbJ2U= -chainguard.dev/sdk v0.1.46 h1:tDyxr/VtSlSdAoQJjtN0iHqMYrkShDM2sk4xJpzMYBg= -chainguard.dev/sdk v0.1.46/go.mod h1:b4isqRFaCBaRuVcHUrFeaqvt3d8J9GNOMS0RAyoawXw= +chainguard.dev/sdk v0.1.47 h1:BQEVQWj1ZnL9DNgHWcAVbj8BNNN/blAZHhbWGKSKzZI= +chainguard.dev/sdk v0.1.47/go.mod h1:b4isqRFaCBaRuVcHUrFeaqvt3d8J9GNOMS0RAyoawXw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go/auth v0.18.0 h1:wnqy5hrv7p3k7cShwAU/Br3nzod7fxoqG+k0VZ+/Pk0= cloud.google.com/go/auth v0.18.0/go.mod h1:wwkPM1AgE1f2u6dG443MiWoD8C3BtOywNsUMcUTVDRo= @@ -44,8 +44,8 @@ github.com/chainguard-dev/clog v1.8.0/go.mod h1:5MQOZi+Iu7fV7GcJG8ag8rCB5elEOpqRMKEASgnGVdo= github.com/chainguard-dev/go-pkgconfig v0.0.0-20240404163941-6351b37b2a10 h1:XR2vgQC024I9/boh9r1ihVv8Z14+pbvWqXeYMCnZJpc= github.com/chainguard-dev/go-pkgconfig v0.0.0-20240404163941-6351b37b2a10/go.mod h1:1p6+MesLcjKeON5BRWa7I87mvAY0QmKjgginIM3w6BI= -github.com/chainguard-dev/yam v0.2.44 h1:7KVpFJ3RZb85NDrAMrlFTx+Bq4SlMyg/3Lpl8o3N/58= -github.com/chainguard-dev/yam v0.2.44/go.mod h1:Dwk2i+W3mifDxxM5nILZrvUs9GYZsIjVjEONgKMtBrI= +github.com/chainguard-dev/yam v0.2.45 h1:A/izIRL1ytLO7LGRgR4KDl4yIyxF4i+JxlOu5jMTB6c= +github.com/chainguard-dev/yam v0.2.45/go.mod h1:Dwk2i+W3mifDxxM5nILZrvUs9GYZsIjVjEONgKMtBrI= github.com/charmbracelet/colorprofile v0.3.2 h1:9J27WdztfJQVAQKX2WOlSSRB+5gaKqqITmrvb1uTIiI= github.com/charmbracelet/colorprofile v0.3.2/go.mod h1:mTD5XzNeWHj8oqHb+S1bssQb7vIHbepiebQ2kPKVKbI= github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.38.1/pkg/build/pipelines/README.md new/melange-0.39.0/pkg/build/pipelines/README.md --- old/melange-0.38.1/pkg/build/pipelines/README.md 2026-01-18 18:12:25.000000000 +0100 +++ new/melange-0.39.0/pkg/build/pipelines/README.md 2026-01-20 15:43:08.000000000 +0100 @@ -47,6 +47,9 @@ | depth | false | The depth to use when cloning. Use -1 to get full branch history. If 'branch' and 'expected-commit' are provided the default is -1. Otherwise, default is to use '1' (shallow clone). | unset | | destination | false | The path to check out the sources to. | . | | expected-commit | false | The expected commit hash | | +| initial-backoff | false | Initial backoff duration in seconds before first retry. | 2 | +| max-backoff | false | Maximum backoff duration in seconds between retries. | 60 | +| max-retries | false | Maximum number of retry attempts for git clone operation on failure. | 3 | | recurse-submodules | false | Indicates whether --recurse-submodules should be passed to git clone. | false | | repository | true | The repository to check out sources from. | | | sparse-paths | false | List of directory paths to checkout when using sparse-checkout (cone mode). This is useful for monorepos where you only need specific subdirectories. When specified, only these directories will be checked out from the repository. Uses cone mode for optimal performance. Example: sparse-paths: - omnibump - shared/lib | | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.38.1/pkg/build/pipelines/git-checkout.yaml new/melange-0.39.0/pkg/build/pipelines/git-checkout.yaml --- old/melange-0.38.1/pkg/build/pipelines/git-checkout.yaml 2026-01-18 18:12:25.000000000 +0100 +++ new/melange-0.39.0/pkg/build/pipelines/git-checkout.yaml 2026-01-20 15:43:08.000000000 +0100 @@ -67,7 +67,18 @@ sparse-paths: - omnibump - shared/lib - + max-retries: + description: | + Maximum number of retry attempts for git clone operation on failure. + default: "3" + initial-backoff: + description: | + Initial backoff duration in seconds before first retry. + default: "2" + max-backoff: + description: | + Maximum backoff duration in seconds between retries. + default: "60" pipeline: - runs: | @@ -78,6 +89,54 @@ fail() { msg FAIL "$@"; exit 1; } vr() { msg "execute:" "$@"; "$@"; } + # Retry function with exponential backoff and jitter + retry_with_backoff() { + local max_retries=$1 + local initial_backoff=$2 + local max_backoff=$3 + shift 3 + local attempt=0 + local backoff=$initial_backoff + + while [ $attempt -le $max_retries ]; do + if [ $attempt -gt 0 ]; then + msg "Retry attempt $attempt/$max_retries after ${backoff}s backoff..." + fi + + if "$@"; then + return 0 + fi + + attempt=$((attempt + 1)) + if [ $attempt -gt $max_retries ]; then + msg "All $max_retries retry attempts exhausted" + return 1 + fi + + # Calculate jitter: random value between 0 and backoff + # Using $RANDOM (bash built-in) or fallback to basic arithmetic + local jitter=0 + if [ -n "$RANDOM" ]; then + jitter=$((RANDOM % (backoff + 1))) + else + # Fallback: use process ID as pseudo-random seed + jitter=$((($$ * attempt) % (backoff + 1))) + fi + + local sleep_time=$((backoff + jitter)) + msg "Waiting ${sleep_time}s before retry (backoff: ${backoff}s, jitter: ${jitter}s)..." + sleep $sleep_time + + # Exponential backoff: double the backoff time + backoff=$((backoff * 2)) + if [ $backoff -gt $max_backoff ]; then + backoff=$max_backoff + fi + done + + return 1 + } + process_cherry_picks() { local cpicksf="$1" oifs="$IFS" count=0 local fetched_branches="" @@ -156,9 +215,11 @@ local repo=$1 dest=${2:-.} depth=${3:-"unset"} branch=$4 local tag=$5 expcommit=$6 recurse=${7:-false} local cherry_pick="$8" sparse_paths="$9" + local max_retries="${10:-3}" initial_backoff="${11:-2}" max_backoff="${12:-60}" msg "repo='$repo' dest='$dest' depth='$depth' branch='$branch'" \ "tag='$tag' expcommit='$expcommit' recurse='$recurse'" \ - "sparse_paths='$sparse_paths'" + "sparse_paths='$sparse_paths' max_retries='$max_retries'" \ + "initial_backoff='$initial_backoff' max_backoff='$max_backoff'" case "$recurse" in true|false) :;; @@ -204,11 +265,14 @@ vr git config --global --add safe.directory "$workdir" vr git config --global --add safe.directory "$dest_fullpath" - vr git clone $quiet "--origin=$remote" \ + msg "Attempting git clone with retry (max_retries=$max_retries, initial_backoff=${initial_backoff}s, max_backoff=${max_backoff}s)" + retry_with_backoff "$max_retries" "$initial_backoff" "$max_backoff" \ + git clone $quiet "--origin=$remote" \ "--config=user.name=Melange Build" \ "[email protected]" \ $flags \ - ${depthflag:+"$depthflag"} "$repo" "$workdir" + ${depthflag:+"$depthflag"} "$repo" "$workdir" || + fail "git clone failed after $max_retries retries" vr cd "$workdir" @@ -296,6 +360,8 @@ "${{inputs.depth}}" "${{inputs.branch}}" \ "${{inputs.tag}}" "${{inputs.expected-commit}}" \ "${{inputs.recurse-submodules}}" "$cpickf" \ - "${{inputs.sparse-paths}}" + "${{inputs.sparse-paths}}" \ + "${{inputs.max-retries}}" "${{inputs.initial-backoff}}" \ + "${{inputs.max-backoff}}" rm -f "$cpickf" ++++++ melange.obsinfo ++++++ --- /var/tmp/diff_new_pack.NEYAmc/_old 2026-01-21 14:18:49.566543628 +0100 +++ /var/tmp/diff_new_pack.NEYAmc/_new 2026-01-21 14:18:49.626546133 +0100 @@ -1,5 +1,5 @@ name: melange -version: 0.38.1 -mtime: 1768756345 -commit: 017bceff95746e8caafa409c82355278f7dc3c02 +version: 0.39.0 +mtime: 1768920188 +commit: 3942cd9a018273b6fbbebc4597fdba081c3d750c ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/melange/vendor.tar.gz /work/SRC/openSUSE:Factory/.melange.new.1928/vendor.tar.gz differ: char 13, line 1
