Skip to content

Commit 7f7fbb3

Browse files
Merge branch 'main' into install-sh
2 parents 6cace3a + 8bb27a5 commit 7f7fbb3

24 files changed

Lines changed: 760 additions & 136 deletions

File tree

.github/workflows/publish.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ jobs:
2121

2222
steps:
2323
- name: Checkout repository
24-
uses: actions/checkout@v4
24+
uses: actions/checkout@v6
2525

2626
- name: Setup Node.js
27-
uses: actions/setup-node@v4
27+
uses: actions/setup-node@v6
2828
with:
2929
node-version: '24'
3030
registry-url: 'https://registry.npmjs.org'

.github/workflows/release-binaries.yml

Lines changed: 120 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,55 @@
11
name: Release Binaries
22

33
on:
4-
release:
5-
types: [created]
4+
push:
5+
branches: [main, install-sh]
6+
paths:
7+
- 'package.json'
8+
- '.github/workflows/release-binaries.yml'
9+
- 'nfpm.yaml'
10+
workflow_dispatch:
611

712
permissions:
813
contents: write
914

1015
jobs:
16+
check-version:
17+
runs-on: ubuntu-latest
18+
name: Check for version bump
19+
outputs:
20+
version: ${{ steps.check.outputs.version }}
21+
released: ${{ steps.check.outputs.released }}
22+
dry_run: ${{ steps.check.outputs.dry_run }}
23+
steps:
24+
- name: Checkout repository
25+
uses: actions/checkout@v6
26+
with:
27+
fetch-depth: 0
28+
29+
- name: Check if version tag exists
30+
id: check
31+
run: |
32+
VERSION=$(node -p "require('./package.json').version")
33+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
34+
35+
# Dry run on non-main branches
36+
if [ "${{ github.ref_name }}" != "main" ]; then
37+
echo "dry_run=true" >> "$GITHUB_OUTPUT"
38+
echo "released=false" >> "$GITHUB_OUTPUT"
39+
echo "Dry run on branch ${{ github.ref_name }} — will build but not release"
40+
elif git rev-parse "v$VERSION" >/dev/null 2>&1; then
41+
echo "dry_run=false" >> "$GITHUB_OUTPUT"
42+
echo "released=true" >> "$GITHUB_OUTPUT"
43+
echo "v$VERSION already released — skipping"
44+
else
45+
echo "dry_run=false" >> "$GITHUB_OUTPUT"
46+
echo "released=false" >> "$GITHUB_OUTPUT"
47+
echo "New version detected: v$VERSION"
48+
fi
49+
1150
build:
51+
needs: check-version
52+
if: needs.check-version.outputs.released == 'false'
1253
strategy:
1354
matrix:
1455
include:
@@ -33,7 +74,7 @@ jobs:
3374

3475
steps:
3576
- name: Checkout repository
36-
uses: actions/checkout@v4
77+
uses: actions/checkout@v6
3778

3879
- name: Setup Bun
3980
uses: oven-sh/setup-bun@v2
@@ -53,29 +94,69 @@ jobs:
5394
run: zip ${{ matrix.binary }}.zip ${{ matrix.binary }}
5495

5596
- name: Upload binary artifact
56-
uses: actions/upload-artifact@v4
97+
uses: actions/upload-artifact@v7
5798
with:
5899
name: ${{ matrix.binary }}
59100
path: |
101+
${{ matrix.binary }}
60102
${{ matrix.binary }}.tar.gz
61103
${{ matrix.binary }}.zip
62104
if-no-files-found: ignore
63105

64106
release:
65-
needs: build
107+
needs: [check-version, build]
66108
runs-on: ubuntu-latest
67-
name: Upload release assets
109+
name: Create release and upload assets
68110

69111
steps:
112+
- name: Checkout repository
113+
uses: actions/checkout@v6
114+
with:
115+
fetch-depth: 0
116+
70117
- name: Download all artifacts
71-
uses: actions/download-artifact@v4
118+
uses: actions/download-artifact@v8
72119
with:
73120
path: artifacts
74121

