Skip to content

setup: add GSTACK_SKIP_PLAYWRIGHT to skip Chromium install #913

Closed

Description

@sun617

Problem

On NixOS (and other non-FHS distros), ./setup fails at the Playwright Chromium check because the downloaded binary can't find system libraries like libglib-2.0.so.0:

error while loading shared libraries: libglib-2.0.so.0: cannot open shared object file
gstack setup failed: Playwright Chromium could not be launched

Users on these systems typically have a system-installed Chrome/Chromium that works fine.

Proposed fix

Add a GSTACK_SKIP_PLAYWRIGHT=1 env var check that skips the Playwright browser install/verification. The browse tool already supports GSTACK_CHROMIUM_PATH to point at a system browser, so setup just needs to get out of the way.

 # 2. Ensure Playwright's Chromium is available
-if ! ensure_playwright_browser; then
+#    Skip with GSTACK_SKIP_PLAYWRIGHT=1 if using a system-installed Chrome/Chromium
+#    (set GSTACK_CHROMIUM_PATH to point the browse tool at your system browser)
+if [ "${GSTACK_SKIP_PLAYWRIGHT:-0}" = "1" ]; then
+  log "Skipping Playwright browser check (GSTACK_SKIP_PLAYWRIGHT=1)"
+elif ! ensure_playwright_browser; then

Usage: GSTACK_SKIP_PLAYWRIGHT=1 ./setup

Workaround

Until this is merged, users can patch setup locally or auto-detect a system Chrome before the Playwright check.

Activity

  1. joseironchip commented on May 12, 2026

    @joseironchip

    🚀 Complete Working Solution for Arch Linux & Bun (Fixing both the script flow and the Smoke Test)

    Building upon the proposed fix, just adding a flag to skip the download isn't enough. The ./setup script performs a mandatory execution test immediately after (ensure_playwright_browser), which crashes on Arch with a Cannot find package 'playwright' error because Bun evaluates the test code in an isolated manner where nested workspace modules aren't resolved.

    To fix this completely, we need to modify two parts of the ./setup script to fully support a system-installed Chromium (via Pacman), and then export the correct environment variables.

    1. Update the install flow in ./setup

    Find where ensure_playwright_browser is called in the main execution block of the script, and wrap it around the new environment variable check:

    if [ "\${GSTACK_SKIP_PLAYWRIGHT:-0}" = "1" ]; then
        echo "Skipping Playwright browser check (GSTACK_SKIP_PLAYWRIGHT=1)"
    elif ! ensure_playwright_browser; then
        log_error "Playwright browser installation failed"
        exit 1
    fi

    2. Rewrite the ensure_playwright_browser() function

    Replace your current function with this updated version. It forces Bun to inject the playwright package dependency locally into the workspace root right before building the temporary test script, allowing it to accurately test your system's native Chromium path:

    ensure_playwright_browser() {
      if [ "\${GSTACK_SKIP_PLAYWRIGHT:-0}" = "1" ]; then
        log "Skipping download step. Testing system Chromium instead..."
        (
          cd "\$SOURCE_GSTACK_DIR"
          
          # Force local playwright dependency package without downloading Ubuntu binaries
          PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 bun add playwright --dev
          
          echo "
            const { chromium } = require('playwright');
            (async () => {
              try {
                const browser = await chromium.launch({
                  executablePath: '\${GSTACK_CHROMIUM_PATH:-/usr/bin/chromium}',
                  args: ['--no-sandbox', '--disable-setuid-sandbox', '--headless']
                });
                await browser.close();
                console.log('¡Smoke test completado con éxito!');
                process.exit(0);
              } catch (e) {
                console.error('Fallo al lanzar Chromium del sistema:', e);
                process.exit(1);
              }
            })();
          " > test-chromium.js
          
          bun test-chromium.js
          local_exit_code=\$?
          rm -f test-chromium.js
          return \$local_exit_code
        )
      elif [ "\$IS_WINDOWS" -eq 1 ]; then
        (
          cd "\$SOURCE_GSTACK_DIR"
          node -e "const { chromium } = require('playwright'); (async () => { const b = await chromium.launch(); await b.close(); })()"
        )
      else
        (
          cd "\$SOURCE_GSTACK_DIR"
          bun --eval 'import { chromium } from "playwright"; const browser = await chromium.launch(); await browser.close();'
        ) >/dev/null 2>&1
      fi
    }

    3. Setup your Environment Path Variables

    For this to work during installation and later when using GStack commands inside Claude Code, you must persist the path of your native browser in your system shell.

    First install Chromium via pacman:

    sudo pacman -S chromium

    Then append these to your ~/.bashrc or ~/.zshrc configuration files:

    export GSTACK_SKIP_PLAYWRIGHT=1
    export GSTACK_CHROMIUM_PATH="/usr/bin/chromium"
    export CHROME_PATH="/usr/bin/chromium"

    Don't forget to reload your shell using source ~/.zshrc (or .bashrc).

    4. Run the installer

    Now, executing the script with the inline variables will pass smoothly and link all 47 skills perfectly:

    GSTACK_SKIP_PLAYWRIGHT=1 GSTACK_CHROMIUM_PATH="/usr/bin/chromium" ./setup
  2. joseironchip commented on May 12, 2026

    @joseironchip

    Hey everyone! I just opened a Pull Request that completely fixes this issue for Arch Linux, NixOS, and other non-Ubuntu distributions.

    It implements the GSTACK_SKIP_PLAYWRIGHT=1 conditional bypass, fixes the isolated module resolution crash during the mandatory smoke test, and patches the test suite to properly inherit GSTACK_CHROMIUM_PATH in headless mode.

    You can check out the implementation and review the code in the linked PR above! 🚀

    #1455

    https://github.com/joseironchip/gstack-arch/

  3. time-attack commented on Jul 15, 2026

    @time-attack
    Contributor

    @sun617 Playwright still installs Chromium unconditionally. Skip behavior and complete custom Chromium path support remain unresolved.

  4. capy-ai commented on Oct 3, 2026

    @capy-ai
    Contributor

    setup now honors GSTACK_SKIP_PLAYWRIGHT=1: it skips the Chromium install and smoke test and reports the skip as a request rather than a failure (setup:1714 on main). Fixed in v1.80.0.0 (#2802).
    If you still see this on the latest gstack, please reopen with details.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions