ungoogled-chromium: Updated to 148.0.7778.167-1.1 and simplified checkver and autoupdate#17879
ungoogled-chromium: Updated to 148.0.7778.167-1.1 and simplified checkver and autoupdate#17879o-l-a-v wants to merge 1 commit into
Conversation
…kver and autoupdate
📝 WalkthroughWalkthroughThis PR updates the ungoogled-chromium Scoop package manifest from version 147.0.7727.137-1.1 to 148.0.7778.167-1.1. The change replaces download URLs, hashes, and extraction directories for 64bit, 32bit, and arm64 Windows architectures. The manifest's version-detection mechanism is reworked from a GitHub repository + regex pattern to the GitHub Releases API with a JSONPath filter, and the autoupdate configuration is simplified by removing per-architecture hash scraping while retaining URL and extraction directory updates. Estimated code review effort🎯 2 (Simple) | ⏱️ ~8 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
bucket/ungoogled-chromium.json (1)
41-60: Please run the standard manifest checks locally before merge.Scoop’s contribution guide asks bucket contributors to test the manifest and confirm autoupdate, and the autoupdate wiki specifically recommends validating the generated
url,hash, andextract_dirwithcheckver.ps1. (github.com)Suggested commands
scoop config debug true scoop config gh_token <your-github-token> .\bin\checkver.ps1 -App ungoogled-chromium -f .\bin\formatjson.ps1 -App ungoogled-chromium scoop install bucket/ungoogled-chromium.json -a 64bit scoop install bucket/ungoogled-chromium.json -a 32bit scoop install bucket/ungoogled-chromium.json -a arm64As per coding guidelines: "Provide clear instructions for testing the manifest locally before submission."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@bucket/ungoogled-chromium.json` around lines 41 - 60, Run the standard local manifest checks and update the PR with validation results: execute .\bin\checkver.ps1 -App ungoogled-chromium -f to validate the checkver output, then .\bin\formatjson.ps1 -App ungoogled-chromium to update the manifest; confirm the autoupdate block’s generated url, hash and extract_dir values for each architecture (64bit/32bit/arm64) are correct and that the URLs in the autoupdate "url" fields actually download the expected zip, and include the successful install test results (scoop install bucket/ungoogled-chromium.json -a 64bit/32bit/arm64) in the PR description so maintainers can see the manifest passed local validation.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@bucket/ungoogled-chromium.json`:
- Around line 42-43: The checkver.jsonpath currently ("$[?(@.prerelease ==
false)].tag_name") can match multiple releases; update the manifest's checkver
to deterministically pick a single tag by narrowing the JSONPath to select a
single element (e.g. index the filtered array like "$[?(@.prerelease ==
false)][0].tag_name") or alternatively add a "reverse": true or a "regex" to the
checkver block so the selected tag is explicit and reproducible; modify the
checkver entry in bucket/ungoogled-chromium.json accordingly.
---
Nitpick comments:
In `@bucket/ungoogled-chromium.json`:
- Around line 41-60: Run the standard local manifest checks and update the PR
with validation results: execute .\bin\checkver.ps1 -App ungoogled-chromium -f
to validate the checkver output, then .\bin\formatjson.ps1 -App
ungoogled-chromium to update the manifest; confirm the autoupdate block’s
generated url, hash and extract_dir values for each architecture
(64bit/32bit/arm64) are correct and that the URLs in the autoupdate "url" fields
actually download the expected zip, and include the successful install test
results (scoop install bucket/ungoogled-chromium.json -a 64bit/32bit/arm64) in
the PR description so maintainers can see the manifest passed local validation.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 90ee6abf-124e-4a0a-a96d-739bbc89f2c3
📒 Files selected for processing (1)
bucket/ungoogled-chromium.json
| "url": "https://api.github.com/repos/ungoogled-software/ungoogled-chromium-windows/releases", | ||
| "jsonpath": "$[?(@.prerelease == false)].tag_name" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Verify what the current selector is effectively targeting: a releases array, not a single tag.
curl -fsSL https://api.github.com/repos/ungoogled-software/ungoogled-chromium-windows/releases \
| jq '[.[] | select(.prerelease == false) | .tag_name][0:10]'
# Expected result:
# - More than one tag_name is returned.
# - If so, the current JSONPath is multi-valued and should be narrowed or paired with a regex.Repository: ScoopInstaller/Extras
Length of output: 305
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# 1) Inspect the manifest’s checkver block
echo "=== bucket/ungoogled-chromium.json (checkver context) ==="
sed -n '1,120p' bucket/ungoogled-chromium.json | nl -ba | sed -n '30,90p'
# Also show the exact lines around the referenced location (42-43)
echo "=== Lines 35-55 ==="
sed -n '35,55p' bucket/ungoogled-chromium.json | nl -ba
# 2) Detect line endings (CRLF vs LF)
echo "=== Line endings ==="
file bucket/ungoogled-chromium.json
python3 - <<'PY'
p="bucket/ungoogled-chromium.json"
with open(p,'rb') as f:
data=f.read()
crlf=data.count(b'\r\n')
lf=data.count(b'\n')
cr=data.count(b'\r')
print("CRLF count:", crlf)
print("LF count:", lf)
print("CR count:", cr)
PYRepository: ScoopInstaller/Extras
Length of output: 184
🏁 Script executed:
#!/bin/bash
set -euo pipefail
p="bucket/ungoogled-chromium.json"
echo "=== File exists? ==="
ls -la "$p" || exit 1
echo "=== Lines 30-90 (with line numbers) ==="
awk 'NR>=30 && NR<=90 {printf "%5d %s\n", NR, $0}' "$p"
echo "=== Lines 35-55 (with line numbers) ==="
awk 'NR>=35 && NR<=55 {printf "%5d %s\n", NR, $0}' "$p"
echo "=== Line endings (CRLF vs LF) ==="
file "$p" || true
python3 - <<'PY'
p="bucket/ungoogled-chromium.json"
data=open(p,'rb').read()
print("CRLF count:", data.count(b'\r\n'))
print("LF count:", data.count(b'\n'))
print("CR count:", data.count(b'\r'))
PY
echo "=== Print checkver block only (simple extraction) ==="
python3 - <<'PY'
import re, itertools
p="bucket/ungoogled-chromium.json"
s=open(p,'r',encoding='utf-8',errors='replace').read()
m=re.search(r'"checkver"\s*:\s*\{.*?\}\s*(,|\n\s*\})', s, flags=re.S)
print(m.group(0)[:2000]+'...' if m else "No match found")
PYRepository: ScoopInstaller/Extras
Length of output: 3305
🌐 Web query:
Scoop Extras wiki App-Manifest-Autoupdate checkver jsonpath multi value regex
💡 Result:
Scoop “extras” (Scoop’s app-manifest wiki/docs for Extras) uses Scoop’s checkver autoupdate support. To use JSONPath and regex for autoupdate, you add a checkver block to your app manifest so Scoop can extract the latest version for scoop update. 1) Relevant manifest fields - checkver: defines how to find the latest version for autoupdate.[1][2] - checkver.url: endpoint/page to fetch the data from.[1][2] - checkver.jp / checkver.jsonpath: JSONPath expression used to extract the version from a JSON endpoint.[1][3] - checkver.regex / checkver.re: regex used to match/extract the version string (typically from the extracted text/JSONPath result or from plain text sources, depending on the checkver setup).[1][3] 2) How JSONPath + regex works (including “multi value”) - Scoop’s checkver.ps1 reads checkver.jp / checkver.jsonpath into $jsonpath and reads checkver.regex / checkver.re into $regex.[3] - If both JSONPath and regex are set, Scoop uses JSONPath (checkver.jsonpath) to extract a string, then applies regex to determine the version.[1][3] - Scoop’s JSONPath extraction logic can handle cases where JSONPath returns multiple versions/matches; the project includes logic aimed at extracting multiple versions and selecting first vs last via reverse: true behavior.[1][4][2] 3) Practical pattern to achieve “multi value regex” behavior - Use JSONPath filters that can return multiple candidate values from the JSON (e.g., a JSONPath predicate selecting multiple items). - Then add checkver.regex to refine the candidates down to the exact version format you want. This is the intended combination of JSONPath extraction + regex matching described in the autoupdate docs.[1][3] If you paste your current checkver snippet (especially the JSON structure + your checkver.jsonpath / checkver.regex), I can rewrite it into a working Scoop checkver block that correctly handles multiple matches.
Citations:
- 1: https://github.com/ScoopInstaller/Scoop/wiki/App-Manifest-Autoupdate
- 2: https://scoop.netlify.app/concepts/
- 3: https://github.com/ScoopInstaller/Scoop/blob/b588a06e/bin/checkver.ps1
- 4: https://github.com/ScoopInstaller/Scoop/wiki/App-Manifests
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Locate and inspect Scoop's checkver logic (from repository checkout)
# Note: ScoopInstaller/Extras may not vendor Scoop's bin/, so try to find checkver.ps1 in repo.
echo "=== Find checkver.ps1 ==="
fd -a checkver.ps1 -t f . || true
# If not present, try common path (Extras sometimes includes bin scripts?); otherwise, just search for "jsonpath" handling in any checkver.ps1 found.
echo "=== Search for checkver.ps1 content (jsonpath handling) ==="
if fd -a checkver.ps1 -t f . | head -n 1 | grep -q .; then
p="$(fd -a checkver.ps1 -t f . | head -n 1)"
echo "Using: $p"
echo "=== Relevant excerpt around jsonpath/regex selection ==="
rg -n "jsonpath|reverse|regex|match|Select|multiple" "$p" | head -n 80
echo "=== Show lines around first jsonpath match ==="
line="$(rg -n "jsonpath" "$p" | head -n 1 | cut -d: -f1)"
start=$((line-30)); end=$((line+80))
awk -v s="$start" -v e="$end" 'NR>=s && NR<=e {print NR":"$0}' "$p" | head -n 120
else
echo "No checkver.ps1 found in this repo checkout."
fiRepository: ScoopInstaller/Extras
Length of output: 331
🏁 Script executed:
#!/bin/bash
set -euo pipefail
p="/home/jailuser/git/bin/checkver.ps1"
echo "=== checkver.ps1 path + size ==="
ls -la "$p"
wc -l "$p"
echo "=== Head (first 120 lines) ==="
head -n 120 "$p" | nl -ba 2>/dev/null || head -n 120 "$p"
echo "=== rg for key terms ==="
rg -n "jsonpath|reverse|regex|jp|multiple|array|Select-Object|First|Last|foreach" "$p" || true
echo "=== Show first occurrence of jsonpath handling ==="
line="$(rg -n "jsonpath" "$p" | head -n 1 | cut -d: -f1 || true)"
if [ -n "${line:-}" ]; then
start=$((line-60)); end=$((line+120))
if [ "$start" -lt 1 ]; then start=1; fi
awk -v s="$start" -v e="$end" 'NR>=s && NR<=e {printf "%6d %s\n", NR, $0}' "$p"
else
echo "No 'jsonpath' substring found in $p"
fiRepository: ScoopInstaller/Extras
Length of output: 672
🌐 Web query:
ScoopInstaller Scoop bin/checkver.ps1 jsonpath reverse true multiple matches how version selected
💡 Result:
In Scoop’s bin/checkver.ps1, when you use checkver.jsonpath with reverse: true, multiple matches are handled by selecting either the last or first match from the results set (depending on reverse), and the final returned $ver is the value extracted from that single selected match. 1) Where reverse: true is applied for JSONPath - In checkver.ps1, the JSONPath branch calls json_path(..., $reverse -and $noregex, $noregex). If reverse is enabled and regex is not in use, reverse influences selection in json_path; otherwise reverse is disabled when regex is present (“If reverse is ON and regex is ON, then reverse would have no effect because regex handles reverse on its own… disable reverse”). [1][2] 2) How “multiple matches” are resolved - When regex is not used, json_path is asked to extract the version using the provided jsonpath expression. For multiple matches, the implementation returns a single value (the “selected” match) rather than all matches. The PR that introduced/improved this behavior explicitly mentions “Extract multiple versions” and “Reverse versions, especially if regex is absent”, and “Support returning single value even if multiple versions were found.” [3] - The net effect in the JSONPath (non-regex) case is: with reverse: true, the last occurrence among the matched values is selected; with reverse omitted/false, the first occurrence is selected. [4][3] 3) How version value is chosen once a match is selected - After extracting $ver, checkver requires that a value was found; if not, it continues with an error (“couldn’t find '$jsonpath' in $source”). [1] Summary - With jsonpath + reverse:true (and no regex), if the JSONPath yields multiple candidate version strings, Scoop selects the last matched value (i.e., the “reverse” occurrence) and returns that single chosen $ver for the update check. [1][3] If you share the exact checkver JSON block (the jsonpath/jp string) and a small example of the target JSON page, I can walk through which specific matched element Scoop would pick.
Citations:
- 1: https://github.com/ScoopInstaller/Scoop/blob/b588a06e/bin/checkver.ps1
- 2: https://github.com/ScoopInstaller/Scoop/blob/master/bin/checkver.ps1
- 3: feat(checkver): improve JSONPath extraction support Scoop#4522
- 4: https://scoop.netlify.app/concepts/
Make checkver select a single GitHub release tag deterministically.
checkver.jsonpath ($[?(@.prerelease == false)].tag_name) matches multiple non-prerelease releases. With no reverse or regex in the manifest, Scoop picks one of those matches (defaulting to the first), so the detected version depends on the GitHub Releases API’s ordering. Narrow the JSONPath to a single tag (or add reverse/regex to make the selection explicit). (Scoop Wiki: App-Manifest-Autoupdate)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@bucket/ungoogled-chromium.json` around lines 42 - 43, The checkver.jsonpath
currently ("$[?(@.prerelease == false)].tag_name") can match multiple releases;
update the manifest's checkver to deterministically pick a single tag by
narrowing the JSONPath to select a single element (e.g. index the filtered array
like "$[?(@.prerelease == false)][0].tag_name") or alternatively add a
"reverse": true or a "regex" to the checkver block so the selected tag is
explicit and reproducible; modify the checkver entry in
bucket/ungoogled-chromium.json accordingly.
Closes #17874
<manifest-name[@version]|chore>: <general summary of the pull request>