1
0
forked from devstar/docs

Merge pull request '重构了项目目录结构,并初步整理了文档结构' (#1) from mengning into main

Reviewed-on: devstar/docs#1
This commit is contained in:
2025-12-01 05:20:56 +00:00
61 changed files with 4030 additions and 3423 deletions

View File

@@ -0,0 +1,25 @@
{
"name": "dev-vitepress",
"image": "node:20-alpine",
"customizations": {
"vscode": {
"settings": {},
"extensions": [
"vue.volar",
"vue.vscode-typescript-vue-plugin",
"bradlc.vscode-tailwindcss",
"esbenp.prettier-vscode"
]
}
},
"portsAttributes": {
"5173": {
"label": "vitepress debug",
"onAutoForward": "notify"
}
},
"postCreateCommand": "apk add git && npm install && npm add -D vitepress",
"postAttachCommand": "npm run dev"
}

View File

@@ -1,53 +1,53 @@
name: CI/CD Pipeline for mengning.com.cn name: CI/CD Pipeline for mengning.com.cn
on: on:
push: push:
branches: branches:
- main - main
pull_request: pull_request:
branches: branches:
- main - main
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: container:
image: gitea/runner-images:ubuntu-latest image: gitea/runner-images:ubuntu-latest
steps: steps:
- name: 拉取代码 - name: 拉取代码
uses: https://devstar.cn/actions/checkout@v4 uses: https://devstar.cn/actions/checkout@v4
with: with:
fetch-depth: 0 fetch-depth: 0
- name: 安装依赖 - name: 安装依赖
working-directory: working-directory:
run: | run: |
npm install npm install
npm add -D vitepress npm add -D vitepress
- name: 构建项目 - name: 构建项目
working-directory: working-directory:
run: | run: |
chmod +x node_modules/.bin/vitepress chmod +x node_modules/.bin/vitepress
npm run docs:build npm run build
- name: 构建 Docker 镜像 - name: 构建 Docker 镜像
run: | run: |
docker build -t devstar-docs:${{ gitea.sha }} . docker build -t devstar-docs:${{ gitea.sha }} .
- name: 登录 Docker Registry 并推送镜像 - name: 登录 Docker Registry 并推送镜像
run: | run: |
echo "${{ secrets.DOCKER_REGISTRY_PASSWORD }}" | docker login -u ${{ secrets.DOCKER_REGISTRY_USERNAME }} ${{ vars.DOCKER_REGISTRY_ADDRESS }} --password-stdin echo "${{ secrets.DOCKER_REGISTRY_PASSWORD }}" | docker login -u ${{ secrets.DOCKER_REGISTRY_USERNAME }} ${{ vars.DOCKER_REGISTRY_ADDRESS }} --password-stdin
docker tag devstar-docs:${{ gitea.sha }} ${{ vars.DOCKER_REGISTRY_ADDRESS }}/devstar/devstar-studio-docs:${{ gitea.sha }} docker tag devstar-docs:${{ gitea.sha }} ${{ vars.DOCKER_REGISTRY_ADDRESS }}/devstar/devstar-studio-docs:${{ gitea.sha }}
docker tag devstar-docs:${{ gitea.sha }} ${{ vars.DOCKER_REGISTRY_ADDRESS }}/devstar/devstar-studio-docs:latest docker tag devstar-docs:${{ gitea.sha }} ${{ vars.DOCKER_REGISTRY_ADDRESS }}/devstar/devstar-studio-docs:latest
docker push ${{ vars.DOCKER_REGISTRY_ADDRESS }}/devstar/devstar-studio-docs:${{ gitea.sha }} docker push ${{ vars.DOCKER_REGISTRY_ADDRESS }}/devstar/devstar-studio-docs:${{ gitea.sha }}
docker push ${{ vars.DOCKER_REGISTRY_ADDRESS }}/devstar/devstar-studio-docs:latest docker push ${{ vars.DOCKER_REGISTRY_ADDRESS }}/devstar/devstar-studio-docs:latest
- name: 📝 Update mengning.com.cn - name: 📝 Update mengning.com.cn
run: | run: |
curl -LO https://mirrors.ustc.edu.cn/kubernetes/core%3A/stable%3A/v1.28/deb/amd64/kubectl_1.28.0-1.1_amd64.deb curl -LO https://mirrors.ustc.edu.cn/kubernetes/core%3A/stable%3A/v1.28/deb/amd64/kubectl_1.28.0-1.1_amd64.deb
sudo dpkg -i kubectl_1.28.0-1.1_amd64.deb sudo dpkg -i kubectl_1.28.0-1.1_amd64.deb
kubectl config set-cluster remote-cluster --server=${{ secrets.K8S_URL }} --insecure-skip-tls-verify=true kubectl config set-cluster remote-cluster --server=${{ secrets.K8S_URL }} --insecure-skip-tls-verify=true
kubectl config set-credentials token-user --token=${{ secrets.K8S_TOKEN }} kubectl config set-credentials token-user --token=${{ secrets.K8S_TOKEN }}
kubectl config set-context remote-context --cluster=remote-cluster --user=token-user kubectl config set-context remote-context --cluster=remote-cluster --user=token-user
kubectl config use-context remote-context kubectl config use-context remote-context
kubectl set image deployment/devstar-docs-app devstar-docs=${{ vars.DOCKER_REGISTRY_ADDRESS }}/devstar/devstar-studio-docs:latest -n app kubectl set image deployment/devstar-docs-app devstar-docs=${{ vars.DOCKER_REGISTRY_ADDRESS }}/devstar/devstar-studio-docs:latest -n app

32
.gitignore vendored
View File

@@ -1,17 +1,17 @@
# VitePress # VitePress
docs/.vitepress/dist/ .vitepress/dist/
docs/.vitepress/cache/ .vitepress/cache/
docs/.vitepress/.temp/ .vitepress/.temp/
# Node.js # Node.js
node_modules/ node_modules/
npm-debug.log* npm-debug.log*
yarn-debug.log* yarn-debug.log*
yarn-error.log* yarn-error.log*
# Environment # Environment
.env .env
.env.local .env.local
.env.development.local .env.development.local
.env.test.local .env.test.local
.env.production.local .env.production.local

View File

@@ -1,300 +1,340 @@
import { defineConfig } from 'vitepress' import { defineConfig } from 'vitepress'
import type { DefaultTheme } from 'vitepress' import type { DefaultTheme } from 'vitepress'
import { set_sidebar } from "../utils/auto_sidebar.js";
// https://vitepress.dev/reference/site-config
// https://vitepress.dev/reference/site-config export default defineConfig({
export default defineConfig({ title: "梦宁软件",
title: "梦宁软件", head: [
head: [ ['link', { rel: 'stylesheet', href: '/theme/style.css' }], // 引入CSS
['link', { rel: 'stylesheet', href: '/theme/style.css' }], // 引入CSS ['link', { rel: 'icon', href: '/mengninglogo.png' }] // 设置favicon
['link', { rel: 'icon', href: '/mengninglogo.png' }] // 设置favicon ],
], description: "梦宁软件",
description: "梦宁软件", themeConfig: {
themeConfig: { // https://vitepress.dev/reference/default-theme-config
// https://vitepress.dev/reference/default-theme-config outlineTitle: '目录',
outlineTitle: '目录', outline: [2, 6],
outline: [2, 6], logo: {
logo: { src: '/mnsoftware.png',
src: '/mnsoftware.png', },
}, nav: [
nav: [ // { text: '文档', link: '/src/document/index' },
// { text: '文档', link: '/document/index' }, //
// { text: 'DevStar', link: '/src/devstar' },
{ text: 'Devstar', link: '/devstar' }, { text: '编译加速', link: '/src/compile' },
{ text: 'Cloudbuild', link: '/cloudbuild' }, { text: '虚拟仿真', link: '/src/simulator' },
{ text: 'Simulator', link: '/simulator' }, { text: 'Enterprise', link: '/src/enterprise' },
{ text: 'Enterprise', link: '/enterprise' }, ],
], sidebar: {
sidebar: { '/src/devstar/': sidebarDevStar(), // 直接返回 SidebarItem[]
'/devstar/': sidebarDocument(), // 直接返回 SidebarItem[] '/src/compile/': sidebarCompiling(),
'/enterprise/': sidebarEnterprise() '/src/simulator/': sidebarSimulator(),
}, '/src/enterprise/': sidebarEnterprise()
socialLinks: [ },
{ icon: 'github', link: ' https://github.com/mengning/DevStar' } socialLinks: [
], { icon: 'github', link: ' https://github.com/mengning/DevStar' }
// footer: [ ],
// copyright: 'Copyright © 2025-present devstar contributors', // footer: [
// [Copyright © 2025-present Devstar Contributors](https://github.com/mengning/DevStar) // copyright: 'Copyright © 2025-present devstar contributors',
// { copyright: 'Copyright © 2025-present devstar contributors', link: 'https://github.com/mengning/DevStar' } // [Copyright © 2025-present DevStar Contributors](https://github.com/mengning/DevStar)
// ] as any, // { copyright: 'Copyright © 2025-present devstar contributors', link: 'https://github.com/mengning/DevStar' }
// footer: { // ] as any,
// message: '<a href="/copyright/index">苏ICP备2024068144号-1 ©Mengning Software. 2025- All rights reserved.</a>', // footer: {
// copyright: '' // message: '<a href="/copyright/index">苏ICP备2024068144号-1 ©Mengning Software. 2025- All rights reserved.</a>',
// }, // copyright: ''
// 设置搜索框的样式 // },
search: { // 设置搜索框的样式
provider: "local", search: {
options: { provider: "local",
translations: { options: {
button: { translations: {
buttonText: "搜索文档", button: {
buttonAriaLabel: "搜索文档", buttonText: "搜索文档",
}, buttonAriaLabel: "搜索文档",
modal: { },
noResultsText: "无法找到相关结果", modal: {
resetButtonTitle: "清除查询条件", noResultsText: "无法找到相关结果",
footer: { resetButtonTitle: "清除查询条件",
selectText: "选择", footer: {
navigateText: "切换", selectText: "选择",
}, navigateText: "切换",
}, },
}, },
}, },
}, },
} },
}) }
})
function sidebarDocument(): DefaultTheme.SidebarItem[] {
return [ function sidebarDevStar(): DefaultTheme.SidebarItem[] {
{ return [
text: 'Devstar是什么', {
link: '/devstar/index', text: 'DevStar Studio',
items: [] link: '/src/devstar/index',
} as any, items: [
{ ]
text: '安装', } as any,
collapsible: true, // 使整个组可折叠 {
collapsed: true, // 默认展开 text: 'AI+ DevOps',
items: [ link: '/src/devstar/ai-devops',
{ text: '对比Gitea与其它Git托管工具', link: 'https://docs.gitea.com/zh-cn/installation/comparison' }, collapsible: true, // 使整个组可折叠
{ text: '数据库准备', link: 'https://docs.gitea.com/zh-cn/installation/database-prep' }, collapsed: false, // 默认展开
// { text: '数据库准备', link: '/document/installation/from-source' }, items: [
{ text: '使用shell脚本安装', link: '/devstar/installation/install-via-shell-script' }, { text: 'AI Code Review', link: '/src/devstar/ai-code-reveiw' },
{ text: '使用二进制文件安装', link: 'https://docs.gitea.com/zh-cn/installation/install-from-binary' }, { text: 'MCP Server', link: '/src/devstar/mcp-server' },
{ text: '包管理器安装', link: 'https://docs.gitea.com/zh-cn/installation/install-from-package' }, ]
{ text: '使用源代码安装', link: 'https://docs.gitea.com/zh-cn/installation/install-from-source' }, } as any,
{ text: '在Linux中以service方式运行', link: 'https://docs.gitea.com/zh-cn/installation/linux-service' },// {
{ text: '注册为Windows服务', link: 'https://docs.gitea.com/zh-cn/installation/windows-service' }, text: '安装',
{ text: '使用Docker安装(rootless)', link: 'https://docs.gitea.com/zh-cn/installation/install-with-docker-rootless' }, collapsible: true, // 使整个组可折叠
{ text: '使用Docker安装', link: 'https://docs.gitea.com/zh-cn/installation/install-with-docker' }, collapsed: false, // 默认展开
{ text: '在Kubernetes中安装Gitea', link: 'https://docs.gitea.com/zh-cn/installation/install-on-kubernetes' }, items: [
{ text: '在云服务器上安装Gitea', link: 'https://docs.gitea.com/zh-cn/installation/install-on-cloud-provider' }, { text: '快速部署指南', link: 'src/devstar/install/quick-start' },
{ text: '从旧版Gitea升级', link: 'https://docs.gitea.com/zh-cn/installation/upgrade-from-gitea' }, { text: '云原生环境部署指南', link: 'src/devstar/install/install-k8s' },
] { text: 'app.ini配置文件', link: 'src/devstar/install/app-ini' },
} as any, ]
{ } as any,
text: '管理', {
collapsible: true, // 使整个组可折叠 text: '管理',
collapsed: true, // 默认展开 collapsible: true, // 使整个组可折叠
items: [ collapsed: true, // 默认展开
{ text: '命令行', link: 'https://docs.gitea.com/zh-cn/administration/command-line' }, items: [
{ text: '认证', link: 'https://docs.gitea.com/zh-cn/administration/authentication' }, { text: '命令行', link: 'https://docs.gitea.com/zh-cn/administration/command-line' },
{ text: '环境变量清单', link: 'https://docs.gitea.com/zh-cn/administration/environment-variables' }, { text: '认证', link: 'https://docs.gitea.com/zh-cn/administration/authentication' },
{ text: '备份与恢复', link: 'https://docs.gitea.com/zh-cn/administration/backup-and-restore' }, { text: '环境变量清单', link: 'https://docs.gitea.com/zh-cn/administration/environment-variables' },
{ text: 'Email设置', link: 'https://docs.gitea.com/zh-cn/administration/email-setup' }, { text: '备份与恢复', link: 'https://docs.gitea.com/zh-cn/administration/backup-and-restore' },
{ text: 'Git LFS设置', link: 'https://docs.gitea.com/zh-cn/administration/git-lfs-setup' }, { text: 'Email设置', link: 'https://docs.gitea.com/zh-cn/administration/email-setup' },
{ text: 'HTTPS配置', link: 'https://docs.gitea.com/zh-cn/administration/https-setup' }, { text: 'Git LFS设置', link: 'https://docs.gitea.com/zh-cn/administration/git-lfs-setup' },
{ text: '设置Fail2ban', link: 'https://docs.gitea.com/zh-cn/administration/fail2ban-setup' }, { text: 'HTTPS配置', link: 'https://docs.gitea.com/zh-cn/administration/https-setup' },
{ text: '反向代理', link: 'https://docs.gitea.com/zh-cn/administration/reverse-proxies' }, { text: '设置Fail2ban', link: 'https://docs.gitea.com/zh-cn/administration/fail2ban-setup' },
{ text: '嵌入资源提取工具', link: 'https://docs.gitea.com/zh-cn/administration/cmd-embedded' }, { text: '反向代理', link: 'https://docs.gitea.com/zh-cn/administration/reverse-proxies' },
{ text: '配置说明', link: 'https://docs.gitea.com/zh-cn/administration/config-cheat-sheet' }, { text: '嵌入资源提取工具', link: 'https://docs.gitea.com/zh-cn/administration/cmd-embedded' },
{ text: '日志配置', link: 'https://docs.gitea.com/zh-cn/administration/logging-config' }, { text: '配置说明', link: 'https://docs.gitea.com/zh-cn/administration/config-cheat-sheet' },
{ text: '邮件模板', link: 'https://docs.gitea.com/zh-cn/administration/mail-templates' }, { text: '日志配置', link: 'https://docs.gitea.com/zh-cn/administration/logging-config' },
{ text: '仓库索引器', link: 'https://docs.gitea.com/zh-cn/administration/repo-indexer' }, { text: '邮件模板', link: 'https://docs.gitea.com/zh-cn/administration/mail-templates' },
{ text: 'GPG提交签名', link: 'https://docs.gitea.com/zh-cn/administration/signing' }, { text: '仓库索引器', link: 'https://docs.gitea.com/zh-cn/administration/repo-indexer' },
{ text: '外部渲染器', link: 'https://docs.gitea.com/zh-cn/administration/external-renderers' }, { text: 'GPG提交签名', link: 'https://docs.gitea.com/zh-cn/administration/signing' },
{ text: '搜索引擎索引', link: 'https://docs.gitea.com/zh-cn/administration/search-engines-indexation' }, { text: '外部渲染器', link: 'https://docs.gitea.com/zh-cn/administration/external-renderers' },
{ text: '自定义Gitea配置', link: 'https://docs.gitea.com/zh-cn/administration/customizing-gitea' }, { text: '搜索引擎索引', link: 'https://docs.gitea.com/zh-cn/administration/search-engines-indexation' },
{ text: '添加法律页面', link: 'https://docs.gitea.com/zh-cn/administration/adding-legal-pages' } { text: '自定义Gitea配置', link: 'https://docs.gitea.com/zh-cn/administration/customizing-gitea' },
] { text: '添加法律页面', link: 'https://docs.gitea.com/zh-cn/administration/adding-legal-pages' }
} as any, ]
{ } as any,
text: '使用', {
collapsible: true, // 使整个组可折叠 text: '使用',
collapsed: true, // 默认展开 collapsible: true, // 使整个组可折叠
items: [ collapsed: true, // 默认展开
{ text: '结合AI快速开始', link: 'devstar/usage/quick-start-with-ai' }, items: [
{ { text: 'devcontainer', link: 'src/devstar/usage/quick-start-with-ai' },
text: 'Actions', {
collapsible: true, // 使整个组可折叠 text: 'Actions',
collapsed: false, // 默认展开 collapsible: true, // 使整个组可折叠
items: [ collapsed: false, // 默认展开
{ text: 'Overview', link: 'https://docs.gitea.com/zh-cn/usage/actions/overview' }, items: [
{ text: '快速入门', link: 'https://docs.gitea.com/zh-cn/usage/actions/quickstart' }, { text: 'Overview', link: 'https://docs.gitea.com/zh-cn/usage/actions/overview' },
{ text: '与GitHub Actions的对比', link: 'https://docs.gitea.com/zh-cn/usage/actions/comparison' }, { text: '快速入门', link: 'https://docs.gitea.com/zh-cn/usage/actions/quickstart' },
{ text: 'Act Runner', link: 'https://docs.gitea.com/zh-cn/usage/actions/act-runner' }, { text: '与GitHub Actions的对比', link: 'https://docs.gitea.com/zh-cn/usage/actions/comparison' },
{ text: '变量', link: 'https://docs.gitea.com/zh-cn/usage/actions/actions-variables' }, { text: 'Act Runner', link: 'https://docs.gitea.com/zh-cn/usage/actions/act-runner' },
{ text: 'Gitea Actions设计', link: 'https://docs.gitea.com/zh-cn/usage/actions/design' }, { text: '变量', link: 'https://docs.gitea.com/zh-cn/usage/actions/actions-variables' },
{ text: '密钥管理', link: 'https://docs.gitea.com/zh-cn/usage/actions/secrets' }, { text: 'Gitea Actions设计', link: 'https://docs.gitea.com/zh-cn/usage/actions/design' },
{ text: 'Gitea Actions常见问题解答', link: 'https://docs.gitea.com/zh-cn/usage/actions/faq' }, { text: '密钥管理', link: 'https://docs.gitea.com/zh-cn/usage/actions/secrets' },
{ text: 'Badge', link: 'https://docs.gitea.com/zh-cn/usage/actions/badge' } { text: 'Gitea Actions常见问题解答', link: 'https://docs.gitea.com/zh-cn/usage/actions/faq' },
] { text: 'Badge', link: 'https://docs.gitea.com/zh-cn/usage/actions/badge' }
}, ]
{ },
text: '软件包', {
collapsible: true, // 使整个组可折叠 text: '软件包',
collapsed: true, // 默认展开 collapsible: true, // 使整个组可折叠
items: [ collapsed: true, // 默认展开
{ text: '软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/overview' }, items: [
{ text: 'Alpine 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/alpine' }, { text: '软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/overview' },
{ text: 'Arch package registry', link: 'https://docs.gitea.com/zh-cn/usage/packages/arch' }, { text: 'Alpine 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/alpine' },
{ text: 'Cargo 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/cargo' }, { text: 'Arch package registry', link: 'https://docs.gitea.com/zh-cn/usage/packages/arch' },
{ text: 'Chef 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/chef' }, { text: 'Cargo 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/cargo' },
{ text: '存储', link: 'https://docs.gitea.com/zh-cn/usage/packages/storage' }, { text: 'Chef 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/chef' },
{ text: 'Composer 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/composer' }, { text: '存储', link: 'https://docs.gitea.com/zh-cn/usage/packages/storage' },
{ text: 'Conan 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/conan' }, { text: 'Composer 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/composer' },
{ text: 'Conda 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/conda' }, { text: 'Conan 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/conan' },
{ text: '容器注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/container' }, { text: 'Conda 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/conda' },
{ text: 'CRAN 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/cran' }, { text: '容器注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/container' },
{ text: 'Go 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/go' }, { text: 'CRAN 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/cran' },
{ text: 'Helm Chart 注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/helm' }, { text: 'Go 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/go' },
{ text: 'Maven 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/maven' }, { text: 'Helm Chart 注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/helm' },
{ text: 'NPM Package Registry', link: 'https://docs.gitea.com/zh-cn/usage/packages/npm' }, { text: 'Maven 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/maven' },
{ text: 'NuGet 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/nuget' }, { text: 'NPM Package Registry', link: 'https://docs.gitea.com/zh-cn/usage/packages/npm' },
{ text: 'Pub 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/pub' }, { text: 'NuGet 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/nuget' },
{ text: 'PyPI 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/pypi' }, { text: 'Pub 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/pub' },
{ text: 'RPM 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/packages/rpm' }, { text: 'PyPI 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/pypi' },
{ text: 'RubyGems 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/rubygems' }, { text: 'RPM 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/packages/rpm' },
{ text: 'Swift 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/swift' }, { text: 'RubyGems 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/rubygems' },
{ text: 'Vagrant 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/vagrant' }, { text: 'Swift 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/swift' },
{ text: '通用软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/generic' }, { text: 'Vagrant 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/vagrant' },
{ text: 'Debian 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/debian' } { text: '通用软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/generic' },
] { text: 'Debian 软件包注册表', link: 'https://docs.gitea.com/zh-cn/usage/packages/debian' }
}, ]
{ text: 'AGit', link: 'https://docs.gitea.com/zh-cn/usage/agit' }, },
{ text: '个人资料 README', link: 'https://docs.gitea.com/zh-cn/usage/profile-readme' }, { text: 'AGit', link: 'https://docs.gitea.com/zh-cn/usage/agit' },
{ text: 'Blame File View', link: 'https://docs.gitea.com/zh-cn/usage/blame' }, { text: '个人资料 README', link: 'https://docs.gitea.com/zh-cn/usage/profile-readme' },
{ text: '邮件接收', link: 'https://docs.gitea.com/zh-cn/usage/incoming-email' }, { text: 'Blame File View', link: 'https://docs.gitea.com/zh-cn/usage/blame' },
{ text: '标签', link: 'https://docs.gitea.com/zh-cn/usage/labels' }, { text: '邮件接收', link: 'https://docs.gitea.com/zh-cn/usage/incoming-email' },
{ text: '合并请求', link: 'https://docs.gitea.com/zh-cn/usage/pull-request' }, { text: '标签', link: 'https://docs.gitea.com/zh-cn/usage/labels' },
{ text: '权限', link: 'https://docs.gitea.com/zh-cn/usage/permissions' }, { text: '合并请求', link: 'https://docs.gitea.com/zh-cn/usage/pull-request' },
{ text: '模板仓库', link: 'https://docs.gitea.com/zh-cn/usage/template-repositories' }, { text: '权限', link: 'https://docs.gitea.com/zh-cn/usage/permissions' },
{ text: '模板创建工单与合并请求', link: 'https://docs.gitea.com/zh-cn/usage/issue-pull-request-templates' }, { text: '模板仓库', link: 'https://docs.gitea.com/zh-cn/usage/template-repositories' },
{ text: '自动链接引用', link: 'https://docs.gitea.com/zh-cn/usage/automatically-linked-references' }, { text: '从模板创建工单与合并请求', link: 'https://docs.gitea.com/zh-cn/usage/issue-pull-request-templates' },
{ text: '合并消息模板', link: 'https://docs.gitea.com/zh-cn/usage/merge-message-template' }, { text: '自动链接引用', link: 'https://docs.gitea.com/zh-cn/usage/automatically-linked-references' },
{ text: '推送', link: 'https://docs.gitea.com/zh-cn/usage/push' }, { text: '合并消息模板', link: 'https://docs.gitea.com/zh-cn/usage/merge-message-template' },
{ text: 'Blocking a user', link: 'https://docs.gitea.com/zh-cn/usage/blocking-user' }, { text: '推送', link: 'https://docs.gitea.com/zh-cn/usage/push' },
{ text: '克隆过滤器 (部分克隆)', link: 'https://docs.gitea.com/zh-cn/usage/clone-filters' }, { text: 'Blocking a user', link: 'https://docs.gitea.com/zh-cn/usage/blocking-user' },
{ text: 'Code Owners', link: 'https://docs.gitea.com/zh-cn/usage/code-owners' }, { text: '克隆过滤器 (部分克隆)', link: 'https://docs.gitea.com/zh-cn/usage/clone-filters' },
{ text: 'Webhooks', link: 'https://docs.gitea.com/zh-cn/usage/webhooks' }, { text: 'Code Owners', link: 'https://docs.gitea.com/zh-cn/usage/code-owners' },
{ text: 'Migration', link: 'https://docs.gitea.com/zh-cn/usage/migration' }, { text: 'Webhooks', link: 'https://docs.gitea.com/zh-cn/usage/webhooks' },
{ text: '受保护的标签', link: 'https://docs.gitea.com/zh-cn/usage/protected-tags' }, { text: 'Migration', link: 'https://docs.gitea.com/zh-cn/usage/migration' },
{ text: '仓库镜像', link: 'https://docs.gitea.com/zh-cn/usage/repo-mirror' }, { text: '受保护的标签', link: 'https://docs.gitea.com/zh-cn/usage/protected-tags' },
{ text: 'Markdown', link: 'https://docs.gitea.com/zh-cn/usage/markdown' }, { text: '仓库镜像', link: 'https://docs.gitea.com/zh-cn/usage/repo-mirror' },
{ text: 'Multi-factor Authentication (MFA)', link: 'https://docs.gitea.com/zh-cn/usage/multi-factor-authentication' } { text: 'Markdown', link: 'https://docs.gitea.com/zh-cn/usage/markdown' },
] { text: 'Multi-factor Authentication (MFA)', link: 'https://docs.gitea.com/zh-cn/usage/multi-factor-authentication' }
} as any, ]
{ } as any,
text: '开发', {
collapsible: true, // 使整个组可折叠 text: '开发',
collapsed: true, // 默认展开 collapsible: true, // 使整个组可折叠
items: [ collapsed: true, // 默认展开
{ text: '玩转 Gitea', link: 'https://docs.gitea.com/zh-cn/development/hacking-on-gitea' }, items: [
{ text: 'API 使用指南', link: 'https://docs.gitea.com/zh-cn/development/api-usage' }, { text: '玩转 Gitea', link: 'https://docs.gitea.com/zh-cn/development/hacking-on-gitea' },
{ text: 'OAuth2 提供者', link: 'https://docs.gitea.com/zh-cn/development/oauth2-provider' }, { text: 'API 使用指南', link: 'https://docs.gitea.com/zh-cn/development/api-usage' },
{ text: '迁移接口', link: 'https://docs.gitea.com/zh-cn/development/migrations-interfaces' }, { text: 'OAuth2 提供者', link: 'https://docs.gitea.com/zh-cn/development/oauth2-provider' },
{ text: '集成', link: 'https://docs.gitea.com/zh-cn/development/integrations' } { text: '迁移接口', link: 'https://docs.gitea.com/zh-cn/development/migrations-interfaces' },
] { text: '集成', link: 'https://docs.gitea.com/zh-cn/development/integrations' }
} as any, ]
{ } as any,
text: '贡献', {
collapsible: true, // 使整个组可折叠 text: '贡献',
collapsed: true, // 默认展开 collapsible: true, // 使整个组可折叠
items: [ collapsed: true, // 默认展开
{ text: '后端开发指南', link: 'https://docs.gitea.com/zh-cn/contributing/guidelines-backend' }, items: [
{ text: '端开发指南', link: 'https://docs.gitea.com/zh-cn/contributing/guidelines-frontend' }, { text: '端开发指南', link: 'https://docs.gitea.com/zh-cn/contributing/guidelines-backend' },
{ text: '重构指南', link: 'https://docs.gitea.com/zh-cn/contributing/guidelines-refactoring' }, { text: '前端开发指南', link: 'https://docs.gitea.com/zh-cn/contributing/guidelines-frontend' },
{ text: '本地化', link: 'https://docs.gitea.com/zh-cn/contributing/localization' } { text: '重构指南', link: 'https://docs.gitea.com/zh-cn/contributing/guidelines-refactoring' },
] { text: '本地化', link: 'https://docs.gitea.com/zh-cn/contributing/localization' }
} as any, ]
{ } as any,
text: '帮助', {
collapsible: true, // 使整个组可折叠 text: '帮助',
collapsed: true, // 默认展开 collapsible: true, // 使整个组可折叠
items: [ collapsed: true, // 默认展开
{ text: '常见问题', link: 'https://docs.gitea.com/zh-cn/help/faq' }, items: [
{ text: '支持选项', link: 'https://docs.gitea.com/zh-cn/help/support' }, { text: '常见问题', link: 'https://docs.gitea.com/zh-cn/help/faq' },
] { text: '支持选项', link: 'https://docs.gitea.com/zh-cn/help/support' },
} as any, ]
] } as any,
} ]
}
function sidebarEnterprise(): DefaultTheme.SidebarItem[] {
return [ function sidebarSimulator(): DefaultTheme.SidebarItem[] {
{ return [
text: 'Gitea Enterprise 是什么', {
link: '/enterprise/index', text: '虚拟仿真技术',
items: [ link: '/src/simulator/index',
items: [
] ]
}, },
{ {
text: '特征', text: '虚拟ECU',
collapsible: true, // 使整个组可折叠 link: '/src/simulator/vECU',
collapsed: true, // 默认展开 items: [
items: [ ]
{ } as any,
text: '可继承分支保护', {
link: 'https://docs.gitea.com/enterprise/features/inheritable-branch-protection' text: '整车系统级软硬件联合仿真',
}, link: '/src/simulator/vehicle-simulator',
{ items: []
text: '依赖关系扫描', },
link: 'https://docs.gitea.com/enterprise/features/dependency-scan' ]
}, }
{
text: 'IP 允许列表', function sidebarCompiling(): DefaultTheme.SidebarItem[] {
link: 'https://docs.gitea.com/enterprise/features/ip-allowlist' return [
}, {
{ text: '编译加速',
text: '企业主题', link: '/src/compile/index',
link: 'https://docs.gitea.com/enterprise/features/enterprise-theme' items: [
},
{ ]
text: '强制2FA身份验证', },
link: 'https://docs.gitea.com/enterprise/features/mandatory-2fa' {
}, text: '分布式编译系统',
{ collapsible: true, // 使整个组可折叠
text: '审计日志', collapsed: false, // 默认展开
link: 'https://docs.gitea.com/enterprise/features/audit-log' items: [
}, {
{ text: '为什么需要分布式编译?',
text: 'SAML', link: '/src/compile/why-distributed-compiling'
link: 'https://docs.gitea.com/enterprise/features/saml-auth' },
}, {
{ text: 'CloudBuild',
text: '发布节奏和版本控制', link: '/src/compile/cloudbuild'
link: 'https://docs.gitea.com/enterprise/features/release-cadence' },
} {
] text: 'ShareBuild',
} as any, link: '/src/compile/sharebuild'
{ },
text: '安装', ]
link: 'https://docs.gitea.com/enterprise/installation', } as any,
items: [] {
}, text: 'AI Compiler',
{ collapsible: true, // 使整个组可折叠
text: '常见问题', collapsed: false, // 默认展开
link: 'https://docs.gitea.com/enterprise/faq', items: [
items: [] {
}, text: 'AI Compiler简介',
] link: '/src/compile/why-distributed-compiling'
} },
{
function sidebarRunner(): DefaultTheme.SidebarItem[] { text: 'CloudBuild',
return [ link: '/src/compile/cloudbuild'
{ },
link: '/runner/index', {
}, text: 'ShareBuild',
] link: '/src/compile/sharebuild'
} },
]
} as any,
{
text: 'PGO/LTO',
collapsible: true, // 使整个组可折叠
collapsed: false, // 默认展开
items: [
{
text: 'PGO/LTO简介',
link: '/src/compile/why-distributed-compiling'
},
{
text: 'CloudBuild',
link: '/src/compile/cloudbuild'
},
{
text: 'ShareBuild',
link: '/src/compile/sharebuild'
},
]
},
]
}
function sidebarEnterprise(): DefaultTheme.SidebarItem[] {
return [
{
text: 'DevStar Enterprise',
link: '/src/enterprise/index',
items: [
]
},
{
text: '常见问题FAQ',
link: '/src/enterprise/faq',
items: []
},
]
}

