feat(hermes): add provider onboarding foundation #19
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. | |
| # SPDX-License-Identifier: Apache-2.0 | |
| name: macos-e2e | |
| on: | |
| workflow_dispatch: | |
| pull_request: | |
| paths: | |
| - "bin/**" | |
| - "nemoclaw/**" | |
| - "scripts/**" | |
| - "src/**" | |
| - "test/**" | |
| - ".github/workflows/macos-e2e.yaml" | |
| - "package.json" | |
| - "package-lock.json" | |
| - "nemoclaw/package-lock.json" | |
| - "vitest.config.ts" | |
| push: | |
| branches: | |
| - main | |
| paths-ignore: | |
| - "docs/**" | |
| - "**/*.md" | |
| - ".github/workflows/docs-preview-*.yaml" | |
| - "ISSUE_TEMPLATE/**" | |
| - ".github/ISSUE_TEMPLATE/**" | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: macos-e2e-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| macos-e2e: | |
| runs-on: macos-26 | |
| timeout-minutes: 30 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6 | |
| with: | |
| node-version: "22" | |
| cache: npm | |
| - name: Show environment | |
| run: | | |
| set -euo pipefail | |
| echo "Runner: $(uname -a)" | |
| echo "Arch: $(uname -m)" | |
| sw_vers | |
| node --version | |
| npm --version | |
| - name: Install root dependencies | |
| run: npm ci --ignore-scripts | |
| - name: Build CLI TypeScript modules | |
| run: npm run build:cli | |
| - name: Install and build plugin | |
| run: | | |
| set -euo pipefail | |
| cd nemoclaw | |
| npm ci --ignore-scripts | |
| npm run build | |
| - name: Run vitest suite | |
| run: npx vitest run --testTimeout 60000 | |
| - name: Detect Docker availability | |
| id: docker | |
| run: | | |
| if docker info >/dev/null 2>&1; then | |
| echo "docker_ok=true" >> "$GITHUB_OUTPUT" | |
| echo "Docker is available" | |
| docker version | |
| else | |
| echo "docker_ok=false" >> "$GITHUB_OUTPUT" | |
| echo "Docker is not available on this runner" | |
| fi | |
| - name: Run macOS full E2E | |
| if: steps.docker.outputs.docker_ok == 'true' | |
| env: | |
| NVIDIA_API_KEY: ${{ secrets.NVIDIA_API_KEY }} | |
| GITHUB_TOKEN: ${{ github.token }} | |
| NEMOCLAW_NON_INTERACTIVE: "1" | |
| NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE: "1" | |
| NEMOCLAW_RECREATE_SANDBOX: "1" | |
| NEMOCLAW_SANDBOX_NAME: "e2e-macos" | |
| run: bash test/e2e/test-full-e2e.sh | |
| - name: Explain skipped full E2E | |
| if: steps.docker.outputs.docker_ok != 'true' | |
| run: | | |
| echo 'Skipping macOS full E2E because Docker is unavailable on this runner.' | |
| echo 'The workflow still validated the NemoClaw build and vitest suite on macOS (Apple Silicon).' | |
| - name: Upload logs on failure | |
| if: failure() | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| with: | |
| name: macos-e2e-logs | |
| path: | | |
| /tmp/nemoclaw-e2e-*.log | |
| if-no-files-found: ignore |