diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 6d5d3b3..cb10679 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -58,6 +58,7 @@ organization = Organization mirror = Mirror issue_milestone = Milestone new_repo = New Repository +new_repo_from_template=Create from Template new_migrate = New Migration new_mirror = New Mirror new_fork = New Repository Fork @@ -4003,4 +4004,4 @@ validation_error = Configuration validation error required_field = Required field invalid_value = Invalid value out_of_range = Out of range -invalid_format = Invalid format \ No newline at end of file +invalid_format = Invalid format diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index e59c1e7..c39d89a 100644 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -56,6 +56,7 @@ organization=组织 mirror=镜像 issue_milestone=里程碑 new_repo=创建仓库 +new_repo_from_template=从模板创建仓库 new_migrate=迁移外部仓库 new_mirror=创建新的镜像 new_fork=派生新仓库 @@ -3990,4 +3991,4 @@ validation_error=配置验证错误 required_field=必填字段 invalid_value=无效值 out_of_range=超出范围 -invalid_format=格式无效 \ No newline at end of file +invalid_format=格式无效 diff --git a/services/appstore/examples/mengningsoftware.json b/services/appstore/examples/mengningsoftware.json new file mode 100644 index 0000000..b6946c9 --- /dev/null +++ b/services/appstore/examples/mengningsoftware.json @@ -0,0 +1,134 @@ +{ + "id": "mnsoftware", + "name": "Mengningsoftware", + "description": "High-performance HTTP server and reverse proxy", + "category": "web-server", + "tags": ["web", "proxy", "http", "server"], + "icon": "https://www.mengning.com.cn/assets/images/mengninglogo.png", + "author": "Mengningsoftware Inc", + "website": "https://www.mengning.com.cn/", + "repository": "https://devstar.cn/lat5211/devstar_introduction.git", + "license": "BSD-2-Clause", + "version": "1.0.0", + "deployment_type": "both", + "config": { + "schema": { + "port": { + "type": "int", + "description": "Port number for the web server", + "required": true, + "min": 1, + "max": 65535, + "placeholder": "Enter port number" + }, + "server_name": { + "type": "string", + "description": "Server name for virtual host", + "required": false, + "pattern": "^[a-zA-Z0-9.-]+$", + "placeholder": "Enter server name" + }, + "ssl_enabled": { + "type": "bool", + "description": "Enable SSL/TLS support", + "required": false, + "help": "Enable HTTPS support" + }, + "log_level": { + "type": "select", + "description": "Logging level", + "required": false, + "options": ["debug", "info", "warn", "error"] + } + }, + "default": { + "port": 80, + "server_name": "localhost", + "ssl_enabled": false, + "log_level": "info" + } + }, + "requirements": { + "min_memory": "128MB", + "min_cpu": "1 core", + "min_storage": "100MB", + "os": "linux", + "arch": "x86_64" + }, + "deploy": { + "type": "docker", + "docker": { + "image": "crpi-pqfsp88s5zx2zwfq.cn-hangzhou.personal.cr.aliyuncs.com/devstar/devstar_introduction", + "tag": "1.24.0", + "ports": [ + { + "host_port": 80, + "container_port": 80, + "protocol": "tcp", + "name": "http" + }, + { + "host_port": 443, + "container_port": 443, + "protocol": "tcp", + "name": "https" + } + ], + "volumes": [ + { + "host_path": "/var/log/nginx", + "container_path": "/var/log/nginx", + "type": "bind" + }, + { + "host_path": "/etc/nginx/conf.d", + "container_path": "/etc/nginx/conf.d", + "type": "bind" + } + ], + "environment": { + "NGINX_VERSION": "1.24.0" + }, + "resources": { + "cpu": "500m", + "memory": "512Mi" + } + }, + "kubernetes": { + "namespace": "web-servers", + "replicas": 2, + "image": "crpi-pqfsp88s5zx2zwfq.cn-hangzhou.personal.cr.aliyuncs.com/devstar/devstar_introduction", + "tag": "1.24.0", + "ports": [ + { + "container_port": 80, + "protocol": "tcp", + "name": "http" + } + ], + "volumes": [ + { + "container_path": "/var/log/nginx", + "type": "emptyDir" + } + ], + "environment": { + "NGINX_VERSION": "1.24.0" + }, + "resources": { + "cpu": "500m", + "memory": "512Mi" + }, + "service": { + "type": "ClusterIP", + "ports": [ + { + "container_port": 80, + "protocol": "tcp", + "name": "http" + } + ] + } + } + } +} diff --git a/templates/base/head_navbar.tmpl b/templates/base/head_navbar.tmpl index d2ffce6..b35a98a 100644 --- a/templates/base/head_navbar.tmpl +++ b/templates/base/head_navbar.tmpl @@ -73,6 +73,9 @@ {{svg "octicon-plus"}} {{ctx.Locale.Tr "new_repo"}} + + {{svg "octicon-plus-circle"}} {{ctx.Locale.Tr "new_repo_from_template"}} + {{if not .DisableMigrations}} {{svg "octicon-repo-push"}} {{ctx.Locale.Tr "new_migrate"}} diff --git a/web_src/js/svg.ts b/web_src/js/svg.ts index 50c9536..16fd2b1 100644 --- a/web_src/js/svg.ts +++ b/web_src/js/svg.ts @@ -57,6 +57,7 @@ import octiconMirror from '../../public/assets/img/svg/octicon-mirror.svg'; import octiconOrganization from '../../public/assets/img/svg/octicon-organization.svg'; import octiconPlay from '../../public/assets/img/svg/octicon-play.svg'; import octiconPlus from '../../public/assets/img/svg/octicon-plus.svg'; +import octiconPlusCircle from '../../public/assets/img/svg/octicon-plus-circle.svg'; import octiconProject from '../../public/assets/img/svg/octicon-project.svg'; import octiconQuote from '../../public/assets/img/svg/octicon-quote.svg'; import octiconRepo from '../../public/assets/img/svg/octicon-repo.svg'; @@ -136,6 +137,7 @@ const svgs = { 'octicon-organization': octiconOrganization, 'octicon-play': octiconPlay, 'octicon-plus': octiconPlus, + 'octicon-plus-circle': octiconPlusCircle, 'octicon-project': octiconProject, 'octicon-quote': octiconQuote, 'octicon-repo': octiconRepo,