You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The latest IEDriverServer was done a long time ago (Selenium 4.14), and so, it is currently excluded from the default GitHub API response used for the mirror workflow (due to result pagination). As a result, the support of IEDriverServer in Selenium Manager was started to fail:
> selenium-manager.exe --browser iexplorer --debug
[2025-11-17T09:04:19.669Z DEBUG] IEDriverServer not found in PATH
[2025-11-17T09:04:19.670Z DEBUG] iexplorer detected at C:\Program Files\Internet Explorer\iexplore.exe
[2025-11-17T09:04:19.671Z DEBUG] Detected browser: iexplorer 11.00.26100.1
[2025-11-17T09:04:19.723Z ERROR] IEDriverServer release not available
This PR changes the mirror workflow to get all pages in the GitHub API responses. This way, even old releases (e.g., Selenium 4.14) are kept in the mirror file, and Selenium Manager should be able to find IEDriverServer, as usual.
🔧 Implementation Notes
💡 Additional Considerations
🔄 Types of changes
Bug fix (backwards compatible)
PR Type
Bug fix
Description
Implements pagination in mirror workflow to fetch all GitHub releases
Fixes IEDriverServer availability by retrieving old Selenium releases
Adds error handling and improved shell script robustness
Processes paginated API responses into consolidated mirror file
Diagram Walkthrough
flowchart LR
A["GitHub API<br/>Releases Endpoint"] -->|"Paginated<br/>per_page=100"| B["Fetch Loop<br/>All Pages"]
B -->|"Filter & Transform"| C["JQ Processing"]
C -->|"Aggregate"| D["selenium<br/>Mirror File"]
Loading
File Walkthrough
Relevant files
Bug fix
mirror-selenium-releases.yml
Add pagination logic to GitHub releases API calls
.github/workflows/mirror-selenium-releases.yml
Replaces single API call with paginated loop to fetch all releases (100 per page)
Adds error handling with set -euo pipefail for shell script robustness
Implements temporary file accumulation and final aggregation with jq -s 'add'
Improves authorization header format and adds debug logging for pagination progress
Below is a summary of compliance checks for this PR:
Security Compliance
⚪
Token exposure risk
Description: The workflow exports the GitHub token to a shell variable and passes it to curl, which could be exposed via process listing or echoed logs; use the "Authorization: Bearer" header via actions/github-script or GITHUB_TOKEN env with masked logging to reduce leakage risk. mirror-selenium-releases.yml [21-38]
Investigate and resolve repeated "Error: ConnectFailure (Connection refused)" occurring when instantiating multiple ChromeDriver instances on Ubuntu 16.04 with Selenium 3.9.0 and Chrome 65/ChromeDriver 2.35.
Provide a fix or guidance so subsequent ChromeDriver instantiations do not raise connection failures.
Ensure reliability across multiple driver instantiations, not just the first one.
Ensure that clicking links with JavaScript in the href triggers as in 2.47.1; fix regression where 2.48.0/2.48.2 on Firefox 42 does not trigger the alert.
Validate click() behavior consistency across versions and browsers (specifically Firefox).
Codebase Duplication Compliance
⚪
Codebase context is not defined
Follow the guide to enable codebase context checks.
Custom Compliance
🟢
Generic: Meaningful Naming and Self-Documenting Code
Objective: Ensure all identifiers clearly express their purpose and intent, making code self-documenting
Objective: To create a detailed and reliable record of critical system actions for security analysis and compliance.
Status: Missing Audit: The new pagination and download process has no explicit audit/logging of critical actions beyond simple echo statements, which may be acceptable for CI but lacks structured audit details like actor and outcomes.
Investigate and resolve repeated "Error: ConnectFailure (Connection refused)" when instantiating multiple ChromeDriver sessions on Ubuntu 16.04 with Chrome 65 and chromedriver 2.35 using Selenium 3.9.0.
Ensure subsequent ChromeDriver instantiations after the first do not produce connection errors.
Provide a fix or guidance that addresses environment-specific causes (networking, driver lifecycle) leading to ConnectFailure.
Objective: To create a detailed and reliable record of critical system actions for security analysis and compliance.
Status: Missing audit logs: The new script performs multiple external API reads and file writes without emitting structured audit logs that capture actor, action, and outcome details.
Generic: Robust Error Handling and Edge Case Management
Objective: Ensure comprehensive error handling that provides meaningful context and graceful degradation
Status: Partial error handling: While set -euo pipefail and curl -f are used, the script lacks explicit handling/logging for HTTP rate limits, API errors, or jq failures beyond abrupt exit.
Generic: Security-First Input Validation and Data Handling
Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent vulnerabilities
Status: External input trust: The script ingests unvalidated JSON from the GitHub API and assumes expected structure without guarding against unexpected fields or jq parsing errors.
Instead of a manual shell loop with curl for GitHub API pagination, use the pre-installed gh CLI with the gh api --paginate command. This simplifies the workflow, making it more concise and robust.
Why: The suggestion provides a significantly simpler and more robust solution using the idiomatic gh api --paginate command, replacing a complex manual curl loop and improving the workflow's maintainability.
High
General
Ensure temporary file is always cleaned
Add a trap command to ensure the temporary file is always removed on script exit, even in case of an error.
Why: The suggestion correctly identifies that the temporary file is not cleaned up if the script fails, and proposes using trap which is a robust, standard practice for ensuring resource cleanup.
Low
Remove redundant file truncation command
Remove the redundant : > "$tmpfile" command because mktemp already creates a new, empty file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
User description
🔗 Related Issues
The latest IEDriverServer was done a long time ago (Selenium 4.14), and so, it is currently excluded from the default GitHub API response used for the mirror workflow (due to result pagination). As a result, the support of IEDriverServer in Selenium Manager was started to fail:
It is currently failing in CI:
https://github.com/SeleniumHQ/selenium/actions/runs/19414639574/job/55541217140
💥 What does this PR do?
This PR changes the mirror workflow to get all pages in the GitHub API responses. This way, even old releases (e.g., Selenium 4.14) are kept in the mirror file, and Selenium Manager should be able to find IEDriverServer, as usual.
🔧 Implementation Notes
💡 Additional Considerations
🔄 Types of changes
PR Type
Bug fix
Description
Implements pagination in mirror workflow to fetch all GitHub releases
Fixes IEDriverServer availability by retrieving old Selenium releases
Adds error handling and improved shell script robustness
Processes paginated API responses into consolidated mirror file
Diagram Walkthrough
File Walkthrough
mirror-selenium-releases.yml
Add pagination logic to GitHub releases API calls.github/workflows/mirror-selenium-releases.yml
(100 per page)
set -euo pipefailfor shell script robustnessjq-s 'add'pagination progress