View File

@@ -1,21 +1,21 @@
# 第一阶段node镜像打包 # 第一阶段node镜像打包
FROM node:20-alpine AS frontend-builder FROM node:20-alpine AS frontend-builder
WORKDIR /build-app WORKDIR /build-app
COPY . . COPY . .
RUN npm install RUN npm install
RUN npm add -D vitepress RUN npm add -D vitepress
RUN npm run docs:build RUN npm run build
# 第二阶段nginx打包 # 第二阶段nginx打包
FROM nginx:1.25-alpine FROM nginx:1.25-alpine
EXPOSE 80 EXPOSE 80
WORKDIR /app WORKDIR /app
# 替换nginx配置 # 替换nginx配置
COPY nginx.conf /etc/nginx/conf.d/default.conf COPY nginx.conf /etc/nginx/conf.d/default.conf
# 将第一阶段的静态文件复制到nginx中 # 将第一阶段的静态文件复制到nginx中
RUN rm -rf /usr/share/nginx/html RUN rm -rf /usr/share/nginx/html
RUN mkdir /usr/share/nginx/html RUN mkdir /usr/share/nginx/html
COPY --from=frontend-builder /build-app/docs/.vitepress/dist /usr/share/nginx/html COPY --from=frontend-builder /build-app/.vitepress/dist /usr/share/nginx/html
# 运行 # 运行
CMD ["nginx", "-g", "daemon off;"] CMD ["nginx", "-g", "daemon off;"]

