Skip to content

Commit

Permalink
Merge pull request #23 from luooooob/feat-website
Browse files Browse the repository at this point in the history
Add docs website
Linwenxuan authored Oct 17, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
2 parents 77d0b9d + 5f26ade commit a273e1e
Showing 16 changed files with 1,310 additions and 0 deletions.
68 changes: 68 additions & 0 deletions .github/workflows/gh-pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Deploy document site to Pages

on:
push:
branches: [main]

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: pages
cancel-in-progress: false

jobs:
# Build job
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Install .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 7.0.x
- name: Install docfx
run: dotnet tool install -g docfx
- name: Generate API docs
working-directory: ./docs
run: docfx metadata ./docfx.json
- uses: pnpm/action-setup@v2
name: Install pnpm
with:
version: 7
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18
- name: Setup Pages
uses: actions/configure-pages@v3
- name: Install dependencies
working-directory: ./docs
run: pnpm install
- name: Build with VitePress
working-directory: ./docs
run: pnpm build
- name: Upload artifact
uses: actions/upload-pages-artifact@v2
with:
path: docs/.vitepress/dist

# Deployment job
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
needs: build
runs-on: ubuntu-latest
name: Deploy
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -14,3 +14,9 @@ Lagrange.Core/Utility/Crypto/Provider/Dandelion/*.cs
riderModule.iml
/_ReSharper.Caches/

.DS_Store

docs/node_modules
docs/.vitepress/dist
docs/.vitepress/cache
docs/api
97 changes: 97 additions & 0 deletions docs/.vitepress/config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import { defineConfig } from 'vitepress'
import { readdirSync, readFileSync } from 'node:fs'
import path from 'node:path'
import YAML from 'yaml'

const rootpath = new URL('../', import.meta.url).pathname

function docsToItems(dirnames) {
return readdirSync(path.join(rootpath, ...dirnames), { withFileTypes: true })
.filter(d => /^\d{2}-/g.test(d.name))
.map(d => {
if (d.name.endsWith('.md')) {
return {
text: /(?<=\d{2}-).*(?=\.md)/g.exec(d.name),
link: path.join(...dirnames, d.name)
}
}
if (d.isDirectory) {
return {
text: /(?<=\d{2}-).*/g.exec(d.name),
items: docsToItems([...dirnames, d.name])
}
}
return {}
})
}

const sidebarItemsDocs = docsToItems(['docs'])

function tocToItems(arr) {
const [head, tail] = arr.reduce(([head, tail], x) => {
if (!x.href) {
return [[...head, tail], x]
}
if (tail.name) {
return [head, { ...tail, items: [...(tail.items || []), x] }]
}
return [[...head, x], {}]
}, [[], {}])

const foldArr = [...head, tail]

return foldArr.map(obj => {
let item = {
text: obj.name,
}
if (obj.items) {
item.items = tocToItems(obj.items)
}
if (obj.href) {
item.link = `api/${obj.href}`
}
return item
})
}

let apiObj;
try {
const toc = readFileSync(path.join(rootpath, 'api', 'toc.yml'), 'utf8')
apiObj = YAML.parse(toc)
} catch (err) {
console.warn("未找到API文档")
apiObj = []
}

const sidebarItemsApi = tocToItems(apiObj)

// console.log(JSON.stringify(sidebarItemsApi))

function findFirst(items) {
if (items.length > 0) {
if (items[0].link) {
return items[0].link
}
return findFirst(items[0].items)
}
return '/'
}

// https://vitepress.dev/reference/site-config
export default defineConfig({
base: "/Lagrange.Core",
title: "Lagrange",
description: "基于 QQNT 协议的高效率机器人库",
head: [['link', { rel: 'icon', href: '/Lagrange.Core/favicon.ico' }]],
themeConfig: {
logo: '/public/apple-touch-icon.png',
nav: [
{ text: '文档', link: findFirst(sidebarItemsDocs) },
{ text: 'API 参考', link: findFirst(sidebarItemsApi) }
],
sidebar: {
'/docs/': sidebarItemsDocs,
'/api/': sidebarItemsApi
}
}
})
25 changes: 25 additions & 0 deletions docs/docfx.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"metadata": [
{
"src": [
{
"files": [
"Lagrange.Core/Lagrange.Core.csproj"
],
"src": "../"
}
],
"dest": "api",
"output": ".",
"outputFormat": "markdown",
"includePrivateMembers": false,
"disableGitFeatures": false,
"disableDefaultFilter": false,
"noRestore": false,
"namespaceLayout": "flattened",
"memberLayout": "samePage",
"EnumSortOrder": "alphabetic",
"allowCompilationErrors": false
}
]
}
Loading

0 comments on commit a273e1e

Please sign in to comment.