🌴 Sync 2026-03-05 23:51:42

This commit is contained in:
github-actions[bot] committed 2026-03-05 23:51:42 +08:00
1 parent 97c049ed0a
commit 0acff03804
14253 files changed
+3893239

No files matched your search

+18
View File
@@ -0,0 +1,18 @@
include $(TOPDIR)/rules.mk
PKG_VERSION:=1.0.3-20240822
PKG_RELEASE:=1
LUCI_TITLE:=LuCI support for Gogs
LUCI_PKGARCH:=all
LUCI_DEPENDS:=+lsblk +docker +dockerd +luci-lib-taskd
define Package/luci-app-gogs/conffiles
/etc/config/gogs
endef
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature
+7
View File
@@ -0,0 +1,7 @@
module("luci.controller.gogs", package.seeall)
function index()
entry({"admin", "services", "gogs"}, alias("admin", "services", "gogs", "config"), _("Gogs"), 30).dependent = true
entry({"admin", "services", "gogs", "config"}, cbi("gogs"))
end
+51
View File
@@ -0,0 +1,51 @@
--[[
LuCI - Lua Configuration Interface
]]--
local taskd = require "luci.model.tasks"
local gogs_model = require "luci.model.gogs"
local m, s, o
m = taskd.docker_map("gogs", "gogs", "/usr/libexec/istorec/gogs.sh",
translate("Gogs"),
translate("Gogs is a painless self-hosted Git service.")
.. translate("Official website:") .. ' <a href=\"https://gogs.io/\" target=\"_blank\">https://gogs.io/</a>')
s = m:section(SimpleSection, translate("Service Status"), translate("Gogs status:"))
s:append(Template("gogs/status"))
s = m:section(TypedSection, "main", translate("Setup"), translate("The following parameters will only take effect during installation or upgrade:"))
s.addremove=false
s.anonymous=true
o = s:option(Value, "http_port", translate("HTTP Port").."<b>*</b>")
o.default = "3001"
o.datatype = "string"
o.rmempty = false
o = s:option(Value, "ssh_port", translate("SSH Port").."<b>*</b>")
o.default = "3022"
o.datatype = "string"
o.rmempty = false
o = s:option(Value, "image_name", translate("Image").."<b>*</b>")
o.rmempty = false
o.datatype = "string"
o:value("gogs/gogs:latest", "gogs/gogs:latest")
o:value("gogs/gogs:0.12", "gogs/gogs:0.12")
o.default = "gogs/gogs:latest"
local blocks = gogs_model.blocks()
local home = gogs_model.home()
o = s:option(Value, "config_path", translate("Config path").."<b>*</b>")
o.rmempty = false
o.datatype = "string"
local paths, default_path = gogs_model.find_paths(blocks, home, "Configs")
for _, val in pairs(paths) do
o:value(val, val)
end
o.default = default_path
return m
+54
View File
@@ -0,0 +1,54 @@
local util = require "luci.util"
local jsonc = require "luci.jsonc"
local gogs = {}
gogs.blocks = function()
local f = io.popen("lsblk -s -f -b -o NAME,FSSIZE,MOUNTPOINT --json", "r")
local vals = {}
if f then
local ret = f:read("*all")
f:close()
local obj = jsonc.parse(ret)
for _, val in pairs(obj["blockdevices"]) do
local fsize = val["fssize"]
if fsize ~= nil and string.len(fsize) > 10 and val["mountpoint"] then
-- fsize > 1G
vals[#vals+1] = val["mountpoint"]
end
end
end
return vals
end
gogs.home = function()
local uci = require "luci.model.uci".cursor()
local home_dirs = {}
home_dirs["main_dir"] = uci:get_first("quickstart", "main", "main_dir", "/root")
home_dirs["Configs"] = uci:get_first("quickstart", "main", "conf_dir", home_dirs["main_dir"].."/Configs")
home_dirs["Public"] = uci:get_first("quickstart", "main", "dl_dir", home_dirs["main_dir"].."/Public")
home_dirs["Caches"] = uci:get_first("quickstart", "main", "tmp_dir", home_dirs["main_dir"].."/Caches")
return home_dirs
end
gogs.find_paths = function(blocks, home_dirs, path_name)
local default_path = ''
local configs = {}
default_path = home_dirs[path_name] .. "/Gogs"
if #blocks == 0 then
table.insert(configs, default_path)
else
for _, val in pairs(blocks) do
table.insert(configs, val .. "/" .. path_name .. "/Gogs")
end
local without_conf_dir = "/root/" .. path_name .. "/Gogs"
if default_path == without_conf_dir then
default_path = configs[1]
end
end
return configs, default_path
end
return gogs
+31
View File
@@ -0,0 +1,31 @@
<%
local util = require "luci.util"
local container_status = util.trim(util.exec("/usr/libexec/istorec/gogs.sh status"))
local container_install = (string.len(container_status) > 0)
local container_running = container_status == "running"
-%>
<div class="cbi-value">
<label class="cbi-value-title"><%:Status%></label>
<div class="cbi-value-field">
<% if container_running then %>
<button class="cbi-button cbi-button-success" disabled="true"><%:Gogs is running%></button>
<% else %>
<button class="cbi-button cbi-button-negative" disabled="true"><%:Gogs is not running%></button>
<% end %>
</div>
</div>
<%
if container_running then
local port=util.trim(util.exec("/usr/libexec/istorec/gogs.sh port"))
if port == "" then
port="3001"
end
-%>
<div class="cbi-value cbi-value-last">
<label class="cbi-value-title">&nbsp;</label>
<div class="cbi-value-field">
<input type="button" class="btn cbi-button cbi-button-apply" name="start" value="<%:Open Gogs%>" onclick="window.open('http://'+location.hostname+':<%=port%>', '_blank')">
</div>
</div>
<% end %>
+42
View File
@@ -0,0 +1,42 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "Official website:"
msgstr "官方网站:"
msgid "Gogs is a painless self-hosted Git service."
msgstr "Gogs 是一个轻松易用的 Git 服务。"
msgid "Config path"
msgstr "配置文件路径"
msgid "HTTP Port"
msgstr "HTTP 端口"
msgid "SSH Port"
msgstr "SSH 端口"
msgid "Service Status"
msgstr "服务状态"
msgid "Gogs status:"
msgstr "Gogs 的状态信息如下:"
msgid "Setup"
msgstr "安装配置"
msgid "The following parameters will only take effect during installation or upgrade:"
msgstr "以下参数只在安装或者升级时才会生效:"
msgid "Status"
msgstr "状态"
msgid "Gogs is running"
msgstr "Gogs 运行中"
msgid "Gogs is not running"
msgstr "Gogs 未运行"
msgid "Open Gogs"
msgstr "打开 Gogs"
+1
View File
@@ -0,0 +1 @@
zh-cn
+6
View File
@@ -0,0 +1,6 @@
config main
option 'http_port' '3001'
option 'ssh_port' '3022'
option 'image_name' 'gogs/gogs:latest'
option 'config_path' ''
+79
View File
@@ -0,0 +1,79 @@
#!/bin/sh
# Author Xiaobao(xiaobao@linkease.com)
ACTION=${1}
shift 1
do_install() {
local http_port=`uci get gogs.@main[0].http_port 2>/dev/null`
local ssh_port=`uci get gogs.@main[0].ssh_port 2>/dev/null`
local image_name=`uci get gogs.@main[0].image_name 2>/dev/null`
local config=`uci get gogs.@main[0].config_path 2>/dev/null`
[ -z "$image_name" ] && image_name="gogs/gogs:latest"
echo "docker pull ${image_name}"
docker pull ${image_name}
docker rm -f gogs
if [ -z "$config" ]; then
echo "config path is empty!"
exit 1
fi
if [ -z "$http_port" ]; then
http_port=3001
fi
if [ -z "$ssh_port" ]; then
ssh_port=3022
fi
local cmd="docker run --restart=unless-stopped -d -v \"$config:/data\" \
--dns=172.17.0.1 \
-p $http_port:3000 \
-p $ssh_port:22 "
local tz="`uci get system.@system[0].zonename | sed 's/ /_/g'`"
[ -z "$tz" ] || cmd="$cmd -e TZ=$tz"
cmd="$cmd -v /mnt:/mnt"
mountpoint -q /mnt && cmd="$cmd:rslave"
cmd="$cmd --name gogs \"$image_name\""
echo "$cmd"
eval "$cmd"
}
usage() {
echo "usage: $0 sub-command"
echo "where sub-command is one of:"
echo " install Install the gogs"
echo " upgrade Upgrade the gogs"
echo " rm/start/stop/restart Remove/Start/Stop/Restart the gogs"
echo " status Gogs status"
echo " port Gogs port"
}
case ${ACTION} in
"install")
do_install
;;
"upgrade")
do_install
;;
"rm")
docker rm -f gogs
;;
"start" | "stop" | "restart")
docker ${ACTION} gogs
;;
"status")
docker ps --all -f 'name=^/gogs$' --format '{{.State}}'
;;
"port")
uci -q get gogs.@main[0].http_port 2>/dev/null
;;
*)
usage
exit 1
;;
esac
@@ -0,0 +1,11 @@
{
"luci-app-gogs": {
"description": "Grant UCI access for luci-app-gogs",
"read": {
"uci": [ "gogs" ]
},
"write": {
"uci": [ "gogs" ]
}
}
}