View File

@@ -1,31 +1,31 @@
# 梦宁软件官网及DevStar文档 # 梦宁软件官网及DevStar文档
## 配置开发环境 ## 配置开发环境
```md ```md
npm install npm install
npm add -D vitepress npm add -D vitepress
``` ```
## 如何启动调试项目 ## 如何启动调试项目
```md ```md
npm run docs:dev npm run dev
``` ```
## 如何打包项目 ## 如何打包项目
```md ```md
npm run docs:build npm run build
``` ```
## 如何预览打包的项目 ## 如何预览打包的项目
```md ```md
npm run docs:preview npm run preview
``` ```
## 如何添加或修改侧边栏 ## 如何添加或修改侧边栏
在docs/.vitepress/config.mts中的sidebar进行修改对于不同路径下的侧边栏分别使用不同函数得到text为侧边栏的描述内容link为点击侧边栏后加载的内容的链接如果有子目录在items进行修改 在docs/.vitepress/config.mts中的sidebar进行修改对于不同路径下的侧边栏分别使用不同函数得到text为侧边栏的描述内容link为点击侧边栏后加载的内容的链接如果有子目录在items进行修改
link链接的内容既可以是网页链接也可以是本地文档 link链接的内容既可以是网页链接也可以是本地文档
## 如何自定义网站样式 ## 如何自定义网站样式
在docs/.vitepress/theme/style.css中自定义网站样式 在docs/.vitepress/theme/style.css中自定义网站样式
## 如何添加或修改导航栏 ## 如何添加或修改导航栏
在docs/.vitepress/config.mts中的nav进行修改 在docs/.vitepress/config.mts中的nav进行修改

