diff --git a/apps/woodpecker-agent/3.12.0/data.yml b/apps/woodpecker-agent/3.12.0/data.yml
new file mode 100644
index 000000000..590b45604
--- /dev/null
+++ b/apps/woodpecker-agent/3.12.0/data.yml
@@ -0,0 +1,30 @@
+additionalProperties:
+ formFields:
+ - default: "/home/woodpecker"
+ edit: true
+ envKey: WOODPECKER_ROOT_PATH
+ labelZh: 数据持久化路径
+ labelEn: Data persistence path
+ required: true
+ type: text
+ - default: "localhost:9000"
+ edit: true
+ envKey: WOODPECKER_SERVER
+ labelZh: 数据持久化路径
+ labelEn: Data persistence path
+ required: true
+ type: text
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_AGENT_SECRET
+ labelZh: 密钥
+ labelEn: Secret
+ required: true
+ type: text
+ - default: 4
+ edit: true
+ envKey: WOODPECKER_MAX_WORKFLOWS
+ labelZh: 最大任务数
+ labelEn: Maximum number of tasks
+ required: true
+ type: number
diff --git a/apps/woodpecker-agent/3.12.0/docker-compose.yml b/apps/woodpecker-agent/3.12.0/docker-compose.yml
new file mode 100644
index 000000000..fc9f5b64a
--- /dev/null
+++ b/apps/woodpecker-agent/3.12.0/docker-compose.yml
@@ -0,0 +1,21 @@
+networks:
+ 1panel-network:
+ external: true
+
+services:
+ woodpecker-agent:
+ image: woodpeckerci/woodpecker-agent:v3.12.0
+ container_name: ${CONTAINER_NAME}
+ command: agent
+ restart: always
+ networks:
+ - 1panel-network
+ env_file:
+ - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
+ - ${ENV_FILE:-/etc/1panel/envs/default.env}
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - ${WOODPECKER_ROOT_PATH}/agent:/etc/woodpecker
+ environment:
+ - HTTPS_PROXY=${HTTP_PROXY}
+ - NO_PROXY=127.0.0.1,localhost,.local,woodpecker-agent,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
diff --git a/apps/woodpecker-agent/3.12.0/envs/default.env b/apps/woodpecker-agent/3.12.0/envs/default.env
new file mode 100644
index 000000000..cd05f46e6
--- /dev/null
+++ b/apps/woodpecker-agent/3.12.0/envs/default.env
@@ -0,0 +1,2 @@
+# copyright© 2024 XinJiang Ms Studio
+ENV_FILE=.env
diff --git a/apps/woodpecker-agent/3.12.0/envs/global.env b/apps/woodpecker-agent/3.12.0/envs/global.env
new file mode 100644
index 000000000..e10989fe4
--- /dev/null
+++ b/apps/woodpecker-agent/3.12.0/envs/global.env
@@ -0,0 +1,2 @@
+# copyright© 2024 XinJiang Ms Studio
+TZ=Asia/Shanghai
diff --git a/apps/woodpecker-agent/3.12.0/scripts/init.sh b/apps/woodpecker-agent/3.12.0/scripts/init.sh
new file mode 100644
index 000000000..4679b2bcc
--- /dev/null
+++ b/apps/woodpecker-agent/3.12.0/scripts/init.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+if [ -f .env ]; then
+ source .env
+
+ # setup-1 add default values
+ CURRENT_DIR=$(pwd)
+ sed -i '/^ENV_FILE=/d' .env
+ sed -i '/^GLOBAL_ENV_FILE=/d' .env
+ echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env
+ echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env
+
+ DATA_DIR="$WOODPECKER_ROOT_PATH"
+
+ chmod -R 777 "$DATA_DIR"
+
+ echo "Check Finish."
+
+else
+ echo "Error: .env file not found."
+fi
diff --git a/apps/woodpecker-agent/3.12.0/scripts/uninstall.sh b/apps/woodpecker-agent/3.12.0/scripts/uninstall.sh
new file mode 100644
index 000000000..c86c4fbca
--- /dev/null
+++ b/apps/woodpecker-agent/3.12.0/scripts/uninstall.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+if [ -f .env ]; then
+ source .env
+
+ echo "Check Finish."
+
+else
+ echo "Error: .env file not found."
+fi
diff --git a/apps/woodpecker-agent/3.12.0/scripts/upgrade.sh b/apps/woodpecker-agent/3.12.0/scripts/upgrade.sh
new file mode 100644
index 000000000..07fb8c3fe
--- /dev/null
+++ b/apps/woodpecker-agent/3.12.0/scripts/upgrade.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+if [ -f .env ]; then
+ source .env
+
+ # setup-1 add default values
+ CURRENT_DIR=$(pwd)
+ sed -i '/^ENV_FILE=/d' .env
+ sed -i '/^GLOBAL_ENV_FILE=/d' .env
+ echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env
+ echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env
+
+ echo "Check Finish."
+
+else
+ echo "Error: .env file not found."
+fi
diff --git a/apps/woodpecker-agent/README.md b/apps/woodpecker-agent/README.md
new file mode 100644
index 000000000..0241d2386
--- /dev/null
+++ b/apps/woodpecker-agent/README.md
@@ -0,0 +1,27 @@
+# Woodpecker (啄木鸟)
+
+简单而强大的CI/CD引擎,具有很强的可扩展性
+
+
+
+
+
+## 安装说明
+
+### 密钥
+
+服务器和代理使用共享密钥来验证通信。该密钥应该是一个随机字符串,您需要对其保密。
+您可以使用 `openssl rand -hex 32` 生成这样的字符串。
+
+## 特性
+
++ 开源且免费
+
++ 基于 Docker 容器
+
++ 多工作流程
+
+---
+
+
+
diff --git a/apps/woodpecker-agent/data.yml b/apps/woodpecker-agent/data.yml
new file mode 100644
index 000000000..73cff59e0
--- /dev/null
+++ b/apps/woodpecker-agent/data.yml
@@ -0,0 +1,24 @@
+additionalProperties:
+ key: woodpecker-agent
+ name: Woodpecker Agent (啄木鸟)
+ tags:
+ - WebSite
+ - DevOps
+ - Local
+ shortDescZh: 啄木鸟是一个简单而强大的CI/CD引擎,具有很强的可扩展性
+ shortDescEn: Woodpecker is a simple, yet powerful CI/CD engine with great extensibility
+ type: website
+ crossVersionUpdate: true
+ limit: 0
+ website: https://woodpecker-ci.org/
+ github: https://github.com/woodpecker-ci/woodpecker/
+ document: https://woodpecker-ci.org/
+ architectures:
+ - 386
+ - amd64
+ - arm64
+ - ppc64le
+ - riscv64
+ - s390x
+ - arm/v6
+ - arm/v7
diff --git a/apps/woodpecker-agent/logo.png b/apps/woodpecker-agent/logo.png
new file mode 100644
index 000000000..2782883f6
Binary files /dev/null and b/apps/woodpecker-agent/logo.png differ
diff --git a/apps/woodpecker-agent/logo.svg b/apps/woodpecker-agent/logo.svg
new file mode 100644
index 000000000..1cd49a8f9
--- /dev/null
+++ b/apps/woodpecker-agent/logo.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/woodpecker-server/3.12.0/data.yml b/apps/woodpecker-server/3.12.0/data.yml
new file mode 100644
index 000000000..ce9397511
--- /dev/null
+++ b/apps/woodpecker-server/3.12.0/data.yml
@@ -0,0 +1,230 @@
+additionalProperties:
+ formFields:
+ - default: "/home/woodpecker"
+ edit: true
+ envKey: WOODPECKER_ROOT_PATH
+ labelZh: 数据持久化路径
+ labelEn: Data persistence path
+ required: true
+ type: text
+ - default: 8000
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelZh: WebUI 端口
+ labelEn: WebUI port
+ required: true
+ rule: paramPort
+ type: number
+ - default: 9000
+ edit: true
+ envKey: PANEL_APP_PORT_GRPC
+ labelZh: GRPC 端口
+ labelEn: GRPC port
+ required: true
+ rule: paramPort
+ type: number
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_AGENT_SECRET
+ labelZh: 密钥
+ labelEn: Secret
+ required: true
+ type: text
+ - default: "http://localhost:8000"
+ edit: true
+ envKey: WOODPECKER_HOST
+ labelZh: 访问地址
+ labelEn: Host Address
+ required: true
+ type: text
+ - default: "false"
+ edit: true
+ envKey: WOODPECKER_OPEN
+ labelZh: 是否允许注册
+ labelEn: Allow registration
+ required: true
+ type: select
+ values:
+ - label: 允许
+ value: "true"
+ - label: 禁止
+ value: "false"
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_ADMIN
+ labelZh: 管理员账户列表
+ labelEn: Administrator account list
+ required: false
+ type: text
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_ORGS
+ labelZh: 组织列表
+ labelEn: Organization list
+ required: false
+ type: text
+ - default: "72h"
+ edit: true
+ envKey: WOODPECKER_SESSION_EXPIRES
+ labelZh: 登录过期时间
+ labelEn: Login expiration time
+ required: true
+ type: text
+ - default: ""
+ edit: true
+ envKey: HTTP_PROXY
+ labelZh: HTTP 代理
+ labelEn: HTTP proxy
+ required: false
+ type: text
+ - default: "false"
+ edit: true
+ envKey: WOODPECKER_GITHUB
+ labelZh: GitHub 集成
+ labelEn: GitHub Forges
+ required: true
+ type: select
+ values:
+ - label: 启用
+ value: "true"
+ - label: 禁用
+ value: "false"
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_GITHUB_CLIENT
+ labelZh: GitHub 客户端 ID
+ labelEn: GitHub client ID
+ required: false
+ type: text
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_GITHUB_SECRET
+ labelZh: GitHub 客户端密钥
+ labelEn: GitHub client secret
+ required: false
+ type: text
+ - default: "false"
+ edit: true
+ envKey: WOODPECKER_GITEA
+ labelZh: Gitea 集成
+ labelEn: Gitea Forges
+ required: true
+ type: select
+ values:
+ - label: 启用
+ value: "true"
+ - label: 禁用
+ value: "false"
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_GITEA_URL
+ labelZh: Gitea 地址
+ labelEn: Gitea URL
+ required: false
+ type: text
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_GITEA_CLIENT
+ labelZh: Gitea 客户端 ID
+ labelEn: Gitea client ID
+ required: false
+ type: text
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_GITEA_SECRET
+ labelZh: Gitea 客户端密钥
+ labelEn: Gitea client secret
+ required: false
+ type: text
+ - default: "false"
+ edit: true
+ envKey: WOODPECKER_FORGEJO
+ labelZh: Forgejo 集成
+ labelEn: Forgejo Forges
+ required: true
+ type: select
+ values:
+ - label: 启用
+ value: "true"
+ - label: 禁用
+ value: "false"
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_FORGEJO_URL
+ labelZh: Forgejo 地址
+ labelEn: Forgejo URL
+ required: false
+ type: text
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_FORGEJO_CLIENT
+ labelZh: Forgejo 客户端 ID
+ labelEn: Forgejo client ID
+ required: false
+ type: text
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_FORGEJO_SECRET
+ labelZh: Forgejo 客户端密钥
+ labelEn: Forgejo client secret
+ required: false
+ type: text
+ - default: "false"
+ edit: true
+ envKey: WOODPECKER_GITLAB
+ labelZh: GitLab 集成
+ labelEn: GitLab Forges
+ required: true
+ type: select
+ values:
+ - label: 启用
+ value: "true"
+ - label: 禁用
+ value: "false"
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_GITLAB_URL
+ labelZh: GitLab 地址
+ labelEn: GitLab URL
+ required: false
+ type: text
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_GITLAB_CLIENT
+ labelZh: GitLab 客户端 ID
+ labelEn: GitLab client ID
+ required: false
+ type: text
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_GITLAB_SECRET
+ labelZh: GitLab 客户端密钥
+ labelEn: GitLab client secret
+ required: false
+ type: text
+ - default: "false"
+ edit: true
+ envKey: WOODPECKER_BITBUCKET
+ labelZh: Bitbucket 集成
+ labelEn: Bitbucket Forges
+ required: true
+ type: select
+ values:
+ - label: 启用
+ value: "true"
+ - label: 禁用
+ value: "false"
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_BITBUCKET_CLIENT
+ labelZh: Bitbucket 客户端 ID
+ labelEn: Bitbucket client ID
+ required: false
+ type: text
+ - default: ""
+ edit: true
+ envKey: WOODPECKER_BITBUCKET_SECRET
+ labelZh: Bitbucket 客户端密钥
+ labelEn: Bitbucket client secret
+ required: false
+ type: text
diff --git a/apps/woodpecker-server/3.12.0/docker-compose.yml b/apps/woodpecker-server/3.12.0/docker-compose.yml
new file mode 100644
index 000000000..97c588e5f
--- /dev/null
+++ b/apps/woodpecker-server/3.12.0/docker-compose.yml
@@ -0,0 +1,26 @@
+networks:
+ 1panel-network:
+ external: true
+
+services:
+ woodpecker-server:
+ image: woodpeckerci/woodpecker-server:v3.12.0
+ container_name: ${CONTAINER_NAME}
+ labels:
+ createdBy: "Apps"
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - ${PANEL_APP_PORT_HTTP}:8000
+ - ${PANEL_APP_PORT_GRPC}:9000
+ env_file:
+ - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env}
+ - ${ENV_FILE:-/etc/1panel/envs/default.env}
+ volumes:
+ - ${WOODPECKER_ROOT_PATH}/server:/var/lib/woodpecker/
+ environment:
+ - TZ=Asia/Shanghai
+ - WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}
+ - HTTPS_PROXY=${HTTP_PROXY}
+ - NO_PROXY=127.0.0.1,localhost,.local,woodpecker-server,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
diff --git a/apps/woodpecker-server/3.12.0/envs/default.env b/apps/woodpecker-server/3.12.0/envs/default.env
new file mode 100644
index 000000000..cd05f46e6
--- /dev/null
+++ b/apps/woodpecker-server/3.12.0/envs/default.env
@@ -0,0 +1,2 @@
+# copyright© 2024 XinJiang Ms Studio
+ENV_FILE=.env
diff --git a/apps/woodpecker-server/3.12.0/envs/global.env b/apps/woodpecker-server/3.12.0/envs/global.env
new file mode 100644
index 000000000..e10989fe4
--- /dev/null
+++ b/apps/woodpecker-server/3.12.0/envs/global.env
@@ -0,0 +1,2 @@
+# copyright© 2024 XinJiang Ms Studio
+TZ=Asia/Shanghai
diff --git a/apps/woodpecker-server/3.12.0/scripts/init.sh b/apps/woodpecker-server/3.12.0/scripts/init.sh
new file mode 100644
index 000000000..4679b2bcc
--- /dev/null
+++ b/apps/woodpecker-server/3.12.0/scripts/init.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+if [ -f .env ]; then
+ source .env
+
+ # setup-1 add default values
+ CURRENT_DIR=$(pwd)
+ sed -i '/^ENV_FILE=/d' .env
+ sed -i '/^GLOBAL_ENV_FILE=/d' .env
+ echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env
+ echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env
+
+ DATA_DIR="$WOODPECKER_ROOT_PATH"
+
+ chmod -R 777 "$DATA_DIR"
+
+ echo "Check Finish."
+
+else
+ echo "Error: .env file not found."
+fi
diff --git a/apps/woodpecker-server/3.12.0/scripts/uninstall.sh b/apps/woodpecker-server/3.12.0/scripts/uninstall.sh
new file mode 100644
index 000000000..c86c4fbca
--- /dev/null
+++ b/apps/woodpecker-server/3.12.0/scripts/uninstall.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+if [ -f .env ]; then
+ source .env
+
+ echo "Check Finish."
+
+else
+ echo "Error: .env file not found."
+fi
diff --git a/apps/woodpecker-server/3.12.0/scripts/upgrade.sh b/apps/woodpecker-server/3.12.0/scripts/upgrade.sh
new file mode 100644
index 000000000..07fb8c3fe
--- /dev/null
+++ b/apps/woodpecker-server/3.12.0/scripts/upgrade.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+if [ -f .env ]; then
+ source .env
+
+ # setup-1 add default values
+ CURRENT_DIR=$(pwd)
+ sed -i '/^ENV_FILE=/d' .env
+ sed -i '/^GLOBAL_ENV_FILE=/d' .env
+ echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env
+ echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env
+
+ echo "Check Finish."
+
+else
+ echo "Error: .env file not found."
+fi
diff --git a/apps/woodpecker-server/README.md b/apps/woodpecker-server/README.md
new file mode 100644
index 000000000..0241d2386
--- /dev/null
+++ b/apps/woodpecker-server/README.md
@@ -0,0 +1,27 @@
+# Woodpecker (啄木鸟)
+
+简单而强大的CI/CD引擎,具有很强的可扩展性
+
+
+
+
+
+## 安装说明
+
+### 密钥
+
+服务器和代理使用共享密钥来验证通信。该密钥应该是一个随机字符串,您需要对其保密。
+您可以使用 `openssl rand -hex 32` 生成这样的字符串。
+
+## 特性
+
++ 开源且免费
+
++ 基于 Docker 容器
+
++ 多工作流程
+
+---
+
+
+
diff --git a/apps/woodpecker-server/data.yml b/apps/woodpecker-server/data.yml
new file mode 100644
index 000000000..cef164f34
--- /dev/null
+++ b/apps/woodpecker-server/data.yml
@@ -0,0 +1,24 @@
+additionalProperties:
+ key: woodpecker-server
+ name: Woodpecker Server (啄木鸟)
+ tags:
+ - WebSite
+ - DevOps
+ - Local
+ shortDescZh: 啄木鸟是一个简单而强大的CI/CD引擎,具有很强的可扩展性
+ shortDescEn: Woodpecker is a simple, yet powerful CI/CD engine with great extensibility
+ type: website
+ crossVersionUpdate: true
+ limit: 0
+ website: https://woodpecker-ci.org/
+ github: https://github.com/woodpecker-ci/woodpecker/
+ document: https://woodpecker-ci.org/
+ architectures:
+ - 386
+ - amd64
+ - arm64
+ - ppc64le
+ - riscv64
+ - s390x
+ - arm/v6
+ - arm/v7
diff --git a/apps/woodpecker-server/logo.png b/apps/woodpecker-server/logo.png
new file mode 100644
index 000000000..2782883f6
Binary files /dev/null and b/apps/woodpecker-server/logo.png differ
diff --git a/apps/woodpecker-server/logo.svg b/apps/woodpecker-server/logo.svg
new file mode 100644
index 000000000..1cd49a8f9
--- /dev/null
+++ b/apps/woodpecker-server/logo.svg
@@ -0,0 +1,10 @@
+