Files

196 lines
5.9 KiB
YAML

name: CI
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
permissions:
contents: read
jobs:
rust:
name: Rust workspace
runs-on: macos-15
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Use pinned Rust toolchain
run: rustup show
- name: Check formatting
run: cargo --locked fmt --all --check
- name: Check workspace
run: cargo --locked check --workspace --all-targets
- name: Lint workspace
run: cargo --locked clippy --workspace --all-targets -- -D warnings
- name: Test workspace
run: cargo --locked test --workspace --all-targets
- name: Check Servo engine host
run: cargo --locked check -p ely_servo_host --features servo-engine,hardware-render --all-targets
- name: Lint Servo engine host
run: cargo --locked clippy -p ely_servo_host --features servo-engine,hardware-render --all-targets -- -D warnings
- name: Test Servo engine host all targets
run: cargo --locked test -p ely_servo_host --features servo-engine,hardware-render --all-targets -- --test-threads=1
- name: Test app hardware IOSurface integration
env:
ELY_SERVO_RENDERING_CONTEXT: hardware
run: cargo --locked test -p ely_app --features live-site-smoke --all-targets web_surface_imports_hardware_iosurface -- --test-threads=1
- name: Test profile-scoped PRD site compatibility
run: scripts/verify_prd_site_rendering.sh
- name: Audit source file size
run: scripts/audit_source_lines.sh
- name: Verify Rust advisory exception boundaries
run: scripts/verify_rust_advisory_exceptions.sh
- name: Verify macOS bundle metadata
run: scripts/verify_macos_bundle_metadata.sh
- name: Verify Linux desktop metadata
run: scripts/verify_linux_desktop_metadata.sh
- name: Verify Windows app manifest metadata
run: scripts/verify_windows_app_manifest.sh
- name: Build macOS app bundle
run: scripts/create_macos_app_bundle.sh
- name: Verify built macOS app bundle metadata
run: scripts/verify_macos_bundle_metadata.sh "target/macos/ELY Browser.app/Contents/Info.plist"
- name: Verify macOS bundle executable placement
run: |
test -x "target/macos/ELY Browser.app/Contents/MacOS/ely_app"
test -x "target/macos/ELY Browser.app/Contents/MacOS/ely_servo_sidecar"
test -f "target/macos/ELY Browser.app/Contents/Resources/AppIcon.icns"
test ! -e "target/macos/ELY Browser.app/Contents/Resources/ely_servo_sidecar"
codesign --verify --deep --strict "target/macos/ELY Browser.app"
- name: Build adjacent-binary native distribution
run: scripts/create_native_distribution.sh
- name: Verify native distribution sidecar contract
run: |
test -x target/distribution/ely-browser/ely_app
test -x target/distribution/ely-browser/ely_servo_sidecar
rust-advisories:
name: Rust dependency advisories
uses: google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@9a498708959aeaef5ef730655706c5a1df1edbc2 # v2.3.8
permissions:
actions: read
contents: read
with:
scan-args: |-
--lockfile=./Cargo.lock
--config=./osv-scanner.toml
upload-sarif: false
fail-on-vuln: true
portable:
name: Portable app (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Use pinned Rust toolchain
run: rustup show
- name: Install Linux native dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y \
libasound2-dev \
libfontconfig1-dev \
libssl-dev \
libwayland-dev \
libx11-dev \
libx11-xcb-dev \
libxkbcommon-x11-dev \
libxrandr-dev
- name: Check portable app targets
run: cargo --locked check -p ely_app --all-targets
- name: Check shell scripts
shell: bash
run: >-
bash -n
scripts/run_dev.sh
scripts/create_macos_app_bundle.sh
scripts/create_native_distribution.sh
scripts/release_build_env.sh
scripts/verify_rust_advisory_exceptions.sh
scripts/verify_release_artifacts.sh
- name: Build native distribution
shell: bash
run: scripts/create_native_distribution.sh
- name: Verify native distribution
shell: bash
run: |
suffix=""
if [[ "${RUNNER_OS}" == "Windows" ]]; then
suffix=".exe"
fi
test -f "target/distribution/ely-browser/ely_app${suffix}"
test -f "target/distribution/ely-browser/ely_servo_sidecar${suffix}"
if [[ "${RUNNER_OS}" == "Linux" ]]; then
test -f target/distribution/ely-browser/com.elydora.ely-browser.desktop
fi
if [[ "${RUNNER_OS}" == "Windows" ]]; then
test -f target/distribution/ely-browser/ely_app.exe.manifest
fi
cloudflare:
name: Cloudflare worker
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Use Node
uses: actions/setup-node@v5
with:
node-version: 24
cache: npm
cache-dependency-path: cloudflare/package-lock.json
- name: Install dependencies
run: npm ci
working-directory: cloudflare
- name: Audit dependencies
run: npm audit --audit-level=high
working-directory: cloudflare
- name: Check worker types
run: npm run check
working-directory: cloudflare
- name: Test worker contracts
run: npm test
working-directory: cloudflare