75122
- name: Collect release files
76123
run: |
77-
mkdir -p release
124+
mkdir -p release binaries
78125
find artifacts -type f \( -name "*.tar.gz" -o -name "*.zip" \) -exec cp {} release/ \;
126+
# Copy raw binaries for nfpm packaging
127+
for dir in artifacts/firecrawl-linux-*/; do
128+
find "$dir" -type f ! -name "*.tar.gz" ! -name "*.zip" -exec cp {} binaries/ \;
129+
done
130+
chmod +x binaries/*
131+
ls -la release/
132+
ls -la binaries/
133+
134+
- name: Install nfpm
135+
run: |
136+
NFPM_VERSION=$(gh release view --repo goreleaser/nfpm --json tagName --jq '.tagName' | sed 's/^v//')
137+
curl -sfL "https://github.com/goreleaser/nfpm/releases/download/v${NFPM_VERSION}/nfpm_${NFPM_VERSION}_Linux_x86_64.tar.gz" | tar -xz -C /usr/local/bin nfpm
138+
nfpm --version
139+
env:
140+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
141+
142+
- name: Build Linux packages
143+
run: |
144+
VERSION="${{ needs.check-version.outputs.version }}"
145+
146+
# linux amd64
147+
export BINARY=binaries/firecrawl-linux-x64 VERSION="$VERSION" ARCH=amd64
148+
envsubst < nfpm.yaml > /tmp/nfpm-amd64.yaml
149+
for fmt in deb rpm apk archlinux; do
150+
nfpm package --config /tmp/nfpm-amd64.yaml --packager "$fmt" --target release/
151+
done
152+
153+
# linux arm64
154+
export BINARY=binaries/firecrawl-linux-arm64 ARCH=arm64
155+
envsubst < nfpm.yaml > /tmp/nfpm-arm64.yaml
156+
for fmt in deb rpm apk archlinux; do
157+
nfpm package --config /tmp/nfpm-arm64.yaml --packager "$fmt" --target release/
158+
done
159+
79160
ls -la release/
80161
81162
- name: Generate checksums
@@ -84,13 +165,37 @@ jobs:
84165
sha256sum * > checksums.txt
85166
cat checksums.txt
86167
87-
- name: Upload assets to release
168+
- name: Summary (dry run)
169+
if: needs.check-version.outputs.dry_run == 'true'
170+
run: |
171+
echo "## Dry Run — Release v${{ needs.check-version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
172+
echo "" >> $GITHUB_STEP_SUMMARY
173+
echo "All artifacts built and packaged successfully:" >> $GITHUB_STEP_SUMMARY
174+
echo '```' >> $GITHUB_STEP_SUMMARY
175+
ls -lh release/ >> $GITHUB_STEP_SUMMARY
176+
echo '```' >> $GITHUB_STEP_SUMMARY
177+
echo "" >> $GITHUB_STEP_SUMMARY
178+
echo "**No release created — this is a dry run on branch \`${{ github.ref_name }}\`.**" >> $GITHUB_STEP_SUMMARY
179+
180+
- name: Generate release notes
181+
if: needs.check-version.outputs.dry_run != 'true'
182+
run: |
183+
PREV_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
184+
if [ -n "$PREV_TAG" ]; then
185+
git log --pretty=format:"- %s" "$PREV_TAG..HEAD" -- | head -50 > /tmp/release-notes.md
186+
else
187+
echo "Initial release" > /tmp/release-notes.md
188+
fi
189+
190+
- name: Create tag and GitHub release
191+
if: needs.check-version.outputs.dry_run != 'true'
88192
env:
89193
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
90194
run: |
91-
cd release
92-
for file in *; do
93-
gh release upload "${{ github.event.release.tag_name }}" "$file" \
94-
--repo "${{ github.repository }}" \
95-
--clobber
96-
done
195+
VERSION="v${{ needs.check-version.outputs.version }}"
196+
git tag "$VERSION"
197+
git push origin "$VERSION"
198+
gh release create "$VERSION" release/* \
199+
--repo "${{ github.repository }}" \
200+
--title "Firecrawl CLI $VERSION" \
201+
--notes-file /tmp/release-notes.md

.github/workflows/sync-plugin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
runs-on: ubuntu-latest
1414
steps:
1515
- name: Checkout CLI repo
16-
uses: actions/checkout@v4
16+
uses: actions/checkout@v6
1717
with:
1818
path: cli
1919

.github/workflows/sync-skills.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
runs-on: ubuntu-latest
1313
steps:
1414
- name: Checkout CLI repo
15-
uses: actions/checkout@v4
15+
uses: actions/checkout@v6
1616
with:
1717
path: cli
1818

.github/workflows/test.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ jobs:
1313

1414
steps:
1515
- name: Checkout repository
16-
uses: actions/checkout@v4
16+
uses: actions/checkout@v6
1717

1818
- name: Setup Node.js
19-
uses: actions/setup-node@v4
19+
uses: actions/setup-node@v6
2020
with:
2121
node-version: '18'
2222

@@ -61,7 +61,7 @@ jobs:
6161

6262
steps:
6363
- name: Checkout repository
64-
uses: actions/checkout@v4
64+
uses: actions/checkout@v6
6565

6666
- name: Setup Bun
6767
uses: oven-sh/setup-bun@v2

README.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,9 @@ firecrawl agent abc123-def456-... --wait --poll-interval 10
465465

466466
---
467467

468-
### `browser` - Browser sandbox sessions (Beta)
468+
### `browser` - Browser sandbox sessions (Deprecated)
469+
470+
> **Deprecated:** Prefer `scrape` + `interact` instead. Interact lets you scrape a page and then click, fill forms, and navigate without managing sessions manually. See the `interact` command.
469471
470472
Launch and control cloud browser sessions. By default, commands are sent to agent-browser (pre-installed in every sandbox). Use `--python` or `--node` to run Playwright code directly instead.
471473

@@ -866,24 +868,22 @@ Add `-y` to any command to auto-approve tool permissions (maps to `--dangerously
866868

867869
### Live View
868870

869-
Use `firecrawl browser launch --json` to get a live view URL, then pass it to your agent so you can watch it work in real-time:
871+
Use `firecrawl scrape <url>` + `firecrawl interact` to interact with pages. For advanced use cases requiring a raw CDP session, you can still use `firecrawl browser launch --json` to get a live view URL:
870872

871873
```bash
872-
# Launch a browser session and grab the live view URL
874+
# Preferred: scrape + interact workflow
875+
firecrawl scrape https://myapp.com
876+
firecrawl interact --prompt "Click on the login button and fill in the form"
877+
878+
# Advanced: Launch a browser session and grab the live view URL
873879
LIVE_URL=$(firecrawl browser launch --json | jq -r '.liveViewUrl')
874880

875881
# Pass it to Claude Code
876-
claude --append-system-prompt "A cloud browser session is running. Live view: $LIVE_URL -- use \`firecrawl browser\` commands to interact." \
882+
claude --append-system-prompt "A cloud browser session is running. Live view: $LIVE_URL -- use \`firecrawl interact\` to interact with scraped pages." \
877883
--dangerously-skip-permissions \
878-
"QA test https://myapp.com using the cloud browser"
879-
880-
# Pass it to Codex
881-
codex --full-auto \
882-
--config "instructions=A cloud browser session is running. Live view: $LIVE_URL -- use \`firecrawl browser\` commands to interact." \
883-
"walk through the signup flow on https://example.com"
884+
"QA test https://myapp.com"
884885

885-
# Or use the built-in workflow commands (session is auto-saved for firecrawl browser)
886-
firecrawl browser launch --json | jq -r '.liveViewUrl'
886+
# Or use the built-in workflow commands
887887
firecrawl claude demo https://resend.com
888888
```
889889

nfpm.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: firecrawl
2+
description: CLI for Firecrawl - web scraping, search, and browser automation
3+
homepage: https://firecrawl.dev
4+
maintainer: Firecrawl <support@firecrawl.dev>
5+
license: ISC
6+
vendor: Firecrawl
7+
version: ${VERSION}
8+
arch: ${ARCH}
9+
10+
contents:
11+
- src: ${BINARY}
12+
dst: /usr/bin/firecrawl
13+
file_info:
14+
mode: 0755

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "firecrawl-cli",
3-
"version": "1.11.0",
3+
"version": "1.12.2",
44
"description": "Command-line interface for Firecrawl. Scrape, crawl, and extract data from any website directly from your terminal.",
55
"main": "dist/index.js",
66
"bin": {
@@ -72,7 +72,7 @@
7272
},
7373
"dependencies": {
7474
"@inquirer/prompts": "^8.2.1",
75-
"@mendable/firecrawl-js": "4.15.4",
75+
"@mendable/firecrawl-js": "4.17.0",
7676
"commander": "^14.0.2"
7777
}
7878
}

pnpm-lock.yaml

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)