switch release workflow to binary only

This commit is contained in:
Advait Paliwal
2026-04-10 11:02:50 -07:00
parent 790824af20
commit b3a82d4a92
8 changed files with 24 additions and 87 deletions

View File

@@ -13,7 +13,7 @@ jobs:
runs-on: blacksmith-4vcpu-ubuntu-2404 runs-on: blacksmith-4vcpu-ubuntu-2404
outputs: outputs:
version: ${{ steps.version.outputs.version }} version: ${{ steps.version.outputs.version }}
should_publish: ${{ steps.version.outputs.should_publish }} should_release: ${{ steps.version.outputs.should_release }}
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
- uses: actions/setup-node@v5 - uses: actions/setup-node@v5
@@ -21,38 +21,20 @@ jobs:
node-version: 24.14.0 node-version: 24.14.0
- id: version - id: version
shell: bash shell: bash
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: | run: |
CURRENT=$(npm view @companion-ai/feynman version 2>/dev/null || echo "0.0.0")
LOCAL=$(node -p "require('./package.json').version") LOCAL=$(node -p "require('./package.json').version")
echo "version=$LOCAL" >> "$GITHUB_OUTPUT" echo "version=$LOCAL" >> "$GITHUB_OUTPUT"
if [ "$CURRENT" != "$LOCAL" ]; then if gh release view "v$LOCAL" >/dev/null 2>&1; then
echo "should_publish=true" >> "$GITHUB_OUTPUT" echo "should_release=false" >> "$GITHUB_OUTPUT"
else else
echo "should_publish=false" >> "$GITHUB_OUTPUT" echo "should_release=true" >> "$GITHUB_OUTPUT"
fi 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: build-native-bundles:
needs: version-check needs: version-check
if: needs.version-check.outputs.should_publish == 'true' if: needs.version-check.outputs.should_release == 'true'
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@@ -101,9 +83,8 @@ jobs:
release-github: release-github:
needs: needs:
- version-check - version-check
- publish-npm
- build-native-bundles - 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 runs-on: blacksmith-4vcpu-ubuntu-2404
permissions: permissions:
contents: write contents: write

View File

@@ -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`. 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`. 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`.

View File

@@ -109,8 +109,8 @@ This usually means the release exists, but not all platform bundles were uploade
Workarounds: Workarounds:
- try again after the release finishes publishing - try again after the release finishes publishing
- install via pnpm instead: pnpm add -g @companion-ai/feynman - pass the latest published version explicitly, e.g.:
- install via bun instead: bun add -g @companion-ai/feynman & ([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-Warning "Current shell resolves feynman to $($resolvedCommand.Source)"
Write-Host "Run in a new shell, or run: `$env:Path = '$installBinDir;' + `$env:Path" Write-Host "Run in a new shell, or run: `$env:Path = '$installBinDir;' + `$env:Path"
Write-Host "Then run: feynman" Write-Host "Then run: feynman"
if ($resolvedCommand.Source -like "*node_modules*@companion-ai*feynman*") { Write-Host "If that path is an old package-manager install, remove it or put $installBinDir first on PATH."
Write-Host "If that path is an old global npm install, remove it with: npm uninstall -g @companion-ai/feynman"
}
} }
Write-Host "Feynman $resolvedVersion installed successfully." Write-Host "Feynman $resolvedVersion installed successfully."

View File

@@ -177,11 +177,7 @@ warn_command_conflict() {
step "Run now: export PATH=\"$INSTALL_BIN_DIR:\$PATH\" && hash -r && feynman" step "Run now: export PATH=\"$INSTALL_BIN_DIR:\$PATH\" && hash -r && feynman"
step "Or launch directly: $expected_path" step "Or launch directly: $expected_path"
case "$resolved_path" in step "If that path is an old package-manager install, remove it or put $INSTALL_BIN_DIR first on PATH."
*"/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
fi fi
} }
@@ -264,8 +260,8 @@ This usually means the release exists, but not all platform bundles were uploade
Workarounds: Workarounds:
- try again after the release finishes publishing - try again after the release finishes publishing
- install via pnpm instead: pnpm add -g @companion-ai/feynman - pass the latest published version explicitly, e.g.:
- install via bun instead: bun add -g @companion-ai/feynman curl -fsSL https://feynman.is/install | bash -s -- 0.2.16
EOF EOF
exit 1 exit 1
fi fi

View File

@@ -177,11 +177,7 @@ warn_command_conflict() {
step "Run now: export PATH=\"$INSTALL_BIN_DIR:\$PATH\" && hash -r && feynman" step "Run now: export PATH=\"$INSTALL_BIN_DIR:\$PATH\" && hash -r && feynman"
step "Or launch directly: $expected_path" step "Or launch directly: $expected_path"
case "$resolved_path" in step "If that path is an old package-manager install, remove it or put $INSTALL_BIN_DIR first on PATH."
*"/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
fi fi
} }
@@ -264,8 +260,8 @@ This usually means the release exists, but not all platform bundles were uploade
Workarounds: Workarounds:
- try again after the release finishes publishing - try again after the release finishes publishing
- install via pnpm instead: pnpm add -g @companion-ai/feynman - pass the latest published version explicitly, e.g.:
- install via bun instead: bun add -g @companion-ai/feynman curl -fsSL https://feynman.is/install | bash -s -- 0.2.16
EOF EOF
exit 1 exit 1
fi fi

View File

@@ -109,8 +109,8 @@ This usually means the release exists, but not all platform bundles were uploade
Workarounds: Workarounds:
- try again after the release finishes publishing - try again after the release finishes publishing
- install via pnpm instead: pnpm add -g @companion-ai/feynman - pass the latest published version explicitly, e.g.:
- install via bun instead: bun add -g @companion-ai/feynman & ([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-Warning "Current shell resolves feynman to $($resolvedCommand.Source)"
Write-Host "Run in a new shell, or run: `$env:Path = '$installBinDir;' + `$env:Path" Write-Host "Run in a new shell, or run: `$env:Path = '$installBinDir;' + `$env:Path"
Write-Host "Then run: feynman" Write-Host "Then run: feynman"
if ($resolvedCommand.Source -like "*node_modules*@companion-ai*feynman*") { Write-Host "If that path is an old package-manager install, remove it or put $installBinDir first on PATH."
Write-Host "If that path is an old global npm install, remove it with: npm uninstall -g @companion-ai/feynman"
}
} }
Write-Host "Feynman $resolvedVersion installed successfully." Write-Host "Feynman $resolvedVersion installed successfully."

View File

@@ -1,11 +1,11 @@
--- ---
title: Installation 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 section: Getting Started
order: 1 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) ## 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. 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: 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 & ([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 ## Post-install setup
After installation, run the guided setup wizard to configure your model provider and API keys: After installation, run the guided setup wizard to configure your model provider and API keys:

View File

@@ -45,8 +45,6 @@ const terminalCommands = [
const installCommands = [ const installCommands = [
{ label: "curl", command: "curl -fsSL https://feynman.is/install | bash" }, { 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" },
] ]
--- ---