headless-engine 1.0.2

A high-performance, lightweight (<30MB RAM) headless browser engine written in Rust for AI agents, web automation, and LLM data ingestion.
Documentation
name: Publish Packages

on:
  push:
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+*'
  workflow_dispatch:

permissions:
  contents: read

jobs:
  # ─────────────────────────────────────────
  # 1. Publish Rust crate to crates.io
  # ─────────────────────────────────────────
  publish-crates-io:
    name: Publish to crates.io
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Setup Rust toolchain
        uses: dtolnay/rust-toolchain@stable

      - name: Publish to crates.io
        run: cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }} --allow-dirty || echo "Already published to crates.io"
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

  # ─────────────────────────────────────────
  # 2. Publish Python package to PyPI
  # ─────────────────────────────────────────
  publish-pypi:
    name: Publish to PyPI
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Install build tools
        run: pip install build twine

      - name: Build distribution packages
        working-directory: sdk/python
        run: python -m build

      - name: Publish to PyPI
        working-directory: sdk/python
        run: twine upload dist/* --username __token__ --password ${{ secrets.PYPI_API_TOKEN }} --skip-existing

  # ─────────────────────────────────────────
  # 3. Publish Node.js package to npmjs.com
  # ─────────────────────────────────────────
  publish-npm:
    name: Publish to npm
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          registry-url: 'https://registry.npmjs.org'

      - name: Install dependencies
        working-directory: sdk/node
        run: npm install

      - name: Build TypeScript
        working-directory: sdk/node
        run: npm run build

      - name: Publish to npm
        working-directory: sdk/node
        run: npm publish --access public || echo "Already published to npm"
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}