Feat: add ci check the link (#324)
This commit is contained in:
parent
c68358d548
commit
02893974d8
|
|
@ -7,6 +7,16 @@ on:
|
|||
branches: main
|
||||
|
||||
jobs:
|
||||
check-link:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/setup-go@v1
|
||||
with:
|
||||
go-version: "1.16.6"
|
||||
- name: Check Link
|
||||
run: make check-link
|
||||
|
||||
checks:
|
||||
if: github.event_name != 'push'
|
||||
runs-on: ubuntu-latest
|
||||
|
|
@ -14,7 +24,7 @@ jobs:
|
|||
- uses: actions/checkout@v1
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '14.x'
|
||||
node-version: "14.x"
|
||||
- name: Test Build
|
||||
run: |
|
||||
if [ -e yarn.lock ]; then
|
||||
|
|
@ -32,7 +42,7 @@ jobs:
|
|||
- uses: actions/checkout@v1
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '14.x'
|
||||
node-version: "14.x"
|
||||
- uses: webfactory/ssh-agent@v0.5.0
|
||||
with:
|
||||
ssh-private-key: ${{ secrets.GH_PAGES_DEPLOY }}
|
||||
|
|
|
|||
3
Makefile
3
Makefile
|
|
@ -1,2 +1,5 @@
|
|||
update-version:
|
||||
sh ./hack/version.sh $(version)
|
||||
|
||||
check-link:
|
||||
go run ./hack/linkcheck.go
|
||||
|
|
|
|||
|
|
@ -0,0 +1,74 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var cnt int
|
||||
filepath.Walk(".", func(path string, info fs.FileInfo, err error) error {
|
||||
if !strings.HasSuffix(path, ".md") || strings.Contains(path, "node_modules/") || strings.Contains(path, "version-v1.0") || strings.HasSuffix(path, "introduction.md") || strings.HasSuffix(path, "README.md") {
|
||||
return nil
|
||||
}
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
fmt.Printf("readfile %s err %v\n", path, err)
|
||||
return nil
|
||||
}
|
||||
if !strings.Contains(string(data), "](../") {
|
||||
return nil
|
||||
}
|
||||
targetDir := filepath.Dir(path)
|
||||
buff := bytes.NewBuffer(data)
|
||||
for {
|
||||
line, err := buff.ReadString('\n')
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
sections := strings.Split(line, "](")
|
||||
if len(sections) <= 1 {
|
||||
continue
|
||||
}
|
||||
|
||||
for idx, s := range sections {
|
||||
if idx < 1 {
|
||||
continue
|
||||
}
|
||||
if strings.HasPrefix(s, "http://") || strings.HasPrefix(s, "https://") || strings.HasPrefix(s, "#") {
|
||||
continue
|
||||
}
|
||||
d := strings.Index(s, ")")
|
||||
subStr := s[:d]
|
||||
targetFilePath := filepath.Clean(targetDir + "/" + subStr)
|
||||
//fmt.Println(path, subStr, "=>", targetFilePath)
|
||||
if _, err1 := os.Stat(targetFilePath); err1 != nil {
|
||||
if _, err2 := os.Stat(targetFilePath + ".md"); err2 != nil {
|
||||
ss := strings.LastIndex(targetFilePath, "#")
|
||||
if ss != -1 {
|
||||
targetFilePath = targetFilePath[:ss]
|
||||
}
|
||||
ww := strings.LastIndex(targetFilePath, "?")
|
||||
if ww != -1 {
|
||||
targetFilePath = targetFilePath[:ww]
|
||||
}
|
||||
if _, err3 := os.Stat(targetFilePath + ".md"); err3 != nil {
|
||||
if _, err4 := os.Stat(targetFilePath + ".mdx"); err4 != nil {
|
||||
fmt.Println("file:", path, "refer to a non-existent doc:", subStr, "search path:", targetFilePath)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
cnt++
|
||||
return nil
|
||||
})
|
||||
fmt.Printf("%d total files effected\n", cnt)
|
||||
}
|
||||
Loading…
Reference in New Issue