View File

@@ -1,65 +0,0 @@
import path from "node:path";
import fs from "node:fs";
const DIR_PATH = path.resolve("docs");
const WHITE_LIST = ["index.md", ".vitepress", "node_modules", ".idea", "assets", "public"];
const isDirectory = (path) => fs.lstatSync(path).isDirectory();
const intersections = (arr1, arr2) =>
Array.from(new Set(arr1.filter((item) => !new Set(arr2).has(item))));
// 新增:按文件系统原始顺序排序
const keepOriginalOrder = (files, dirPath) => {
return files
.map(file => ({
name: file,
time: fs.statSync(path.join(dirPath, file)).birthtimeMs // 获取创建时间戳
}))
.sort((a, b) => a.time - b.time) // 按创建时间排序
.map(item => item.name);
};
function getList(params, path1, pathname) {
const res = [];
// 修改点1使用 keepOriginalOrder 保持原始顺序
const orderedParams = keepOriginalOrder(params, path1);
for (let file of orderedParams) { // 修改点2改用 for...of 遍历
const dir = path.join(path1, file);
const isDir = isDirectory(dir);
if (isDir) {
const files = fs.readdirSync(dir);
res.push({
text: file,
collapsible: true,
items: getList(files, dir, `${pathname}/${file}`),
});
} else {
const suffix = path.extname(file);
if (suffix !== ".md") continue;
const name = path.basename(file, '.md');
res.push({
text: name,
link: `${pathname}/${name}`,
});
}
}
// 修改点3完全移除 sort() 调用
return res;
}
export const set_sidebar = (pathname) => {
try {
const dirPath = path.join(DIR_PATH, pathname);
const files = fs.readdirSync(dirPath);
const items = intersections(files, WHITE_LIST);
return getList(items, dirPath, pathname);
} catch (error) {
console.error(`Error generating sidebar for ${pathname}:`, error);
return [];
}
};

View File

@@ -1,41 +1,41 @@
--- ---
# https://vitepress.dev/reference/default-theme-home-page # https://vitepress.dev/reference/default-theme-home-page
layout: home layout: home
hero: hero:
# name: "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通用的" # name: "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通用的"
# text: "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为中小型公司提供IT服务" # text: "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为中小型公司提供IT服务"
text: "DevStar Studio: The Last Mile of Al for R&D" text: "The Last Mile of Al for R&D"
tagline: 为AI时代打造的新一代智能研发平台面向人类开发者和AI开发者的融合团队专注于产品质量和团队效能为研发部门赋能提效的一站式解决方案 tagline: DevStar Studio是为AI时代打造的新一代一站式智能研发平台面向人类开发者和AI开发者的融合团队专注于产品质量和团队效能为研发部门赋能提效
image: image:
src: /slider1.png src: /slider1.png
alt: 背景图片 alt: 背景图片
# actions: # actions:
# - theme: brand # - theme: brand
# text: DevStar Studio # text: DevStar Studio
# link: /devstar/index # link: /devstar/index
# - theme: alt # - theme: alt
# text: CloudBuild # text: CloudBuild
# link: /cloudbuild/index # link: /compile/index
# - theme: alt # - theme: alt
# text: Simulator # text: Simulator
# link: /simulator/index # link: /simulator/index
# features: # features:
# - title: 极易安装 # - title: 极易安装
# details: 极易安装的详细描述 # details: 极易安装的详细描述
# - title: 运行迅速 # - title: 运行迅速
# details: 运行迅速的详细描述 # details: 运行迅速的详细描述
# - title: 安装和使用体验良好 # - title: 安装和使用体验良好
# details: 安装和使用体验良好的详细描述 # details: 安装和使用体验良好的详细描述
--- ---
<script setup> <script setup>
import Index from './components/index.vue' // 你的组件 import Index from './src/index.vue' // 你的组件
</script> </script>
<Index/> <Index/>

4764
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,14 +1,14 @@
{ {
"devDependencies": { "devDependencies": {
"vitepress": "^1.6.3" "vitepress": "^1.6.4"
}, },
"scripts": { "scripts": {
"docs:dev": "vitepress dev docs", "dev": "vitepress dev",
"docs:build": "vitepress build docs", "build": "vitepress build",
"docs:preview": "vitepress preview docs" "preview": "vitepress preview"
}, },
"dependencies": { "dependencies": {
"@vitejs/plugin-vue": "^6.0.1", "@vitejs/plugin-vue": "^6.0.1",
"prismjs": "^1.30.0" "prismjs": "^1.30.0"
} }
} }

View File

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 91 KiB

View File

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 151 KiB

View File

Before

Width:  |  Height:  |  Size: 164 KiB

After

Width:  |  Height:  |  Size: 164 KiB

View File

Before

Width:  |  Height:  |  Size: 233 KiB

After

Width:  |  Height:  |  Size: 233 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 1.8 MiB

View File

Before

Width:  |  Height:  |  Size: 556 KiB

After

Width:  |  Height:  |  Size: 556 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 1.9 MiB

View File

Before

Width:  |  Height:  |  Size: 2.0 MiB

After

Width:  |  Height:  |  Size: 2.0 MiB

View File

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

Before

Width:  |  Height:  |  Size: 164 KiB

After

Width:  |  Height:  |  Size: 164 KiB

View File

Before

Width:  |  Height:  |  Size: 510 KiB

After

Width:  |  Height:  |  Size: 510 KiB

View File

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 126 KiB

View File

Before

Width:  |  Height:  |  Size: 941 KiB

After

Width:  |  Height:  |  Size: 941 KiB

View File

Before

Width:  |  Height:  |  Size: 756 KiB

After

Width:  |  Height:  |  Size: 756 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 MiB

After

Width:  |  Height:  |  Size: 2.5 MiB

View File

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 156 KiB

View File

@@ -1,79 +1,79 @@
# 分布式编译系统CloudBuild # 分布式编译系统CloudBuild
![alt text](/public/cloudbuild/promotional-graphic-cloudbuild.jpg) ![alt text](/public/compile/promotional-graphic-cloudbuild.jpg)
## 为什么需要分布式编译技术 ## 为什么需要分布式编译
- 大型项目过长的编译耗时将会给开发、测试和调试都带来延迟,所以缩短大型项目的编译时间的分布式编译系统有重要意义 - 大型项目过长的编译耗时将会给开发、测试和调试都带来延迟,所以缩短大型项目的编译时间的分布式编译系统有重要意义
- 使用分布式编译系统编译项目可以利用计算机集群提高编译效率,缩短项目编译时间 - 使用分布式编译系统编译项目可以利用计算机集群提高编译效率,缩短项目编译时间
- 在实际开发时同一个团队大量的编译任务时相同的。CloudBuild提供的编译缓存可以避免重复上传和重复编译从而进一步加快编译效率 - 在实际开发时同一个团队大量的编译任务时相同的。CloudBuild提供的编译缓存可以避免重复上传和重复编译从而进一步加快编译效率
## 总体架构 ## 总体架构
### 系统总体架构 ### 系统总体架构
![alt text](/public/cloudbuild/architecture.png) ![alt text](/public/compile/architecture.png)
- Ninja客户端该机器上需要保存有完整的待编译项目源代码。 - Ninja客户端该机器上需要保存有完整的待编译项目源代码。
- Action Cache服务端缓存主要保存编译任务的执行结果。 - Action Cache服务端缓存主要保存编译任务的执行结果。
- CAS Cache服务端缓存主要保存客户端上传的依赖文件编译结果文件。 - CAS Cache服务端缓存主要保存客户端上传的依赖文件编译结果文件。
- Scheduler任务调度器将编译任务id分发到各个编译节点。 - Scheduler任务调度器将编译任务id分发到各个编译节点。
- Redis主要存储具体的编译任务供编译节点领取执行也可存储Action Cache和 CAS Cache中的内容加速编译。 - Redis主要存储具体的编译任务供编译节点领取执行也可存储Action Cache和 CAS Cache中的内容加速编译。
- MySQL主要存储编译过程中的任务统计信息。 - MySQL主要存储编译过程中的任务统计信息。
- Executor各个编译节点 - Executor各个编译节点
### 部署示意图 ### 部署示意图
![alt text](/public/cloudbuild/system-diagram.png) ![alt text](/public/compile/system-diagram.png)
CloudBuild主程序分为三个部分Client、Server、Executor。 CloudBuild主程序分为三个部分Client、Server、Executor。
- Client运行在客户端和用户对接用于生成待执行的远程编译任务 同时也作为本地编译节点执行本地任务。 - Client运行在客户端和用户对接用于生成待执行的远程编译任务 同时也作为本地编译节点执行本地任务。
- Server运行在主服务器主要用于连接各个编译节点以及 将客户端上传的编译任务调度到与其连接的各个编译节点上。 - Server运行在主服务器主要用于连接各个编译节点以及 将客户端上传的编译任务调度到与其连接的各个编译节点上。
- Executor运行在编译节点负责接收并执行编译任务是编译任务真正执行的地方。 - Executor运行在编译节点负责接收并执行编译任务是编译任务真正执行的地方。
### 系统分层结构 ### 系统分层结构
![alt text](/public/cloudbuild/layered-system-architecture.png) ![alt text](/public/compile/layered-system-architecture.png)
## 运行原理与流程 ## 运行原理与流程
### 分布式编译原理 ### 分布式编译原理
![alt text](/public/cloudbuild/compiler-principles.png) ![alt text](/public/compile/compiler-principles.png)
### CloudBuild客户端 ### CloudBuild客户端
CloudBuild客户端基于Ninja改造有下面这些优势 CloudBuild客户端基于Ninja改造有下面这些优势
- 兼容使用Ninja编译的项目 - 兼容使用Ninja编译的项目
- 使用远程执行的方式提高编译时并发度 - 使用远程执行的方式提高编译时并发度
- 使用编译缓存减少需要编译的任务数量 - 使用编译缓存减少需要编译的任务数量
### CloudBuild服务端 ### CloudBuild服务端
- 使用远程执行的方法提高编译时并发度,实现了任务分发至远程节点同步执行 - 使用远程执行的方法提高编译时并发度,实现了任务分发至远程节点同步执行
- 使用分布式任务调度提高任务调度效率和计算节点资源利用率,避免集中式调度的任务阻塞问题 - 使用分布式任务调度提高任务调度效率和计算节点资源利用率,避免集中式调度的任务阻塞问题
- 使用编译缓存结合内容寻址存储技术减少网络传输量、避免重复上传与重复编译 - 使用编译缓存结合内容寻址存储技术减少网络传输量、避免重复上传与重复编译
### CloudBuild优势 ### CloudBuild优势
- 低成本组成executor的机器不需要使用专门的高性能计算型机器可使用多个平价的空闲机器 - 低成本组成executor的机器不需要使用专门的高性能计算型机器可使用多个平价的空闲机器
- 高效CloudBuild实现分布式编译的功能相比单机大大提升并发度 - 高效CloudBuild实现分布式编译的功能相比单机大大提升并发度
- 兼容NinjaCloudBuild客户端基于Ninja改造对于使用Ninja构建和可以转换为Ninja构建的项目不用额外修改构建清单 - 兼容NinjaCloudBuild客户端基于Ninja改造对于使用Ninja构建和可以转换为Ninja构建的项目不用额外修改构建清单
### CloudBuild执行流程 ### CloudBuild执行流程
- 客户端: 生成远程任务->生成任务依赖->发送任务与依赖 - 客户端: 生成远程任务->生成任务依赖->发送任务与依赖
- 服务端:检查任务缓存->检查依赖完整性->调度任务 - 服务端:检查任务缓存->检查依赖完整性->调度任务
- 编译结点:还原文件目录->还原文件目录->返回编译结果 - 编译结点:还原文件目录->还原文件目录->返回编译结果
## AOSP和LLVM上的应用 ## AOSP和LLVM上的应用
### LLVM上的应用效果 ### LLVM上的应用效果
![alt text](/public/cloudbuild/table1.png) ![alt text](/public/compile/table1.png)
### AOSP上的应用效果 ### AOSP上的应用效果
![alt text](/public/cloudbuild/table2.png) ![alt text](/public/compile/table2.png)
### CloudBuild硬件资源利用率 ### CloudBuild硬件资源利用率
4核CPU利用率: 4核CPU利用率:
![alt text](/public/cloudbuild/CPU-utilization-4.png) ![alt text](/public/compile/CPU-utilization-4.png)
8核CPU利用率: 8核CPU利用率:
![alt text](/public/cloudbuild/CPU-utilization-8.png) ![alt text](/public/compile/CPU-utilization-8.png)
16核CPU利用率: 16核CPU利用率:
![alt text](/public/cloudbuild/CPU-utilization-16.png) ![alt text](/public/compile/CPU-utilization-16.png)
## CloudBuild使用方法 ## CloudBuild使用方法
### CloudBuild安装 ### CloudBuild安装
![alt text](/public/cloudbuild/cloudbuild-installation.png) ![alt text](/public/compile/cloudbuild-installation.png)
CloudBuild项目地址https://gitee.com/cloudbuild888/cloudbuild.git CloudBuild项目地址https://gitee.com/cloudbuild888/cloudbuild.git
### CloudBuild分布式编译 ### CloudBuild分布式编译
![alt text](/public/cloudbuild/cloudbuild-distributed-compilation.png) ![alt text](/public/compile/cloudbuild-distributed-compilation.png)
LLVM项目地址https://gitee.com/mirrors/LLVM.git LLVM项目地址https://gitee.com/mirrors/LLVM.git

