Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 118 additions & 0 deletions .github/workflows/extension-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
name: huntly extension release workflow

on:
push:
tags: [ 'ext/v*.*.*' ]

permissions:
contents: read

jobs:
create-release:
permissions:
contents: write
runs-on: ubuntu-latest
outputs:
release_id: ${{ steps.create-release.outputs.id }}
release_upload_url: ${{ steps.create-release.outputs.upload_url }}
version: ${{ steps.get_version.outputs.version }}

steps:
- name: Checkout
uses: actions/checkout@v3

- name: Get version from tag
id: get_version
run: |
# Extract version from tag (ext/v1.0.0 -> 1.0.0)
TAG_NAME=${GITHUB_REF#refs/tags/}
VERSION=${TAG_NAME#ext/v}
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "tag_name=$TAG_NAME" >> $GITHUB_OUTPUT

- name: Get tag message
id: tag
run: |
git fetch --depth=1 origin +refs/tags/*:refs/tags/*
TAG_NAME=${GITHUB_REF#refs/tags/}
echo "message<<EOF" >> $GITHUB_OUTPUT
echo "$(git tag -l --format='%(contents)' $TAG_NAME)" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

- name: Create Release
id: create-release
uses: ncipollo/release-action@v1
with:
draft: true
name: Extension ${{ steps.get_version.outputs.version }}
tag: ${{ steps.get_version.outputs.tag_name }}
body: "${{ steps.tag.outputs.message }}"

build-upload:
runs-on: ubuntu-latest
needs: create-release
permissions:
contents: write

steps:
- name: Checkout
uses: actions/checkout@v3

- name: Set Node.js
uses: actions/setup-node@v3
with:
node-version: "20.10.0"
cache: "yarn"
cache-dependency-path: "app/extension/yarn.lock"

- name: Setup yarn
run: npm install -g yarn --version 1.22.19

- name: Install extension dependencies
run: |
cd app/extension
yarn install

- name: Create extension bundle (Chrome)
run: |
cd app/extension
yarn build
env:
CI: false
EXTENSION_VERSION: ${{ needs.create-release.outputs.version }}

- name: Create extension bundle (Firefox)
run: |
cd app/extension
yarn build:firefox
env:
CI: false
EXTENSION_VERSION: ${{ needs.create-release.outputs.version }}

- name: Package release files
run: |
mkdir -p release
cd app/extension
zip -r ../../release/huntly-chrome-extension-${{ needs.create-release.outputs.version }}.zip ./dist/*
zip -r ../../release/huntly-firefox-extension-${{ needs.create-release.outputs.version }}.zip ./dist-firefox/*

- name: Upload Chrome extension to release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-release.outputs.release_upload_url }}
asset_path: release/huntly-chrome-extension-${{ needs.create-release.outputs.version }}.zip
asset_name: huntly-chrome-extension-${{ needs.create-release.outputs.version }}.zip
asset_content_type: application/zip

- name: Upload Firefox extension to release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-release.outputs.release_upload_url }}
asset_path: release/huntly-firefox-extension-${{ needs.create-release.outputs.version }}.zip
asset_name: huntly-firefox-extension-${{ needs.create-release.outputs.version }}.zip
asset_content_type: application/zip

32 changes: 3 additions & 29 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: huntly release workflow

on:
push:
tags: [ v\d+\.\d+\.\d+ ]
tags: [ 'v*.*.*' ]

permissions:
contents: read
Expand Down Expand Up @@ -78,19 +78,6 @@ jobs:
CI: false
REACT_APP_VERSION: ${{ steps.get_version.outputs.version }}

- name: Install extension dependencies
#if: steps.yarn-cache.outputs.cache-hit != 'true'
run: |
cd app/extension
yarn install

- name: Create extension bundle
run: |
cd app/extension
yarn build
env:
CI: false

- name: Set up JDK 11
uses: actions/setup-java@v3
with:
Expand Down Expand Up @@ -150,14 +137,12 @@ jobs:

- name: package release file
run: |
mkdir release release/huntly-client release/huntly-extension
mkdir release release/huntly-client
mv app/server/huntly-server/target/huntly-*.jar release/huntly-server.jar
mv app/client/build release/huntly-client
mv app/extension/dist/ release/huntly-extension
cd release
zip -r huntly-client-${{ steps.get_version.outputs.version-without-v }}.zip ./huntly-client/*
zip -r huntly-browser-extension-${{ steps.get_version.outputs.version-without-v }}.zip ./huntly-extension/*


- name: Upload client-build to release
id: upload-client-asset
uses: actions/upload-release-asset@v1
Expand All @@ -169,17 +154,6 @@ jobs:
asset_name: huntly-client-${{ steps.get_version.outputs.version-without-v }}.zip
asset_content_type: application/zip

- name: Upload extension-build to release
id: upload-extension-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-release.outputs.release_upload_url }}
asset_path: release/huntly-browser-extension-${{ steps.get_version.outputs.version-without-v }}.zip
asset_name: huntly-browser-extension-${{ steps.get_version.outputs.version-without-v }}.zip
asset_content_type: application/zip

- name: Upload server-build to release
id: upload-server-asset
uses: actions/upload-release-asset@v1
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Self-hosted information hub with a powerful browser extension that captures, pro
|---------|-------------|
| 🤖 **AI Content Processing** | Leverage AI for summarization, translation, and intelligent content analysis with custom shortcuts |
| 🔌 **MCP Server Integration** | Built-in Model Context Protocol (MCP) server enabling AI assistants (Claude, Cursor, etc.) to access your knowledge base, search content, and retrieve RSS feeds, tweets, GitHub stars, and highlights |
| 📚 **Web Archiving** | Automatically save and archive web pages with content extraction using Mozilla Readability |
| 📚 **Web Archiving** | Automatically save and archive web pages with content extraction using Defuddle and Mozilla Readability |
| 📡 **RSS Feed Management** | Centralize all your RSS feeds with intelligent categorization, OPML import/export, and full-text search |
| 🔍 **Powerful Full-Text Search** | Apache Lucene with IK Analyzer for Chinese text tokenization, boolean operators, and fuzzy search |
| 🐦 **Social Media Integration** | Special handling for Twitter/X with automatic tweet thread reconstruction and media preservation |
Expand All @@ -54,7 +54,7 @@ Self-hosted information hub with a powerful browser extension that captures, pro

- [x] Export all saved content to Markdown
- [x] Flexible Organization: Collections
- [ ] Enhanced extension with standalone AI processing (no server required)
- [x] Enhanced extension with standalone AI processing (no server required)

## Screenshot

Expand Down
4 changes: 2 additions & 2 deletions README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
|---------|-------------|
| 🤖 **AI 内容处理** | 利用 AI 进行摘要、翻译和智能内容分析,支持自定义快捷指令 |
| 🔌 **MCP 服务器集成** | 内置 Model Context Protocol (MCP) 服务器,让 AI 助手(Claude、Cursor 等)可以访问您的知识库、搜索内容、获取 RSS 订阅、推文、GitHub stars 和高亮标注 |
| 📚 **网页归档** | 使用 Mozilla Readability 自动保存和归档网页,提取正文内容 |
| 📚 **网页归档** | 使用 Defuddle 和 Mozilla Readability 自动保存和归档网页,提取正文内容 |
| 📡 **RSS 订阅管理** | 集中管理所有 RSS 订阅,支持智能分类、OPML 导入/导出和全文搜索 |
| 🔍 **强大的全文搜索** | Apache Lucene 搜索引擎,IK 分词器支持中文分词,布尔运算符和模糊搜索 |
| 🐦 **社交媒体集成** | 特殊处理 Twitter/X 内容,自动重建推文线程并保存媒体 |
Expand All @@ -54,7 +54,7 @@

- [x] 将所有保存的内容导出为 Markdown
- [x] 灵活的组织方式:收藏夹
- [ ] 增强扩展功能,支持独立 AI 处理(无需服务器)
- [x] 增强扩展功能,支持独立 AI 处理(无需服务器)

## 系统截图

Expand Down
2 changes: 2 additions & 0 deletions app/client/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import SettingsFeeds from "./pages/settings/SettingsFeeds";
import SettingsLibrary from "./pages/settings/SettingsLibrary";
import SettingsAccount from "./pages/settings/SettingsAccount";
import SettingsGithub from "./pages/settings/SettingsGithub";
import SettingsX from "./pages/settings/SettingsX";

function App() {
const router = createBrowserRouter(
Expand All @@ -56,6 +57,7 @@ function App() {
<Route path="/settings/huntly-ai" element={<SettingsHuntlyAI />} />
<Route path="/settings/library" element={<SettingsLibrary />} />
<Route path="/settings/feeds" element={<SettingsFeeds />} />
<Route path="/settings/x" element={<SettingsX />} />
<Route path="/settings/github" element={<SettingsGithub />} />
<Route path="/settings/account" element={<SettingsAccount />} />
</Route>
Expand Down
Loading
Loading