base on 开源自部署移动应用、 macOS、Linux 和 Windows 应用分发平台,提供 iOS、Android SDK、fastlane 等丰富组件库 | Self-hosted Beta App Distribution for Android, iOS, macOS, Linux and Windows apps <div align='center'>
<a href="https://www.producthunt.com/posts/zealot?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-zealot" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=322207&theme=light" style="width: 250px; height: 54px" width="250" height="54" /></a>
<h1>Zealot</h1>
<h4>
开源自部署持续集成一切跟应用有关事情,接入任意 CI 系统一切自动化处理,企业多年实战经验,独立部署提供企业打包分发流程、上传应用全套流程方案 En Taro Adun! 🖖
<br />
Continuous everything. Automate the lifecycle of your apps. Connect your CI to build in the cloud, test on thousands of real devices, distribute to beta testers and app stores. All in one place.
</h4>
<a href="https://github.com/tryzealot/zealot/blob/develop/CHANGELOG.md">
<img alt="changelog" src="https://img.shields.io/github/v/release/tryzealot/zealot?include_prereleases">
</a>
<a href="https://ghcr.io/tryzealot/zealot">
<img alt="docker image" src="https://img.shields.io/docker/pulls/tryzealot/zealot.svg">
</a>
<a href="https://t.me/+csa3Y2KOx44wMGRl">
<img alt="chat on telegram" src="https://img.shields.io/badge/chat-on%20telegram-important.svg">
</a>
<a title="Crowdin" target="_blank" href="https://crowdin.com/project/zealot"><img src="https://badges.crowdin.net/zealot/localized.svg"></a>
<a href="https://codeclimate.com/github/tryzealot/zealot/maintainability">
<img alt="codeclimate" src="https://api.codeclimate.com/v1/badges/f79b2fed0ce166b2ea2c/maintainability" />
</a>
<a href="https://www.codacy.com/gh/tryzealot/zealot/dashboard?utm_source=github.com&utm_medium=referral&utm_content=tryzealot/zealot&utm_campaign=Badge_Grade">
<img alt="codacy" src="https://app.codacy.com/project/badge/Grade/5e5c7bbeb1214fa39b11a7414f0d7171"/>
</a>
<div>
<a href="https://zealot.ews.im/docs/self-hosted">Install</a> •
<a href="https://zealot.ews.im/docs/developer-guide/api">REST API</a> •
<a href="https://zealot.ews.im/docs/developer-guide">Developer guide</a> •
<a href="https://zealot.ews.im/docs/user-guide">User guide</a>
</div>
<div>
<a href="https://zealot.ews.im/zh-Hans/docs/self-hosted">自部署</a> •
<a href="https://zealot.ews.im/zh-Hans/docs/developer-guide/api">API 接口</a> •
<a href="https://zealot.ews.im/zh-Hans/docs/developer-guide">开发者资源</a> •
<a href="https://zealot.ews.im/zh-Hans/docs/user-guide">用户使用手册</a>
</div>
</div>
![Zealot Showcase](https://github.com/tryzealot/docs/blob/main/static/img/showcase-light.png#gh-light-mode-only)
![Zealot Showcase](https://github.com/tryzealot/docs/blob/main/static/img/showcase-dark.png#gh-dark-mode-only)
## 特性
- 🌏 **多平台应用托管**: macOS、iOS、Android(apk/aab)、Windows、Linux 泛平台
- 📱 **测试设备一网打进**: 自动同步 iOS 测试设备信息,允许一键注册新设备到苹果开发者
- 🧑💻 **丰富开发者套件**: 提供 REST API、[iOS][zealot-ios-sdk]、[Android][android-android-sdk] SDK 以及 [fastlane][fastlane-plugin-zealot] 自动化构建插件
- 💥 **剖析应用内部的秘密**: 解读 iOS、Android 应用或 iOS 描述文件的元信息
- 🚨 **内置多种事件通知**: 数据可自定义 Income WebHook 到任意通知服务
- 🗄 **多渠道分类管理**: 自由划分不同场景不同产品形态的应用渠道管理
- 🎳 **多架构部署**: amd86/arm64 及各种部署方案应有尽有
- 🔑 **第三方登录**: 飞书、Gitlab、Google、LDAP 和 OIDC 一键授权
- 🌑 **黑暗模式**: 黑夜白昼自由切换
## 在线演示
- 演示地址:https://tryzealot.ews.im
- 中文账户: `
[email protected]` / `ze@l0t`
- English Account: `
[email protected]` / `ze@l0t`
> **注意**: 演示服务中的数据每日都会重新初始化,不对用户上传的应用承担任何法律风险,后果自负!
## 开发统计
![Alt](https://repobeats.axiom.co/api/embed/caba5e356c0e8258d395aaa9f70fec475a2eb643.svg "Repobeats analytics image")
## 发布协议
[MIT][mit-link]
[zealot-ios-sdk]: https://github.com/tryzealot/zealot-ios
[android-android-sdk]: https://github.com/tryzealot/zealot-android
[fastlane-plugin-zealot]: https://github.com/tryzealot/fastlane-plugin-zealot
[mit-link]: https://github.com/tryzealot/zealot/blob/develop/LICENSE
", Assign "at most 3 tags" to the expected json: {"id":"8900","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"