NoteGenNOTEGEN.

贡献指南

NoteGen 是一个开源且免费的社区项目,我们将持续为爱发电,并接受任何形式的贡献。

Hi! 非常感谢你参与 NoteGen 的贡献!在此之前,请花一些时间阅读以下内容:

如何贡献

不论是贡献代码还是提交问题,都应该先创建 Issue。

Issues

请始终使用 Issues 创建新问题,尽量详细描述问题,包括重现步骤、预期行为和实际行为。

Discussions

如果你想发起讨论,可以使用 Discussions,或加入 交流群

Pull Request

  • 在修复 bug 前,请先检查 Issues 是否具有相同的问题。
  • 如果你要开发一个功能,请先提交 Issue,与项目维护者讨论该功能是否被需要,这有助于节省维护者和贡献者的时间。

技术栈

NoteGen 主要用到以下几个技术栈:

如果你本次贡献需要更新或添加依赖,请在 issue 中添加 package.jsonsrc-tauri/Cargo.toml 的更新说明。

开发环境

请先阅读 Tauri 2 前置要求 文档,按照文档要求配置开发环境。

环境装好后,fork 仓库到你的 GitHub 账号下,然后克隆到本地:

# 1. fork 到你的 GitHub 账号下

# 2. 克隆到本地
git clone https://github.com/your-username/note-gen.git

然后进入项目目录,安装依赖:

# 3. 进入项目目录 & 安装依赖
cd note-gen
pnpm install

# 4. 启动本地开发,如果遇到白屏情况,尝试右键 reload。
pnpm tauri dev

目录说明

  • src:前端应用目录。
    • apps:前端应用目录。
      • core:主应用核心功能目录。
        • article:写作。
        • image:图床管理。
        • record: 记录。
        • search:搜索。
        • setting:设置。
      • screenshot:截图窗口。
    • components:组件目录,shadcn 和通用组件。
    • lib:常用工具库,例如 ai、github 请求等。
    • db:SQLite 数据库。
    • store:状态管理目录,采用 zustand。
  • src-tauri:Rust 代码目录。
  • messages:多语言配置目录。

Pull Request 指南

NoteGen 未使用 master 或 main 分支,一切发开都在 dev 分支下进行,通过合并到 release 分之后触发 Github Action 进行版本发布和构建。

Fork 仓库后,请使用 dev 分支创建一个新的分支,命名为本次贡献的名称,例如 fix/123feat/121

你可以多次提交代码,直到完成所有修改,在提交 Pull Request 时,我们会通过 Squash and Merge 合并成一个提交。

请在 PR 标题中添加 fix(#xxx): ***feat(#xxx): ***,#xxx 是 issue 编号,例如 NoteGen 更新计划 #46

在提交 PR 前,确保本地运行 pnpm tauri build 可以正常构建及运行。

开发指南

本章节将介绍如何快速上手 NoteGen 的开发。

DeepWiki

你可以通过 AI 生成的文档 DeepWiki 来快速学习 NoteGen 的开发文档。

项目环境搭建

请先阅读 Tauri 2 前置要求 文档,按照文档要求配置开发环境。

通过 pnpm tauri dev 可以启动本地开发,如果遇到白屏情况,尝试右键 reload。

项目构建

桌面端

通过 pnpm tauri build 可以构建桌面端应用,注意此时会根据你的系统构建相应的安装包。

默认情况下是通过 Github Action 自动构建的,通过发布 release 分支时触发,通常会修改 src-tauri/tauri.conf.json 中的版本号。

Android

要构建 Android 应用,首先运行 pnpm tauri android init

然后阅读 Tauri 2 Android 签名 文档,按照文档要求创建签名 key。

src-tauri/gen/android 目录下创建 keystore.properties 文件,内容如下:

storePassword=**
keyPassword=**
keyAlias=**
storeFile=/**/Downloads/upload-keystore.jks

src-tauri/gen/android/app/build.gradle.kts 中添加一下代码:

import java.io.FileInputStream

android {
    signingConfigs {
        create("release") {
            val keystorePropertiesFile = rootProject.file("keystore.properties")
            val keystoreProperties = Properties()
            if (keystorePropertiesFile.exists()) {
                keystoreProperties.load(FileInputStream(keystorePropertiesFile))
            }

            keyAlias = keystoreProperties["keyAlias"] as String
            keyPassword = keystoreProperties["keyPassword"] as String
            storeFile = file(keystoreProperties["storeFile"] as String)
            storePassword = keystoreProperties["storePassword"] as String
        }
    }  
}

最后可以通过 pnpm tauri android build --apk --split-per-abi 构建不同 Android 架构的 APK。