82
src/compile/index.md Normal file
View File

@@ -0,0 +1,82 @@
# 编译加速
## 分布式编译技术
![alt text](/public/compile/promotional-graphic-cloudbuild.jpg)
- 大型项目过长的编译耗时将会给开发、测试和调试都带来延迟,所以缩短大型项目的编译时间的分布式编译系统有重要意义
- 使用分布式编译系统编译项目可以利用计算机集群提高编译效率,缩短项目编译时间
- 在实际开发时同一个团队大量的编译任务时相同的。CloudBuild提供的编译缓存可以避免重复上传和重复编译从而进一步加快编译效率
### CloudBuild
![alt text](/public/compile/architecture.png)
- Ninja客户端该机器上需要保存有完整的待编译项目源代码。
- Action Cache服务端缓存主要保存编译任务的执行结果。
- CAS Cache服务端缓存主要保存客户端上传的依赖文件编译结果文件。
- Scheduler任务调度器将编译任务id分发到各个编译节点。
- Redis主要存储具体的编译任务供编译节点领取执行也可存储Action Cache和 CAS Cache中的内容加速编译。
- MySQL主要存储编译过程中的任务统计信息。
- Executor各个编译节点
### ShareBuild
![alt text](/public/compile/system-diagram.png)
CloudBuild主程序分为三个部分Client、Server、Executor。
- Client运行在客户端和用户对接用于生成待执行的远程编译任务 同时也作为本地编译节点执行本地任务。
- Server运行在主服务器主要用于连接各个编译节点以及 将客户端上传的编译任务调度到与其连接的各个编译节点上。
- Executor运行在编译节点负责接收并执行编译任务是编译任务真正执行的地方。
### 系统分层结构
![alt text](/public/compile/layered-system-architecture.png)
## 运行原理与流程
### 分布式编译原理
![alt text](/public/compile/compiler-principles.png)
### CloudBuild客户端
CloudBuild客户端基于Ninja改造有下面这些优势
- 兼容使用Ninja编译的项目
- 使用远程执行的方式提高编译时并发度
- 使用编译缓存减少需要编译的任务数量
### CloudBuild服务端
- 使用远程执行的方法提高编译时并发度,实现了任务分发至远程节点同步执行
- 使用分布式任务调度提高任务调度效率和计算节点资源利用率,避免集中式调度的任务阻塞问题
- 使用编译缓存结合内容寻址存储技术减少网络传输量、避免重复上传与重复编译
### CloudBuild优势
- 低成本组成executor的机器不需要使用专门的高性能计算型机器可使用多个平价的空闲机器
- 高效CloudBuild实现分布式编译的功能相比单机大大提升并发度
- 兼容NinjaCloudBuild客户端基于Ninja改造对于使用Ninja构建和可以转换为Ninja构建的项目不用额外修改构建清单
### CloudBuild执行流程
- 客户端: 生成远程任务->生成任务依赖->发送任务与依赖
- 服务端:检查任务缓存->检查依赖完整性->调度任务
- 编译结点:还原文件目录->还原文件目录->返回编译结果
## AOSP和LLVM上的应用
### LLVM上的应用效果
![alt text](/public/compile/table1.png)
### AOSP上的应用效果
![alt text](/public/compile/table2.png)
### CloudBuild硬件资源利用率
4核CPU利用率:
![alt text](/public/compile/CPU-utilization-4.png)
8核CPU利用率:
![alt text](/public/compile/CPU-utilization-8.png)
16核CPU利用率:
![alt text](/public/compile/CPU-utilization-16.png)
## CloudBuild使用方法
### CloudBuild安装
![alt text](/public/compile/cloudbuild-installation.png)
CloudBuild项目地址https://gitee.com/cloudbuild888/cloudbuild.git
### CloudBuild分布式编译
![alt text](/public/compile/cloudbuild-distributed-compilation.png)
LLVM项目地址https://gitee.com/mirrors/LLVM.git

79
src/compile/sharebuild.md Normal file
View File

@@ -0,0 +1,79 @@
# 分布式编译系统ShareBuild
![alt text](/public/compile/promotional-graphic-cloudbuild.jpg)
## 为什么需要分布式编译?
- 大型项目过长的编译耗时将会给开发、测试和调试都带来延迟,所以缩短大型项目的编译时间的分布式编译系统有重要意义
- 使用分布式编译系统编译项目可以利用计算机集群提高编译效率,缩短项目编译时间
- 在实际开发时同一个团队大量的编译任务时相同的。CloudBuild提供的编译缓存可以避免重复上传和重复编译从而进一步加快编译效率
## 总体架构
### 系统总体架构
![alt text](/public/compile/architecture.png)
- Ninja客户端该机器上需要保存有完整的待编译项目源代码。
- Action Cache服务端缓存主要保存编译任务的执行结果。
- CAS Cache服务端缓存主要保存客户端上传的依赖文件编译结果文件。
- Scheduler任务调度器将编译任务id分发到各个编译节点。
- Redis主要存储具体的编译任务供编译节点领取执行也可存储Action Cache和 CAS Cache中的内容加速编译。
- MySQL主要存储编译过程中的任务统计信息。
- Executor各个编译节点
### 部署示意图
![alt text](/public/compile/system-diagram.png)
CloudBuild主程序分为三个部分Client、Server、Executor。
- Client运行在客户端和用户对接用于生成待执行的远程编译任务 同时也作为本地编译节点执行本地任务。
- Server运行在主服务器主要用于连接各个编译节点以及 将客户端上传的编译任务调度到与其连接的各个编译节点上。
- Executor运行在编译节点负责接收并执行编译任务是编译任务真正执行的地方。
### 系统分层结构
![alt text](/public/compile/layered-system-architecture.png)
## 运行原理与流程
### 分布式编译原理
![alt text](/public/compile/compiler-principles.png)
### CloudBuild客户端
CloudBuild客户端基于Ninja改造有下面这些优势
- 兼容使用Ninja编译的项目
- 使用远程执行的方式提高编译时并发度
- 使用编译缓存减少需要编译的任务数量
### CloudBuild服务端
- 使用远程执行的方法提高编译时并发度,实现了任务分发至远程节点同步执行
- 使用分布式任务调度提高任务调度效率和计算节点资源利用率,避免集中式调度的任务阻塞问题
- 使用编译缓存结合内容寻址存储技术减少网络传输量、避免重复上传与重复编译
### CloudBuild优势
- 低成本组成executor的机器不需要使用专门的高性能计算型机器可使用多个平价的空闲机器
- 高效CloudBuild实现分布式编译的功能相比单机大大提升并发度
- 兼容NinjaCloudBuild客户端基于Ninja改造对于使用Ninja构建和可以转换为Ninja构建的项目不用额外修改构建清单
### CloudBuild执行流程
- 客户端: 生成远程任务->生成任务依赖->发送任务与依赖
- 服务端:检查任务缓存->检查依赖完整性->调度任务
- 编译结点:还原文件目录->还原文件目录->返回编译结果
## AOSP和LLVM上的应用
### LLVM上的应用效果
![alt text](/public/compile/table1.png)
### AOSP上的应用效果
![alt text](/public/compile/table2.png)
### CloudBuild硬件资源利用率
4核CPU利用率:
![alt text](/public/compile/CPU-utilization-4.png)
8核CPU利用率:
![alt text](/public/compile/CPU-utilization-8.png)
16核CPU利用率:
![alt text](/public/compile/CPU-utilization-16.png)
## CloudBuild使用方法
### CloudBuild安装
![alt text](/public/compile/cloudbuild-installation.png)
CloudBuild项目地址https://gitee.com/cloudbuild888/cloudbuild.git
### CloudBuild分布式编译
![alt text](/public/compile/cloudbuild-distributed-compilation.png)
LLVM项目地址https://gitee.com/mirrors/LLVM.git

View File

