mirror of
https://github.com/QYG2297248353/appstore-1panel.git
synced 2026-06-16 01:02:14 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba8121f56f |
+1
-185
@@ -15,7 +15,7 @@
|
||||
> 即将支持应用商店: [CasaOS](https://casaos.io/)
|
||||
>
|
||||
> 欢迎投稿,我们会根据您的需求,上架更多的应用。
|
||||
> t
|
||||
>
|
||||
> 🥰 [新疆萌森软件开发工作室](https://blog.lifebus.top/) 祝您生活愉快!
|
||||
|
||||
|
||||
@@ -58,7 +58,6 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/bookstack/logo.png" width="22"/> | BookStack | https://www.bookstackapp.com/ | 一个用于存储和组织信息及文档的平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/casdoor/logo.png" width="22"/> | Casdoor | https://casdoor.org/ | 身份和访问管理(IAM)/单点登录(SSO)平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/certimate/logo.png" width="22"/> | Certimate | https://docs.certimate.me/ | SSL证书管理工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/chronoframe/logo.png" width="22"/> | ChronoFrame | https://chronoframe.bh8.ga/ | 照片展示和管理应用 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/clouddrive2/logo.png" width="22"/> | CloudDrive | https://www.clouddrive2.com | 多云盘管理工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/cloudreve/logo.png" width="22"/> | Cloudreve | https://cloudreve.org/ | 公私兼备的网盘系统 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/cloudsaver/logo.png" width="22"/> | CloudSaver | https://github.com/jiangrui1994/CloudSaver/ | 网盘资源搜索与转存工具 | |
|
||||
@@ -86,7 +85,6 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/gitea/logo.png" width="22"/> | Gitea | https://gitea.io/ | 私有、快速、可靠的 DevOps 平台 | Gitea |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/gitea/logo.png" width="22"/> | Gitea Runner | https://gitea.io/ | 【Runner】私有、快速、可靠的 DevOps 平台 | Gitea |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/glance/logo.png" width="22"/> | Glance | https://github.com/glanceapp/glance/ | 一个自托管的仪表板,将所有您的订阅源放在一个地方 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/glean/logo.png" width="22"/> | Glean (拾灵) | https://github.com/LeslieLeung/glean/ | 一个自托管的 RSS 阅读器和个人知识管理工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/halo/logo.png" width="22"/> | Halo | https://halo.run/ | 强大易用的开源建站工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/homarr/logo.png" width="22"/> | Homarr | https://homarr.dev/ | 一个时尚、现代化的仪表板 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/ikaros/logo.png" width="22"/> | ikaros | https://github.com/Suwmlee/ikaros/ | 打通下载软件与媒体服务,安心享受影片 | ikaros |
|
||||
@@ -97,23 +95,19 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/immich/logo.png" width="22"/> | Immich-Server | https://immich.app/ | 【主服务模块】高性能自托管照片和视频管理解决方案,适用于远端数据库,远端机器学习 | Immich |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/immich/logo.png" width="22"/> | Immich-Machine-Learning | https://immich.app/ | 【机器学习模块】高性能自托管照片和视频管理解决方案,适用于作为远端机器学习使用 | Immich |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/iyuu-plus/logo.png" width="22"/> | IYUU Plus | https://doc.iyuu.cn/ | 基于特征码的索引工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/jackett/logo.png" width="22"/> | Jackett | https://github.com/Jackett/Jackett/ | API支持您最喜爱的种子追踪器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/iycms/logo.png" width="22"/> | 爱影CMS | https://www.iycms.com/ | 高性能高并发永久免费影视CMS | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/jellyfin/logo.png" width="22"/> | Jellyfin | https://jellyfin.org/ | 自由软件媒体系统 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/jellyseerr/logo.png" width="22"/> | Jellyseerr | https://docs.jellyseerr.dev/ | 满足您所有媒体需求的一站式平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/jproxy/logo.png" width="22"/> | JProxy | https://github.com/LuckyPuppy514/jproxy/ | 介于 Sonarr / Radarr 和 Jackett / Prowlarr 之间的代理,主要用于优化查询和提升识别率 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/kavita/logo.png" width="22"/> | Kavita | https://www.kavitareader.com/ | 自托管数字图书馆 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/kimai/logo.png" width="22"/> | Kimai | https://www.kimai.org/ | 基于网络的多用户时间追踪应用 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/kirara-agent/logo.png" width="22"/> | Kirara Agent | https://kirara-docs.app.lss233.com/ | 一款支持主流大语言模型、主流聊天平台的聊天的机器人 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/komga/logo.png" width="22"/> | Komga | https://komga.org/ | 漫画、漫画、蓝光光盘、杂志和电子书的媒体服务器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/kotatsu/logo.png" width="22"/> | Kotatsu | https://kotatsu.app/ | 口袋里的漫画 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/kspeeder/logo.png" width="22"/> | KSpeeder | https://kspeeder.istoreos.com/ | Docker镜像加速专家 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/libretv/logo.png" width="22"/> | LibreTV | https://libretv.is-an.org/ | 免费在线视频搜索与观看平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/limesurvey/logo.png" width="22"/> | 问卷星 | https://www.limesurvey.org/ | 在线问卷调查程序 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/linkding/logo.png" width="22"/> | LinkDing | https://github.com/sissbruecker/linkding/ | 自托管书签管理器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/llonebot/logo.png" width="22"/> | LLTwoBot | https://llonebot.com/ | 一个使用 Nix 或 Docker 部署 LLOneBot 的安装。 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/logto/logo.png" width="22"/> | Logto | https://logto.io/ | 开发者更好的身份基础设施,以及 Auth0 的开源替代方案。 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/lucky/logo.png" width="22"/> | Lucky | https://lucky666.cn/ | 软硬路由公网神器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/maccms10/logo.png" width="22"/> | 苹果CMS V10 | https://www.maccms.la/ | 基于ThinkPHP和Layui的多功能开源免费内容管理系统 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/mailserver/logo.png" width="22"/> | Docker Mailserver | https://docker-mailserver.github.io/docker-mailserver/latest/ | 可用于生产的全栈但简单的邮件服务器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/mdc-ng/logo.png" width="22"/> | MDC-NG | https://github.com/mdc-ng/mdc-ng/ | 成人电影数据采集工具 | |
|
||||
@@ -130,7 +124,6 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/percona/logo.png" width="22"/> | Percona | https://www.percona.com/ | 【MySQL分支】关系数据库管理系统 | MySQL |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/n8n/logo.png" width="22"/> | n8n | https://n8n.io/ | 为技术团队提供安全的工作流自动化 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/nacos/logo.png" width="22"/> | Nacos | https://nacos.io/ | 动态服务发现、配置管理和服务管理平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/napcat/logo.png" width="22"/> | NapCat | https://napneko.github.io/ | 基于 NTQQ 的现代协议端框架 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/neko/logo.png" width="22"/> | Neko | https://neko.m1k1o.net/ | 虚拟浏览器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/nexus3/logo.png" width="22"/> | Nexus3 | https://sonatype.com/ | Sonatype Nexus存储库 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/nexusphp/logo.png" width="22"/> | NexusPHP | https://nexusphp.org/ | 完整的 PT 建站解决方案 | |
|
||||
@@ -141,15 +134,12 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/nodebb/logo.png" width="22"/> | NodeBB | https://nodebb.org/ | 一个更适合现代网络的社会平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/nodepassdash/logo.png" width="22"/> | NodePassDash | https://github.com/NodePassProject/NodePassDash/ | 现代化的 NodePass 管理界面 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/ollama/logo.png" width="22"/> | Ollama | https://ollama.com/ | 一站式大模型部署平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/omnibox/logo.png" width="22"/> | OmniBox | https://hub.docker.com/r/lampon/omnibox/ | 影视站 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/onedev/logo.png" width="22"/> | OneDev | https://onedev.io/ | DevOps 平台、带有 CI/CD、看板和软件包的 Git 服务器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/open-webui/logo.png" width="22"/> | Open Webui | https://openwebui.com/ | 用户友好的 AI 界面 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/opengist/logo.png" width="22"/> | Opengist | https://opengist.io/ | 自托管的粘贴板,基于 Git,Github Gist 的开源替代品 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/openresty-manager/logo.png" width="22"/> | Openresty Manager | https://om.uusec.com/ | 主机管理面板 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/outline/logo.png" width="22"/> | OutLine | https://www.getoutline.com/ | 快速、协作的团队知识库 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/overseerr/logo.png" width="22"/> | overseerr | https://docs.overseerr.dev/ | 管理您的媒体库请求 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/page-spy-web/logo.png" width="22"/> | PageSpy | https://www.pagespy.org/ | 开源调试平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/pansou/logo.png" width="22"/> | 盘搜 (PanSou) | https://so.252035.xyz/ | 高性能的网盘资源搜索API服务 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/paopao-ce/logo.png" width="22"/> | 泡泡(PaoPao) | https://www.paopao.info/ | 清新文艺微社区 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/peer-ban-helper/logo.png" width="22"/> | PeerBanHelper | https://github.com/PBH-BTN/PeerBanHelper/ | BT 反吸血工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/photoprism/logo.png" width="22"/> | PhotoPrism | https://www.photoprism.app/ | 面向去中心化网络的人工智能照片应用程序 | |
|
||||
@@ -181,9 +171,7 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/sonarr/logo.png" width="22"/> | sonarr | https://sonarr.tv/ | 智能 PVR 适用于新闻组和 BT 用户。 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/speedtest/logo.png" width="22"/> | SpeedTest | https://www.speedtest.net/ | 互联网速度测试 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/speedtest-tracker/logo.png" width="22"/> | SpeedTest-Tracker | https://docs.speedtest-tracker.dev/ | Speedtest Tracker 是一款自托管互联网性能跟踪应用程序,可针对 Ookla 的 Speedtest 服务运行速度测试检查 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/splayer/logo.png" width="22"/> | SPlayer | https://github.com/imsyy/SPlayer/ | 一个简约的音乐播放器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/stash/logo.png" width="22"/> | Stash | https://stashapp.cc/ | 组织和刮削你的色情内容 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/stream-rec/logo.png" width="22"/> | Rust-Rec | https://github.com/hua0512/rust-rec/ | Rust-rec是一个用于各种流媒体服务的自动流媒体录制工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/stream-rec/logo.png" width="22"/> | Stream-Rec | https://github.com/hua0512/stream-rec/ | Stream-rec是一个用于各种流媒体服务的自动流媒体录制工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/stream-rec/logo.png" width="22"/> | Stream-Rec Web版 | https://github.com/hua0512/stream-rec/ | 【前端版】Stream-rec是一个用于各种流媒体服务的自动流媒体录制工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/stream-rec/logo.png" width="22"/> | Stream-Rec 服务版 | https://github.com/hua0512/stream-rec/ | 【服务版】Stream-rec是一个用于各种流媒体服务的自动流媒体录制工具 | |
|
||||
@@ -201,11 +189,9 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/topiam-ce/logo.png" width="22"/> | TOPIAM | https://topiam.cn/ | IAM/IDaaS 身份管理平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/traccar/logo.png" width="22"/> | Traccar 轨迹 | https://www.traccar.org/ | 现代 GPS 追踪系统 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/transmission/logo.png" width="22"/> | Transmission | https://transmissionbt.com/ | 快速、简单、免费的 Bittorrent 客户端 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/twikoo/logo.png" width="22"/> | Twikoo | http://twikoo.js.org/ | 静态网站评论系统 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/uptime-kuma/logo.png" width="22"/> | Uptime Kuma | https://uptime.kuma.pet/ | 自托管监控工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/v2raya/logo.png" width="22"/> | v2rayA | https://v2raya.org/ | 一个易用而强大的,跨平台的 V2Ray 客户端 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/vertex/logo.png" width="22"/> | Vertex | https://github.com/vertex-app/vertex/ | 追剧刷流一体化综合管理工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/waline/logo.png" width="22"/> | Waline | https://waline.js.org/ | 卓越的静态站点评论系统 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/umami/logo.png" width="22"/> | Umami | https://umami.is/ | 为速度和效率而构建的网站分析 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/watchyourlan/logo.png" width="22"/> | 路由设备监控 | https://github.com/aceberg/WatchYourLAN/ | 轻量级网络 IP 扫描器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/weblate/logo.png" width="22"/> | Weblate | https://weblate.org/ | 高度集成了版本控制功能的web-based翻译工具 | |
|
||||
@@ -213,7 +199,6 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/windows/logo.png" width="22"/> | Windows 系统 | https://www.microsoft.com/ | Docker 容器内的 Windows | OS |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/macos/logo.png" width="22"/> | Mac OS | https://www.apple.com/ | Docker 容器内的 Mac OS | OS |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/wiseflow/logo.png" width="22"/> | WiseFlow | https://github.com/TeamWiseFlow/wiseflow/ | Wiseflow 首席情报官 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/woodpecker/logo.png" width="22"/> | Woodpecker (啄木鸟) | https://woodpecker-ci.org/ | 啄木鸟是一个简单而强大的CI/CD引擎,具有很强的可扩展性 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/wukongim/logo.png" width="22"/> | 悟空IM | https://githubim.com/ | 让信息传递更简单 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/xunlei-cnk3x/logo.png" width="22"/> | 迅雷 NAS版 | https://github.com/cnk3x/xunlei/ | 迅雷远程下载服务 NAS移植版 | |
|
||||
| 🔴 | | Yarr | https://github.com/nkanaev/yarr | Rss 阅读器 | |
|
||||
@@ -339,175 +324,6 @@ curl -sSL https://install.lifebus.top/pre_app_uninstall.sh | bash
|
||||
curl -sSL https://install.lifebus.top/local_app_uninstall.sh | bash
|
||||
```
|
||||
|
||||
## 1Panel v2 (自动同步)
|
||||
|
||||
由于官方不支持自动同步本地应用,每次都需要用户手动去点击同步按钮。我们多次提交过意见,奈何没有得到官方重视。因此出了这个折中方案。
|
||||
|
||||
### 前置条件
|
||||
|
||||
1. API 密钥
|
||||
请前往 `面板设置` >> `API 接口` 中生成 `接口密钥` 有效期填写 `0` 长期有效,白名单可以填写 `127.0.0.1`
|
||||
|
||||
### 创建计划任务
|
||||
|
||||
请将 `API_KEY` `PANEL_PORT` 填写为正确的值即可
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
#############################################
|
||||
# 用户需填写的变量
|
||||
#############################################
|
||||
|
||||
API_KEY="面板API密钥"
|
||||
PANEL_HOST="127.0.0.1"
|
||||
PANEL_PORT="面板访问端口"
|
||||
|
||||
# 两个接口地址(不用动)
|
||||
API_SYNC_LOCAL="/api/v2/apps/sync/local"
|
||||
API_READ_FILE="/api/v2/files/read"
|
||||
|
||||
#############################################
|
||||
# 工具函数
|
||||
#############################################
|
||||
|
||||
# 生成 UUID(Linux 通用方法)
|
||||
gen_uuid() {
|
||||
cat /proc/sys/kernel/random/uuid
|
||||
}
|
||||
|
||||
# 生成 token
|
||||
gen_token() {
|
||||
local ts=$(date +%s)
|
||||
local tk=$(echo -n "1panel${API_KEY}${ts}" | md5sum | awk '{print $1}')
|
||||
echo "${tk},${ts}"
|
||||
}
|
||||
|
||||
# 判断系统是否有 jq
|
||||
HAS_JQ=0
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
HAS_JQ=1
|
||||
fi
|
||||
|
||||
#############################################
|
||||
# 主逻辑开始
|
||||
#############################################
|
||||
|
||||
TASK_ID=$(gen_uuid)
|
||||
echo "📌 生成 Task ID: ${TASK_ID}"
|
||||
echo ""
|
||||
|
||||
TOKEN_INFO=$(gen_token)
|
||||
TOKEN=$(echo "$TOKEN_INFO" | cut -d',' -f1)
|
||||
TIMESTAMP=$(echo "$TOKEN_INFO" | cut -d',' -f2)
|
||||
|
||||
echo "📌 时间戳: $TIMESTAMP"
|
||||
echo "📌 Token: $TOKEN"
|
||||
echo ""
|
||||
|
||||
#################################################
|
||||
# STEP 1 — 触发同步任务
|
||||
#################################################
|
||||
echo "🚀 STEP 1: 调用接口 1 开始同步任务..."
|
||||
echo "POST http://${PANEL_HOST}:${PANEL_PORT}${API_SYNC_LOCAL}"
|
||||
|
||||
RESP1=$(curl -s -X POST "http://${PANEL_HOST}:${PANEL_PORT}${API_SYNC_LOCAL}" \
|
||||
-H "1Panel-Token: ${TOKEN}" \
|
||||
-H "1Panel-Timestamp: ${TIMESTAMP}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"taskID\":\"${TASK_ID}\"}")
|
||||
|
||||
echo "返回内容:$RESP1"
|
||||
echo ""
|
||||
|
||||
CODE1=$(echo "$RESP1" | grep -o '"code":[0-9]*' | cut -d: -f2)
|
||||
if [ "$CODE1" != "200" ]; then
|
||||
echo "❌ 启动任务失败,停止执行!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ 任务启动成功!"
|
||||
echo ""
|
||||
|
||||
#################################################
|
||||
# STEP 2 — 轮询任务日志接口(含 jq / 无 jq 双模式)
|
||||
#################################################
|
||||
echo "🚀 STEP 2: 查询任务执行状态..."
|
||||
echo "POST http://${PANEL_HOST}:${PANEL_PORT}${API_READ_FILE}"
|
||||
echo ""
|
||||
|
||||
LAST_LINE_COUNT=0
|
||||
|
||||
while true; do
|
||||
TOKEN_INFO=$(gen_token)
|
||||
TOKEN=$(echo "$TOKEN_INFO" | cut -d',' -f1)
|
||||
TIMESTAMP=$(echo "$TOKEN_INFO" | cut -d',' -f2)
|
||||
|
||||
RESP2=$(curl -s -X POST "http://${PANEL_HOST}:${PANEL_PORT}${API_READ_FILE}" \
|
||||
-H "1Panel-Token: ${TOKEN}" \
|
||||
-H "1Panel-Timestamp: ${TIMESTAMP}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"id\":0,\"type\":\"task\",\"name\":\"\",\"page\":1,\"pageSize\":500,\"latest\":true,\"taskID\":\"${TASK_ID}\",\"taskType\":\"\",\"taskOperate\":\"\",\"resourceID\":0}")
|
||||
|
||||
#############################################
|
||||
# 有 jq:强力 JSON 解析模式
|
||||
#############################################
|
||||
if [ $HAS_JQ -eq 1 ]; then
|
||||
|
||||
mapfile -t LINES < <(echo "$RESP2" | jq -r '.data.lines[]')
|
||||
|
||||
TOTAL_LINES=${#LINES[@]}
|
||||
if [ $TOTAL_LINES -gt $LAST_LINE_COUNT ]; then
|
||||
for ((i=LAST_LINE_COUNT; i<TOTAL_LINES; i++)); do
|
||||
echo "${LINES[$i]}"
|
||||
done
|
||||
LAST_LINE_COUNT=$TOTAL_LINES
|
||||
fi
|
||||
|
||||
if echo "$RESP2" | jq -e '.data.lines[] | select(contains("[TASK-END]"))' >/dev/null; then
|
||||
STATUS=$(echo "$RESP2" | jq -r '.data.taskStatus')
|
||||
echo ""
|
||||
echo "🎉🎉🎉 任务已结束!检测到 [TASK-END]"
|
||||
echo "执行状态:$STATUS"
|
||||
echo ""
|
||||
exit 0
|
||||
fi
|
||||
|
||||
#############################################
|
||||
# 无 jq:兼容模式(grep + sed + awk)
|
||||
#############################################
|
||||
else
|
||||
LINES_BLOCK=$(echo "$RESP2" | sed -n '/"lines": \[/,/\]/p' | sed '1d;$d')
|
||||
|
||||
mapfile -t LINES < <(
|
||||
echo "$LINES_BLOCK" |
|
||||
sed 's/^[[:space:]]*"//;s/"[[:space:]]*,\?$//'
|
||||
)
|
||||
|
||||
TOTAL_LINES=${#LINES[@]}
|
||||
|
||||
if [ $TOTAL_LINES -gt $LAST_LINE_COUNT ]; then
|
||||
for ((i=LAST_LINE_COUNT; i<TOTAL_LINES; i++)); do
|
||||
echo "${LINES[$i]}"
|
||||
done
|
||||
LAST_LINE_COUNT=$TOTAL_LINES
|
||||
fi
|
||||
|
||||
echo "$LINES_BLOCK" | grep -q "\[TASK-END\]"
|
||||
if [ $? -eq 0 ]; then
|
||||
STATUS=$(echo "$RESP2" | grep -o '"taskStatus"[[:space:]]*:[[:space:]]*"[^"]*' | sed 's/.*"//')
|
||||
echo ""
|
||||
echo "🎉🎉🎉 任务已结束!检测到 [TASK-END]"
|
||||
echo "执行状态:${STATUS:-Unknown}"
|
||||
echo ""
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
sleep 3
|
||||
done
|
||||
```
|
||||
|
||||
## DPanel 导入应用商店
|
||||
|
||||
> 温馨提示:
|
||||
|
||||
+15
-69
@@ -25,16 +25,11 @@
|
||||
"**/alist-aria2/**",
|
||||
"**/alist-ffmpeg/**",
|
||||
"**/homarr/0.15.10/**",
|
||||
"**/minio/2025-04-22/**",
|
||||
"**/transmission/2.94/**",
|
||||
"**/rustfs/1.0.0-alpha.86/**"
|
||||
"**/minio/2025-04-22/**"
|
||||
],
|
||||
"packageRules": [
|
||||
{
|
||||
"matchUpdateTypes": [
|
||||
"patch",
|
||||
"minor"
|
||||
],
|
||||
{
|
||||
"matchUpdateTypes": ["patch", "minor"],
|
||||
"automerge": true,
|
||||
"automergeType": "pr",
|
||||
"platformAutomerge": true,
|
||||
@@ -42,9 +37,7 @@
|
||||
"prCreation": "immediate"
|
||||
},
|
||||
{
|
||||
"matchUpdateTypes": [
|
||||
"major"
|
||||
],
|
||||
"matchUpdateTypes": ["major"],
|
||||
"automerge": false
|
||||
},
|
||||
{
|
||||
@@ -257,29 +250,24 @@
|
||||
],
|
||||
"allowedVersions": "<2.0.0"
|
||||
},
|
||||
{
|
||||
"matchPackageNames": [
|
||||
"umamisoftware/umami"
|
||||
],
|
||||
"versionCompatibility": "^(?<compatibility>.*)-(?<version>.*)$",
|
||||
"versioning": "semver"
|
||||
},
|
||||
{
|
||||
"matchFileNames": [
|
||||
"apps/umami/2.16.0/*.yml"
|
||||
"apps/umami*/2.16.0/*.yml"
|
||||
],
|
||||
"allowedVersions": "<=2.16.0"
|
||||
},
|
||||
{
|
||||
"matchFileNames": [
|
||||
"apps/umami/2.20.0/*.yml"
|
||||
"apps/umami*/2.16.1/*.yml"
|
||||
],
|
||||
"allowedVersions": "<=2.20.0"
|
||||
},
|
||||
{
|
||||
"matchFileNames": [
|
||||
"apps/umami-mysql/2.16.0/*.yml"
|
||||
],
|
||||
"allowedVersions": "<=2.16.0"
|
||||
},
|
||||
{
|
||||
"matchFileNames": [
|
||||
"apps/umami-mysql/2.20.0/*.yml"
|
||||
],
|
||||
"allowedVersions": "<=2.20.0"
|
||||
"allowedVersions": ">=2.16.1"
|
||||
},
|
||||
{
|
||||
"matchDatasources": [
|
||||
@@ -312,13 +300,7 @@
|
||||
"matchFileNames": [
|
||||
"apps/ani-rss/2.*.*/*.yml"
|
||||
],
|
||||
"allowedVersions": "<4.0"
|
||||
},
|
||||
{
|
||||
"matchFileNames": [
|
||||
"apps/ani-rss/3.*.*/*.yml"
|
||||
],
|
||||
"allowedVersions": "<4.0"
|
||||
"allowedVersions": ">=2.0"
|
||||
},
|
||||
{
|
||||
"matchFileNames": [
|
||||
@@ -356,42 +338,6 @@
|
||||
"apps/seaweedfs/**/docker-compose.yml"
|
||||
],
|
||||
"enabled": false
|
||||
},
|
||||
{
|
||||
"matchFileNames": [
|
||||
"apps/mediacms/4.*.*/*.yml"
|
||||
],
|
||||
"allowedVersions": "/^4.*.*/"
|
||||
},
|
||||
{
|
||||
"matchFileNames": [
|
||||
"apps/lucky/2.20.*/*.yml"
|
||||
],
|
||||
"allowedVersions": "<2.23.1"
|
||||
},
|
||||
{
|
||||
"matchFileNames": [
|
||||
"apps/outline/1.2.*/*.yml"
|
||||
],
|
||||
"allowedVersions": "<1.3.0"
|
||||
},
|
||||
{
|
||||
"matchFileNames": [
|
||||
"apps/lucky/2.*.*/*.yml"
|
||||
],
|
||||
"allowedVersions": "<3.0.0"
|
||||
},
|
||||
{
|
||||
"matchFileNames": [
|
||||
"apps/ech0/3.*.*/*.yml"
|
||||
],
|
||||
"allowedVersions": "<4.0.0"
|
||||
},
|
||||
{
|
||||
"matchFileNames": [
|
||||
"apps/omnibox/1.*.*/*.yml"
|
||||
],
|
||||
"allowedVersions": "<2.0.0"
|
||||
}
|
||||
],
|
||||
"prCreation": "immediate"
|
||||
|
||||
@@ -2,7 +2,7 @@ name: Auto Process Renovate PRs
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [ opened, synchronize, reopened, ready_for_review ]
|
||||
types: [opened, synchronize, reopened, ready_for_review]
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 * * * *'
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v6
|
||||
@@ -36,6 +36,7 @@ jobs:
|
||||
import requests
|
||||
from typing import Optional, Dict, Any
|
||||
|
||||
# 从环境变量获取GitHub token和仓库信息
|
||||
GITHUB_TOKEN = os.getenv('GITHUB_TOKEN')
|
||||
REPOSITORY = os.getenv('GITHUB_REPOSITORY')
|
||||
HEADERS = {
|
||||
@@ -58,113 +59,99 @@ jobs:
|
||||
|
||||
def parse_version_update(pr_body: str) -> Optional[str]:
|
||||
"""解析PR正文,确定更新类型"""
|
||||
# 匹配Markdown表格格式
|
||||
# 示例格式:
|
||||
# | Package | Update | Change |
|
||||
# |---------|--------|--------|
|
||||
# | [uusec/openresty-manager](...) | patch | `2.3.4` -> `2.3.5` |
|
||||
|
||||
# 查找表格行
|
||||
lines = pr_body.split('\n')
|
||||
in_table = False
|
||||
|
||||
|
||||
for line in lines:
|
||||
# 检测表格开始
|
||||
if re.search(r'^\s*\|.*Package.*Update.*Change.*\|\s*$', line, re.IGNORECASE):
|
||||
in_table = True
|
||||
continue
|
||||
|
||||
|
||||
# 跳过表格分隔线
|
||||
if in_table and re.search(r'^\s*\|[-:|]+\|\s*$', line):
|
||||
continue
|
||||
|
||||
|
||||
# 处理表格数据行
|
||||
if in_table and line.strip().startswith('|'):
|
||||
# 提取单元格内容
|
||||
cells = [cell.strip() for cell in line.split('|') if cell.strip()]
|
||||
|
||||
|
||||
if len(cells) >= 3:
|
||||
update_type = cells[1].lower()
|
||||
|
||||
update_type = cells[1].lower() # 第二列是更新类型
|
||||
|
||||
# 检查更新类型
|
||||
if update_type == 'major':
|
||||
return 'major'
|
||||
elif update_type in ['minor', 'patch']:
|
||||
return update_type
|
||||
|
||||
change_cell = cells[2]
|
||||
|
||||
# 如果没有明确类型,尝试从版本变化中推断
|
||||
change_cell = cells[2] # 第三列是版本变化
|
||||
|
||||
# 提取版本号
|
||||
version_pattern = r'(\d+\.\d+\.\d+|\d+\.\d+|\d+)'
|
||||
versions = re.findall(version_pattern, change_cell)
|
||||
|
||||
|
||||
if len(versions) >= 2:
|
||||
old_parts = versions[0].split('.')
|
||||
new_parts = versions[1].split('.')
|
||||
|
||||
if old_parts[0] != new_parts[0]:
|
||||
return 'major'
|
||||
elif len(old_parts) > 1 and len(new_parts) > 1 and old_parts[1] != new_parts[1]:
|
||||
return 'minor'
|
||||
else:
|
||||
return 'patch'
|
||||
old_version = versions[0]
|
||||
new_version = versions[1]
|
||||
|
||||
# 分割版本号
|
||||
old_parts = old_version.split('.')
|
||||
new_parts = new_version.split('.')
|
||||
|
||||
if len(old_parts) > 0 and len(new_parts) > 0:
|
||||
if old_parts[0] != new_parts[0]:
|
||||
return 'major'
|
||||
elif len(old_parts) > 1 and len(new_parts) > 1 and old_parts[1] != new_parts[1]:
|
||||
return 'minor'
|
||||
else:
|
||||
return 'patch'
|
||||
elif in_table and not line.strip().startswith('|'):
|
||||
# 表格结束
|
||||
break
|
||||
|
||||
|
||||
return None
|
||||
|
||||
def is_rebase_checkbox_unchecked(pr_body: str) -> bool:
|
||||
"""
|
||||
检查 PR body 中的 rebase checkbox 是否存在且未勾选。
|
||||
Renovate 在 PR body 中插入如下格式的行:
|
||||
- [ ] <!-- rebase-check --> If you want to rebase/retry this PR, check this box.
|
||||
勾选后变为:
|
||||
- [x] <!-- rebase-check --> If you want to rebase/retry this PR, check this box.
|
||||
"""
|
||||
# 匹配未勾选状态
|
||||
unchecked_pattern = r'-\s*\[\s*\]\s*<!--\s*rebase-check\s*-->'
|
||||
return bool(re.search(unchecked_pattern, pr_body, re.IGNORECASE))
|
||||
|
||||
def trigger_renovate_rebase(pr_number: int, pr_body: str) -> bool:
|
||||
"""
|
||||
通过将 PR body 中的 rebase checkbox 从未勾选改为勾选,
|
||||
触发 Renovate 自动 rebase/retry。
|
||||
返回是否成功更新。
|
||||
"""
|
||||
unchecked_pattern = r'(-\s*\[)\s*(\]\s*<!--\s*rebase-check\s*-->)'
|
||||
new_body = re.sub(
|
||||
unchecked_pattern,
|
||||
r'\1x\2',
|
||||
pr_body,
|
||||
flags=re.IGNORECASE
|
||||
)
|
||||
|
||||
if new_body == pr_body:
|
||||
print(f"PR #{pr_number} 未找到可勾选的 rebase checkbox,无法触发 rebase")
|
||||
return False
|
||||
|
||||
url = f'https://api.github.com/repos/{REPOSITORY}/pulls/{pr_number}'
|
||||
data = {'body': new_body}
|
||||
response = requests.patch(url, headers=HEADERS, json=data)
|
||||
|
||||
if response.status_code == 200:
|
||||
print(f"PR #{pr_number} 已勾选 rebase checkbox,Renovate 将自动触发 rebase/retry")
|
||||
return True
|
||||
else:
|
||||
print(f"PR #{pr_number} 更新 body 失败: {response.status_code} {response.text}")
|
||||
return False
|
||||
|
||||
def is_pr_mergeable(pr_number: int) -> bool:
|
||||
"""检查PR是否可以合并"""
|
||||
url = f'https://api.github.com/repos/{REPOSITORY}/pulls/{pr_number}'
|
||||
response = requests.get(url, headers=HEADERS)
|
||||
response.raise_for_status()
|
||||
pr_data = response.json()
|
||||
|
||||
# 检查合并状态
|
||||
return pr_data.get('mergeable', False) and pr_data.get('mergeable_state', '') == 'clean'
|
||||
|
||||
def wait_for_checks(pr_number: int, max_wait: int = 600) -> bool:
|
||||
"""等待检查通过,最多等待max_wait秒"""
|
||||
start_time = time.time()
|
||||
|
||||
|
||||
while time.time() - start_time < max_wait:
|
||||
if is_pr_mergeable(pr_number):
|
||||
return True
|
||||
|
||||
# 等待30秒后再次检查
|
||||
time.sleep(30)
|
||||
|
||||
|
||||
return False
|
||||
|
||||
def merge_pr(pr_number: int) -> bool:
|
||||
"""合并PR"""
|
||||
url = f'https://api.github.com/repos/{REPOSITORY}/pulls/{pr_number}/merge'
|
||||
data = {'merge_method': 'merge'}
|
||||
data = {
|
||||
'merge_method': 'merge'
|
||||
}
|
||||
response = requests.put(url, headers=HEADERS, json=data)
|
||||
|
||||
|
||||
if response.status_code == 200:
|
||||
print(f"成功合并PR #{pr_number}")
|
||||
return True
|
||||
@@ -184,51 +171,33 @@ jobs:
|
||||
pr_number = pr['number']
|
||||
pr_author = pr['user']['login']
|
||||
pr_title = pr['title']
|
||||
pr_body = pr.get('body', '') or ''
|
||||
|
||||
pr_body = pr.get('body', '')
|
||||
|
||||
print(f"处理PR #{pr_number} 来自 {pr_author}: {pr_title}")
|
||||
|
||||
|
||||
# 解析更新类型
|
||||
update_type = parse_version_update(pr_body)
|
||||
|
||||
|
||||
if not update_type:
|
||||
print(f"无法确定PR #{pr_number} 的更新类型,跳过")
|
||||
add_comment(pr_number, "⚠️ 自动处理失败: 无法确定更新类型")
|
||||
return
|
||||
|
||||
|
||||
print(f"PR #{pr_number} 更新类型: {update_type}")
|
||||
|
||||
|
||||
# 如果是大版本更新,跳过
|
||||
if update_type == 'major':
|
||||
print(f"PR #{pr_number} 是大版本更新,跳过")
|
||||
add_comment(pr_number, "⏭️ 自动跳过: 大版本更新需要手动审核")
|
||||
return
|
||||
|
||||
|
||||
# 检查PR是否可以合并
|
||||
if not wait_for_checks(pr_number):
|
||||
print(f"PR #{pr_number} 在等待时间内未通过检查")
|
||||
|
||||
# 判断 rebase checkbox 是否存在且未勾选
|
||||
if is_rebase_checkbox_unchecked(pr_body):
|
||||
print(f"PR #{pr_number} 检测到未勾选的 rebase checkbox,尝试触发 rebase...")
|
||||
triggered = trigger_renovate_rebase(pr_number, pr_body)
|
||||
if triggered:
|
||||
add_comment(
|
||||
pr_number,
|
||||
"🔄 自动触发 Rebase: 检查超时,已自动勾选 rebase checkbox,"
|
||||
"Renovate 将重新触发 rebase/retry,下次调度时将再次尝试合并。"
|
||||
)
|
||||
else:
|
||||
add_comment(
|
||||
pr_number,
|
||||
"⏰ 自动跳过: 在等待时间内未通过所有检查,且无法触发 rebase,请手动处理。"
|
||||
)
|
||||
else:
|
||||
# checkbox 不存在或已经勾选过(Renovate 还在处理中)
|
||||
add_comment(
|
||||
pr_number,
|
||||
"⏰ 自动跳过: 在等待时间内未通过所有检查,"
|
||||
"rebase checkbox 不存在或已触发,请稍后等待 Renovate 处理或手动介入。"
|
||||
)
|
||||
print(f"PR #{pr_number} 在等待时间内未通过检查,跳过")
|
||||
add_comment(pr_number, "⏰ 自动跳过: 在等待时间内未通过所有检查")
|
||||
return
|
||||
|
||||
|
||||
# 尝试合并PR
|
||||
if merge_pr(pr_number):
|
||||
add_comment(pr_number, "✅ 自动合并: 小版本更新已自动合并")
|
||||
else:
|
||||
@@ -237,18 +206,22 @@ jobs:
|
||||
def main():
|
||||
"""主函数"""
|
||||
try:
|
||||
# 获取所有PR
|
||||
prs = get_prs()
|
||||
print(f"找到 {len(prs)} 个打开的PR")
|
||||
|
||||
|
||||
# 筛选Renovate的PR
|
||||
renovate_prs = [pr for pr in prs if is_renovate_pr(pr)]
|
||||
print(f"找到 {len(renovate_prs)} 个Renovate/Mend的PR")
|
||||
|
||||
|
||||
# 处理每个PR
|
||||
for pr in renovate_prs:
|
||||
try:
|
||||
process_pr(pr)
|
||||
except Exception as e:
|
||||
print(f"处理PR #{pr['number']} 时出错: {str(e)}")
|
||||
|
||||
# 继续处理下一个PR
|
||||
|
||||
except Exception as e:
|
||||
print(f"处理PR时发生错误: {str(e)}")
|
||||
raise
|
||||
|
||||
@@ -1,231 +0,0 @@
|
||||
name: Auto Process Renovate PRs
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, ready_for_review]
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 * * * *'
|
||||
|
||||
jobs:
|
||||
process-renovate-prs:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: '3.x'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip install requests
|
||||
|
||||
- name: Process Renovate PRs
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
python << 'EOF'
|
||||
import os
|
||||
import re
|
||||
import time
|
||||
import requests
|
||||
from typing import Optional, Dict, Any
|
||||
|
||||
# 从环境变量获取GitHub token和仓库信息
|
||||
GITHUB_TOKEN = os.getenv('GITHUB_TOKEN')
|
||||
REPOSITORY = os.getenv('GITHUB_REPOSITORY')
|
||||
HEADERS = {
|
||||
'Authorization': f'Bearer {GITHUB_TOKEN}',
|
||||
'Accept': 'application/vnd.github.v3+json',
|
||||
'X-GitHub-Api-Version': '2022-11-28'
|
||||
}
|
||||
|
||||
def get_prs() -> list:
|
||||
"""获取所有打开的PR列表"""
|
||||
url = f'https://api.github.com/repos/{REPOSITORY}/pulls?state=open'
|
||||
response = requests.get(url, headers=HEADERS)
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
|
||||
def is_renovate_pr(pr: Dict[str, Any]) -> bool:
|
||||
"""检查PR是否来自Renovate"""
|
||||
author = pr.get('user', {}).get('login', '').lower()
|
||||
return 'renovate' in author or 'mend' in author
|
||||
|
||||
def parse_version_update(pr_body: str) -> Optional[str]:
|
||||
"""解析PR正文,确定更新类型"""
|
||||
# 匹配Markdown表格格式
|
||||
# 示例格式:
|
||||
# | Package | Update | Change |
|
||||
# |---------|--------|--------|
|
||||
# | [uusec/openresty-manager](...) | patch | `2.3.4` -> `2.3.5` |
|
||||
|
||||
# 查找表格行
|
||||
lines = pr_body.split('\n')
|
||||
in_table = False
|
||||
|
||||
for line in lines:
|
||||
# 检测表格开始
|
||||
if re.search(r'^\s*\|.*Package.*Update.*Change.*\|\s*$', line, re.IGNORECASE):
|
||||
in_table = True
|
||||
continue
|
||||
|
||||
# 跳过表格分隔线
|
||||
if in_table and re.search(r'^\s*\|[-:|]+\|\s*$', line):
|
||||
continue
|
||||
|
||||
# 处理表格数据行
|
||||
if in_table and line.strip().startswith('|'):
|
||||
# 提取单元格内容
|
||||
cells = [cell.strip() for cell in line.split('|') if cell.strip()]
|
||||
|
||||
if len(cells) >= 3:
|
||||
update_type = cells[1].lower() # 第二列是更新类型
|
||||
|
||||
# 检查更新类型
|
||||
if update_type == 'major':
|
||||
return 'major'
|
||||
elif update_type in ['minor', 'patch']:
|
||||
return update_type
|
||||
|
||||
# 如果没有明确类型,尝试从版本变化中推断
|
||||
change_cell = cells[2] # 第三列是版本变化
|
||||
|
||||
# 提取版本号
|
||||
version_pattern = r'(\d+\.\d+\.\d+|\d+\.\d+|\d+)'
|
||||
versions = re.findall(version_pattern, change_cell)
|
||||
|
||||
if len(versions) >= 2:
|
||||
old_version = versions[0]
|
||||
new_version = versions[1]
|
||||
|
||||
# 分割版本号
|
||||
old_parts = old_version.split('.')
|
||||
new_parts = new_version.split('.')
|
||||
|
||||
if len(old_parts) > 0 and len(new_parts) > 0:
|
||||
if old_parts[0] != new_parts[0]:
|
||||
return 'major'
|
||||
elif len(old_parts) > 1 and len(new_parts) > 1 and old_parts[1] != new_parts[1]:
|
||||
return 'minor'
|
||||
else:
|
||||
return 'patch'
|
||||
elif in_table and not line.strip().startswith('|'):
|
||||
# 表格结束
|
||||
break
|
||||
|
||||
return None
|
||||
|
||||
def is_pr_mergeable(pr_number: int) -> bool:
|
||||
"""检查PR是否可以合并"""
|
||||
url = f'https://api.github.com/repos/{REPOSITORY}/pulls/{pr_number}'
|
||||
response = requests.get(url, headers=HEADERS)
|
||||
response.raise_for_status()
|
||||
pr_data = response.json()
|
||||
|
||||
# 检查合并状态
|
||||
return pr_data.get('mergeable', False) and pr_data.get('mergeable_state', '') == 'clean'
|
||||
|
||||
def wait_for_checks(pr_number: int, max_wait: int = 600) -> bool:
|
||||
"""等待检查通过,最多等待max_wait秒"""
|
||||
start_time = time.time()
|
||||
|
||||
while time.time() - start_time < max_wait:
|
||||
if is_pr_mergeable(pr_number):
|
||||
return True
|
||||
|
||||
# 等待30秒后再次检查
|
||||
time.sleep(30)
|
||||
|
||||
return False
|
||||
|
||||
def merge_pr(pr_number: int) -> bool:
|
||||
"""合并PR"""
|
||||
url = f'https://api.github.com/repos/{REPOSITORY}/pulls/{pr_number}/merge'
|
||||
data = {
|
||||
'merge_method': 'merge'
|
||||
}
|
||||
response = requests.put(url, headers=HEADERS, json=data)
|
||||
|
||||
if response.status_code == 200:
|
||||
print(f"成功合并PR #{pr_number}")
|
||||
return True
|
||||
else:
|
||||
print(f"合并PR #{pr_number} 失败: {response.json().get('message', '未知错误')}")
|
||||
return False
|
||||
|
||||
def add_comment(pr_number: int, comment: str):
|
||||
"""在PR上添加评论"""
|
||||
url = f'https://api.github.com/repos/{REPOSITORY}/issues/{pr_number}/comments'
|
||||
data = {'body': comment}
|
||||
response = requests.post(url, headers=HEADERS, json=data)
|
||||
response.raise_for_status()
|
||||
|
||||
def process_pr(pr: Dict[str, Any]):
|
||||
"""处理单个PR"""
|
||||
pr_number = pr['number']
|
||||
pr_author = pr['user']['login']
|
||||
pr_title = pr['title']
|
||||
pr_body = pr.get('body', '')
|
||||
|
||||
print(f"处理PR #{pr_number} 来自 {pr_author}: {pr_title}")
|
||||
|
||||
# 解析更新类型
|
||||
update_type = parse_version_update(pr_body)
|
||||
|
||||
if not update_type:
|
||||
print(f"无法确定PR #{pr_number} 的更新类型,跳过")
|
||||
add_comment(pr_number, "⚠️ 自动处理失败: 无法确定更新类型")
|
||||
return
|
||||
|
||||
print(f"PR #{pr_number} 更新类型: {update_type}")
|
||||
|
||||
# 如果是大版本更新,跳过
|
||||
if update_type == 'major':
|
||||
print(f"PR #{pr_number} 是大版本更新,跳过")
|
||||
add_comment(pr_number, "⏭️ 自动跳过: 大版本更新需要手动审核")
|
||||
return
|
||||
|
||||
# 检查PR是否可以合并
|
||||
if not wait_for_checks(pr_number):
|
||||
print(f"PR #{pr_number} 在等待时间内未通过检查,跳过")
|
||||
add_comment(pr_number, "⏰ 自动跳过: 在等待时间内未通过所有检查")
|
||||
return
|
||||
|
||||
# 尝试合并PR
|
||||
if merge_pr(pr_number):
|
||||
add_comment(pr_number, "✅ 自动合并: 小版本更新已自动合并")
|
||||
else:
|
||||
add_comment(pr_number, "❌ 自动合并失败: 请手动处理")
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
try:
|
||||
# 获取所有PR
|
||||
prs = get_prs()
|
||||
print(f"找到 {len(prs)} 个打开的PR")
|
||||
|
||||
# 筛选Renovate的PR
|
||||
renovate_prs = [pr for pr in prs if is_renovate_pr(pr)]
|
||||
print(f"找到 {len(renovate_prs)} 个Renovate/Mend的PR")
|
||||
|
||||
# 处理每个PR
|
||||
for pr in renovate_prs:
|
||||
try:
|
||||
process_pr(pr)
|
||||
except Exception as e:
|
||||
print(f"处理PR #{pr['number']} 时出错: {str(e)}")
|
||||
# 继续处理下一个PR
|
||||
|
||||
except Exception as e:
|
||||
print(f"处理PR时发生错误: {str(e)}")
|
||||
raise
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
EOF
|
||||
@@ -9,7 +9,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v6
|
||||
|
||||
@@ -9,7 +9,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: appstore
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: custom
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
@@ -14,9 +14,9 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
- name: Run Renovate
|
||||
uses: renovatebot/github-action@957af03d760b2c87fc65cb95628f6d5f95d9c578 # v46.0.0
|
||||
uses: renovatebot/github-action@53bdcc4ec92f28e5023ac92356ea8bb45f8b807d # v43.0.15
|
||||
with:
|
||||
useSlim: false
|
||||
token: ${{ secrets.GITHUBTOKEN }}
|
||||
|
||||
@@ -53,7 +53,6 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/bookstack/logo.png" width="22"/> | BookStack | https://www.bookstackapp.com/ | 一个用于存储和组织信息及文档的平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/casdoor/logo.png" width="22"/> | Casdoor | https://casdoor.org/ | 身份和访问管理(IAM)/单点登录(SSO)平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/certimate/logo.png" width="22"/> | Certimate | https://docs.certimate.me/ | SSL证书管理工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/chronoframe/logo.png" width="22"/> | ChronoFrame | https://chronoframe.bh8.ga/ | 照片展示和管理应用 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/clouddrive2/logo.png" width="22"/> | CloudDrive | https://www.clouddrive2.com | 多云盘管理工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/cloudreve/logo.png" width="22"/> | Cloudreve | https://cloudreve.org/ | 公私兼备的网盘系统 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/cloudsaver/logo.png" width="22"/> | CloudSaver | https://github.com/jiangrui1994/CloudSaver/ | 网盘资源搜索与转存工具 | |
|
||||
@@ -81,7 +80,6 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/gitea/logo.png" width="22"/> | Gitea | https://gitea.io/ | 私有、快速、可靠的 DevOps 平台 | Gitea |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/gitea/logo.png" width="22"/> | Gitea Runner | https://gitea.io/ | 【Runner】私有、快速、可靠的 DevOps 平台 | Gitea |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/glance/logo.png" width="22"/> | Glance | https://github.com/glanceapp/glance/ | 一个自托管的仪表板,将所有您的订阅源放在一个地方 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/glean/logo.png" width="22"/> | Glean (拾灵) | https://github.com/LeslieLeung/glean/ | 一个自托管的 RSS 阅读器和个人知识管理工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/halo/logo.png" width="22"/> | Halo | https://halo.run/ | 强大易用的开源建站工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/homarr/logo.png" width="22"/> | Homarr | https://homarr.dev/ | 一个时尚、现代化的仪表板 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/ikaros/logo.png" width="22"/> | ikaros | https://github.com/Suwmlee/ikaros/ | 打通下载软件与媒体服务,安心享受影片 | ikaros |
|
||||
@@ -92,23 +90,19 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/immich/logo.png" width="22"/> | Immich-Server | https://immich.app/ | 【主服务模块】高性能自托管照片和视频管理解决方案,适用于远端数据库,远端机器学习 | Immich |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/immich/logo.png" width="22"/> | Immich-Machine-Learning | https://immich.app/ | 【机器学习模块】高性能自托管照片和视频管理解决方案,适用于作为远端机器学习使用 | Immich |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/iyuu-plus/logo.png" width="22"/> | IYUU Plus | https://doc.iyuu.cn/ | 基于特征码的索引工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/jackett/logo.png" width="22"/> | Jackett | https://github.com/Jackett/Jackett/ | API支持您最喜爱的种子追踪器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/iycms/logo.png" width="22"/> | 爱影CMS | https://www.iycms.com/ | 高性能高并发永久免费影视CMS | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/jellyfin/logo.png" width="22"/> | Jellyfin | https://jellyfin.org/ | 自由软件媒体系统 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/jellyseerr/logo.png" width="22"/> | Jellyseerr | https://docs.jellyseerr.dev/ | 满足您所有媒体需求的一站式平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/jproxy/logo.png" width="22"/> | JProxy | https://github.com/LuckyPuppy514/jproxy/ | 介于 Sonarr / Radarr 和 Jackett / Prowlarr 之间的代理,主要用于优化查询和提升识别率 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/kavita/logo.png" width="22"/> | Kavita | https://www.kavitareader.com/ | 自托管数字图书馆 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/kimai/logo.png" width="22"/> | Kimai | https://www.kimai.org/ | 基于网络的多用户时间追踪应用 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/kirara-agent/logo.png" width="22"/> | Kirara Agent | https://kirara-docs.app.lss233.com/ | 一款支持主流大语言模型、主流聊天平台的聊天的机器人 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/komga/logo.png" width="22"/> | Komga | https://komga.org/ | 漫画、漫画、蓝光光盘、杂志和电子书的媒体服务器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/kotatsu/logo.png" width="22"/> | Kotatsu | https://kotatsu.app/ | 口袋里的漫画 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/kspeeder/logo.png" width="22"/> | KSpeeder | https://kspeeder.istoreos.com/ | Docker镜像加速专家 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/libretv/logo.png" width="22"/> | LibreTV | https://libretv.is-an.org/ | 免费在线视频搜索与观看平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/limesurvey/logo.png" width="22"/> | 问卷星 | https://www.limesurvey.org/ | 在线问卷调查程序 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/linkding/logo.png" width="22"/> | LinkDing | https://github.com/sissbruecker/linkding/ | 自托管书签管理器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/llonebot/logo.png" width="22"/> | LLTwoBot | https://llonebot.com/ | 一个使用 Nix 或 Docker 部署 LLOneBot 的安装。 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/logto/logo.png" width="22"/> | Logto | https://logto.io/ | 开发者更好的身份基础设施,以及 Auth0 的开源替代方案。 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/lucky/logo.png" width="22"/> | Lucky | https://lucky666.cn/ | 软硬路由公网神器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/maccms10/logo.png" width="22"/> | 苹果CMS V10 | https://www.maccms.la/ | 基于ThinkPHP和Layui的多功能开源免费内容管理系统 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/mailserver/logo.png" width="22"/> | Docker Mailserver | https://docker-mailserver.github.io/docker-mailserver/latest/ | 可用于生产的全栈但简单的邮件服务器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/mdc-ng/logo.png" width="22"/> | MDC-NG | https://github.com/mdc-ng/mdc-ng/ | 成人电影数据采集工具 | |
|
||||
@@ -125,7 +119,6 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/percona/logo.png" width="22"/> | Percona | https://www.percona.com/ | 【MySQL分支】关系数据库管理系统 | MySQL |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/n8n/logo.png" width="22"/> | n8n | https://n8n.io/ | 为技术团队提供安全的工作流自动化 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/nacos/logo.png" width="22"/> | Nacos | https://nacos.io/ | 动态服务发现、配置管理和服务管理平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/napcat/logo.png" width="22"/> | NapCat | https://napneko.github.io/ | 基于 NTQQ 的现代协议端框架 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/neko/logo.png" width="22"/> | Neko | https://neko.m1k1o.net/ | 虚拟浏览器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/nexus3/logo.png" width="22"/> | Nexus3 | https://sonatype.com/ | Sonatype Nexus存储库 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/nexusphp/logo.png" width="22"/> | NexusPHP | https://nexusphp.org/ | 完整的 PT 建站解决方案 | |
|
||||
@@ -136,15 +129,12 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/nodebb/logo.png" width="22"/> | NodeBB | https://nodebb.org/ | 一个更适合现代网络的社会平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/nodepassdash/logo.png" width="22"/> | NodePassDash | https://github.com/NodePassProject/NodePassDash/ | 现代化的 NodePass 管理界面 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/ollama/logo.png" width="22"/> | Ollama | https://ollama.com/ | 一站式大模型部署平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/omnibox/logo.png" width="22"/> | OmniBox | https://hub.docker.com/r/lampon/omnibox/ | 影视站 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/onedev/logo.png" width="22"/> | OneDev | https://onedev.io/ | DevOps 平台、带有 CI/CD、看板和软件包的 Git 服务器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/open-webui/logo.png" width="22"/> | Open Webui | https://openwebui.com/ | 用户友好的 AI 界面 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/opengist/logo.png" width="22"/> | Opengist | https://opengist.io/ | 自托管的粘贴板,基于 Git,Github Gist 的开源替代品 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/openresty-manager/logo.png" width="22"/> | Openresty Manager | https://om.uusec.com/ | 主机管理面板 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/outline/logo.png" width="22"/> | OutLine | https://www.getoutline.com/ | 快速、协作的团队知识库 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/overseerr/logo.png" width="22"/> | overseerr | https://docs.overseerr.dev/ | 管理您的媒体库请求 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/page-spy-web/logo.png" width="22"/> | PageSpy | https://www.pagespy.org/ | 开源调试平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/pansou/logo.png" width="22"/> | 盘搜 (PanSou) | https://so.252035.xyz/ | 高性能的网盘资源搜索API服务 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/paopao-ce/logo.png" width="22"/> | 泡泡(PaoPao) | https://www.paopao.info/ | 清新文艺微社区 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/peer-ban-helper/logo.png" width="22"/> | PeerBanHelper | https://github.com/PBH-BTN/PeerBanHelper/ | BT 反吸血工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/photoprism/logo.png" width="22"/> | PhotoPrism | https://www.photoprism.app/ | 面向去中心化网络的人工智能照片应用程序 | |
|
||||
@@ -176,9 +166,7 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/sonarr/logo.png" width="22"/> | sonarr | https://sonarr.tv/ | 智能 PVR 适用于新闻组和 BT 用户。 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/speedtest/logo.png" width="22"/> | SpeedTest | https://www.speedtest.net/ | 互联网速度测试 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/speedtest-tracker/logo.png" width="22"/> | SpeedTest-Tracker | https://docs.speedtest-tracker.dev/ | Speedtest Tracker 是一款自托管互联网性能跟踪应用程序,可针对 Ookla 的 Speedtest 服务运行速度测试检查 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/splayer/logo.png" width="22"/> | SPlayer | https://github.com/imsyy/SPlayer/ | 一个简约的音乐播放器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/stash/logo.png" width="22"/> | Stash | https://stashapp.cc/ | 组织和刮削你的色情内容 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/stream-rec/logo.png" width="22"/> | Rust-Rec | https://github.com/hua0512/rust-rec/ | Rust-rec是一个用于各种流媒体服务的自动流媒体录制工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/stream-rec/logo.png" width="22"/> | Stream-Rec | https://github.com/hua0512/stream-rec/ | Stream-rec是一个用于各种流媒体服务的自动流媒体录制工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/stream-rec/logo.png" width="22"/> | Stream-Rec Web版 | https://github.com/hua0512/stream-rec/ | 【前端版】Stream-rec是一个用于各种流媒体服务的自动流媒体录制工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/stream-rec/logo.png" width="22"/> | Stream-Rec 服务版 | https://github.com/hua0512/stream-rec/ | 【服务版】Stream-rec是一个用于各种流媒体服务的自动流媒体录制工具 | |
|
||||
@@ -196,11 +184,9 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/topiam-ce/logo.png" width="22"/> | TOPIAM | https://topiam.cn/ | IAM/IDaaS 身份管理平台 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/traccar/logo.png" width="22"/> | Traccar 轨迹 | https://www.traccar.org/ | 现代 GPS 追踪系统 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/transmission/logo.png" width="22"/> | Transmission | https://transmissionbt.com/ | 快速、简单、免费的 Bittorrent 客户端 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/twikoo/logo.png" width="22"/> | Twikoo | http://twikoo.js.org/ | 静态网站评论系统 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/uptime-kuma/logo.png" width="22"/> | Uptime Kuma | https://uptime.kuma.pet/ | 自托管监控工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/v2raya/logo.png" width="22"/> | v2rayA | https://v2raya.org/ | 一个易用而强大的,跨平台的 V2Ray 客户端 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/vertex/logo.png" width="22"/> | Vertex | https://github.com/vertex-app/vertex/ | 追剧刷流一体化综合管理工具 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/waline/logo.png" width="22"/> | Waline | https://waline.js.org/ | 卓越的静态站点评论系统 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/umami/logo.png" width="22"/> | Umami | https://umami.is/ | 为速度和效率而构建的网站分析 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/watchyourlan/logo.png" width="22"/> | 路由设备监控 | https://github.com/aceberg/WatchYourLAN/ | 轻量级网络 IP 扫描器 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/weblate/logo.png" width="22"/> | Weblate | https://weblate.org/ | 高度集成了版本控制功能的web-based翻译工具 | |
|
||||
@@ -208,7 +194,6 @@
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/windows/logo.png" width="22"/> | Windows 系统 | https://www.microsoft.com/ | Docker 容器内的 Windows | OS |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/macos/logo.png" width="22"/> | Mac OS | https://www.apple.com/ | Docker 容器内的 Mac OS | OS |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/wiseflow/logo.png" width="22"/> | WiseFlow | https://github.com/TeamWiseFlow/wiseflow/ | Wiseflow 首席情报官 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/woodpecker/logo.png" width="22"/> | Woodpecker (啄木鸟) | https://woodpecker-ci.org/ | 啄木鸟是一个简单而强大的CI/CD引擎,具有很强的可扩展性 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/wukongim/logo.png" width="22"/> | 悟空IM | https://githubim.com/ | 让信息传递更简单 | |
|
||||
| 🟢 | <img height="22" src="https://file.lifebus.top/apps/xunlei-cnk3x/logo.png" width="22"/> | 迅雷 NAS版 | https://github.com/cnk3x/xunlei/ | 迅雷远程下载服务 NAS移植版 | |
|
||||
| 🔴 | | Yarr | https://github.com/nkanaev/yarr | Rss 阅读器 | |
|
||||
|
||||
@@ -75,4 +75,3 @@ ORM,模板渲染使用Smarty3.1以及PHP原生渲染,会话保持全程使
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
additionalProperties:
|
||||
additionalProperties:
|
||||
key: acg-faka
|
||||
name: 异次元店铺系统V3
|
||||
tags:
|
||||
@@ -13,6 +13,3 @@ additionalProperties:
|
||||
website: https://faka.wiki/
|
||||
github: https://github.com/lizhipay/acg-faka/
|
||||
document: https://faka.wiki/
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: "1panel-network"
|
||||
edit: true
|
||||
envKey: NETWORK_MODE
|
||||
labelEn: Drive path
|
||||
labelZh: 网络模式
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: 主机网络模式
|
||||
value: "host"
|
||||
- label: 桥接网络模式
|
||||
value: "bridge"
|
||||
- label: 无网络模式
|
||||
value: "none"
|
||||
- label: 1panel-network
|
||||
value: "1panel-network"
|
||||
- default: "/home/adguardhome"
|
||||
edit: true
|
||||
envKey: ADGUARDHOME_ROOT_PATH
|
||||
labelZh: 数据持久化路径
|
||||
labelEn: Data persistence path
|
||||
required: true
|
||||
type: text
|
||||
- default: 3000
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelZh: WebUI 端口
|
||||
labelEn: WebUI port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 53
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_DNS
|
||||
labelZh: DNS 端口
|
||||
labelEn: DNS port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
@@ -1,24 +0,0 @@
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
adguardhome:
|
||||
image: adguard/adguardhome:v0.107.77
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
network_mode: ${NETWORK_MODE}
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:3000
|
||||
- ${PANEL_APP_PORT_DNS}:53/tcp
|
||||
- ${PANEL_APP_PORT_DNS}:53/udp
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${ADGUARDHOME_ROOT_PATH}/workdir:/my/own/workdir
|
||||
- ${ADGUARDHOME_ROOT_PATH}/confdir:/my/own/confdir
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
@@ -1,31 +0,0 @@
|
||||
# Adguard Home
|
||||
|
||||
简短的介绍
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 简介
|
||||
|
||||
AdGuard Home 是一种基于网络的广告和跟踪器拦截解决方案。只需在您的路由器上安装一次,即可覆盖您家庭网络中的所有设备——无需额外的客户端软件。这对于各种经常威胁您隐私的物联网设备尤其重要。
|
||||
|
||||
## 安装说明
|
||||
|
||||
### 默认 DNS
|
||||
|
||||
需要提前关闭宿主机 `resolved` 功能,否则会导致 DNS 解析失败。
|
||||
|
||||
```sh
|
||||
systemctl disable systemd-resolved
|
||||
systemctl stop systemd-resolved
|
||||
```
|
||||
|
||||
### 初始化配置
|
||||
|
||||
安装后进入页面后,必须将 80 端口改为 3000 否则,结束后 页面将无法访问。
|
||||
|
||||
---
|
||||
|
||||

|
||||

|
||||
@@ -1,17 +0,0 @@
|
||||
additionalProperties:
|
||||
key: adguardhome
|
||||
name: Adguard Home
|
||||
tags:
|
||||
- WebSite
|
||||
- Local
|
||||
shortDescZh: 广告卫士之家
|
||||
shortDescEn: Adguard Home
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://adguard.com/
|
||||
github: https://github.com/AdguardTeam/AdGuardHome/
|
||||
document: https://adguard.com/
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB |
@@ -14,4 +14,3 @@ AFFiNE 是一个开源的全能工作空间和操作系统,用于组装您的
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -12,7 +12,3 @@ additionalProperties:
|
||||
website: https://affine.pro/
|
||||
github: https://github.com/toeverything/AFFiNE/
|
||||
document: https://docs.affine.pro/docs/code-of-conduct/
|
||||
architectures:
|
||||
- amd64
|
||||
- arm
|
||||
- arm64
|
||||
|
||||
@@ -106,4 +106,3 @@ location / {
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
additionalProperties:
|
||||
additionalProperties:
|
||||
key: alist-aria2
|
||||
name: Alist Aira2插件版
|
||||
tags:
|
||||
@@ -13,11 +13,3 @@ additionalProperties:
|
||||
website: https://alist.nn.ci/
|
||||
github: https://github.com/alist-org/alist/
|
||||
document: https://alist.nn.ci/guide/
|
||||
architectures:
|
||||
- '386'
|
||||
- amd64
|
||||
- arm
|
||||
- arm64
|
||||
- ppc64le
|
||||
- riscv64
|
||||
- s390x
|
||||
|
||||
@@ -106,4 +106,3 @@ location / {
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
additionalProperties:
|
||||
additionalProperties:
|
||||
key: alist-ffmpeg
|
||||
name: Alist FFMpeg插件版
|
||||
tags:
|
||||
@@ -13,11 +13,3 @@ additionalProperties:
|
||||
website: https://alist.nn.ci/
|
||||
github: https://github.com/alist-org/alist/
|
||||
document: https://alist.nn.ci/guide/
|
||||
architectures:
|
||||
- '386'
|
||||
- amd64
|
||||
- arm
|
||||
- arm64
|
||||
- ppc64le
|
||||
- riscv64
|
||||
- s390x
|
||||
|
||||
@@ -104,4 +104,3 @@ location / {
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
+1
-9
@@ -1,4 +1,4 @@
|
||||
additionalProperties:
|
||||
additionalProperties:
|
||||
key: alist
|
||||
name: OpenList (Alist)
|
||||
tags:
|
||||
@@ -13,11 +13,3 @@ additionalProperties:
|
||||
website: https://docs.oplist.org/
|
||||
github: https://github.com/OpenListTeam/OpenList
|
||||
document: https://docs.oplist.org/
|
||||
architectures:
|
||||
- '386'
|
||||
- amd64
|
||||
- arm
|
||||
- arm64
|
||||
- ppc64le
|
||||
- riscv64
|
||||
- s390x
|
||||
|
||||
@@ -4,7 +4,7 @@ networks:
|
||||
|
||||
services:
|
||||
ammds:
|
||||
image: qyg2297248353/ammds:v1.6.57-ol8
|
||||
image: qyg2297248353/ammds:v1.6.28-ol8
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
@@ -75,4 +75,3 @@ AMMDS(Adult Movie MetaData Scraper)是一款私人专属数据管理平台
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -12,6 +12,3 @@ additionalProperties:
|
||||
website: https://ammds.lifebus.top/
|
||||
github: https://github.com/QYG2297248353/AMMDS-Docker/
|
||||
document: https://ammds.lifebus.top/
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
|
||||
@@ -4,7 +4,7 @@ networks:
|
||||
|
||||
services:
|
||||
ammds:
|
||||
image: qyg2297248353/ammds:v1.6.57
|
||||
image: qyg2297248353/ammds:v1.6.28
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
@@ -75,4 +75,3 @@ AMMDS(Adult Movie MetaData Scraper)是一款私人专属数据管理平台
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -12,6 +12,3 @@ additionalProperties:
|
||||
website: https://ammds.lifebus.top/
|
||||
github: https://github.com/QYG2297248353/AMMDS-Docker/
|
||||
document: https://ammds.lifebus.top/
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
|
||||
@@ -4,7 +4,7 @@ networks:
|
||||
|
||||
services:
|
||||
ani-rss:
|
||||
image: wushuo894/ani-rss:v3.0.14
|
||||
image: wushuo894/ani-rss:v2.3.6
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
@@ -15,4 +15,3 @@
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
additionalProperties:
|
||||
additionalProperties:
|
||||
key: ani-rss
|
||||
name: ANI-RSS
|
||||
tags:
|
||||
@@ -13,6 +13,3 @@ additionalProperties:
|
||||
website: https://docs.wushuo.top/
|
||||
github: https://github.com/wushuo894/ani-rss/
|
||||
document: https://docs.wushuo.top/
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
# Apifox Runner
|
||||
|
||||
自动化测试定时任务、接口导入、Mock 服务
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 简介
|
||||
|
||||
API 设计、开发、测试一体化协作平台
|
||||
|
||||
Apifox = Postman + Swagger + Mock + JMeter
|
||||
|
||||
一套系统、一份数据,解决多个 API 工具之间的数据同步问题
|
||||
只要定义好 API 文档,API 调试、API Mock、API 自动化测试即可直接使用,无需再次定义。
|
||||
|
||||
API 文档和 API 开发调试使用同一个工具,API 调试完成后即可保证和 API 文档定义完全一致。高效、及时、准确!
|
||||
|
||||
## 特性
|
||||
|
||||
- [x] 可视化 API 设计
|
||||
- [x] 比 Postman 更强大
|
||||
- [x] 零门槛实现自动化测试
|
||||
- [x] 分享&发布 API 文档
|
||||
- [x] 零配置 Mock 数据
|
||||
- [x] CI/CD 持续集成
|
||||
- [x] 数据库操作
|
||||
- [x] 团队协作
|
||||
- [x] 支持 HTTP、TCP、RPC
|
||||
- [x] 数据导入/导出
|
||||
- [x] 自动生成代码
|
||||
|
||||
## 安装说明
|
||||
|
||||
### 版本说明
|
||||
|
||||
- `latest`:通用版
|
||||
包含 Runner 所有功能,及以下外部程序语言环境:Nodejs 18,Java 21,Python 3,PHP 8
|
||||
|
||||
- `slim`:精简版
|
||||
在精简版中,包含 Runner 所有功能,及以下外部程序语言环境:Nodejs 18
|
||||
|
||||
### 应用服务地址
|
||||
|
||||
默认值:`https://api.apifox.cn`
|
||||
|
||||
部署时推荐填写公网地址,以保证应用在团队中正常运行。
|
||||
|
||||
### 访问令牌 (Access Token)
|
||||
|
||||
请在ApiFox客户端,前往主窗口 `团队资源` >> `通用 Runner` 获取访问令牌
|
||||
|
||||
### 团队 ID (Team ID)
|
||||
|
||||
请在ApiFox客户端,前往主窗口 `团队设置` 获取团队 ID
|
||||
|
||||
### Runner ID
|
||||
|
||||
请在ApiFox客户端,前往主窗口 `团队资源` >> `通用 Runner` 获取 Runner ID
|
||||
|
||||
---
|
||||
|
||||

|
||||

|
||||
@@ -1,15 +0,0 @@
|
||||
additionalProperties:
|
||||
key: apifox-runner-team
|
||||
name: Apifox Runner (团队版)
|
||||
tags:
|
||||
- Runtime
|
||||
- Local
|
||||
shortDescZh: 自动化测试定时任务、接口导入、Mock 服务
|
||||
shortDescEn: Automated testing, scheduled tasks, interface import, Mock service
|
||||
type: runtime
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://apifox.com/
|
||||
github: https://apifox.com/
|
||||
document: https://apifox.com/help/
|
||||
architectures: []
|
||||
@@ -1,45 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: "/home/apifox-runner"
|
||||
edit: true
|
||||
envKey: APIFOX_RUNNER_ROOT_PATH
|
||||
labelZh: 数据持久化路径
|
||||
labelEn: Data persistence path
|
||||
required: true
|
||||
type: text
|
||||
- default: 4524
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelZh: WebUI 端口
|
||||
labelEn: WebUI port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: "https://api.apifox.cn"
|
||||
edit: true
|
||||
envKey: SERVER_APP_BASE_URL
|
||||
labelZh: 应用服务地址
|
||||
labelEn: App Server address
|
||||
required: true
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: ACCESS_TOKEN
|
||||
labelZh: 访问令牌
|
||||
labelEn: Access Token
|
||||
required: true
|
||||
type: text
|
||||
- default: 0
|
||||
edit: true
|
||||
envKey: TEAM_ID
|
||||
labelZh: 团队 ID
|
||||
labelEn: Team ID
|
||||
required: true
|
||||
type: number
|
||||
- default: 0
|
||||
edit: true
|
||||
envKey: RUNNER_ID
|
||||
labelZh: Runner ID
|
||||
labelEn: Runner ID
|
||||
required: true
|
||||
type: number
|
||||
@@ -1,22 +0,0 @@
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
apifox-runner:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/apifox/self-hosted-general-runner
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:4524
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${APIFOX_RUNNER_ROOT_PATH}/runner:/opt/runner
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 79 KiB |
@@ -1,45 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: "/home/apifox-runner"
|
||||
edit: true
|
||||
envKey: APIFOX_RUNNER_ROOT_PATH
|
||||
labelZh: 数据持久化路径
|
||||
labelEn: Data persistence path
|
||||
required: true
|
||||
type: text
|
||||
- default: 4524
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelZh: WebUI 端口
|
||||
labelEn: WebUI port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: "https://api.apifox.cn"
|
||||
edit: true
|
||||
envKey: SERVER_APP_BASE_URL
|
||||
labelZh: 应用服务地址
|
||||
labelEn: App Server address
|
||||
required: true
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: ACCESS_TOKEN
|
||||
labelZh: 访问令牌
|
||||
labelEn: Access Token
|
||||
required: true
|
||||
type: text
|
||||
- default: 0
|
||||
edit: true
|
||||
envKey: TEAM_ID
|
||||
labelZh: 团队 ID
|
||||
labelEn: Team ID
|
||||
required: true
|
||||
type: number
|
||||
- default: 0
|
||||
edit: true
|
||||
envKey: RUNNER_ID
|
||||
labelZh: Runner ID
|
||||
labelEn: Runner ID
|
||||
required: true
|
||||
type: number
|
||||
@@ -1,22 +0,0 @@
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
apifox-runner:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/apifox/self-hosted-general-runner:slim
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:4524
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${APIFOX_RUNNER_ROOT_PATH}/runner:/opt/runner
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
@@ -1,4 +1,4 @@
|
||||
# Apifox Runner (组织版)
|
||||
# Apifox Runner
|
||||
|
||||
自动化测试定时任务、接口导入、Mock 服务
|
||||
|
||||
@@ -33,14 +33,6 @@ API 文档和 API 开发调试使用同一个工具,API 调试完成后即可
|
||||
|
||||
## 安装说明
|
||||
|
||||
### 版本说明
|
||||
|
||||
- `latest`:通用版
|
||||
包含 Runner 所有功能,及以下外部程序语言环境:Nodejs 18,Java 21,Python 3,PHP 8
|
||||
|
||||
- `slim`:精简版
|
||||
在精简版中,包含 Runner 所有功能,及以下外部程序语言环境:Nodejs 18
|
||||
|
||||
### 应用服务地址
|
||||
|
||||
默认值:`https://api.apifox.cn`
|
||||
@@ -62,4 +54,3 @@ API 文档和 API 开发调试使用同一个工具,API 调试完成后即可
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
additionalProperties:
|
||||
key: apifox-runner
|
||||
name: Apifox Runner (组织版)
|
||||
name: Apifox Runner
|
||||
tags:
|
||||
- Runtime
|
||||
- Local
|
||||
@@ -12,4 +12,3 @@ additionalProperties:
|
||||
website: https://apifox.com/
|
||||
github: https://apifox.com/
|
||||
document: https://apifox.com/help/
|
||||
architectures: []
|
||||
|
||||
@@ -31,9 +31,9 @@ additionalProperties:
|
||||
type: text
|
||||
- default: 0
|
||||
edit: true
|
||||
envKey: ORGANIZATION_ID
|
||||
labelZh: 组织 ID
|
||||
labelEn: Organization ID
|
||||
envKey: TEAM_ID
|
||||
labelZh: 团队 ID
|
||||
labelEn: Team ID
|
||||
required: true
|
||||
type: number
|
||||
- default: 0
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: "/home/apifox-runner"
|
||||
edit: true
|
||||
envKey: APIFOX_RUNNER_ROOT_PATH
|
||||
labelZh: 数据持久化路径
|
||||
labelEn: Data persistence path
|
||||
required: true
|
||||
type: text
|
||||
- default: 4524
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelZh: WebUI 端口
|
||||
labelEn: WebUI port
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: "https://api.apifox.cn"
|
||||
edit: true
|
||||
envKey: SERVER_APP_BASE_URL
|
||||
labelZh: 应用服务地址
|
||||
labelEn: App Server address
|
||||
required: true
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: ACCESS_TOKEN
|
||||
labelZh: 访问令牌
|
||||
labelEn: Access Token
|
||||
required: true
|
||||
type: text
|
||||
- default: 0
|
||||
edit: true
|
||||
envKey: ORGANIZATION_ID
|
||||
labelZh: 组织 ID
|
||||
labelEn: Organization ID
|
||||
required: true
|
||||
type: number
|
||||
- default: 0
|
||||
edit: true
|
||||
envKey: RUNNER_ID
|
||||
labelZh: Runner ID
|
||||
labelEn: Runner ID
|
||||
required: true
|
||||
type: number
|
||||
@@ -1,22 +0,0 @@
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
apifox-runner:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/apifox/self-hosted-general-runner:slim
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:4524
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${APIFOX_RUNNER_ROOT_PATH}/runner:/opt/runner
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
@@ -1,27 +0,0 @@
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
apprise:
|
||||
image: caronc/apprise:v1.5.0
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:8000
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${APPRISE_ROOT_PATH}/config:/config
|
||||
- ${APPRISE_ROOT_PATH}/plugin:/plugin
|
||||
- ${APPRISE_ROOT_PATH}/attach:/attach
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
- APPRISE_STATEFUL_MODE=simple
|
||||
- APPRISE_WORKER_COUNT=1
|
||||
- APPRISE_ADMIN=y
|
||||
@@ -1,33 +0,0 @@
|
||||
# Apprise
|
||||
|
||||
适用于几乎所有平台的推送通知
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 简介
|
||||
|
||||
Apprise 是一款强大的开源通知推送工具,旨在通过统一的接口连接几乎所有的主流通知平台。
|
||||
|
||||
## 特性
|
||||
|
||||
### 平台全覆盖
|
||||
|
||||
支持超过 100 种服务,包括:
|
||||
- 即时通讯:WeChat (企业微信), Discord, Telegram, Slack, Matrix。
|
||||
- 手机推送:Pushover, Pushbullet, Bark。
|
||||
- 基础服务:Email (SMTP), SMS, MQTT, JSON Webhooks。
|
||||
|
||||
### 多端调用
|
||||
|
||||
提供 Python 库、CLI 命令行工具 以及可独立部署的 API 微服务(Docker 镜像)。
|
||||
|
||||
### 轻量高效
|
||||
|
||||
无繁重的依赖,支持异步发送,性能极佳。
|
||||
|
||||
---
|
||||
|
||||

|
||||

|
||||
@@ -1,17 +0,0 @@
|
||||
additionalProperties:
|
||||
key: apprise
|
||||
name: Apprise
|
||||
tags:
|
||||
- WebSite
|
||||
- Local
|
||||
shortDescZh: 适用于几乎所有平台的推送通知
|
||||
shortDescEn: Push Notifications that work with just about every platform
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://appriseit.com/
|
||||
github: https://github.com/caronc/apprise
|
||||
document: https://appriseit.com/
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 16 KiB |
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 277.59448 111.57756" version="1.1" id="svg" xml:space="preserve">
|
||||
<metadata id="metadata">© 2025 Chris Caron. All rights reserved. Apprise logo and associated marks. https://github.com/caronc/apprise</metadata>
|
||||
<defs id="defs"/>
|
||||
<g id="apprise-logo" fill="#2cb6a6" stroke="none">
|
||||
<g id="waves" fill="#9ca3af">
|
||||
<path d="M 58.5161 1.51744e-05 L 58.5161 0.249673 C 65.5093 1.23163 72.8492 4.66497 79.1067 7.92743 C 86.2234 11.6378 93.0347 16.2483 98.1138 22.7189 C 112.391 40.9077 111.936 70.6294 98.1016 88.8783 C 91.192 97.9925 80.0423 103.811 69.7691 107.773 C 66.1074 109.185 62.1622 110.802 58.2767 111.348 C 59.4189 111.847 60.668 111.382 61.8681 111.351 C 65.4311 111.26 68.9197 110.757 72.4028 109.956 C 87.6485 106.449 102.176 96.1845 108.454 80.8893 C 116.572 61.1109 115.698 35.3681 101.333 18.7244 C 95.8244 12.3428 88.8962 7.51541 81.2616 4.35651 C 74.1 1.39334 66.1971 0.0052955 58.5161 1.51744e-05 Z" id="wave-l"/>
|
||||
<path d="M 60.9104 1.51744e-05 L 60.9104 0.249673 C 67.9036 1.23163 75.2435 4.66497 81.501 7.92743 C 88.6177 11.6378 95.429 16.2483 100.508 22.7189 C 114.785 40.9077 114.33 70.6294 100.496 88.8783 C 93.5863 97.9925 82.4366 103.811 72.1634 107.773 C 68.5017 109.185 64.5564 110.802 60.6709 111.348 C 61.8132 111.847 63.0623 111.382 64.2623 111.351 C 67.8253 111.26 71.314 110.757 74.7971 109.956 C 90.0427 106.449 104.57 96.1845 110.848 80.8893 C 118.966 61.1109 118.092 35.3681 103.727 18.7244 C 98.2186 12.3428 91.2905 7.51541 83.6558 4.35651 C 76.4942 1.39334 68.5914 0.0052955 60.9104 1.51744e-05 Z" id="wave-r"/>
|
||||
</g>
|
||||
<path d="M 218.063 73.4672 L 215.417 81.1401 C 225.338 85.2706 246.374 87.6043 246.374 71.6151 C 246.374 69.7157 246.099 67.8284 245.38 66.0589 C 242.196 58.2309 232.572 59.6909 227.335 54.654 C 225.406 52.7978 225.583 49.9928 228.118 48.7469 C 230.24 47.7036 233.258 47.8889 235.526 48.2669 C 237.659 48.6224 239.546 49.6189 241.611 50.1839 L 244.257 42.7756 C 235.301 38.0059 216.278 38.1682 216.211 52.036 C 216.203 53.6748 216.201 55.2346 216.764 56.7985 C 219.913 65.5376 230.776 63.2108 235.686 69.4995 C 237.858 72.2816 235.516 75.1667 232.615 75.875 C 227.664 77.084 222.563 75.3382 218.063 73.4672 M 97.1487 41.4526 L 97.1487 83.5214 L 106.674 83.5214 L 106.674 69.2339 C 112.542 69.2339 119.325 69.272 124.401 65.8607 C 131.078 61.373 131.645 49.2371 125.195 44.2383 C 117.475 38.2556 105.995 40.7545 97.1487 41.4526 M 132.074 41.4526 L 132.074 83.5214 L 141.599 83.5214 L 141.599 69.2339 C 147.467 69.2339 154.25 69.272 159.326 65.8607 C 166.003 61.373 166.57 49.2371 160.12 44.2383 C 152.4 38.2556 140.92 40.7545 132.074 41.4526 M 166.999 41.4526 L 166.999 83.5214 L 176.524 83.5214 L 176.524 67.911 C 177.86 67.911 180.021 67.4994 181.21 68.1829 C 186.258 71.0852 186.809 79.464 190.979 83.0972 C 191.734 83.7549 193.061 83.5214 193.986 83.5214 L 201.659 83.5214 C 199.737 76.8492 194.355 71.8474 191.34 65.7943 C 200.87 63.9568 201.454 49.3892 194.78 44.2385 C 187.097 38.3092 175.786 40.7592 166.999 41.4526 M 203.247 40.9235 L 203.247 83.5214 L 212.772 83.5214 L 212.772 40.9235 Z M 249.284 40.9235 L 249.284 83.5214 L 277.595 83.5214 L 277.595 75.3193 L 258.809 75.3193 L 258.809 65.2652 L 275.742 65.2652 L 275.742 57.3277 L 258.809 57.3277 L 258.809 49.1256 L 277.595 49.1256 L 277.595 40.9235 Z M 106.674 61.0318 L 106.674 48.5964 C 109.89 48.5964 113.736 48.0562 116.728 49.4967 C 120.262 51.1983 121.114 57.015 117.761 59.4157 C 114.72 61.5935 110.191 61.0318 106.674 61.0318 M 141.599 61.0318 L 141.599 48.5964 C 144.815 48.5964 148.661 48.0562 151.653 49.4967 C 155.187 51.1983 156.039 57.015 152.686 59.4157 C 149.645 61.5935 145.116 61.0318 141.599 61.0318 M 176.524 60.2381 L 176.524 48.5964 C 179.853 48.5964 183.805 48.0899 186.842 49.765 C 190.179 51.6054 190.343 56.8817 187.106 58.9166 C 184.136 60.7837 179.858 60.2381 176.524 60.2381 Z" id="wordmark"/>
|
||||
<path d="M 17.4579 39.9885 C 19.9573 50.3664 20.8801 61.6722 22.2204 72.2676 L 38.8891 69.8864 C 36.2588 74.1833 33.6106 78.4801 31.1047 82.851 C 30.0752 84.6467 28.2247 86.8178 28.0728 88.9364 C 27.8021 92.7123 35.521 97.2699 38.597 94.6529 C 40.3444 93.1662 41.5006 90.3795 42.6329 88.4072 C 44.8211 84.5955 47.1682 80.8932 49.2689 77.0301 C 50.1557 75.3994 51.7663 70.9032 53.7164 70.4668 C 55.6526 70.0335 58.4446 71.2858 60.3204 71.7385 C 67.3547 73.436 74.3012 76.543 80.4287 80.3577 C 83.4605 82.2451 88.0584 86.3575 91.1039 82.0532 C 92.1197 80.6175 91.7629 78.9129 91.5412 77.2947 C 91.0692 73.8501 90.4815 70.423 90.0282 66.976 C 88.1925 53.0152 85.8226 39.1246 83.943 25.1718 C 83.4125 21.2339 83.4376 16.1679 81.977 12.472 C 81.3751 10.9491 79.7869 9.96016 78.1597 9.95787 C 74.9703 9.95337 73.3123 13.3391 71.4092 15.3822 C 67.3017 19.792 62.8603 23.7387 57.9391 27.2107 C 45.6111 35.9082 32.0739 38.1397 17.4579 39.9885 M 74.0787 34.1677 L 76.9891 61.9489 L 56.8808 61.9489 C 59.5885 55.4795 64.1791 49.3716 67.8812 43.4281 C 69.6944 40.5171 71.4629 36.3932 74.0787 34.1677 M 14.0183 72.7968 C 13.2093 62.546 11.4037 51.9493 9.52036 41.8406 C 0.437735 44.7157 -2.2689 56.9039 1.93012 64.5947 C 4.47809 69.2616 8.93882 71.8112 14.0183 72.7968 Z" id="mark"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.1 KiB |
@@ -1,9 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: "/home/archisteamfarm"
|
||||
edit: true
|
||||
envKey: ARCHISTEAMFARM_ROOT_PATH
|
||||
labelZh: 数据持久化路径
|
||||
labelEn: Data persistence path
|
||||
required: true
|
||||
type: text
|
||||
@@ -1,22 +0,0 @@
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
services:
|
||||
archisteamfarm:
|
||||
image: justarchi/archisteamfarm:6.3.6.1
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
env_file:
|
||||
- ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
|
||||
- ${ENV_FILE:-/etc/1panel/envs/default.env}
|
||||
volumes:
|
||||
- ${ARCHISTEAMFARM_ROOT_PATH}/config:/app/config
|
||||
- ${ARCHISTEAMFARM_ROOT_PATH}/plugins:/app/plugins
|
||||
- ${ARCHISTEAMFARM_ROOT_PATH}/logs:/app/logs
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
@@ -1,39 +0,0 @@
|
||||
# ArchiSteamFarm
|
||||
|
||||
ArchiSteamFarm (简称 ASF) 是一款用 C# 编写的开源、跨平台 Steam 挂卡与自动化工具。它能在不启动官方 Steam
|
||||
客户端的情况下,同时为多个账号挂机获得集换式卡牌、提升游戏时长,并支持自动交易、激活 Key 等功能,适合在服务器、NAS 或电脑上后台运行。
|
||||
|
||||

|
||||
|
||||
## 简介
|
||||
|
||||
### 全自动挂卡 (Farming)
|
||||
|
||||
自动模拟游戏运行,高效获取 Steam 卡牌,速度快且不需真实运行游戏。
|
||||
|
||||
### 多账号同时挂机
|
||||
|
||||
支持管理无限数量的 Steam 账号。
|
||||
|
||||
### 无需安装 Steam
|
||||
|
||||
不需要后台运行 Steam 客户端,节省资源。
|
||||
|
||||
### 跨平台
|
||||
|
||||
兼容 Windows、Linux、macOS。
|
||||
|
||||
### 自动化功能
|
||||
|
||||
+ 自动领取免费授权 (addlicense) 和商店物品。
|
||||
+ 自动处理礼物、交易报价。
|
||||
+ 作为移动令牌 (2FA) 自动处理确认请求。
|
||||
|
||||
### 安全
|
||||
|
||||
提供基于 GitHub 的开源社区支持,安全性高。
|
||||
|
||||
---
|
||||
|
||||

|
||||

|
||||
@@ -1,18 +0,0 @@
|
||||
additionalProperties:
|
||||
key: archisteamfarm
|
||||
name: ArchiSteamFarm
|
||||
tags:
|
||||
- WebSite
|
||||
- Local
|
||||
shortDescZh: Steam 挂卡与自动化工具
|
||||
shortDescEn: Steam card farming and automation tool
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://github.com/JustArchiNET/ArchiSteamFarm/
|
||||
github: https://github.com/JustArchiNET/ArchiSteamFarm/
|
||||
document: https://github.com/JustArchiNET/ArchiSteamFarm/
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
- arm/v7
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB |
@@ -4,7 +4,7 @@ networks:
|
||||
|
||||
services:
|
||||
archivebox:
|
||||
image: archivebox/archivebox:0.7.4
|
||||
image: archivebox/archivebox:0.7.3
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
+2
-2
@@ -4,7 +4,7 @@ networks:
|
||||
|
||||
services:
|
||||
archivebox:
|
||||
image: archivebox/archivebox:0.8.5rc9
|
||||
image: archivebox/archivebox:0.8.5rc51
|
||||
depends_on:
|
||||
- archivebox-init
|
||||
container_name: ${CONTAINER_NAME}
|
||||
@@ -29,7 +29,7 @@ services:
|
||||
- SEARCH_BACKEND_PASSWORD=${ADMIN_PASSWORD:-}
|
||||
|
||||
archivebox-init:
|
||||
image: archivebox/archivebox:0.8.5rc9
|
||||
image: archivebox/archivebox:0.8.5rc51
|
||||
container_name: init-${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
@@ -21,4 +21,3 @@ Facebook/Insta/Flickr 上的照片或 YouTube/Soundcloud 等媒体资源、保
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -12,6 +12,3 @@ additionalProperties:
|
||||
website: https://archivebox.io/
|
||||
github: https://github.com/ArchiveBox/ArchiveBox/
|
||||
document: https://github.com/ArchiveBox/ArchiveBox/
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
|
||||
@@ -46,4 +46,3 @@
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
additionalProperties:
|
||||
additionalProperties:
|
||||
key: aria2-superng6
|
||||
name: Aria2 Superng6版
|
||||
tags:
|
||||
@@ -13,7 +13,3 @@ additionalProperties:
|
||||
website: https://github.com/SuperNG6/docker-aria2/
|
||||
github: https://github.com/aria2/aria2/
|
||||
document: https://github.com/SuperNG6/docker-aria2/
|
||||
architectures:
|
||||
- amd64
|
||||
- arm
|
||||
- arm64
|
||||
|
||||
@@ -93,4 +93,3 @@ Artalk 是一款简单易用但功能丰富的评论系统,你可以开箱即
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
additionalProperties:
|
||||
additionalProperties:
|
||||
key: artalk
|
||||
name: Artalk
|
||||
tags:
|
||||
@@ -14,6 +14,3 @@ additionalProperties:
|
||||
website: https://artalk.js.org/
|
||||
github: https://github.com/ArtalkJS/Artalk/
|
||||
document: https://artalk.js.org/guide/intro.html
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ networks:
|
||||
|
||||
services:
|
||||
napcat:
|
||||
image: mlikiowa/napcat-docker:v4.18.5
|
||||
image: mlikiowa/napcat-docker:v4.8.124
|
||||
container_name: napcat-${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
@@ -24,7 +24,7 @@ services:
|
||||
- NAPCAT_UID=${NAPCAT_UID:-1000}
|
||||
- NAPCAT_GID=${NAPCAT_GID:-1000}
|
||||
astrbot:
|
||||
image: soulter/astrbot:v4.25.2
|
||||
image: soulter/astrbot:v4.5.0
|
||||
container_name: ${CONTAINER_NAME}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user