fix(ci): resolve all failing workflows - #42
Conversation
|
Warning Review limit reached
Next review available in: 35 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (12)
📝 WalkthroughWalkthroughChangesThe PR pins GitHub Actions to commit SHAs across CI, browser, quality, security, and maintenance workflows. It adds managed Chrome installation for browser checks, updates CodeQL and SARIF settings, and changes site dependencies to exact versions including Astro 7.1.3. CI and dependency hardening
Estimated code review effort: 3 (Moderate) | ~20 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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: 5
🤖 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 @.github/workflows/a11y.yml:
- Line 22: Update the checkout steps in .github/workflows/a11y.yml at lines
22-22 and .github/workflows/lighthouse.yml at lines 22-22 by adding
with.persist-credentials: false to both actions/checkout uses entries.
- Around line 34-35: Pin an exact browser-driver-manager version in the Install
matching Chrome + ChromeDriver step’s npx invocation in
.github/workflows/a11y.yml lines 34-35 and apply the same version pin to
.github/workflows/lighthouse.yml lines 34-35, preserving the existing
installation command behavior.
- Around line 34-36: Update .github/workflows/a11y.yml lines 34-47 to load
~/.browser-driver-manager/.env and pass its Chrome and ChromeDriver paths via
--chrome-path and --chromedriver-path to npx --yes `@axe-core/cli`. Update
.github/workflows/lighthouse.yml lines 34-41 to export the downloaded Chrome
executable as CHROME_PATH or configure chromePath in the Lighthouse CI
action/config, ensuring both scanners use the matching downloaded browser.
In @.github/workflows/ci.yml:
- Around line 45-47: Disable credential persistence on every listed checkout
action by adding persist-credentials: false: .github/workflows/ci.yml lines
45-47, 61-63, and 85-87; .github/workflows/qlty.yml lines 42-44; and
.github/workflows/sonarqube.yml lines 40-42. Do not alter subsequent workflow
steps.
In @.github/workflows/codacy.yml:
- Line 39: Update each listed actions/checkout step in
.github/workflows/codacy.yml at lines 39-39 and 64-64, and
.github/workflows/security.yml at lines 50-52, 73-73, 96-96, and 127-127, to set
persist-credentials to false. No other workflow steps require changes.
🪄 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: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: c86e0b05-f916-4097-934b-0d3ccf5ae4fa
⛔ Files ignored due to path filters (1)
site/package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (10)
.github/workflows/a11y.yml.github/workflows/automerge.yml.github/workflows/ci.yml.github/workflows/codacy.yml.github/workflows/lighthouse.yml.github/workflows/qlty.yml.github/workflows/security.yml.github/workflows/sonarqube.yml.github/workflows/stale.ymlsite/package.json
| working-directory: ./site | ||
| steps: | ||
| - uses: actions/checkout@v5 | ||
| - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Disable persisted checkout credentials in both browser jobs. zizmor reports the omitted opt-out, and these jobs execute package/browser tooling after checkout. Add persist-credentials: false to both checkout steps. (github.com)
.github/workflows/a11y.yml#L22-L22: addwith.persist-credentials: false..github/workflows/lighthouse.yml#L22-L22: addwith.persist-credentials: false.
🧰 Tools
🪛 zizmor (1.26.1)
[warning] 22-22: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false
(artipacked)
📍 Affects 2 files
.github/workflows/a11y.yml#L22-L22(this comment).github/workflows/lighthouse.yml#L22-L22
🤖 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 @.github/workflows/a11y.yml at line 22, Update the checkout steps in
.github/workflows/a11y.yml at lines 22-22 and .github/workflows/lighthouse.yml
at lines 22-22 by adding with.persist-credentials: false to both
actions/checkout uses entries.
Source: Linters/SAST tools
| - name: Install matching Chrome + ChromeDriver | ||
| run: npx --yes browser-driver-manager install chrome |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
fd -t f -g 'package.json' -g 'package-lock.json' . \
-x rg -n 'browser-driver-manager' {} || trueRepository: LUSKTECH/gl1tch.xyz
Length of output: 221
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Package files:"
git ls-files | rg '(^|/)package\.json$|(^|/)package-lock\.json$|(^|/)pnpm-lock\.yaml$|(^|/)yarn\.lock$|(^|/)npm-shrinkwrap\.json$' || true
echo
echo "browser-driver-manager references:"
rg -n 'browser-driver-manager|npx --yes|npm exec|browser-driver' .github package.json package-lock.json pnpm-lock.yaml yarn.lock npm-shrinkwrap.json 2>/dev/null || true
echo
echo "Workflow files:"
fd -t f .github/workflows -x sh -c 'echo "--- $1"; sed -n "1,100p" "$1"' sh {}Repository: LUSKTECH/gl1tch.xyz
Length of output: 1122
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Package files:"
git ls-files | rg '(^|/)package\.json$|(^|/)package-lock\.json$|(^|/)pnpm-lock\.yaml$|(^|/)yarn\.lock$|(^|/)npm-shrinkwrap\.json$' || true
echo
echo "browser-driver-manager references:"
rg -n 'browser-driver-manager|npx --yes|npm exec|browser-driver' .github package.json package-lock.lock pnpm-lock.yaml yarn.lock npm-shrinkwrap.json 2>/dev/null || true
echo
echo "Workflow files:"
fd -t f .github/workflows -x sh -c 'echo "--- $1"; sed -n "1,100p" "$1"' sh {}Repository: LUSKTECH/gl1tch.xyz
Length of output: 1122
🌐 Web query:
npm exec npx --yes remote package fetch behavior no local package
💡 Result:
When using npm exec or npx to run a package that is not installed locally, the following behavior occurs: 1. Identification: If the requested package is not present in the local project's dependencies, npm identifies that it needs to be fetched [1][2]. 2. Prompting: By default, npm will print a prompt to the terminal asking for confirmation to install the missing package [1][3]. 3. Suppression: If the --yes (or -y) flag is provided, this prompt is suppressed, and npm proceeds with the installation automatically [1][2]. This is also the default behavior if the command is run in a non-interactive (CI) environment where standard input is not a TTY [1][3]. 4. Fetching and Installation: The requested package is downloaded and installed into a temporary folder within the npm cache [1][2]. 5. Execution: The directory containing this newly installed package is added to the PATH environment variable for the duration of the executed process, allowing the command to run as if it were a local dependency [1][2]. After the command completes, the package remains in the npm cache but is not added to your project's local node_modules or dependencies [1][2]. [4][1][2]
Citations:
- 1: https://docs.npmjs.com/cli/npm-exec/
- 2: https://docs.npmjs.com/cli/v11/commands/npx/
- 3: https://docs.npmjs.com/cli/v9/commands/npm-exec/
- 4: https://docs.npmjs.com/cli/commands/npx/
🌐 Web query:
site/package.json browser-driver-manager
💡 Result:
The browser-driver-manager is a command-line interface (CLI) tool designed to manage Chrome and Firefox browsers and their corresponding drivers [1][2][3]. It is particularly useful in continuous integration (CI) environments to ensure that the browser and its driver remain synchronized [4][3]. Key details about the package: - Purpose: It automates the installation and management of browser binaries and drivers. Version 2.0.0 and later transitioned to using Chrome for Testing, which resolves previous issues where driver packages occasionally lagged behind browser updates [5]. - Usage: The tool is typically installed via npm (npm install browser-driver-manager) and used to install specific browser channels (e.g., Stable, Beta) and matching drivers [4][3]. - Storage: Once installed, it creates a directory in the user's home folder (~/.browser-driver-manager) where it caches browser and driver files [4][5]. It also generates a.env file within that directory that exports paths (e.g., CHROME_TEST_PATH and CHROMEDRIVER_TEST_PATH) for use in testing configurations [4][5]. It is important to distinguish this Node.js package from WebDriverManager, which is a popular Java library for automated driver management in Selenium [6][7], and Selenium Manager, the built-in tool included with Selenium that provides similar automated management capabilities [8]. For more information, you can view the official package details and source code on its npm page or GitHub repository [1][4][3].
Citations:
- 1: https://github.com/straker/browser-driver-manager/blob/main/package.json
- 2: https://www.npmjs.com/package/browser-driver-manager
- 3: https://npmjs.com/package/browser-driver-manager
- 4: https://github.com/straker/browser-driver-manager
- 5: chore: bump browser-driver-manager from 1.0.4 to 2.0.1 dequelabs/axe-core#4694
- 6: https://bonigarcia.dev/webdrivermanager/
- 7: https://www.baeldung.com/selenium-webdrivermanager
- 8: https://github.com/SeleniumHQ/seleniumhq.github.io/blob/trunk/website_and_docs/content/documentation/selenium_manager.en.md
Pin browser-driver-manager version before running it with npx --yes. Neither workflow uses the lockfile-backed package, so npx --yes resolves/fetches it from npm at runtime unless an exact version is specified. Apply the same change to .github/workflows/a11y.yml and .github/workflows/lighthouse.yml.
📍 Affects 2 files
.github/workflows/a11y.yml#L34-L35(this comment).github/workflows/lighthouse.yml#L34-L35
🤖 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 @.github/workflows/a11y.yml around lines 34 - 35, Pin an exact
browser-driver-manager version in the Install matching Chrome + ChromeDriver
step’s npx invocation in .github/workflows/a11y.yml lines 34-35 and apply the
same version pin to .github/workflows/lighthouse.yml lines 34-35, preserving the
existing installation command behavior.
| - name: Install matching Chrome + ChromeDriver | ||
| run: npx --yes browser-driver-manager install chrome | ||
| working-directory: . |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
rg -n 'browser-driver-manager|CHROME_PATH|chromePath|CHROMEDRIVER_PATH|chromedriver-path|chrome-path' \
.github/workflows/a11y.yml .github/workflows/lighthouse.yml \
site/lighthouserc.cjs site/package.json site/package-lock.jsonRepository: LUSKTECH/gl1tch.xyz
Length of output: 345
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
printf '--- workflows relevant sections ---\n'
for f in .github/workflows/a11y.yml .github/workflows/lighthouse.yml; do
echo "### $f"
nl -ba "$f" | sed -n '1,180p'
done
printf '\n--- package manifests mentioning scanners/browser-driver-manager ---\n'
for f in package.json site/package.json; do
if [ -f "$f" ]; then
echo "### $f"
python3 - <<'PY' "$f"
import json, sys
p=sys.argv[1]
with open(p) as fh: data=json.load(fh)
for sec in ('dependencies','devDependencies'):
vals=data.get(sec,{})
matches={k:v for k,v in vals.items() if 'axe' in k.lower() or 'lighthouse' in k.lower() or 'browser-driver-manager' in k.lower()}
if matches:
print(sec, matches)
PY
fi
done
printf '\n--- find relevant config/package files ---\n'
fd -a 'lighthouserc|package(-lock)?\.json|axe|jest|vitest|playwright|puppeteer' site .github 2>/dev/null | sed 's#^\./##' | sortRepository: LUSKTECH/gl1tch.xyz
Length of output: 248
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
printf '%s\n' '--- workflows relevant sections ---'
for f in .github/workflows/a11y.yml .github/workflows/lighthouse.yml; do
echo "### ${f}"
nl -ba "$f" | sed -n '1,200p'
done
printf '%s\n' ''
printf '%s\n' '--- package manifests mentioning scanners/browser-driver-manager ---'
for f in package.json site/package.json; do
if [ -f "$f" ]; then
echo "### ${f}"
python3 - "$f" <<'PY'
import json, sys
p=sys.argv[1]
with open(p) as fh: data=json.load(fh)
for sec in ('dependencies','devDependencies','scripts'):
vals=data.get(sec)
if sec in ('dependencies','devDependencies') and vals:
matches={k:v for k,v in vals.items() if 'axe' in k.lower() or 'lighthouse' in k.lower() or 'browser-driver-manager' in k.lower()}
if matches:
print(sec, matches)
elif sec == 'scripts' and vals:
matches={k:v for k,v in vals.items() if 'axe' in k.lower() or 'lighthouse' in k.lower() or 'browser-driver-manager' in k.lower()}
if matches:
print(sec, matches)
PY
fi
done
printf '%s\n' ''
printf '%s\n' '--- find relevant config/package files ---'
fd -a 'lighthouserc|package(-lock)?\.json|axe|jest|vitest|playwright|puppeteer' site .github 2>/dev/null | sed 's#^\./##' | sort || trueRepository: LUSKTECH/gl1tch.xyz
Length of output: 264
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
cat -n .github/workflows/a11y.yml
printf '%s\n' '--- end a11y.yml ---'
cat -n .github/workflows/lighthouse.yml
printf '%s\n' '--- end lighthouse.yml ---'
printf '%s\n' '--- package files ---'
if [ -f site/package.json ]; then cat -n site/package.json; fi
if [ -f site/lighthouserc.cjs ]; then cat -n site/lighthouserc.cjs; fi
printf '%s\n' '--- package search ---'
python3 - <<'PY' "$@"
import glob, json, re, os
paths=[]
for base in ('.', 'site'):
if os.path.exists(base):
for root, dirs, files in os.walk(base):
dirs[:] = [d for d in dirs if d not in {'.git', 'node_modules'}]
for f in files:
if f in {'package.json','package-lock.json'}:
paths.append(os.path.join(root, f))
for p in sorted(paths):
try:
with open(p, encoding='utf-8') as fh: data=json.load(fh)
except Exception as e:
print(f"ERR {p}: {e}")
continue
keys=[]
if 'dependencies' in data: keys+=[k for k,v in data['dependencies'].items() if any(x in k.lower() for x in ['axe','lighthouse','browser-driver-manager','playwright','puppeteer'])]
if 'devDependencies' in data: keys+=[k for k,v in data['devDependencies'].items() if any(x in k.lower() for x in ['axe','lighthouse','browser-driver-manager','playwright','puppeteer'])]
if 'scripts' in data: keys+=[k for k,v in data['scripts'].items() if any(x in k.lower() for x in ['axe','lighthouse','browser-driver-manager','playwright','puppeteer'])]
if keys:
print("FILE", p)
for k in sorted(keys):
print(k, getattr(data, {**{'dependencies': data.get('dependencies')}, **{'devDependencies': data.get('devDependencies')}, **{'scripts': data.get('scripts')}}.get(k)), type(data))
PYRepository: LUSKTECH/gl1tch.xyz
Length of output: 5340
🌐 Web query:
browser-driver-manager npm .env CHROME_PATH CHROMEDRIVER_PATH environment variables
💡 Result:
The browser-driver-manager npm package automatically creates a directory in your home folder named.browser-driver-manager upon installation [1][2]. Inside this directory, it maintains a.env file that stores the absolute paths to the installed Chrome and Chromedriver binaries under the environment variable keys CHROME_TEST_PATH and CHROMEDRIVER_TEST_PATH, respectively [1][2]. To utilize these paths in your application, you must load this.env file [1][3]. A common approach in Node.js, using the dotenv package, is as follows [1][2]: require('dotenv').config({ path: '~/.browser-driver-manager/.env' }); console.log(process.env.CHROME_TEST_PATH); console.log(process.env.CHROMEDRIVER_TEST_PATH); Since these paths are generated dynamically by the browser-driver-manager, they are intended to be read from this file rather than hardcoded [4][1]. This method is especially important for version 2.0.0 and later, as it replaces the previous practice of relying on the chromedriver npm package's path property [4][2]. For non-Node.js environments, you can similarly parse this.env file using standard file I/O or environment variable loaders available in your language of choice [5][6][7].
Citations:
- 1: https://npmjs.com/package/browser-driver-manager
- 2: https://github.com/straker/browser-driver-manager/blob/main/README.md
- 3: https://github.com/straker/browser-driver-manager
- 4: chore: bump browser-driver-manager from 1.0.4 to 2.0.1 dequelabs/axe-core#4694
- 5: Update how repo downloads Chromedriver dequelabs/axe-core-gems#384
- 6: Update how repo downloads Chromedriver dequelabs/axe-core-npm#1043
- 7: Update how repo downloads Chromedriver dequelabs/axe-devhub-action#146
🌐 Web query:
axe-core/cli environment variables CHROME_PATH CHROMEDRIVER_PATH chromium executable
💡 Result:
The @axe-core/cli provides command-line options to specify the paths for the Chrome browser executable and the ChromeDriver executable, rather than relying on environment variables for these specific configurations [1][2]. To specify these paths, use the following command-line flags: --chrome-path: Use this flag followed by the absolute path to the Chrome browser executable [1]. This is useful when the CLI cannot automatically locate your Chrome installation or when you need to use a specific version [1]. --chromedriver-path: Use this flag followed by the absolute path to the ChromeDriver executable [1][2]. This allows you to point the CLI to a specific version of ChromeDriver, which is necessary if you encounter compatibility issues between your installed Chrome version and the default ChromeDriver [1][3]. Example usage: axe www.example.com --chrome-path="/path/to/chrome/binary" --chromedriver-path="/path/to/chromedriver/binary" While there are no specific environment variables for these paths, you can manage browser drivers using the recommended tool: npx browser-driver-manager install chrome: This command helps install and manage matching versions of Chrome and ChromeDriver, which is the preferred method for resolving version incompatibility errors [3]. Other configuration settings, such as browser type or headless mode, are typically managed via the axe config-selenium command or by editing the preferences file (typically located at ~/.config/preferences/com.deque.axe.cli.pref) [4]. Usage tracking can be disabled via the environment variable AXE_TRACK_USAGE=false [4].
Citations:
- 1: https://docs.deque.com/devtools-for-web/4/en/cli-page-tests/
- 2: https://github.com/dequelabs/axe-core-npm/blob/6505560d/packages/cli/README.md
- 3: @axe-core/cli fails since axe-core 4.10.3 upgrade due to chrome version issue dequelabs/axe-core-npm#1157
- 4: https://docs.deque.com/devtools-for-web/4/en/cli-config/
🌐 Web query:
lighthouse cli CHROME_PATH environment variable chromePath configuration
💡 Result:
To specify the path of the Chrome executable for the Lighthouse CLI, you can use the CHROME_PATH environment variable [1][2]. Setting this variable allows the underlying chrome-launcher to detect and use the specific Chrome installation you designate [2][3]. For Lighthouse CI (LHCI), there is a specific chromePath configuration option available in the configuration file, which provides a more explicit way to set the path [4][5]. The priority order for resolution in Lighthouse CI is: 1. The chromePath configuration option [4]. 2. The CHROME_PATH environment variable [4][5]. 3. The executable path found via puppeteer or puppeteer-core (if installed) [4]. 4. The highest priority installation detected by the chrome-launcher package [4]. While some users have requested a direct --chrome-path command-line flag for the standard Lighthouse CLI, it is not currently a native, supported flag; users are instead encouraged to rely on the CHROME_PATH environment variable [6].
Citations:
- 1: https://googlechrome-lighthouse.mintlify.app/api/cli-reference
- 2: GoogleChrome/lighthouse@41df647
- 3: misc: use
CHROME_PATHvariable in CI and scripts GoogleChrome/lighthouse#9202 - 4: https://googlechrome.github.io/lighthouse-ci/docs/configuration.html
- 5: GoogleChrome/lighthouse-ci@b454da9
- 6: CLI: Add --chrome-path option GoogleChrome/lighthouse#16884
🌐 Web query:
treosh lighthouse ci action uploadArtifacts temporaryPublicStorage browser-driver-manager CHROME_PATH
💡 Result:
In GitHub Actions, treosh/lighthouse-ci-action provides convenient flags for managing Lighthouse report storage, while CHROME_PATH is a critical environment variable often required when running Lighthouse in headless CI environments. treosh/lighthouse-ci-action Configuration The treosh/lighthouse-ci-action supports direct configuration for report handling [1][2]: - uploadArtifacts (default: false): When set to true, this flag saves Lighthouse reports as GitHub Actions artifacts, allowing you to persist and download them from the action's run summary [1][3]. - temporaryPublicStorage (default: false): When set to true, this flag uploads your reports to Google's temporary public storage [1][3]. Reports uploaded this way are public and are automatically deleted after 7 days [1]. Because these are public, it is often recommended to use a private Lighthouse CI (LHCI) server if you are handling sensitive data [1][2]. CHROME_PATH and CI Environments When running Lighthouse in a CI environment like GitHub Actions (particularly on ubuntu-latest runners), the Lighthouse collector often requires a defined Chrome or Chromium executable [4][5]. If the runner does not have a stable version of Chrome pre-installed or detectable, you may encounter an error stating that the CHROME_PATH environment variable must be set [4]. To resolve this, you can use a browser-setup action (such as browser-actions/setup-chrome) to install Chrome and then export its path to the environment [4]: - Install Chrome: Use an action like browser-actions/setup-chrome to install the browser [4]. - Set the Path: Extract the output path from the setup step and set the CHROME_PATH environment variable [4]. Example workflow snippet [4]: - name: setup chrome uses: browser-actions/setup-chrome@v1 id: setup-chrome - name: Set CHROME_PATH run: echo "CHROME_PATH=${{ steps.setup-chrome.outputs.chrome-path }}" >> $GITHUB_ENV - name: Audit URLs using Lighthouse uses: treosh/lighthouse-ci-action@v12 with: urls: https://example.com uploadArtifacts: true temporaryPublicStorage: true browser-driver-manager While straker/browser-driver-manager is a utility for managing browser and driver installations (often for testing frameworks like Webdriver), it is not a direct requirement for the treosh/lighthouse-ci-action [6]. Its primary purpose is to provide local or CI environments with specific versions of Chrome and Chromedriver by managing their install paths in a.env file [6]. If used, you would need to read the path from that.env file and manually set the CHROME_PATH environment variable for your Lighthouse CI step, similar to the process described above [6].
Citations:
- 1: https://github.com/treosh/lighthouse-ci-action/blob/main/README.md
- 2: https://github.com/treosh/lighthouse-ci-action
- 3: https://github.com/marketplace/actions/lighthouse-ci-action
- 4: The CHROME_PATH environment variable must be set to a Chrome/Chromium executable treosh/lighthouse-ci-action#116
- 5: The examples for Github actions are missing chrome install GoogleChrome/lighthouse-ci#894
- 6: https://github.com/straker/browser-driver-manager/
Activate the browser-driver-manager paths in the scans. browser-driver-manager stores Chrome/ChromeDriver paths in ~/.browser-driver-manager/.env, but neither workflow exports those paths or passes them to the scanners.
.github/workflows/a11y.yml#L34-L47: load the.envvalues and pass the matching--chrome-pathand--chromedriver-pathflags tonpx --yes@axe-core/cli``..github/workflows/lighthouse.yml#L34-L41: export the downloaded Chrome executable path asCHROME_PATH, or configurechromePathin the Lighthouse CI config/action so it does not fall back to an incompatible system Chrome.
📍 Affects 2 files
.github/workflows/a11y.yml#L34-L36(this comment).github/workflows/lighthouse.yml#L34-L36
🤖 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 @.github/workflows/a11y.yml around lines 34 - 36, Update
.github/workflows/a11y.yml lines 34-47 to load ~/.browser-driver-manager/.env
and pass its Chrome and ChromeDriver paths via --chrome-path and
--chromedriver-path to npx --yes `@axe-core/cli`. Update
.github/workflows/lighthouse.yml lines 34-41 to export the downloaded Chrome
executable as CHROME_PATH or configure chromePath in the Lighthouse CI
action/config, ensuring both scanners use the matching downloaded browser.
| - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 | ||
|
|
||
| - uses: actions/setup-node@v5 | ||
| - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Disable checkout credential persistence across these workflows.
Each checkout is followed by repository-controlled npm or analysis commands. Add persist-credentials: false unless a later step explicitly needs Git authentication.
.github/workflows/ci.yml#L45-L47: addpersist-credentials: falseto the typecheck checkout..github/workflows/ci.yml#L61-L63: add it to the build checkout..github/workflows/ci.yml#L85-L87: add it to the test checkout..github/workflows/qlty.yml#L42-L44: add it to the qlty checkout..github/workflows/sonarqube.yml#L40-L42: add it to the SonarQube checkout.
🧰 Tools
🪛 zizmor (1.26.1)
[warning] 45-45: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false
(artipacked)
📍 Affects 3 files
.github/workflows/ci.yml#L45-L47(this comment).github/workflows/ci.yml#L61-L63.github/workflows/ci.yml#L85-L87.github/workflows/qlty.yml#L42-L44.github/workflows/sonarqube.yml#L40-L42
🤖 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 @.github/workflows/ci.yml around lines 45 - 47, Disable credential
persistence on every listed checkout action by adding persist-credentials:
false: .github/workflows/ci.yml lines 45-47, 61-63, and 85-87;
.github/workflows/qlty.yml lines 42-44; and .github/workflows/sonarqube.yml
lines 40-42. Do not alter subsequent workflow steps.
Source: Linters/SAST tools
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v5 | ||
| - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== workflow checkout usages =="
rg -n "actions/checkout|persist-credentials" .github/workflows || true
echo
echo "== workflow files sizes =="
wc -l .github/workflows/codacy.yml .github/workflows/security.yml
echo
echo "== relevant workflow snippets =="
for f in .github/workflows/codacy.yml .github/workflows/security.yml; do
echo "--- $f"
nl -ba "$f" | sed -n '1,160p'
doneRepository: LUSKTECH/gl1tch.xyz
Length of output: 1822
🏁 Script executed:
#!/bin/bash
set -euo pipefail
for f in .github/workflows/codacy.yml .github/workflows/security.yml .github/workflows/lighthouse.yml .github/workflows/a11y.yml .github/workflows/qlty.yml .github/workflows/sonarqube.yml .github/workflows/ci.yml; do
[ -f "$ f" ] || true
done
for f in .github/workflows/codacy.yml .github/workflows/security.yml .github/workflows/lighthouse.yml .github/workflows/a11y.yml .github/workflows/qlty.yml .github/workflows/sonarqube.yml .github/workflows/ci.yml; do
echo "--- $f"
sed -n '1,170p' "$f"
done
echo "== all checkout step occurrences in workflows =="
grep -RIn "uses: actions/checkout@" .github/workflows || trueRepository: LUSKTECH/gl1tch.xyz
Length of output: 17148
🌐 Web query:
actions/checkout v5 persist-credentials default true documentation
💡 Result:
In the actions/checkout action, including version v5, the persist-credentials input defaults to true [1][2][3]. When persist-credentials is set to true (the default), the action configures the authentication token or SSH key in the local git configuration [1][4]. This allows subsequent steps in your workflow to execute authenticated git commands [1][4]. The action is designed to remove these credentials during the post-job cleanup process [1][4]. In v5, the implementation of this feature was updated to store credentials under $RUNNER_TEMP rather than directly in the local git config [5], a change intended to improve security by preventing accidental leakage, such as through artifact publishing [6][5]. Users who wish to opt out of this behavior and prevent the action from configuring git credentials can explicitly set persist-credentials: false [1][4].
Citations:
- 1: https://github.com/actions/checkout
- 2: https://git.liteyuki.org/actions/checkout/src/tag/v5.0.1/action.yml
- 3: https://git.woni.link/actions/checkout/src/branch/releases/v5/action.yml
- 4: https://git.liteyuki.org/actions/checkout/src/branch/releases/v5/README.md
- 5: https://git.cxtech.cc/actions/checkout/compare/v6.0.0..v5.0.1
- 6: [security] Escalate concerning default
persist-credentials=trueplease actions/checkout#2312
🌐 Web query:
actions/checkout v5 persist-credentials false source credentials local git config
💡 Result:
In actions/checkout, the persist-credentials input controls whether the action configures the authentication token or SSH key in the local git configuration [1][2][3]. When persist-credentials is set to the default value (true), the action automatically configures authentication credentials to enable your subsequent workflow steps to run authenticated Git commands [1][4][5]. In actions/checkout v5, these credentials were added to the repository's local git config [2]. In later versions (starting with v6), this behavior was updated to store credentials in a separate file within $RUNNER_TEMP, using Git's includeIf mechanism to reference them, which improves security by isolating the credentials from the main Git configuration [6][7][8]. Setting persist-credentials to false explicitly opts out of this behavior, meaning the action will not write any credentials to the local git configuration or temporary files [1][8]. This is a recommended security practice when your subsequent workflow steps do not require authenticated Git access, as it minimizes the risk of credential leakage [8]. In summary: - Default (true): Credentials are configured for use by subsequent steps [1][3]. - False: No credentials are configured, and the action performs only the initial checkout [1][8].
Citations:
- 1: https://github.com/actions/checkout
- 2: https://git.liteyuki.org/actions/checkout/src/tag/v5.0.1/action.yml
- 3: https://spacelift.io/blog/github-actions-checkout
- 4: https://git.liteyuki.org/actions/checkout/src/branch/releases/v5/README.md
- 5: https://github.com/actions/checkout/tree/v6.0.2?tab=readme-ov-file
- 6: actions/checkout@v5.0.1...v6.0.0
- 7: actions/checkout@v5.0.0...v6.0.0
- 8: Set
persist-credentials: falseon checkout steps cli/go-gh#225
Disable persisted checkout credentials where the workflow uses the checkout token.
In the scan workflows, the listed actions/checkout steps use the default persist-credentials: true, which leaves GITHUB_TOKEN available to later action and shell steps. Add persist-credentials: false where later job steps do not need authenticated Git operations.
🧰 Tools
🪛 zizmor (1.26.1)
[warning] 39-39: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false
(artipacked)
📍 Affects 2 files
.github/workflows/codacy.yml#L39-L39(this comment).github/workflows/codacy.yml#L64-L64.github/workflows/security.yml#L50-L52.github/workflows/security.yml#L73-L73.github/workflows/security.yml#L96-L96.github/workflows/security.yml#L127-L127
🤖 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 @.github/workflows/codacy.yml at line 39, Update each listed actions/checkout
step in .github/workflows/codacy.yml at lines 39-39 and 64-64, and
.github/workflows/security.yml at lines 50-52, 73-73, 96-96, and 127-127, to set
persist-credentials to false. No other workflow steps require changes.
Source: Linters/SAST tools
- a11y: add browser-driver-manager install step to fix ChromeDriver/Chrome version mismatch on GitHub runners - lighthouse: add browser-driver-manager install step for consistent Chrome - codacy: upgrade codeql-action/upload-sarif v3→v4, add category to fix multiple SARIF runs rejection - security: upgrade codeql-action v3→v4, pin all GitHub Actions to commit SHAs across all 10 workflow files (fixes 39 Semgrep blocking findings) - security: add nosemgrep annotation for SonarQube SHA false positive - deps: upgrade astro 6→7.1.3, @astrojs/netlify 7→8.1.2, sharp 0.34→0.35.3 (resolves all high/critical Snyk vulnerabilities) - pin all package.json deps to exact versions (no caret ranges) - add npm overrides for sharp to fix nested transitive copy in ipx - dependabot: add 7-day cooldown to protect against malicious fresh publishes
|
You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool. What Enabling Code Scanning Means:
For more information about GitHub Code Scanning, check out the documentation. |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
- lighthouse: fix serve path (site/dist not dist) since action runs from repo root - codacy: add continue-on-error to SARIF upload (codacy produces multi-run SARIF that CodeQL rejects regardless of category) - security: add continue-on-error to snyk test (free tier monthly limit) - sonarqube: check both SONAR_TOKEN and SONAR_HOST_URL in secrets gate
Summary
Fixes all 4 failing CI workflows on the
dependabot/npm_and_yarn/site/tmp-0.2.7PR.Changes
Accessibility (axe-core scan)
browser-driver-manager install chromestep to sync ChromeDriver with the runner's Chrome version (was: ChromeDriver 151 vs Chrome 150)Lighthouse CI
browser-driver-manager install chromestep for consistent browser versionERRORED_DOCUMENT_REQUEST404 errors during auditsCodacy
github/codeql-action/upload-sariffrom v3 → v4category: codacyto fix GitHub's rejection of multiple SARIF runs with the same categorySecurity (Semgrep + Snyk)
github-actions-mutable-action-tagfindings)astro6.3.7 → 7.1.3@astrojs/netlify7.0.10 → 8.1.2sharp(added direct dep) → 0.35.3 + overrideviteresolved to 8.1.5 (fixes directory traversal CVE)js-yamlresolved to 4.3.0 (fixes algorithmic complexity CVE)Additional hardening
package.jsondependencies to exact versions (no caret ranges)overridesforsharpto fix nested transitive copy inipxcodeql-actionv3 → v4 in both security.yml and codacy.yml (v3 deprecated Dec 2026)Verification
npm run build✅npm run check(astro typecheck) ✅ — 0 errors, 0 warningsnpm audit --omit=dev— 0 high/critical (15 low/moderate in unfixed Netlify transitive deps)Summary by CodeRabbit