chore: import upstream snapshot with attribution
This commit is contained in:
Executable
+136
@@ -0,0 +1,136 @@
|
||||
#!/usr/bin/env bash
|
||||
# install-playwright.sh - Install Playwright for browser automation
|
||||
# Usage: bash install-playwright.sh [install|update]
|
||||
#
|
||||
# What it does:
|
||||
# 1. Ensure Chromium is installed (dependency)
|
||||
# 2. Install playwright-core via npm global
|
||||
# 3. Set Playwright environment variables in .bashrc
|
||||
# 4. Print usage guide
|
||||
#
|
||||
# This script is WARN-level: failure does not abort the parent installer.
|
||||
set -euo pipefail
|
||||
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BOLD='\033[1m'
|
||||
NC='\033[0m'
|
||||
|
||||
MODE="${1:-install}"
|
||||
|
||||
# ── Helper ────────────────────────────────────
|
||||
|
||||
fail_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
exit 0
|
||||
}
|
||||
|
||||
# ── Detect Chromium binary path ───────────────
|
||||
|
||||
detect_chromium_bin() {
|
||||
for bin in "$PREFIX/bin/chromium-browser" "$PREFIX/bin/chromium"; do
|
||||
if [ -x "$bin" ]; then
|
||||
echo "$bin"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
# ── Pre-checks ────────────────────────────────
|
||||
|
||||
if [ -z "${PREFIX:-}" ]; then
|
||||
fail_warn "Not running in Termux (\$PREFIX not set)"
|
||||
fi
|
||||
|
||||
if ! command -v npm &>/dev/null; then
|
||||
fail_warn "npm not found — Node.js is required for Playwright"
|
||||
fi
|
||||
|
||||
# ── Step 1: Ensure Chromium is installed ──────
|
||||
|
||||
if ! CHROMIUM_BIN=$(detect_chromium_bin); then
|
||||
echo "Chromium is required for Playwright. Installing..."
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
if [ -f "$SCRIPT_DIR/install-chromium.sh" ]; then
|
||||
if ! bash "$SCRIPT_DIR/install-chromium.sh" install; then
|
||||
fail_warn "Chromium installation failed — cannot proceed with Playwright"
|
||||
fi
|
||||
else
|
||||
fail_warn "install-chromium.sh not found — install Chromium first"
|
||||
fi
|
||||
|
||||
if ! CHROMIUM_BIN=$(detect_chromium_bin); then
|
||||
fail_warn "Chromium binary not found after installation"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}[OK]${NC} Chromium found: $CHROMIUM_BIN"
|
||||
|
||||
# ── Step 2: Install playwright-core ───────────
|
||||
|
||||
if [ "$MODE" = "install" ]; then
|
||||
if npm list -g playwright-core &>/dev/null; then
|
||||
echo -e "${GREEN}[SKIP]${NC} playwright-core already installed"
|
||||
else
|
||||
echo "Installing playwright-core..."
|
||||
if ! npm install -g playwright-core; then
|
||||
fail_warn "Failed to install playwright-core"
|
||||
fi
|
||||
echo -e "${GREEN}[OK]${NC} playwright-core installed"
|
||||
fi
|
||||
elif [ "$MODE" = "update" ]; then
|
||||
echo "Updating playwright-core..."
|
||||
if ! npm install -g playwright-core@latest; then
|
||||
fail_warn "Failed to update playwright-core"
|
||||
fi
|
||||
echo -e "${GREEN}[OK]${NC} playwright-core updated"
|
||||
fi
|
||||
|
||||
# ── Step 3: Set environment variables ─────────
|
||||
|
||||
BASHRC="$HOME/.bashrc"
|
||||
PW_MARKER_START="# >>> Playwright >>>"
|
||||
PW_MARKER_END="# <<< Playwright <<<"
|
||||
|
||||
PW_BLOCK="${PW_MARKER_START}
|
||||
export PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=\"$CHROMIUM_BIN\"
|
||||
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
|
||||
${PW_MARKER_END}"
|
||||
|
||||
touch "$BASHRC"
|
||||
if grep -qF "$PW_MARKER_START" "$BASHRC"; then
|
||||
sed -i "/${PW_MARKER_START//\//\\/}/,/${PW_MARKER_END//\//\\/}/d" "$BASHRC"
|
||||
fi
|
||||
echo "" >> "$BASHRC"
|
||||
echo "$PW_BLOCK" >> "$BASHRC"
|
||||
|
||||
echo -e "${GREEN}[OK]${NC} Environment variables set in .bashrc"
|
||||
echo " PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=$CHROMIUM_BIN"
|
||||
echo " PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1"
|
||||
|
||||
# ── Step 4: Usage guide ──────────────────────
|
||||
|
||||
echo ""
|
||||
echo -e "${BOLD} Playwright is ready!${NC}"
|
||||
echo ""
|
||||
echo " To use in your project:"
|
||||
echo ""
|
||||
echo " npm install playwright-core # add to your project"
|
||||
echo ""
|
||||
echo " Example code:"
|
||||
echo ""
|
||||
echo " const { chromium } = require('playwright-core');"
|
||||
echo ""
|
||||
echo " const browser = await chromium.launch();"
|
||||
echo " const page = await browser.newPage();"
|
||||
echo " await page.goto('https://example.com');"
|
||||
echo " await page.screenshot({ path: 'screenshot.png' });"
|
||||
echo " await browser.close();"
|
||||
echo ""
|
||||
echo -e " ${YELLOW}[NOTE]${NC} Environment variables are set. No need to specify"
|
||||
echo " executablePath or --no-sandbox manually."
|
||||
echo ""
|
||||
echo " To apply environment variables in current session:"
|
||||
echo " source ~/.bashrc"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user