@@ -0,0 +1,78 @@
# 为什么需要分布式编译?
- 大型项目过长的编译耗时将会给开发、测试和调试都带来延迟,所以缩短大型项目的编译时间的分布式编译系统有重要意义
- 使用分布式编译系统编译项目可以利用计算机集群提高编译效率,缩短项目编译时间
- 在实际开发时同一个团队大量的编译任务时相同的。CloudBuild提供的编译缓存可以避免重复上传和重复编译从而进一步加快编译效率
## 总体架构
### 系统总体架构
![alt text](/public/compile/architecture.png)
- Ninja客户端该机器上需要保存有完整的待编译项目源代码。
- Action Cache服务端缓存主要保存编译任务的执行结果。
- CAS Cache服务端缓存主要保存客户端上传的依赖文件编译结果文件。
- Scheduler任务调度器将编译任务id分发到各个编译节点。
- Redis主要存储具体的编译任务供编译节点领取执行也可存储Action Cache和 CAS Cache中的内容加速编译。
- MySQL主要存储编译过程中的任务统计信息。
- Executor各个编译节点
### 部署示意图
![alt text](/public/compile/system-diagram.png)
CloudBuild主程序分为三个部分Client、Server、Executor。
- Client运行在客户端和用户对接用于生成待执行的远程编译任务 同时也作为本地编译节点执行本地任务。
- Server运行在主服务器主要用于连接各个编译节点以及 将客户端上传的编译任务调度到与其连接的各个编译节点上。
- Executor运行在编译节点负责接收并执行编译任务是编译任务真正执行的地方。
### 系统分层结构
![alt text](/public/compile/layered-system-architecture.png)
## 运行原理与流程
### 分布式编译原理
![alt text](/public/compile/compiler-principles.png)
### CloudBuild客户端
CloudBuild客户端基于Ninja改造有下面这些优势
- 兼容使用Ninja编译的项目
- 使用远程执行的方式提高编译时并发度
- 使用编译缓存减少需要编译的任务数量
### CloudBuild服务端
- 使用远程执行的方法提高编译时并发度,实现了任务分发至远程节点同步执行
- 使用分布式任务调度提高任务调度效率和计算节点资源利用率,避免集中式调度的任务阻塞问题
- 使用编译缓存结合内容寻址存储技术减少网络传输量、避免重复上传与重复编译
### CloudBuild优势
- 低成本组成executor的机器不需要使用专门的高性能计算型机器可使用多个平价的空闲机器
- 高效CloudBuild实现分布式编译的功能相比单机大大提升并发度
- 兼容NinjaCloudBuild客户端基于Ninja改造对于使用Ninja构建和可以转换为Ninja构建的项目不用额外修改构建清单
### CloudBuild执行流程
- 客户端: 生成远程任务->生成任务依赖->发送任务与依赖
- 服务端:检查任务缓存->检查依赖完整性->调度任务
- 编译结点:还原文件目录->还原文件目录->返回编译结果
## AOSP和LLVM上的应用
### LLVM上的应用效果
![alt text](/public/compile/table1.png)
### AOSP上的应用效果
![alt text](/public/compile/table2.png)
### CloudBuild硬件资源利用率
4核CPU利用率:
![alt text](/public/compile/CPU-utilization-4.png)
8核CPU利用率:
![alt text](/public/compile/CPU-utilization-8.png)
16核CPU利用率:
![alt text](/public/compile/CPU-utilization-16.png)
## CloudBuild使用方法
### CloudBuild安装
![alt text](/public/compile/cloudbuild-installation.png)
CloudBuild项目地址https://gitee.com/cloudbuild888/cloudbuild.git
### CloudBuild分布式编译
![alt text](/public/compile/cloudbuild-distributed-compilation.png)
LLVM项目地址https://gitee.com/mirrors/LLVM.git

View File

@@ -0,0 +1,32 @@
# AI Code Review
### AI Code Review与CI/CD工作流
在您的项目中添加.gitea/workflows/code-review.yml , 这里使用kekxv/AiReviewPR@v0.0.6来进行AI Code Review
```
name: ai-reviews
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Review code
uses: kekxv/AiReviewPR@v0.0.6
with:
model: ${{ vars.MODEL }}
host: ${{ vars.OLLAMA_HOST }}
REVIEW_PULL_REQUEST: false
```
DevStar代码托管平台中项目设置、用户设置和后台管理中都可以设置变量vars.MODEL、vars.OLLAMA_HOST等。
### AI Code Review详解

161
src/devstar/ai-devops.md Normal file
View File

