Skip to content

Conversation

@SorYoshino
Copy link
Contributor

@SorYoshino SorYoshino commented Jan 13, 2026

Summary

Updates pritunl-client to version 1.3.4466.51, refines service installation logic, and adds ARM64 support through post-extraction file management.

Related issues or pull requests

Changes

  • Update version to 1.3.4466.51 and switch to SHA512 hashing.
  • Support multiple architectures by adding platform-specific extraction scripts for 64bit and ARM64.
  • Refactor service management by replacing post_install.exe with native PowerShell service creation and hardening.
  • Improve uninstallation reliability by using Remove-Service (PS 6.0+) and adding explicit process termination.
  • Modernize pre-install/uninstall checks by using abort for better integration with Scoop's error handling.
  • Update checkver and autoupdate to use the GitHub API and structured regex for SHA512.
  • Enhance manifest metadata:
    • Update description and license URL (use HEAD instead of master).
    • Add suggest field for Microsoft Visual C++ 2015-2022 Redistributable.
    • Simplify bin entries.

Notes

  • The files containing ,1 are for the 64-bit architecture, while those with ,2 are for the ARM64 architecture.
  • If profiles on Windows fail to start and a network adapter error is shown use follow the Microsoft Visual C++ 2015 Redistributable instructions to manually install the required Windows libraries.
  • Regarding bin field changes:
    • The previous manifest included pritunl.exe with a --no-main flag (added in Pritunl Client: Add version 1.0.1953.32 #2055). However, official documentation provides no information regarding this parameter, and its original purpose remains unclear.

    • Testing indicates that while --dev-tools is a documented flag, the "Developer Tools" option appears in the UI menu regardless of whether the flag is passed, making it difficult to verify if pritunl.exe correctly accepts CLI arguments.

    • pritunl-client.exe has been confirmed to accept command-line arguments and is now included in the bin field for better accessibility.

      ┏[ D:\Software\Scoop\Local\apps\scoop\current\bin][ master ≡]
      └─> pritunl-client --help
      Pritunl Client Command Line Tool
      
      Usage:
        pritunl-client [flags]
        pritunl-client [command]
      
      Available Commands:
        add         Add profile
        completion  Generate the autocompletion script for the specified shell
        disable     Disable autostart for profile
        enable      Enable autostart for profile
        help        Help about any command
        list        List profiles
        logs        Show logs for profile
        remove      Remove profile
        start       Start profile
        stop        Stop profile
        version     Show version
        watch       Watch profiles
      
      Flags:
        -h, --help   help for pritunl-client
      
      Use "pritunl-client [command] --help" for more information about a command.

Testing

The test results are as follows:
┏[ D:\Software\Scoop\Local\apps\scoop\current\bin][ master ≡]
└─> .\checkver.ps1 -App pritunl-client -Dir 'D:\Temporary\Software\Microsoft\Windows Sandbox\Repositories\Scoop\Buckets\Extras\bucket' -f
pritunl-client: 1.3.4466.51 (scoop version is 1.3.4466.51)
Forcing autoupdate!
Autoupdating pritunl-client
DEBUG[1768293567] [$updatedProperties] = [url hash] -> D:\Software\Scoop\Local\apps\scoop\current\lib\autoupdate.ps1:491:5
DEBUG[1768293567] $substitutions (hashtable) -> D:\Software\Scoop\Local\apps\scoop\current\lib\autoupdate.ps1:221:5
DEBUG[1768293567] $substitutions.$preReleaseVersion             1.3.4466.51
DEBUG[1768293567] $substitutions.$cleanVersion                  13446651
DEBUG[1768293567] $substitutions.$patchVersion                  4466
DEBUG[1768293567] $substitutions.$baseurl                       https://github.com/pritunl/pritunl-client-electron/releases/download/1.3.4466.51
DEBUG[1768293567] $substitutions.$basenameNoExt                 Pritunl
DEBUG[1768293567] $substitutions.$urlNoExt                      https://github.com/pritunl/pritunl-client-electron/releases/download/1.3.4466.51/Pritunl
DEBUG[1768293567] $substitutions.$url                           https://github.com/pritunl/pritunl-client-electron/releases/download/1.3.4466.51/Pritunl.exe
DEBUG[1768293567] $substitutions.$minorVersion                  3
DEBUG[1768293567] $substitutions.$buildVersion                  51
DEBUG[1768293567] $substitutions.$version                       1.3.4466.51
DEBUG[1768293567] $substitutions.$dashVersion                   1-3-4466-51
DEBUG[1768293567] $substitutions.$dotVersion                    1.3.4466.51
DEBUG[1768293567] $substitutions.$match1                        1.3.4466.51
DEBUG[1768293567] $substitutions.$underscoreVersion             1_3_4466_51
DEBUG[1768293567] $substitutions.$basename                      Pritunl.exe
DEBUG[1768293567] $substitutions.$matchHead                     1.3.4466
DEBUG[1768293567] $substitutions.$matchTail                     .51
DEBUG[1768293567] $substitutions.$majorVersion                  1
DEBUG[1768293567] $hashfile_url = https://raw.githubusercontent.com/pritunl/pritunl-client-electron/HEAD/SHA512 -> D:\Software\Scoop\Local\apps\scoop\current\lib\autoupdate.ps1:224:5
Searching hash for Pritunl.exe in https://raw.githubusercontent.com/pritunl/pritunl-client-electron/HEAD/SHA512
DEBUG[1768293568] $regex = (?s)1\.3\.4466\.51.+?([a-fA-F0-9]{128}).+?Pritunl\.exe -> D:\Software\Scoop\Local\apps\scoop\current\lib\autoupdate.ps1:78:9
Found: sha512:704afa0da898efc80aa9897b2cd0d5df8e4732382e0ee5d31461c3d3b80abb68a05a3c6f155039af264619e8a85014c60421400cd75d3d7db512e19040b74f40 using Extract Mode
Writing updated pritunl-client manifest

┏[ D:\Software\Scoop\Local\apps\scoop\current\bin][ master ≡]
└─> $PSVersionTable.PSVersion.Major
5

┏[ D:\Software\Scoop\Local\apps\scoop\current\bin][ master ≡]
└─> Get-Service -Name 'pritunl'
Get-Service: Cannot find any service with service name 'pritunl'.

┏[ D:\Software\Scoop\Local\apps\scoop\current\bin][ master ≡]
└─> scoop install Unofficial/pritunl-client
Installing 'pritunl-client' (1.3.4466.51) [64bit] from 'Unofficial' bucket
Loading Pritunl.exe from cache.
Checking hash of Pritunl.exe ... ok.
Extracting Pritunl.exe ... done.
Running pre_install script...done.
Running installer script...done.
Linking D:\Software\Scoop\Local\apps\pritunl-client\current => D:\Software\Scoop\Local\apps\pritunl-client\1.3.4466.51
Creating shim for 'pritunl'.
Making D:\Software\Scoop\Local\shims\pritunl.exe a GUI binary.
Creating shim for 'pritunl-client'.
Creating shortcut for Pritunl (pritunl.exe)
Running post_install script...done.
'pritunl-client' (1.3.4466.51) was installed successfully!
'pritunl-client' suggests installing 'extras/vcredist2022'.

┏[ D:\Software\Scoop\Local\apps\scoop\current\bin][ master ≡]
└─> Get-Service -Name 'pritunl'

Status   Name               DisplayName
------   ----               -----------
Running  pritunl            Pritunl Client Helper Service


┏[ D:\Software\Scoop\Local\apps\scoop\current\bin][ master ≡]
└─> scoop config ignore_running_processes $true
'ignore_running_processes' has been set to 'True'

┏[ D:\Software\Scoop\Local\apps\scoop\current\bin][ master ≡]
└─> scoop update pritunl-client -f
pritunl-client: 1.3.4466.51 -> 1.3.4466.51
Updating one outdated app:
Updating 'pritunl-client' (1.3.4466.51 -> 1.3.4466.51)
WARN  The following instances of "pritunl-client" are still running. Scoop is configured to ignore this condition.

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    319      17    13200      44136       0.13   1852   1 pritunl
    484      22    35952      74152       0.42  20732   1 pritunl
    780      38   252184     276556       1.20  20924   1 pritunl
    348      15    18980      21356       0.31   8228   0 pritunl-service

Downloading new version
Loading Pritunl.exe from cache.
Checking hash of Pritunl.exe ... ok.
Running pre_uninstall script...done.
Uninstalling 'pritunl-client' (1.3.4466.51)
Running uninstaller script...done.
Removing shim 'pritunl.shim'.
Removing shim 'pritunl.exe'.
Removing shim 'pritunl-client.shim'.
Removing shim 'pritunl-client.exe'.
Unlinking D:\Software\Scoop\Local\apps\pritunl-client\current
Installing 'pritunl-client' (1.3.4466.51) [64bit] from 'Unofficial' bucket
Loading Pritunl.exe from cache.
Extracting Pritunl.exe ... done.
Running pre_install script...done.
Running installer script...done.
Linking D:\Software\Scoop\Local\apps\pritunl-client\current => D:\Software\Scoop\Local\apps\pritunl-client\1.3.4466.51
Creating shim for 'pritunl'.
Making D:\Software\Scoop\Local\shims\pritunl.exe a GUI binary.
Creating shim for 'pritunl-client'.
Creating shortcut for Pritunl (pritunl.exe)
Running post_install script...done.
'pritunl-client' (1.3.4466.51) was installed successfully!

┏[ D:\Software\Scoop\Local\apps\scoop\current\bin][ master ≡]
└─> scoop uninstall pritunl-client -p
Uninstalling 'pritunl-client' (1.3.4466.51).
Running pre_uninstall script...done.
WARN  The following instances of "pritunl-client" are still running. Scoop is configured to ignore this condition.

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    787      39   253044     278428       2.25  19324   1 pritunl
    655      22    53180      97288       1.73  20924   1 pritunl
    319      17    13344      44048       0.14  21464   1 pritunl
    356      17    21668      23952       0.28  16232   0 pritunl-service

Running uninstaller script...[SC] DeleteService SUCCESS
done.
Removing shim 'pritunl.shim'.
Removing shim 'pritunl.exe'.
Removing shim 'pritunl-client.shim'.
Removing shim 'pritunl-client.exe'.
Removing shortcut ~\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Scoop Apps\Pritunl.lnk
Unlinking D:\Software\Scoop\Local\apps\pritunl-client\current
Removing older version (_1.3.4466.51.old).
Removing persisted data.
'pritunl-client' was uninstalled.

┏[ D:\Software\Scoop\Local\apps\scoop\current\bin][ master ≡]
└─> Get-Service -Name 'pritunl'
Get-Service: Cannot find any service with service name 'pritunl'.
  • Use conventional PR title: <manifest-name[@version]|chore>: <general summary of the pull request>
  • I have read the Contributing Guide

Summary by CodeRabbit

  • New Features

    • Scripted installers for 64-bit and ARM64 with multi-step post-install service setup and a scripted uninstaller/pre-uninstall flow.
    • Centralized auto-update using GitHub HEAD SHA512 lookup; new update metadata fields (suggest, url, hash).
  • Bug Fixes

    • Clearer pre-install admin messaging and more robust, platform-aware uninstall/cleanup.
  • Chores

    • Version bumped to 1.3.4466.51; description, license reference, binaries, and installer metadata updated.

@coderabbitai
Copy link

coderabbitai bot commented Jan 13, 2026

Walkthrough

Manifest for pritunl-client updated to v1.3.4466.51: metadata and autoupdate/checkver refactored to GitHub/HEAD sources; installer/uninstaller moved to architecture-aware PowerShell script blocks; post-install and uninstall flows expanded to manage Windows service and registry; bin corrected to pritunl-client.exe.

Changes

Cohort / File(s) Summary
Pritunl-Client Manifest
bucket/pritunl-client.json
Version bump to 1.3.4466.51; description and license URL updated; added suggest, url, hash, innosetup; moved from per-arch url/hash to installer.script (64bit, arm64); pre_install message adjusted; post_install converted to multi-step PowerShell script managing Windows service and registry failure actions; inline uninstaller replaced by pre_uninstall + uninstaller.script; bin includes pritunl-client.exe; checkver/autoupdate switched to GitHub/HEAD-based workflow.

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant Scoop
    participant PowerShell
    participant ServiceMgr as Windows Service
    participant Registry

    User->>Scoop: scoop install pritunl-client
    Scoop->>PowerShell: run installer.script (arch-specific)
    PowerShell->>ServiceMgr: create/configure pritunl-client service
    PowerShell->>Registry: set service failure actions
    PowerShell->>ServiceMgr: start service / check status
    ServiceMgr-->>PowerShell: status/confirmation
    PowerShell-->>Scoop: installation complete
    Scoop-->>User: success
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Poem

🐰 I hopped through JSON, tidy and bright,
Scripts in PowerShell set services right.
Binaries named true, no shim to fear,
Registry and start all handled here.
A joyful thump — install complete, my dear.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: updating pritunl-client to version 1.3.4466.51 with manifest refactoring.
Description check ✅ Passed The PR description is comprehensive, follows the template requirements, links relevant issues (#2055 and #15194), documents all changes with detailed explanations, includes testing results, and checks both required checkboxes.
Linked Issues check ✅ Passed The PR successfully addresses issue #15194 by refactoring the manifest to handle the comma-containing filenames (Pritunl,1 and Pritunl,2.exe) through architecture-specific installer.script blocks, resolving the shim creation failure and enabling proper installation.
Out of Scope Changes check ✅ Passed All changes are directly related to updating pritunl-client to version 1.3.4466.51, fixing the shim creation issue, and refactoring the manifest for improved service management and multi-architecture support as specified in the linked issues.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

@github-actions
Copy link
Contributor

All changes look good.

Wait for review from human collaborators.

pritunl-client

  • Lint
  • Description
  • License
  • Hashes
  • Checkver
  • Autoupdate
  • Autoupdate Hash Extraction

Check the full log for details.

Copy link

@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

🤖 Fix all issues with AI agents
In @bucket/pritunl-client.json:
- Around line 75-84: The PowerShell version check in the uninstaller script uses
a float literal (6.0) against the integer $PSVersionTable.PSVersion.Major;
update the condition in the uninstaller script that reads
"$PSVersionTable.PSVersion.Major -lt 6.0" to use an integer comparison ("-lt 6")
so the check is idiomatic and matches the integer type of PSVersion.Major; keep
the surrounding logic in the "uninstaller" script block (the if that chooses
between Start-Process sc.exe and Remove-Service) unchanged.
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d9400ba and 820d839.

📒 Files selected for processing (1)
  • bucket/pritunl-client.json
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16378
File: bucket/compactgui.json:20-22
Timestamp: 2025-10-19T13:58:23.389Z
Learning: In the ScoopInstaller/Extras repository, the CompactGUI manifest removed hash verification from the autoupdate block because the hash verification mechanism (scraping SHA-256 from release page HTML) is no longer available in newer CompactGUI releases. GitHub asset digests exist in beta releases but not in v3.8.0, and Scoop doesn't have built-in support for extracting from GitHub API asset digests.
Learnt from: Gitoffthelawn
Repo: ScoopInstaller/Extras PR: 16106
File: bucket/czkawka-gui.json:25-25
Timestamp: 2025-09-05T09:41:52.653Z
Learning: For czkawka-gui manifests in Scoop Extras, the correct upstream filename pattern for Windows GUI builds in recent versions uses "gtk46" (without underscore), not "gtk_46" (with underscore). The autoupdate URL should use "windows_czkawka_gui_gtk46.zip" format. This was confirmed by a working 10.0.0 update with valid hash.
Learnt from: Gitoffthelawn
Repo: ScoopInstaller/Extras PR: 16106
File: bucket/czkawka-gui.json:25-25
Timestamp: 2025-09-05T09:41:52.653Z
Learning: For czkawka-gui manifests in Scoop Extras, the correct upstream filename pattern for Windows GUI builds uses "gtk46" (without underscore), not "gtk_46" (with underscore). The autoupdate URL should use "windows_czkawka_gui_gtk46.zip" format.
📚 Learning: 2025-10-19T13:58:23.389Z
Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16378
File: bucket/compactgui.json:20-22
Timestamp: 2025-10-19T13:58:23.389Z
Learning: In the ScoopInstaller/Extras repository, the CompactGUI manifest removed hash verification from the autoupdate block because the hash verification mechanism (scraping SHA-256 from release page HTML) is no longer available in newer CompactGUI releases. GitHub asset digests exist in beta releases but not in v3.8.0, and Scoop doesn't have built-in support for extracting from GitHub API asset digests.

Applied to files:

  • bucket/pritunl-client.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: PowerShell
  • GitHub Check: WindowsPowerShell
🔇 Additional comments (7)
bucket/pritunl-client.json (7)

2-14: LGTM!

The metadata updates are well-considered:

  • Using HEAD in the license URL makes it resilient to default branch name changes.
  • SHA512 provides stronger hash verification.
  • The suggest block for VC++ redistributable is a helpful dependency hint for users.

15-32: LGTM - clever handling of upstream naming convention.

The installer scripts correctly handle the upstream's architecture-specific file naming (,1 for 64-bit, ,2 for ARM64). This directly addresses issue #15194 where the manifest failed to create shims due to non-existent expected filenames.


33-33: LGTM!

Using abort integrates properly with Scoop's error handling, and the admin check is essential for the service management operations.


34-57: LGTM - robust service installation logic.

The script handles both fresh installs and updates elegantly:

  • Attempts to start an existing service first (update scenario)
  • Creates the service only if it doesn't exist
  • Configures failure actions via registry for automatic restart on crashes

The failure actions byte array correctly encodes three SC_ACTION_RESTART actions with increasing delays (3000ms, 5000ms, 5000ms).


58-61: LGTM - fixes the shim creation issue.

The corrected bin entries (pritunl.exe and pritunl-client.exe) directly resolve issue #15194 where the manifest previously attempted to shim a non-existent pritunl file.


68-74: LGTM!

The pre_uninstall script properly terminates the service and processes before removal. The 1.5-second sleep is a pragmatic approach to ensure Windows fully releases file handles before Scoop attempts to delete the app directory.


88-94: The autoupdate hash extraction regex is malformed and will not work.

The regex pattern (?s)$version.+?$sha512.+?$basename uses Scoop template variable syntax ($version, $sha512, $basename) but lacks a proper capture group to extract the hash value. Scoop's autoupdate hash extraction requires a regex with an explicit capture group (typically ()) to extract the hash. The pattern as written will fail to extract the SHA512 hash from the file.

Remove the hash verification block from autoupdate, similar to how CompactGUI manifest handled this limitation when hash extraction became unavailable.

⛔ Skipped due to learnings
Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16378
File: bucket/compactgui.json:20-22
Timestamp: 2025-10-19T13:58:23.389Z
Learning: In the ScoopInstaller/Extras repository, the CompactGUI manifest removed hash verification from the autoupdate block because the hash verification mechanism (scraping SHA-256 from release page HTML) is no longer available in newer CompactGUI releases. GitHub asset digests exist in beta releases but not in v3.8.0, and Scoop doesn't have built-in support for extracting from GitHub API asset digests.
Learnt from: Gitoffthelawn
Repo: ScoopInstaller/Extras PR: 16106
File: bucket/czkawka-gui.json:25-25
Timestamp: 2025-09-05T09:41:52.653Z
Learning: For czkawka-gui manifests in Scoop Extras, the correct upstream filename pattern for Windows GUI builds in recent versions uses "gtk46" (without underscore), not "gtk_46" (with underscore). The autoupdate URL should use "windows_czkawka_gui_gtk46.zip" format. This was confirmed by a working 10.0.0 update with valid hash.
Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16349
File: bucket/fvim.json:45-49
Timestamp: 2025-10-16T15:59:21.258Z
Learning: In Scoop manifests, the `autoupdate.url` and `autoupdate.architecture.<arch>.url` fields must be valid URIs according to the JSON schema (defined with `"format": "uri"`). Variables like `$matchUrlx64` that contain only path segments must be combined with a base URL (e.g., `https://github.com/.../releases/download/`) to form a complete valid URI.
Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16328
File: bucket/winutil.json:0-0
Timestamp: 2025-10-13T09:37:06.093Z
Learning: When reviewing code in Scoop manifests, always verify the actual file content if the diff appears incomplete or unusual, as diff context can be truncated or displayed incorrectly. The pattern `[string[]](...).ForEach{...}` is commonly used in post_uninstall scripts across the Extras repository.
Learnt from: Gitoffthelawn
Repo: ScoopInstaller/Extras PR: 16106
File: bucket/czkawka-gui.json:25-25
Timestamp: 2025-09-05T09:41:52.653Z
Learning: For czkawka-gui manifests in Scoop Extras, the correct upstream filename pattern for Windows GUI builds uses "gtk46" (without underscore), not "gtk_46" (with underscore). The autoupdate URL should use "windows_czkawka_gui_gtk46.zip" format.

Copy link

@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

🤖 Fix all issues with AI agents
In @bucket/pritunl-client.json:
- Around line 34-57: The post_install script should not unconditionally abort
when $service exists but failed to start; update the conditional that calls
abort to only run for fresh installs by checking $cmd -eq 'install' (i.e.,
change the current if ($service) { abort ... } to require ($cmd -eq 'install')
and $service before aborting) so updates skip abort and allow update flows to
proceed while keeping abort behavior for installs; adjust the block around
$service, $cmd, and abort in the post_install sequence where New-Service and
Start-Service are used.
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 820d839 and 469b1f3.

📒 Files selected for processing (1)
  • bucket/pritunl-client.json
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16378
File: bucket/compactgui.json:20-22
Timestamp: 2025-10-19T13:58:23.389Z
Learning: In the ScoopInstaller/Extras repository, the CompactGUI manifest removed hash verification from the autoupdate block because the hash verification mechanism (scraping SHA-256 from release page HTML) is no longer available in newer CompactGUI releases. GitHub asset digests exist in beta releases but not in v3.8.0, and Scoop doesn't have built-in support for extracting from GitHub API asset digests.
📚 Learning: 2025-10-13T09:37:06.093Z
Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16328
File: bucket/winutil.json:0-0
Timestamp: 2025-10-13T09:37:06.093Z
Learning: When reviewing code in Scoop manifests, always verify the actual file content if the diff appears incomplete or unusual, as diff context can be truncated or displayed incorrectly. The pattern `[string[]](...).ForEach{...}` is commonly used in post_uninstall scripts across the Extras repository.

Applied to files:

  • bucket/pritunl-client.json
📚 Learning: 2025-10-15T11:54:31.320Z
Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16341
File: bucket/foxit-pdf-reader.json:47-50
Timestamp: 2025-10-15T11:54:31.320Z
Learning: In bucket/foxit-pdf-reader.json and bucket/foxit-reader.json, the checkver script uses MaximumRedirection 1 (not 0) for Invoke-WebRequest to properly handle Foxit's backend redirect behavior when parsing the Location header for version detection.

Applied to files:

  • bucket/pritunl-client.json
📚 Learning: 2025-10-19T13:58:23.389Z
Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16378
File: bucket/compactgui.json:20-22
Timestamp: 2025-10-19T13:58:23.389Z
Learning: In the ScoopInstaller/Extras repository, the CompactGUI manifest removed hash verification from the autoupdate block because the hash verification mechanism (scraping SHA-256 from release page HTML) is no longer available in newer CompactGUI releases. GitHub asset digests exist in beta releases but not in v3.8.0, and Scoop doesn't have built-in support for extracting from GitHub API asset digests.

Applied to files:

  • bucket/pritunl-client.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: WindowsPowerShell
🔇 Additional comments (6)
bucket/pritunl-client.json (6)

2-14: LGTM! Metadata and download configuration look solid.

  • Using HEAD in the license URL is more resilient to branch renames.
  • SHA512 hash with proper prefix format.
  • innosetup: true correctly enables Inno Setup extraction.
  • The suggest field properly hints at the VC++ dependency without making it mandatory.

15-31: Architecture-specific file handling correctly addresses the naming issue.

The scripts properly handle upstream's naming convention where ,1 suffix denotes 64-bit and ,2 denotes ARM64 files. This directly fixes issue #15194 where shims failed due to non-existent pritunl.exe.


33-33: LGTM!

Using abort for Scoop error integration is the correct approach, and the message clearly indicates admin rights are required.


58-61: LGTM!

Both pritunl.exe (GUI) and pritunl-client.exe (CLI) are correctly listed. The architecture-specific installer scripts ensure these files exist with proper names after extraction.


68-84: Well-designed uninstallation with proper compatibility handling.

  • The $cmd -ne 'uninstall' guard correctly preserves the service during updates.
  • PowerShell version check appropriately falls back to sc.exe delete for Windows PowerShell 5.1 (which lacks Remove-Service).
  • Process termination before service removal prevents file locking issues.

85-94: Regex pattern currently matches the SHA512 file format, but fragility concern is valid.

The hash regex (?s)$version.+?$sha512.+?$basename correctly matches the current file structure. However, this approach is inherent fragile: the pattern depends on the upstream SHA512 file maintaining its exact format (version line followed by hash and filename pairs). Any formatting changes in the remote file would break hash extraction. Consider monitoring for upstream changes or using an alternative verification method if available.

@SorYoshino
Copy link
Contributor Author

/verify

@github-actions
Copy link
Contributor

All changes look good.

Wait for review from human collaborators.

pritunl-client

  • Lint
  • Description
  • License
  • Hashes
  • Checkver
  • Autoupdate
  • Autoupdate Hash Extraction

Check the full log for details.

@SorYoshino SorYoshino marked this pull request as draft January 16, 2026 20:43
@SorYoshino
Copy link
Contributor Author

/verify

@github-actions
Copy link
Contributor

All changes look good.

Wait for review from human collaborators.

pritunl-client

  • Lint
  • Description
  • License
  • Hashes
  • Checkver
  • Autoupdate
  • Autoupdate Hash Extraction

Check the full log for details.

@SorYoshino SorYoshino marked this pull request as ready for review January 16, 2026 20:59
@haussmann
Copy link
Contributor

haussmann commented Jan 17, 2026

The following test was successful:

  1. install v1.3.4439.70
  2. toggle to light mode in UI
  3. update to v1.3.446651
  4. verify light mode setting persisted
Powershell log of the update
scoop install ~\Desktop\pritunl-client.json -u
Installing 'pritunl-client' (1.3.4439.70) [64bit] from 'C:\Users\admin\Desktop\pritunl-client.json'
Loading Pritunl.exe from cache
Checking hash of Pritunl.exe ... ok.
Extracting Pritunl.exe ... done.
Running pre_install script...done.
Running installer script...done.
Linking ~\scoop\apps\pritunl-client\current => ~\scoop\apps\pritunl-client\1.3.4439.70
Creating shim for 'pritunl'.
Making C:\Users\admin\scoop\shims\pritunl.exe a GUI binary.
Creating shim for 'pritunl-client'.
Creating shortcut for Pritunl (pritunl.exe)
Running post_install script...done.
'pritunl-client' (1.3.4439.70) was installed successfully!
'pritunl-client' suggests installing 'extras/vcredist2022'.
PS C:\Windows\system32> scoop update pritunl-client -u
scoop update: Option -u not recognized.
PS C:\Windows\system32> scoop update pritunl-client
pritunl-client: 1.3.4439.70 -> 1.3.4466.51
Updating one outdated app:
Updating 'pritunl-client' (1.3.4439.70 -> 1.3.4466.51)
Downloading new version
Loading Pritunl.exe from cache
Checking hash of Pritunl.exe ... ok.
Running pre_uninstall script...done.
Uninstalling 'pritunl-client' (1.3.4439.70)
Running uninstaller script...done.
Removing shim 'pritunl.shim'.
Removing shim 'pritunl.exe'.
Removing shim 'pritunl-client.shim'.
Removing shim 'pritunl-client.exe'.
Unlinking ~\scoop\apps\pritunl-client\current
Installing 'pritunl-client' (1.3.4466.51) [64bit] from 'C:\Users\admin\Desktop\pritunl-client.json'
Loading Pritunl.exe from cache
Extracting Pritunl.exe ... done.
Running pre_install script...done.
Running installer script...done.
Linking ~\scoop\apps\pritunl-client\current => ~\scoop\apps\pritunl-client\1.3.4466.51
Creating shim for 'pritunl'.
Making C:\Users\admin\scoop\shims\pritunl.exe a GUI binary.
Creating shim for 'pritunl-client'.
Creating shortcut for Pritunl (pritunl.exe)
Running post_install script...done.
'pritunl-client' (1.3.4466.51) was installed successfully!

I don't know enough about the whole service-handling, so this is as much as I could help in this review for now 😅

@SorYoshino SorYoshino marked this pull request as draft February 4, 2026 12:04
* Add arm64 version
* Update checkver & autoupdate
* Refactor service management logic
@SorYoshino SorYoshino marked this pull request as ready for review February 4, 2026 12:37
@SorYoshino
Copy link
Contributor Author

/verify

@github-actions
Copy link
Contributor

github-actions bot commented Feb 4, 2026

All changes look good.

Wait for review from human collaborators.

pritunl-client

  • Lint
  • Description
  • License
  • Hashes
  • Checkver
  • Autoupdate
  • Autoupdate Hash Extraction

Check the full log for details.

Copy link

@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

🤖 Fix all issues with AI agents
In `@bucket/pritunl-client.json`:
- Around line 56-78: The abort is called unconditionally after the retry loop,
causing a reboot prompt even when the service was removed; modify the logic in
the loop around $timer / Get-Service / $service_name so abort is only invoked on
timeout: track success (e.g. set a $removed or $completed flag when $check is
$null and break) or test the final service state or $timer.Elapsed.TotalSeconds
before calling abort, and only call abort if the service still exists or the
timeout was reached; update places that set Write-Progress and break so they
also set that success flag (or rely on checking Get-Service after the loop) to
avoid the spurious abort.

@SorYoshino SorYoshino marked this pull request as draft February 4, 2026 12:56
@SorYoshino SorYoshino marked this pull request as ready for review February 4, 2026 13:31
@SorYoshino SorYoshino closed this Feb 4, 2026
@SorYoshino
Copy link
Contributor Author

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Pritunl-Client error on install due to wrong .exe naming.

2 participants