Skip to content

ungoogled-chromium: Updated to 148.0.7778.167-1.1 and simplified checkver and autoupdate#17879

Open
o-l-a-v wants to merge 1 commit into
ScoopInstaller:masterfrom
o-l-a-v:patch-41
Open

ungoogled-chromium: Updated to 148.0.7778.167-1.1 and simplified checkver and autoupdate#17879
o-l-a-v wants to merge 1 commit into
ScoopInstaller:masterfrom
o-l-a-v:patch-41

Conversation

@o-l-a-v
Copy link
Copy Markdown
Contributor

@o-l-a-v o-l-a-v commented May 25, 2026

Closes #17874

  • Updated to 148.0.7778.167-1.1
  • Simplified checkver: Use GitHub API + JSON path to exclude prerelease and only return tag_name
  • Simplified autoupdate: Hash is added to GitHub releases artifacts, and Scoop handles that by default
  • Reorder some manifest properties to align with authoring guidelines
  • Use conventional PR title: <manifest-name[@version]|chore>: <general summary of the pull request>
  • I have read the Contributing Guide

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 25, 2026

Review Change Stack

📝 Walkthrough

Walkthrough

This 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

  • ScoopInstaller/Extras#16374: Both PRs modify the manifest checkver logic to use the GitHub Releases API with JSONPath-based tag/version extraction, applying similar auto-update version-checking patterns.
  • ScoopInstaller/Extras#16376: Both PRs update the Scoop manifest's checkver logic to use a GitHub Releases API endpoint with jsonpath filtering instead of simpler regex-based version detection.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main changes: updating ungoogled-chromium to version 148.0.7778.167-1.1 and simplifying the checkver and autoupdate configuration.
Linked Issues check ✅ Passed The PR successfully addresses issue #17874 by updating ungoogled-chromium to v148.0.7778.167-1.1, fixing the manifest that was stuck at v147, and modernizing the checkver and autoupdate mechanisms.
Out of Scope Changes check ✅ Passed All changes are directly related to the objective: updating the version, fixing checkver, and simplifying autoupdate. No out-of-scope modifications detected.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description check ✅ Passed The PR description includes a closed issue reference, detailed bullet points explaining the changes, and confirms completion of both required checklist items.

✏️ 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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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, and extract_dir with checkver.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 arm64

As 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

📥 Commits

Reviewing files that changed from the base of the PR and between 14d7ef7 and c193f28.

📒 Files selected for processing (1)
  • bucket/ungoogled-chromium.json

Comment on lines +42 to +43
"url": "https://api.github.com/repos/ungoogled-software/ungoogled-chromium-windows/releases",
"jsonpath": "$[?(@.prerelease == false)].tag_name"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 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)
PY

Repository: 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")
PY

Repository: 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:


🏁 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."
fi

Repository: 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"
fi

Repository: 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:


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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: ungoogled-chromium not updating to latest release

1 participant