From b3a82d4a9287787b57d55dbd6151426f3b1713ca Mon Sep 17 00:00:00 2001 From: Advait Paliwal Date: Fri, 10 Apr 2026 11:02:50 -0700 Subject: [PATCH] switch release workflow to binary only --- .github/workflows/publish.yml | 35 +++++------------- README.md | 2 +- scripts/install/install.ps1 | 8 ++--- scripts/install/install.sh | 10 ++---- website/public/install | 10 ++---- website/public/install.ps1 | 8 ++--- .../docs/getting-started/installation.md | 36 ++----------------- website/src/pages/index.astro | 2 -- 8 files changed, 24 insertions(+), 87 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 90c3e8e..fc8100a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -13,7 +13,7 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 outputs: version: ${{ steps.version.outputs.version }} - should_publish: ${{ steps.version.outputs.should_publish }} + should_release: ${{ steps.version.outputs.should_release }} steps: - uses: actions/checkout@v6 - uses: actions/setup-node@v5 @@ -21,38 +21,20 @@ jobs: node-version: 24.14.0 - id: version shell: bash + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - CURRENT=$(npm view @companion-ai/feynman version 2>/dev/null || echo "0.0.0") LOCAL=$(node -p "require('./package.json').version") echo "version=$LOCAL" >> "$GITHUB_OUTPUT" - if [ "$CURRENT" != "$LOCAL" ]; then - echo "should_publish=true" >> "$GITHUB_OUTPUT" + if gh release view "v$LOCAL" >/dev/null 2>&1; then + echo "should_release=false" >> "$GITHUB_OUTPUT" else - echo "should_publish=false" >> "$GITHUB_OUTPUT" + echo "should_release=true" >> "$GITHUB_OUTPUT" fi - publish-npm: - needs: version-check - if: needs.version-check.outputs.should_publish == 'true' - runs-on: blacksmith-4vcpu-ubuntu-2404 - permissions: - contents: read - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v5 - with: - node-version: 24.14.0 - registry-url: https://registry.npmjs.org - - run: npm ci --ignore-scripts - - run: npm run build - - run: npm test - - run: npm publish --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - build-native-bundles: needs: version-check - if: needs.version-check.outputs.should_publish == 'true' + if: needs.version-check.outputs.should_release == 'true' strategy: fail-fast: false matrix: @@ -101,9 +83,8 @@ jobs: release-github: needs: - version-check - - publish-npm - build-native-bundles - if: needs.version-check.outputs.should_publish == 'true' && needs.build-native-bundles.result == 'success' && needs.publish-npm.result == 'success' + if: needs.version-check.outputs.should_release == 'true' && needs.build-native-bundles.result == 'success' runs-on: blacksmith-4vcpu-ubuntu-2404 permissions: contents: write diff --git a/README.md b/README.md index bf3f102..cb82803 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ irm https://feynman.is/install.ps1 | iex The one-line installer fetches the latest tagged release. To pin a version, pass it explicitly, for example `curl -fsSL https://feynman.is/install | bash -s -- 0.2.17`. -If you install via `pnpm` or `bun` instead of the standalone bundle, Feynman requires Node.js `20.19.0` or newer. +The installer downloads a standalone native bundle with its own Node.js runtime. Local models are supported through the custom-provider flow. For Ollama, run `feynman setup`, choose `Custom provider (baseUrl + API key)`, use `openai-completions`, and point it at `http://localhost:11434/v1`. diff --git a/scripts/install/install.ps1 b/scripts/install/install.ps1 index 06564b5..3c8d398 100644 --- a/scripts/install/install.ps1 +++ b/scripts/install/install.ps1 @@ -109,8 +109,8 @@ This usually means the release exists, but not all platform bundles were uploade Workarounds: - try again after the release finishes publishing - - install via pnpm instead: pnpm add -g @companion-ai/feynman - - install via bun instead: bun add -g @companion-ai/feynman + - pass the latest published version explicitly, e.g.: + & ([scriptblock]::Create((irm https://feynman.is/install.ps1))) -Version 0.2.16 "@ } @@ -159,9 +159,7 @@ CALL "$bundleDir\feynman.cmd" %* Write-Warning "Current shell resolves feynman to $($resolvedCommand.Source)" Write-Host "Run in a new shell, or run: `$env:Path = '$installBinDir;' + `$env:Path" Write-Host "Then run: feynman" - if ($resolvedCommand.Source -like "*node_modules*@companion-ai*feynman*") { - Write-Host "If that path is an old global npm install, remove it with: npm uninstall -g @companion-ai/feynman" - } + Write-Host "If that path is an old package-manager install, remove it or put $installBinDir first on PATH." } Write-Host "Feynman $resolvedVersion installed successfully." diff --git a/scripts/install/install.sh b/scripts/install/install.sh index 23b4427..caa09ed 100644 --- a/scripts/install/install.sh +++ b/scripts/install/install.sh @@ -177,11 +177,7 @@ warn_command_conflict() { step "Run now: export PATH=\"$INSTALL_BIN_DIR:\$PATH\" && hash -r && feynman" step "Or launch directly: $expected_path" - case "$resolved_path" in - *"/node_modules/@companion-ai/feynman/"* | *"/node_modules/.bin/feynman") - step "If that path is an old global npm install, remove it with: npm uninstall -g @companion-ai/feynman" - ;; - esac + step "If that path is an old package-manager install, remove it or put $INSTALL_BIN_DIR first on PATH." fi } @@ -264,8 +260,8 @@ This usually means the release exists, but not all platform bundles were uploade Workarounds: - try again after the release finishes publishing - - install via pnpm instead: pnpm add -g @companion-ai/feynman - - install via bun instead: bun add -g @companion-ai/feynman + - pass the latest published version explicitly, e.g.: + curl -fsSL https://feynman.is/install | bash -s -- 0.2.16 EOF exit 1 fi diff --git a/website/public/install b/website/public/install index 23b4427..caa09ed 100644 --- a/website/public/install +++ b/website/public/install @@ -177,11 +177,7 @@ warn_command_conflict() { step "Run now: export PATH=\"$INSTALL_BIN_DIR:\$PATH\" && hash -r && feynman" step "Or launch directly: $expected_path" - case "$resolved_path" in - *"/node_modules/@companion-ai/feynman/"* | *"/node_modules/.bin/feynman") - step "If that path is an old global npm install, remove it with: npm uninstall -g @companion-ai/feynman" - ;; - esac + step "If that path is an old package-manager install, remove it or put $INSTALL_BIN_DIR first on PATH." fi } @@ -264,8 +260,8 @@ This usually means the release exists, but not all platform bundles were uploade Workarounds: - try again after the release finishes publishing - - install via pnpm instead: pnpm add -g @companion-ai/feynman - - install via bun instead: bun add -g @companion-ai/feynman + - pass the latest published version explicitly, e.g.: + curl -fsSL https://feynman.is/install | bash -s -- 0.2.16 EOF exit 1 fi diff --git a/website/public/install.ps1 b/website/public/install.ps1 index 06564b5..3c8d398 100644 --- a/website/public/install.ps1 +++ b/website/public/install.ps1 @@ -109,8 +109,8 @@ This usually means the release exists, but not all platform bundles were uploade Workarounds: - try again after the release finishes publishing - - install via pnpm instead: pnpm add -g @companion-ai/feynman - - install via bun instead: bun add -g @companion-ai/feynman + - pass the latest published version explicitly, e.g.: + & ([scriptblock]::Create((irm https://feynman.is/install.ps1))) -Version 0.2.16 "@ } @@ -159,9 +159,7 @@ CALL "$bundleDir\feynman.cmd" %* Write-Warning "Current shell resolves feynman to $($resolvedCommand.Source)" Write-Host "Run in a new shell, or run: `$env:Path = '$installBinDir;' + `$env:Path" Write-Host "Then run: feynman" - if ($resolvedCommand.Source -like "*node_modules*@companion-ai*feynman*") { - Write-Host "If that path is an old global npm install, remove it with: npm uninstall -g @companion-ai/feynman" - } + Write-Host "If that path is an old package-manager install, remove it or put $installBinDir first on PATH." } Write-Host "Feynman $resolvedVersion installed successfully." diff --git a/website/src/content/docs/getting-started/installation.md b/website/src/content/docs/getting-started/installation.md index 94183e4..224df73 100644 --- a/website/src/content/docs/getting-started/installation.md +++ b/website/src/content/docs/getting-started/installation.md @@ -1,11 +1,11 @@ --- title: Installation -description: Install Feynman on macOS, Linux, or Windows using curl, pnpm, or bun. +description: Install Feynman on macOS, Linux, or Windows using the standalone installer. section: Getting Started order: 1 --- -Feynman ships as a standalone runtime bundle for macOS, Linux, and Windows, and as a package-manager install for environments where Node.js is already installed. The recommended approach is the one-line installer, which downloads a prebuilt native bundle with zero external runtime dependencies. +Feynman ships as a standalone runtime bundle for macOS, Linux, and Windows. The one-line installer downloads a prebuilt native bundle with zero external runtime dependencies. ## One-line installer (recommended) @@ -17,7 +17,7 @@ curl -fsSL https://feynman.is/install | bash The installer detects your OS and architecture automatically. On macOS it supports both Intel and Apple Silicon. On Linux it supports x64 and arm64. The launcher is installed to `~/.local/bin`, the bundled runtime is unpacked into `~/.local/share/feynman`, and your `PATH` is updated when needed. -If you previously installed Feynman via `npm`, `pnpm`, or `bun` and still see local Node.js errors after a curl install, your shell is probably still resolving the older global binary first. Run `which -a feynman`, then `hash -r`, or launch the standalone shim directly with `~/.local/bin/feynman`. +If you previously installed Feynman through a package manager and still see local Node.js errors after a curl install, your shell is probably still resolving the older global binary first. Run `which -a feynman`, then `hash -r`, or launch the standalone shim directly with `~/.local/bin/feynman`. On **Windows**, open PowerShell as Administrator and run: @@ -71,36 +71,6 @@ On Windows: & ([scriptblock]::Create((irm https://feynman.is/install.ps1))) -Version 0.2.17 ``` -## pnpm - -If you already have Node.js `20.19.0` or newer installed, you can install Feynman globally via `pnpm`: - -```bash -pnpm add -g @companion-ai/feynman -``` - -Or run it directly without installing: - -```bash -pnpm dlx @companion-ai/feynman -``` - -## bun - -`bun add -g` and `bunx` still use your local Node runtime for Feynman itself, so the same Node.js `20.19.0+` requirement applies. - -```bash -bun add -g @companion-ai/feynman -``` - -Or run it directly without installing: - -```bash -bunx @companion-ai/feynman -``` - -Both package-manager distributions ship the same core application but depend on Node.js being present on your system. The standalone installer is preferred because it bundles its own Node runtime and works without a separate Node installation. - ## Post-install setup After installation, run the guided setup wizard to configure your model provider and API keys: diff --git a/website/src/pages/index.astro b/website/src/pages/index.astro index 3fb6ba2..63d7431 100644 --- a/website/src/pages/index.astro +++ b/website/src/pages/index.astro @@ -45,8 +45,6 @@ const terminalCommands = [ const installCommands = [ { label: "curl", command: "curl -fsSL https://feynman.is/install | bash" }, - { label: "pnpm", command: "pnpm add -g @companion-ai/feynman" }, - { label: "bun", command: "bun add -g @companion-ai/feynman" }, ] ---