@@ -0,0 +1,161 @@
# DevStar AI+ DevOps
DevStar AI+ DevOps 是一个完整的AI驱动研发平台解决方案通过集成 DevStar平台、代码大语言模型、Gitea MCP Server和 AI Code ToolsCursor、Claude Code、iFlow等为开发者提供智能化研发支撑体系。
## 🚀 快速部署配置指南
### 一、部署 DevStar 代码托管平台
Ubuntu-20.04下完成安装:
```
wget -c https://devstar.cn/assets/install.sh && chmod +x install.sh && sudo ./install.sh
sudo devstar start
```
安装完成后我们得到DevStar代码托管平台的URL比如http://172.16.94.26:80
### 二、Ollama私有部署代码大模型
> 如您使用第三方大模型开放API可以跳过这一部分。
> 比如从[智谱AI开放平台](https://bigmodel.cn/usercenter/proj-mgmt/apikeys) 上注册申请并添加新的API Key以Claude Code为例URL使用https://open.bigmodel.cn/api/anthropic
Ubuntu-20.04下完成安装:
```
curl -fsSL https://ollama.com/install.sh | sh
# 验证是否安装成功
ollama --version
# 下载Qwen2.5-Coder大模型
ollama pull qwen2.5-coder:32b
# 列出已下载的模型
ollama list
# 测试模型
ollama run qwen2.5-coder:32b "Hello, can you help me code?"
# 启动Ollama服务 (默认端口11434)
ollama serve
# 验证服务状态
curl http://172.16.94.26:11434/api/tags
```
* 解决Ollama只能本地访问的问题
```
# 添加环境变量OLLAMA_HOST=0.0.0.0和OLLAMA_ORIGINS=*
sed -i '/\[Service\]/a Environment=OLLAMA_HOST=0.0.0.0' /etc/systemd/system/ollama.service
sed -i '/\[Service\]/a Environment=OLLAMA_ORIGINS=*' /etc/systemd/system/ollama.service
# 重新加载并重启
systemctl daemon-reexec
systemctl daemon-reload
systemctl restart ollama
```
安装完成后我们得到API URL,比如http://172.16.94.26:11434/api/tags model比如qwen2.5-coder:32b token比如TOKEN***************
### 三、在项目中使用代码大模型
#### 配置AI Code Review到CI/CD工作流中
在您的项目中添加.gitea/workflows/code-review.yml , 这里使用kekxv/AiReviewPR@v0.0.6来进行AI Code Review
```
name: ai-reviews
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Review code
uses: kekxv/AiReviewPR@v0.0.6
with:
model: ${{ vars.MODEL }}
host: ${{ vars.OLLAMA_HOST }}
REVIEW_PULL_REQUEST: false
```
DevStar代码托管平台中项目设置、用户设置和后台管理中都可以设置变量vars.MODEL、vars.OLLAMA_HOST等。
#### 安装配置MCP Server
在 VS Code 中使用,要快速安装,请使用如下安装按钮。
[![在 VS Code 中使用 Docker 安装](https://img.shields.io/badge/VS_Code-Install_Server-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=gitea&inputs=[{%22id%22:%22gitea_token%22,%22type%22:%22promptString%22,%22description%22:%22Gitea%20Personal%20Access%20Token%22,%22password%22:true}]&config={%22command%22:%22docker%22,%22args%22:[%22run%22,%22-i%22,%22--rm%22,%22-e%22,%22GITEA_ACCESS_TOKEN%22,%22docker.gitea.com/gitea-mcp-server%22],%22env%22:{%22GITEA_ACCESS_TOKEN%22:%22${input:gitea_token}%22}}) [![在 VS Code Insiders 中使用 Docker 安装](https://img.shields.io/badge/VS_Code_Insiders-Install_Server-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=gitea&inputs=[{%22id%22:%22gitea_token%22,%22type%22:%22promptString%22,%22description%22:%22Gitea%20Personal%20Access%20Token%22,%22password%22:true}]&config={%22command%22:%22docker%22,%22args%22:[%22run%22,%22-i%22,%22--rm%22,%22-e%22,%22GITEA_ACCESS_TOKEN%22,%22docker.gitea.com/gitea-mcp-server%22],%22env%22:{%22GITEA_ACCESS_TOKEN%22:%22${input:gitea_token}%22}}&quality=insiders)
也可以在项目中添加到 .vscode/mcp.json 文件如下:
```
{
"mcp": {
"inputs": [
{
"type": "promptString",
"id": "gitea_token",
"description": "Gitea 个人访问令牌",
"password": true
}
],
"servers": {
"gitea-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITEA_HOST",
"-e",
"GITEA_ACCESS_TOKEN",
"docker.gitea.com/gitea-mcp-server"
],
"env": {
"GITEA_HOST": "--host http://172.16.94.26",
"GITEA_ACCESS_TOKEN": "${input:gitea_token}"
}
}
}
}
}
```
#### 配置AI IDE/CLI使用私有大模型及MCP Server
* Copilot简要文字描述不要上太多图可以提供官方配置链接
* Cursor
* Continue
* ...
## 🚀 DevStar AI+ DevOps演示
在前面部署配置的基础上我们以VSCode + Copilot或者Continue等为例演示AI生成代码、触发CI/CD工作流及AI Code Review
### 创建一个项目
使用ai-develops项目模板创建项目
todo
### AI生成代码
todo
### 提交PR
todo
### AI Code Review
todo
### 合并PR
todo

View File

@@ -1,29 +1,29 @@
--- ---
outline: deep outline: deep
weight: 1 weight: 1
--- ---
# 关于Devstar # DevStar Studio
DevStar一站式智能研发平台采用分层架构设计核心提供DevEnv容器化开发引擎、CI/CD流水线原生支持Actions和Runners、Git代码仓库和制品管理功能上层全面兼容主流IDE如VSCode、Cursor和开发工具链支持C/C++/Go/Rust等语言及ARM/RISC-V/AI芯片开发。平台集成了代码大模型如DeepSeek、Claude、MCP服务器集群包括Github-MCP和DevStar-MCP、分布式编译服务CloudBuild/BuildFarm以及虚拟化平台QEMU/Renode等增强功能底层基于Docker/Kubernetes云原生平台构建形成从编码、测试到部署的完整研发生态并通过项目模板生态和应用商店实现开箱即用的开发体验。 DevStar一站式智能研发平台采用分层架构设计核心提供DevEnv容器化开发引擎、CI/CD流水线原生支持Actions和Runners、Git代码仓库和制品管理功能上层全面兼容主流IDE如VSCode、Cursor和开发工具链支持C/C++/Go/Rust等语言及ARM/RISC-V/AI芯片开发。平台集成了代码大模型如DeepSeek、Claude、MCP服务器集群包括Github-MCP和DevStar-MCP、分布式编译服务CloudBuild/BuildFarm以及虚拟化平台QEMU/Renode等增强功能底层基于Docker/Kubernetes云原生平台构建形成从编码、测试到部署的完整研发生态并通过项目模板生态和应用商店实现开箱即用的开发体验。
## 目标 ## 目标
DevStar Studio是一个通用的一站式软件研发平台它最初的目标是服务于汽车软件、消费电子、智能制造等嵌入式软件研发场景中的开发者 DevStar Studio是一个通用的一站式软件研发平台它最初的目标是服务于汽车软件、消费电子、智能制造等嵌入式软件研发场景中的开发者
## 功能特性 ## 功能特性
- 原生集成兼容Github Actions的DevStar CI/CD流水线Actions/Runners一键安装启用与Pull Request/Al CodeReview工具协同 - 原生集成兼容Github Actions的DevStar CI/CD流水线Actions/Runners一键安装启用与Pull Request/Al CodeReview工具协同
- 自主研发的DevEnv引擎支撑开箱即用的devcontainer容器化开发环境 - 自主研发的DevEnv引擎支撑开箱即用的devcontainer容器化开发环境
- 自主研发的Web端Kubernetes客户端支撑一键安装部署第三方工具/服务,如私有部署代码大模型/Agents、MCP Servers、Cloudbuild等 - 自主研发的Web端Kubernetes客户端支撑一键安装部署第三方工具/服务,如私有部署代码大模型/Agents、MCP Servers、Cloudbuild等
- Git代码托管、镜像仓库等制品管理Releases/Packages、项目管理Projects/Issues、知识管理Wiki等 - Git代码托管、镜像仓库等制品管理Releases/Packages、项目管理Projects/Issues、知识管理Wiki等
## 优势 ## 优势
- 验证与开发同步传统开发流程验证阶段滞后于开发而Devstar开发流程可以实现“边开发边验证”的并行模式 - 验证与开发同步传统开发流程验证阶段滞后于开发而DevStar开发流程可以实现“边开发边验证”的并行模式
- 集成测试前置传统开发流程集成测试集中在后期而Devstar开发流程将集成测试拆解到开发各阶段 - 集成测试前置传统开发流程集成测试集中在后期而DevStar开发流程将集成测试拆解到开发各阶段
- 测试条件与实际高度一致传统开发流程测试环境与真实场景存在差异而Devstar开发流程可以构建高保真测试环境 - 测试条件与实际高度一致传统开发流程测试环境与真实场景存在差异而DevStar开发流程可以构建高保真测试环境
- 失效迭代前置传统开发流程失效迭代出现在后期而Devstar开发流程将失效识别和处理提前到了开发早期 - 失效迭代前置传统开发流程失效迭代出现在后期而DevStar开发流程将失效识别和处理提前到了开发早期
- 兼容不容层级的虚拟化传统开发流程只能保证单一流程的虚拟化而而Devstar开发流程可同时兼容硬件级虚拟化、系统级虚拟化、进程级虚拟化 - 兼容不容层级的虚拟化传统开发流程只能保证单一流程的虚拟化而而DevStar开发流程可同时兼容硬件级虚拟化、系统级虚拟化、进程级虚拟化
## 在线演示 ## 在线演示
访问[devstar.cn](https://devstar.cn)或者在VS Code插件市场搜索devstar 访问[devstar.cn](https://devstar.cn)或者在VS Code插件市场搜索devstar

View File

@@ -3,7 +3,7 @@ outline: deep
weight: 2 weight: 2
--- ---
# 快速开始 # 使用shell脚本安装
如果您是在Windows环境下请在cmd命令行下先运行如下命令 如果您是在Windows环境下请在cmd命令行下先运行如下命令
```md ```md

View File

@@ -0,0 +1,39 @@
---
outline: deep
weight: 2
---
# 快速开始
如果您是在Windows环境下请在cmd命令行下先运行如下命令
```md
powershell wsl --install -d Ubuntu-20.04
```
如果以上命令无法自动完成安装WSL可以手动执行如下消耗完成命令安装
```md
dism.exe /Online /Enable-Feature /FeatureName:Microsoft-Windows-Subsystem-Linux /All /LimitAccess /All
dism.exe /Online /Enable-Feature /FeatureName:VirtualMachinePlatform /All /LimitAccess
```
在Ubuntu-20.04下完成安装:
```md
wget -c https://devstar.cn/assets/install.sh && chmod +x install.sh && sudo ./install.sh
devstar help
------------------------------------------------------------------------
DevStar usage help:
help, -h, --help, Help information
start Start DevStar Studio
--port=<arg> Specify the port number (default port is 80)
--ssh-port=<arg> Specify the ssh-port number (default ssh-port is 2222)
--version=<arg> Specify the DevStar Studio Image Version (default verson is latest)
--image=<arg> Specify the DevStar Studio Image example: devstar-studio:latest
stop Stop the running DevStar Studio
logs View the logs of the devstar-studio container
clean Clean up the running DevStar Studio, including deleting user data. Please use with caution.
------------------------------------------------------------------------
sudo devstar start
...
-------------------------------------------------------
DevStar started in http://192.168.234.210:80 successfully!
-------------------------------------------------------
```
然后通过浏览器打开http://192.168.234.210:80 完成后配置安装,默认第一个注册用户为管理员账户。

51
src/devstar/mcp-server.md Normal file
View File

@@ -0,0 +1,51 @@
# MCP Server
### 快速安装配置MCP Server
在 VS Code 中使用,要快速安装,请使用如下安装按钮。
[![在 VS Code 中使用 Docker 安装](https://img.shields.io/badge/VS_Code-Install_Server-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=gitea&inputs=[{%22id%22:%22gitea_token%22,%22type%22:%22promptString%22,%22description%22:%22Gitea%20Personal%20Access%20Token%22,%22password%22:true}]&config={%22command%22:%22docker%22,%22args%22:[%22run%22,%22-i%22,%22--rm%22,%22-e%22,%22GITEA_ACCESS_TOKEN%22,%22docker.gitea.com/gitea-mcp-server%22],%22env%22:{%22GITEA_ACCESS_TOKEN%22:%22${input:gitea_token}%22}}) [![在 VS Code Insiders 中使用 Docker 安装](https://img.shields.io/badge/VS_Code_Insiders-Install_Server-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=gitea&inputs=[{%22id%22:%22gitea_token%22,%22type%22:%22promptString%22,%22description%22:%22Gitea%20Personal%20Access%20Token%22,%22password%22:true}]&config={%22command%22:%22docker%22,%22args%22:[%22run%22,%22-i%22,%22--rm%22,%22-e%22,%22GITEA_ACCESS_TOKEN%22,%22docker.gitea.com/gitea-mcp-server%22],%22env%22:{%22GITEA_ACCESS_TOKEN%22:%22${input:gitea_token}%22}}&quality=insiders)
也可以在项目中添加到 .vscode/mcp.json 文件如下:
```
{
"mcp": {
"inputs": [
{
"type": "promptString",
"id": "gitea_token",
"description": "Gitea 个人访问令牌",
"password": true
}
],
"servers": {
"gitea-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITEA_HOST",
"-e",
"GITEA_ACCESS_TOKEN",
"docker.gitea.com/gitea-mcp-server"
],
"env": {
"GITEA_HOST": "--host http://172.16.94.26",
"GITEA_ACCESS_TOKEN": "${input:gitea_token}"
}
}
}
}
}
```
### MCP Server使用注意事项
* Copilot简要文字描述不要上太多图可以提供官方配置链接
* Cursor
* Continue
* ...

52
src/enterprise/faq.md Normal file
View File

@@ -0,0 +1,52 @@
---
title: DevStar Enterprise FAG
sidebar: auto
---
# DevStar Enterprise FAG
## 什么是 DevStar Enterprise
DevStar Enterprise 是基于开源 Gitea 项目开发的增强版,为企业级用户提供更可靠的体验。
## 与开源版的关系
- 基于开源 Gitea 项目开发,操作和配置方式几乎相同
- 熟悉 Gitea 的用户可以快速上手 DevStar Enterprise
- 企业版专为企业用例需求构建
- **注意**:企业版功能需要付费激活
> 如果您对价格有疑问可以申请30天免费试用试用期结束后可选择继续使用功能将恢复为开源版相同
## 定价方案
您可以在客户门户自主购买 DevStar Enterprise 许可证:
- 价格基于用户数量,可按实际需求购买
- 支持随时"调整"许可证规模(增减用户数或调整时长)
- 示例可将20人12个月许可调整为40人6个月或10人24个月
- 调整不产生额外费用
- 许可证到期前可选择续订延长有效期
- 随时续订可享受促销优惠
## 版本规则
DevStar Enterprise 与 Gitea 项目的版本号不同但相互对应:
- 企业版版本格式:`v21.6.*`
- `v21.6` 表示基于 Gitea 1.21.6 版本开发
- `.*` 包含企业版特有的补丁或功能更新
### 版本切换指南
1. **切换条件**:所有数据和配置完全兼容
2. **操作步骤**:只需替换可执行文件或 Docker 镜像
3. **版本对应规则**
- 从 Gitea v1.21.6 → 需选择 DevStar Enterprise v21+
- 从 DevStar Enterprise v23.1.0 → 需选择 Gitea v1.23+
## 问题反馈
大多数问题已在 [FAQ](/src/enterprise/faq) 中解答,如需进一步帮助请联系:
**邮箱**: [contact@mengning.com.cn](mailto:contact@mengning.com.cn)

View File

@@ -1,52 +1,52 @@
--- ---
title: Gitea Enterprise 介绍 title: DevStar Enterprise
sidebar: auto sidebar: auto
--- ---
# Gitea Enterprise # DevStar Enterprise
## 什么是 Gitea Enterprise ## 什么是 DevStar Enterprise
Gitea Enterprise 是基于开源 Gitea 项目开发的增强版,为企业级用户提供更可靠的体验。 DevStar Enterprise 是基于开源 Gitea 项目开发的增强版,为企业级用户提供更可靠的体验。
## 与开源版的关系 ## 与开源版的关系
- 基于开源 Gitea 项目开发,操作和配置方式几乎相同 - 基于开源 Gitea 项目开发,操作和配置方式几乎相同
- 熟悉 Gitea 的用户可以快速上手 Gitea Enterprise - 熟悉 Gitea 的用户可以快速上手 DevStar Enterprise
- 企业版专为企业用例需求构建 - 企业版专为企业用例需求构建
- **注意**:企业版功能需要付费激活 - **注意**:企业版功能需要付费激活
> 如果您对价格有疑问可以申请30天免费试用试用期结束后可选择继续使用功能将恢复为开源版相同 > 如果您对价格有疑问可以申请30天免费试用试用期结束后可选择继续使用功能将恢复为开源版相同
## 定价方案 ## 定价方案
您可以在客户门户自主购买 Gitea Enterprise 许可证: 您可以在客户门户自主购买 DevStar Enterprise 许可证:
- 价格基于用户数量,可按实际需求购买 - 价格基于用户数量,可按实际需求购买
- 支持随时"调整"许可证规模(增减用户数或调整时长) - 支持随时"调整"许可证规模(增减用户数或调整时长)
- 示例可将20人12个月许可调整为40人6个月或10人24个月 - 示例可将20人12个月许可调整为40人6个月或10人24个月
- 调整不产生额外费用 - 调整不产生额外费用
- 许可证到期前可选择续订延长有效期 - 许可证到期前可选择续订延长有效期
- 随时续订可享受促销优惠 - 随时续订可享受促销优惠
## 版本规则 ## 版本规则
Gitea Enterprise 与 Gitea 项目的版本号不同但相互对应: DevStar Enterprise 与 Gitea 项目的版本号不同但相互对应:
- 企业版版本格式:`v21.6.*` - 企业版版本格式:`v21.6.*`
- `v21.6` 表示基于 Gitea 1.21.6 版本开发 - `v21.6` 表示基于 Gitea 1.21.6 版本开发
- `.*` 包含企业版特有的补丁或功能更新 - `.*` 包含企业版特有的补丁或功能更新
### 版本切换指南 ### 版本切换指南
1. **切换条件**:所有数据和配置完全兼容 1. **切换条件**:所有数据和配置完全兼容
2. **操作步骤**:只需替换可执行文件或 Docker 镜像 2. **操作步骤**:只需替换可执行文件或 Docker 镜像
3. **版本对应规则** 3. **版本对应规则**
- 从 Gitea v1.21.6 → 需选择 Gitea Enterprise v21+ - 从 Gitea v1.21.6 → 需选择 DevStar Enterprise v21+
- 从 Gitea Enterprise v23.1.0 → 需选择 Gitea v1.23+ - 从 DevStar Enterprise v23.1.0 → 需选择 Gitea v1.23+
## 问题反馈 ## 问题反馈
大多数问题已在 [FAQ](https://docs.gitea.com/enterprise/faq) 中解答,如需进一步帮助请联系: 大多数问题已在 [FAQ](/src/enterprise/faq) 中解答,如需进一步帮助请联系:
**邮箱**: [support@example.com](mailto:support@example.com) **邮箱**: [contact@mengning.com.cn](mailto:contact@mengning.com.cn)

View File

@@ -1,326 +1,326 @@
<template> <template>
<section class="tencent-showcase"> <section class="tencent-showcase">
<div class="ten_main"> <div class="ten_main">
<div class="ten_links"> <div class="ten_links">
<a <a
href="/devstar" href="/src/devstar/ai-devops"
class="ten_img" class="ten_img"
@mouseenter="hoverItem = 'about'" @mouseenter="hoverItem = 'about'"
@mouseleave="hoverItem = null" @mouseleave="hoverItem = null"
> >
<img <img
src="/public/promotional-graphic-devstar.png" src="/public/promotional-graphic-devstar.png"
alt="devstar" alt="devstar"
class="tencent-image" class="tencent-image"
:class="{ 'image-hover': hoverItem === 'about' }" :class="{ 'image-hover': hoverItem === 'about' }"
> >
<div class="ten_img_txt" :class="{ 'text-hover': hoverItem === 'about' }"> <div class="ten_img_txt" :class="{ 'text-hover': hoverItem === 'about' }">
<h2>Devstar Studio</h2> <h2>AI+ DevOps</h2>
</div> </div>
</a> </a>
<a <a
href="/cloudbuild" href="/src/compile"
class="ten_img" class="ten_img"
@mouseenter="hoverItem = 'culture'" @mouseenter="hoverItem = 'culture'"
@mouseleave="hoverItem = null" @mouseleave="hoverItem = null"
> >
<img <img
src="/public/promotional-graphic-cloudbuild.jpg" src="/public/promotional-graphic-cloudbuild.jpg"
alt="cloudbuild" alt="cloudbuild"
class="tencent-image" class="tencent-image"
:class="{ 'image-hover': hoverItem === 'culture' }" :class="{ 'image-hover': hoverItem === 'culture' }"
> >
<div class="ten_img_txt" :class="{ 'text-hover': hoverItem === 'culture' }"> <div class="ten_img_txt" :class="{ 'text-hover': hoverItem === 'culture' }">
<h2>Cloudbuild</h2> <h2>编译加速</h2>
</div> </div>
</a> </a>
<a <a
href="/simulator" href="/src/simulator"
class="ten_img" class="ten_img"
@mouseenter="hoverItem = 'office'" @mouseenter="hoverItem = 'office'"
@mouseleave="hoverItem = null" @mouseleave="hoverItem = null"
> >
<img <img
src="/public/promotional-graphic-simulator.jpg" src="/public/promotional-graphic-simulator.jpg"
alt="simulator" alt="simulator"
class="tencent-image" class="tencent-image"
:class="{ 'image-hover': hoverItem === 'office' }" :class="{ 'image-hover': hoverItem === 'office' }"
> >
<div class="ten_img_txt" :class="{ 'text-hover': hoverItem === 'office' }"> <div class="ten_img_txt" :class="{ 'text-hover': hoverItem === 'office' }">
<h2>Simulator</h2> <h2>虚拟仿真</h2>
</div> </div>
</a> </a>
</div> </div>
</div> </div>
</section> </section>
<div class="wrap-footer"> <div class="wrap-footer">
<div class="footer"> <div class="footer">
<!-- 左侧区域第一张图内容 --> <!-- 左侧区域第一张图内容 -->
<div class="footer-left"> <div class="footer-left">
<div class="gitee-brand"> <div class="gitee-brand">
<div class="logo-circle"> <div class="logo-circle">
<span class="logo-char"> <span class="logo-char">
<img src="/public/mnsoftware.png" alt=""> <img src="/public/mnsoftware.png" alt="">
</span> </span>
</div> </div>
</div> </div>
<div class="copyright"> <div class="copyright">
<span class="brand-name">梦宁软件</span> <span class="brand-name">梦宁软件</span>
<span>梦宁软件江苏有限公司版权所有</span> <span>梦宁软件江苏有限公司版权所有</span>
</div> </div>
</div> </div>
<!-- 右侧区域第二张图内容 --> <!-- 右侧区域第二张图内容 -->
<div class="footer-right"> <div class="footer-right">
<div class="qr-container"> <div class="qr-container">
<div class="qr-code"> <div class="qr-code">
<div class="qr-icon"> <div class="qr-icon">
<span class="qr-char"> <span class="qr-char">
<img src="/public/QR-code.jpg" alt=""> <img src="/public/QR-code.jpg" alt="">
</span> </span>
</div> </div>
</div> </div>
<div class="qr-label">微信公众号</div> <div class="qr-label">微信公众号</div>
</div> </div>
</div> </div>
</div> </div>
<div class="footer-area"> <div class="footer-area">
<p> <p>
<a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener noreferrer">苏ICP备2024068144号-1</a> <a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener noreferrer">苏ICP备2024068144号-1</a>
© ©
<a href="/copyright" rel="noopener noreferrer">Mengning Software</a>. <a href="/src/copyright" rel="noopener noreferrer">Mengning Software</a>.
2025- All rights reserved. 2025- All rights reserved.
</p> </p>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
export default { export default {
name: 'Showcase', name: 'Showcase',
data() { data() {
return { return {
hoverItem: null hoverItem: null
} }
} }
} }
</script> </script>
<style scoped> <style scoped>
/* 基础布局 */ /* 基础布局 */
.tencent-showcase { .tencent-showcase {
height: 200px; height: 200px;
} }
.ten_main { .ten_main {
max-width: 1200px; max-width: 1200px;
margin: 0 auto; margin: 0 auto;
} }
.ten_links { .ten_links {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
gap: 30px; gap: 30px;
} }
/* 卡片容器 */ /* 卡片容器 */
.ten_img { .ten_img {
position: relative; position: relative;
display: block; display: block;
flex: 1; flex: 1;
text-decoration: none; text-decoration: none;
overflow: hidden; overflow: hidden;
border-radius: 8px; border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease; transition: transform 0.3s ease;
} }
.ten_img:hover { .ten_img:hover {
transform: translateY(-5px); transform: translateY(-5px);
} }
/* 图片样式 */ /* 图片样式 */
.tencent-image { .tencent-image {
width: 100%; width: 100%;
height: 200px; height: 200px;
/* object-fit: contain; */ /* object-fit: contain; */
object-position: center; object-position: center;
background-color: #f5f7fa; background-color: #f5f7fa;
/* padding: 20px; */ /* padding: 20px; */
box-sizing: border-box; box-sizing: border-box;
transition: all 0.5s ease; transition: all 0.5s ease;
} }
.image-hover { .image-hover {
filter: brightness(0.95); filter: brightness(0.95);
background-color: #e3f2fd; background-color: #e3f2fd;
} }
/* 文字区域 */ /* 文字区域 */
.ten_img_txt { .ten_img_txt {
position: absolute; position: absolute;
bottom: 0; bottom: 0;
left: 0; left: 0;
right: 0; right: 0;
padding: 20px; padding: 20px;
background: linear-gradient(to top, rgba(0,0,0,0.5), transparent); background: linear-gradient(to top, rgba(0,0,0,0.5), transparent);
height: 80px; height: 80px;
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
transition: all 0.3s ease; transition: all 0.3s ease;
} }
.text-hover { .text-hover {
background: linear-gradient(to top, rgba(0,90,180,0.7), transparent); background: linear-gradient(to top, rgba(0,90,180,0.7), transparent);
} }
.ten_img_txt h2 { .ten_img_txt h2 {
border-top: none; border-top: none;
color: white; color: white;
font-size: 22px; font-size: 22px;
margin: 0; margin: 0;
position: relative; position: relative;
padding-bottom: 8px; padding-bottom: 8px;
} }
/* 悬浮时显示的下划线 */ /* 悬浮时显示的下划线 */
.text-hover h2::after { .text-hover h2::after {
content: ""; content: "";
position: absolute; position: absolute;
left: 0; left: 0;
bottom: 0; bottom: 0;
width: 60px; width: 60px;
height: 2px; height: 2px;
background: white; background: white;
} }
.wrap-footer { .wrap-footer {
margin-top: 50px; margin-top: 50px;
} }
.footer { .footer {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
padding: 20px 20px 20px 0; padding: 20px 20px 20px 0;
/* padding: 20px; */ /* padding: 20px; */
/* background-color: white; */ /* background-color: white; */
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
} }
/* 左侧品牌区域样式 */ /* 左侧品牌区域样式 */
.footer-left { .footer-left {
display: flex; display: flex;
align-items: center; align-items: center;
margin-left: -40px; margin-left: -40px;
} }
.gitee-brand { .gitee-brand {
display: flex; display: flex;
align-items: center; align-items: center;
} }
.logo-circle { .logo-circle {
width: 200px; width: 200px;
height: 100px; height: 100px;
border-radius: 50%; border-radius: 50%;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
margin-right: -10px; margin-right: -10px;
} }
.brand-name { .brand-name {
font-size: 16px; font-size: 16px;
font-weight: 600; font-weight: 600;
color: #000; color: #000;
padding-right: 10px; padding-right: 10px;
} }
.copyright { .copyright {
color: #999; color: #999;
font-size: 14px; font-size: 14px;
margin-left: -40px; margin-left: -40px;
} }
/* 右侧二维码区域样式 */ /* 右侧二维码区域样式 */
.footer-right { .footer-right {
display: flex; display: flex;
} }
.qr-container { .qr-container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
.qr-code { .qr-code {
width: 100px; width: 100px;
height: 100px; height: 100px;
background-color: #f5f5f5; background-color: #f5f5f5;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
margin-bottom: 8px; margin-bottom: 8px;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
} }
.qr-icon { .qr-icon {
width: 100px; width: 100px;
height: 100px; height: 100px;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.qr-char { .qr-char {
color: white; color: white;
font-weight: bold; font-weight: bold;
font-size: 20px; font-size: 20px;
} }
.qr-label { .qr-label {
font-size: 14px; font-size: 14px;
color: #999; color: #999;
} }
.footer-area { .footer-area {
text-align: center; text-align: center;
padding: 10px 0; padding: 10px 0;
font-size: 14px; font-size: 14px;
color: #999; color: #999;
} }
.footer-area a { .footer-area a {
text-decoration: none; text-decoration: none;
color: inherit; color: inherit;
} }
.footer-area a:hover { .footer-area a:hover {
text-decoration: underline; text-decoration: underline;
color: #2563eb; color: #2563eb;
} }
/* 响应式设计 */ /* 响应式设计 */
@media (max-width: 768px) { @media (max-width: 768px) {
.ten_links { .ten_links {
flex-direction: column; flex-direction: column;
} }
.ten_img { .ten_img {
margin-bottom: 20px; margin-bottom: 20px;
} }
.tencent-image { .tencent-image {
height: 180px; height: 180px;
} }
} }
.dark .brand-name { .dark .brand-name {
color: #DFDFD6; color: #DFDFD6;
} }
</style> </style>

17
src/simulator/index.md Normal file
View File

@@ -0,0 +1,17 @@
# 虚拟仿真技术概述
![alt text](/public/simulator/image.png)
## 从vECU到整车仿真
![alt text](/public/simulator/image-1.png)
<br>
<br>
![alt text](/public/simulator/image-2.png)
## 整车系统级软硬件联合仿真
![alt text](/public/simulator/image-3.png)
应用场景
- 算法及软件的快速测试验证用台架RT-ECU作为开发控制器的快速样件
- 控制器的常规HIL测试
- 整车级多控制器的交互测试

View File

@@ -1,16 +1,16 @@
# simulator # simulator
![alt text](/public/simulator/image.png) ![alt text](/public/simulator/image.png)
## 从vECU到整车仿真 ## 从vECU到整车仿真
![alt text](/public/simulator/image-1.png) ![alt text](/public/simulator/image-1.png)
<br> <br>
<br> <br>
![alt text](/public/simulator/image-2.png) ![alt text](/public/simulator/image-2.png)
## 整车系统级软硬件联合仿真 ## 整车系统级软硬件联合仿真
![alt text](/public/simulator/image-3.png) ![alt text](/public/simulator/image-3.png)
应用场景 应用场景
- 算法及软件的快速测试验证用台架RT-ECU作为开发控制器的快速样件 - 算法及软件的快速测试验证用台架RT-ECU作为开发控制器的快速样件
- 控制器的常规HIL测试 - 控制器的常规HIL测试
- 整车级多控制器的交互测试 - 整车级多控制器的交互测试

View File

@@ -0,0 +1,16 @@
# simulator
![alt text](/public/simulator/image.png)
## 从vECU到整车仿真
![alt text](/public/simulator/image-1.png)
<br>
<br>
![alt text](/public/simulator/image-2.png)
## 整车系统级软硬件联合仿真
![alt text](/public/simulator/image-3.png)
应用场景
- 算法及软件的快速测试验证用台架RT-ECU作为开发控制器的快速样件
- 控制器的常规HIL测试
- 整车级多控制器的交互测试