本文档是为希望为Immich项目做出贡献的开发者提供的全面指南。它涵盖了开发环境的设置、构建系统的理解、CI/CD管道的导航、测试框架的使用以及发布流程的参与。
要开发Immich,您需要
.nvmrc文件中指定)推荐的开发方式是使用Docker Compose
此配置设置了
immich-server-dev:支持热重载的NestJS后端immich-web-dev:支持热重载的SvelteKit前端immich-machine-learning-dev:Python FastAPI服务redis:用于缓存和作业队列database:PostgreSQL,带有pgvecto.rs扩展Docker开发环境使用卷挂载,以便在不重新构建容器的情况下实现实时代码更改。
来源:server/Dockerfile1-17 web/Dockerfile1-12
来源:server/Dockerfile web/Dockerfile cli/Dockerfile
服务器组件使用TypeScript和NestJS
构建过程
对于Docker构建,使用了多阶段方法来创建优化的镜像。
来源:server/Dockerfile19-27 server/Dockerfile45-78
Web UI使用SvelteKit
对于生产环境,Web构建将被集成到服务器Docker镜像中。
移动端应用使用Flutter并结合代码生成
来源:mobile/makefile1-22 .github/workflows/build-mobile.yml85-94
对于生产环境,Immich使用多阶段Docker构建,并支持多种架构
来源:server/Dockerfile cli/Dockerfile .github/workflows/docker.yml95-203 .github/workflows/docker.yml317-493
Immich使用GitHub Actions进行持续集成和部署。
测试工作流针对所有拉取请求和推送到main分支运行
来源:.github/workflows/test.yml1-63 .github/workflows/test.yml252-318
Docker工作流构建和发布容器镜像
来源:.github/workflows/docker.yml1-44 .github/workflows/docker.yml95-203
Immich采用了全面的测试策略,覆盖所有组件。
来源:.github/workflows/test.yml56-92 .github/workflows/test.yml252-275
来源:.github/workflows/test.yml168-211
来源:.github/workflows/test.yml360-374
来源:.github/workflows/test.yml376-407
来源: .github/workflows/test.yml277-318 .github/workflows/test.yml319-358
来源: .github/workflows/test.yml
Immich 遵循其发布的语义化版本.
版本升级通过一个自动化脚本进行管理,该脚本更新所有组件中的版本
package.jsonpackage.jsonpubspec.yamlpackage.jsonpyproject.toml来源: misc/release/pump-version.sh1-91
发布流程
来源: .github/workflows/prepare-release.yml1-102 misc/release/pump-version.sh1-91
为 Immich 做贡献的典型流程
关键贡献指南
来源: .github/workflows/fix-format.yml1-52 .github/workflows/pr-require-conventional-commit.yml1-16 .github/workflows/pr-label-validation.yml1-23
此开发指南涵盖了为 Immich 项目做贡献的基本方面,从设置环境到参与发布过程。有关特定组件的详细信息,请参阅文档的其他部分,包括 服务器组件、Web 界面、移动应用程序 和 机器学习组件。
CI/CD 管道通过全面的测试确保代码质量,自动化的发布流程维护所有组件之间的一致版本。通过遵循概述的工作流程和约定,您可以有效地为 Immich 的发展和改进做出贡献。
来源: .github/workflows/test.yml .github/workflows/docker.yml .github/workflows/prepare-release.yml