From af2623745b1d6b5d72a3ec7f9b2b74adbd3fe869 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 5 Apr 2021 11:33:40 +0800 Subject: [PATCH 01/11] Versioned docs --- Makefile | 5 ++++- .../doc/{advanced => developers}/hacking-on-gitea.zh-cn.md | 0 2 files changed, 4 insertions(+), 1 deletion(-) rename docs/content/doc/{advanced => developers}/hacking-on-gitea.zh-cn.md (100%) diff --git a/Makefile b/Makefile index ab112584c65f4..f6af4c33a6ea0 100644 --- a/Makefile +++ b/Makefile @@ -660,7 +660,10 @@ docs: @hash hugo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ curl -sL https://github.com/gohugoio/hugo/releases/download/v0.74.3/hugo_0.74.3_Linux-64bit.tar.gz | tar zxf - -C /tmp && mv /tmp/hugo /usr/bin/hugo && chmod +x /usr/bin/hugo; \ fi - cd docs; make trans-copy clean build-offline; + cd docs; make trans-copy clean ; + git co release/v1.13 && PUBLIC=public/v1.13 make build-offline ; + git co release/v1.14 && PUBLIC=public/v1.14 make build-offline ; + git co master && PUBLIC=public make build-offline ; .PHONY: deps deps: deps-frontend deps-backend diff --git a/docs/content/doc/advanced/hacking-on-gitea.zh-cn.md b/docs/content/doc/developers/hacking-on-gitea.zh-cn.md similarity index 100% rename from docs/content/doc/advanced/hacking-on-gitea.zh-cn.md rename to docs/content/doc/developers/hacking-on-gitea.zh-cn.md From b5d4b5f979fb04cca3da2bdbfa01c69004b86c3a Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 5 Apr 2021 11:36:22 +0800 Subject: [PATCH 02/11] From v1.14 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f6af4c33a6ea0..9e3da7034fdc5 100644 --- a/Makefile +++ b/Makefile @@ -661,7 +661,7 @@ docs: curl -sL https://github.com/gohugoio/hugo/releases/download/v0.74.3/hugo_0.74.3_Linux-64bit.tar.gz | tar zxf - -C /tmp && mv /tmp/hugo /usr/bin/hugo && chmod +x /usr/bin/hugo; \ fi cd docs; make trans-copy clean ; - git co release/v1.13 && PUBLIC=public/v1.13 make build-offline ; + #git co release/v1.13 && PUBLIC=public/v1.13 make build-offline ; git co release/v1.14 && PUBLIC=public/v1.14 make build-offline ; git co master && PUBLIC=public make build-offline ; From d623194c33cdfdec6a3e320a11ece92402747418 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 4 Dec 2021 14:36:24 +0800 Subject: [PATCH 03/11] support versioned make docs --- docs/Makefile | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/Makefile b/docs/Makefile index 68afe03e75fe0..02e079b0ded07 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,6 +1,16 @@ THEME := themes/gitea -PUBLIC := public ARCHIVE := https://dl.gitea.io/theme/master.tar.gz +BRANCH := $(shell git rev-parse --abbrev-ref HEAD) +DOC_VERSION := $(shell git describe --tags --always | sed 's/-/+/' | sed 's/^v//') +PUBLIC := public/$(DOC_VERSION) +BASE_PATH := /$(DOC_VERSION)/ +MAIN_BRANCH := main + +ifeq ($(BRANCH), $(MAIN_BRANCH)) + DOC_VERSION := $(MAIN_BRANCH) + PUBLIC := public + BASE_PATH := / +endif .PHONY: all all: build @@ -19,11 +29,11 @@ server: $(THEME) .PHONY: build build: $(THEME) - hugo --cleanDestinationDir + hugo --cleanDestinationDir --destination=$(PUBLIC) .PHONY: build-offline build-offline: $(THEME) - hugo --baseURL="/" --cleanDestinationDir + hugo --baseURL="$(BASE_PATH)" --destination=$(PUBLIC) --cleanDestinationDir .PHONY: update update: $(THEME) From 78ae2fd8d37614d8797994be34df1c4e2ace6cca Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 8 Dec 2021 20:10:28 +0800 Subject: [PATCH 04/11] Fix docs --- Makefile | 3 ++- docs/Makefile | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 9e3da7034fdc5..4172148dfea45 100644 --- a/Makefile +++ b/Makefile @@ -661,9 +661,10 @@ docs: curl -sL https://github.com/gohugoio/hugo/releases/download/v0.74.3/hugo_0.74.3_Linux-64bit.tar.gz | tar zxf - -C /tmp && mv /tmp/hugo /usr/bin/hugo && chmod +x /usr/bin/hugo; \ fi cd docs; make trans-copy clean ; + git fetch origin #git co release/v1.13 && PUBLIC=public/v1.13 make build-offline ; git co release/v1.14 && PUBLIC=public/v1.14 make build-offline ; - git co master && PUBLIC=public make build-offline ; + git co main && PUBLIC=public make build-offline ; .PHONY: deps deps: deps-frontend deps-backend diff --git a/docs/Makefile b/docs/Makefile index 02e079b0ded07..f5da24e7b47ec 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -2,8 +2,6 @@ THEME := themes/gitea ARCHIVE := https://dl.gitea.io/theme/master.tar.gz BRANCH := $(shell git rev-parse --abbrev-ref HEAD) DOC_VERSION := $(shell git describe --tags --always | sed 's/-/+/' | sed 's/^v//') -PUBLIC := public/$(DOC_VERSION) -BASE_PATH := /$(DOC_VERSION)/ MAIN_BRANCH := main ifeq ($(BRANCH), $(MAIN_BRANCH)) @@ -12,6 +10,9 @@ ifeq ($(BRANCH), $(MAIN_BRANCH)) BASE_PATH := / endif +PUBLIC := public/$(DOC_VERSION) +BASE_PATH := /$(DOC_VERSION)/ + .PHONY: all all: build From 21e86567fb32d220c04da2213fdcc21fec4b4bd9 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 8 Dec 2021 20:16:45 +0800 Subject: [PATCH 05/11] Fix docs --- Makefile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 4172148dfea45..23f9d9ecc0972 100644 --- a/Makefile +++ b/Makefile @@ -660,11 +660,10 @@ docs: @hash hugo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ curl -sL https://github.com/gohugoio/hugo/releases/download/v0.74.3/hugo_0.74.3_Linux-64bit.tar.gz | tar zxf - -C /tmp && mv /tmp/hugo /usr/bin/hugo && chmod +x /usr/bin/hugo; \ fi - cd docs; make trans-copy clean ; + cd docs; git fetch origin - #git co release/v1.13 && PUBLIC=public/v1.13 make build-offline ; - git co release/v1.14 && PUBLIC=public/v1.14 make build-offline ; - git co main && PUBLIC=public make build-offline ; + git co release/v1.15 && PUBLIC=public/v1.15 make trans-copy clean build-offline ; + git co main && git clean -d -f && PUBLIC=public make trans-copy clean build-offline ; .PHONY: deps deps: deps-frontend deps-backend From 27c12877c1d441f2020c560013dd5ae961b771dc Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 8 Dec 2021 20:18:47 +0800 Subject: [PATCH 06/11] Fix docs --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 23f9d9ecc0972..b4b1b31ab1a16 100644 --- a/Makefile +++ b/Makefile @@ -662,8 +662,8 @@ docs: fi cd docs; git fetch origin - git co release/v1.15 && PUBLIC=public/v1.15 make trans-copy clean build-offline ; - git co main && git clean -d -f && PUBLIC=public make trans-copy clean build-offline ; +# git co release/v1.15 && PUBLIC=public/v1.15 make clean trans-copy build-offline ; + git co main && git clean -d -f && PUBLIC=public make clean trans-copy build-offline ; .PHONY: deps deps: deps-frontend deps-backend From 15bdbea891ad6db7d194f512f3fd97459683b9aa Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 8 Dec 2021 21:01:01 +0800 Subject: [PATCH 07/11] Fix docs --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b4b1b31ab1a16..aad68592fe891 100644 --- a/Makefile +++ b/Makefile @@ -662,7 +662,8 @@ docs: fi cd docs; git fetch origin -# git co release/v1.15 && PUBLIC=public/v1.15 make clean trans-copy build-offline ; + git co release/v1.15 && make trans-copy clean build-offline ; + mv public/ public/v1.15/ git co main && git clean -d -f && PUBLIC=public make clean trans-copy build-offline ; .PHONY: deps From a8347780d79109149bccca90ac289d4ba44885da Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 8 Dec 2021 21:20:44 +0800 Subject: [PATCH 08/11] build old version docs out of the main repo --- Makefile | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index aad68592fe891..3b1544184a732 100644 --- a/Makefile +++ b/Makefile @@ -660,11 +660,9 @@ docs: @hash hugo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ curl -sL https://github.com/gohugoio/hugo/releases/download/v0.74.3/hugo_0.74.3_Linux-64bit.tar.gz | tar zxf - -C /tmp && mv /tmp/hugo /usr/bin/hugo && chmod +x /usr/bin/hugo; \ fi - cd docs; - git fetch origin - git co release/v1.15 && make trans-copy clean build-offline ; - mv public/ public/v1.15/ - git co main && git clean -d -f && PUBLIC=public make clean trans-copy build-offline ; + git fetch origin; + git clone -b release/v1.15 ./ /tmp/gitea-docs-v1.15; + cd /tmp/gitea-docs-v1.15 && make docs; .PHONY: deps deps: deps-frontend deps-backend From 23a738b3b9a5db2767199e8442cb06579b3975e8 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 10 Apr 2022 23:48:44 +0800 Subject: [PATCH 09/11] add docs build go file --- build/generate-docs.go | 75 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 build/generate-docs.go diff --git a/build/generate-docs.go b/build/generate-docs.go new file mode 100644 index 0000000000000..5004770db94e1 --- /dev/null +++ b/build/generate-docs.go @@ -0,0 +1,75 @@ +// Copyright 2022 The Gitea Authors. All rights reserved. +// Copyright (c) 2015, Wade Simmons +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// generate-docs generates documents from markdown files in docs/ + +//go:build ignore +// +build ignore + +package main + +import ( + "fmt" + "log" + "os" + "os/exec" + "path/filepath" + + "code.gitea.io/gitea/modules/git" +) + +func main() { + curDir, err := os.Getwd() + if err != nil { + log.Fatal(err) + } + + fmt.Println("Current Directory is", curDir) + + tmpDir := os.TempDir() + distDir, err := os.MkdirTemp(tmpDir, "gitea-docs") + if err != nil { + log.Fatal(err) + } + cmd := exec.Command("git", "fetch", "origin") + cmd.Dir = curDir + if err := cmd.Run(); err != nil { + log.Fatal(err) + } + releaseBranches, err := fetchAllReleasesBranches(curDir) + if err != nil { + log.Fatal(err) + } + for _, releaseVersion := range releaseBranches { + if err := genearteOneVersion(curDir, distDir, releaseVersion); err != nil { + log.Fatal(err) + } + } + fmt.Println("----", distDir) +} + +func fetchAllReleasesBranches(curDir string) ([]string, error) { + git.NewCommand("branch", "-r", "--list 'origin/release/*'").Run + cmd := exec.Command("git") + cmd.Dir = curDir + cmd.Run() + repo, err := git.OpenRepository(curDir) + if err != nil { + return nil, err + } + + branches, _, err := repo.GetBranches(0, 0) + return branches, err +} + +func genearteOneVersion(curDir, distDir, releaseVersion string) error { + distSubDir := filepath.Join(distDir, releaseVersion) + + exec.Command("git", "switch", releaseVersion) + // hugo $(PUBLIC) + cmd := exec.Command("hugo", "--cleanDestinationDir", "--destination="+distSubDir) + cmd.Dir = curDir + return cmd.Run() +} From 8a5d87f587a8697195e80d57b9bf012cc2a65980 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 11 Apr 2022 00:07:03 +0800 Subject: [PATCH 10/11] improve code --- build/generate-docs.go | 44 +++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/build/generate-docs.go b/build/generate-docs.go index 5004770db94e1..32981e6a7547f 100644 --- a/build/generate-docs.go +++ b/build/generate-docs.go @@ -11,13 +11,14 @@ package main import ( + "bufio" + "bytes" "fmt" "log" "os" "os/exec" "path/filepath" - - "code.gitea.io/gitea/modules/git" + "strings" ) func main() { @@ -27,12 +28,13 @@ func main() { } fmt.Println("Current Directory is", curDir) - tmpDir := os.TempDir() distDir, err := os.MkdirTemp(tmpDir, "gitea-docs") if err != nil { log.Fatal(err) } + + fmt.Println("Fetch origin branches") cmd := exec.Command("git", "fetch", "origin") cmd.Dir = curDir if err := cmd.Run(); err != nil { @@ -42,6 +44,7 @@ func main() { if err != nil { log.Fatal(err) } + fmt.Printf("Found %d branches\n", len(releaseBranches)) for _, releaseVersion := range releaseBranches { if err := genearteOneVersion(curDir, distDir, releaseVersion); err != nil { log.Fatal(err) @@ -51,25 +54,40 @@ func main() { } func fetchAllReleasesBranches(curDir string) ([]string, error) { - git.NewCommand("branch", "-r", "--list 'origin/release/*'").Run - cmd := exec.Command("git") + var output bytes.Buffer + var stderr strings.Builder + cmd := exec.Command("git", "branch", "-r", "--list", "origin/release/*") cmd.Dir = curDir - cmd.Run() - repo, err := git.OpenRepository(curDir) - if err != nil { - return nil, err + cmd.Stdout = &output + cmd.Stderr = &stderr + if err := cmd.Run(); err != nil { + return nil, fmt.Errorf("%v - %v", err, stderr.String()) } + var branches []string + scanner := bufio.NewScanner(&output) - branches, _, err := repo.GetBranches(0, 0) - return branches, err + for scanner.Scan() { + branch := strings.TrimPrefix(strings.TrimSpace(scanner.Text()), "origin/release/") + branches = append(branches, branch) + } + + return branches, nil } func genearteOneVersion(curDir, distDir, releaseVersion string) error { + fmt.Println("Genera branch", releaseVersion) + distSubDir := filepath.Join(distDir, releaseVersion) - exec.Command("git", "switch", releaseVersion) + var stderr strings.Builder + cmd := exec.Command("git", "switch", "release/"+releaseVersion) + cmd.Dir = curDir + cmd.Stderr = &stderr + if err := cmd.Run(); err != nil { + return fmt.Errorf("%v - %v", err, stderr.String()) + } // hugo $(PUBLIC) - cmd := exec.Command("hugo", "--cleanDestinationDir", "--destination="+distSubDir) + cmd = exec.Command("hugo", "--cleanDestinationDir", "--destination="+distSubDir) cmd.Dir = curDir return cmd.Run() } From 783f8655b88bd6d3ceadc490a2c19c30f249e1b5 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 11 Apr 2022 01:17:31 +0800 Subject: [PATCH 11/11] improve code --- build/generate-docs.go | 149 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 137 insertions(+), 12 deletions(-) diff --git a/build/generate-docs.go b/build/generate-docs.go index 32981e6a7547f..d7f31939406fe 100644 --- a/build/generate-docs.go +++ b/build/generate-docs.go @@ -11,30 +11,107 @@ package main import ( + "archive/tar" "bufio" "bytes" + "compress/gzip" "fmt" + "io" "log" + "net/http" "os" "os/exec" + "path" "path/filepath" + "sort" "strings" + + "github.com/hashicorp/go-version" ) +func dlThemeFile(dir string) error { + resp, err := http.Get("https://dl.gitea.io/theme/master.tar.gz") + if err != nil { + return err + } + defer resp.Body.Close() + themePath := filepath.Join(dir, "theme.tar.gz") + f, err := os.Create(themePath) + if err != nil { + return err + } + defer f.Close() + if _, err = io.Copy(f, resp.Body); err != nil { + return err + } + f.Close() + + f2, err := os.Open(themePath) + if err != nil { + return err + } + defer f2.Close() + + dstPath := filepath.Join(dir, "gitea") + + // gzip read + gr, err := gzip.NewReader(f2) + if err != nil { + return err + } + defer gr.Close() + + // tar read + tr := tar.NewReader(gr) + + // 读取文件 + for { + h, err := tr.Next() + if err == io.EOF { + break + } + if err != nil { + return err + } + if h.FileInfo().IsDir() { + continue + } + if err := os.MkdirAll(filepath.Join(dstPath, path.Dir(h.Name)), os.ModePerm); err != nil { + return err + } + + // 打开文件 + fw, err := os.Create(filepath.Join(dstPath, h.Name)) + if err != nil { + return err + } + defer fw.Close() + + // 写文件 + _, err = io.Copy(fw, tr) + if err != nil { + return err + } + fw.Close() + } + return nil +} + func main() { curDir, err := os.Getwd() if err != nil { log.Fatal(err) } - fmt.Println("Current Directory is", curDir) + fmt.Println("Current directory is", curDir) tmpDir := os.TempDir() - distDir, err := os.MkdirTemp(tmpDir, "gitea-docs") + distDir, err := os.MkdirTemp(tmpDir, "gitea-docs-dist") if err != nil { log.Fatal(err) } + fmt.Println("Dist directory is", distDir) - fmt.Println("Fetch origin branches") + fmt.Println("Fetching origin branches") cmd := exec.Command("git", "fetch", "origin") cmd.Dir = curDir if err := cmd.Run(); err != nil { @@ -45,14 +122,24 @@ func main() { log.Fatal(err) } fmt.Printf("Found %d branches\n", len(releaseBranches)) + workspaceDir, err := os.MkdirTemp(tmpDir, "gitea-docs-workspace") + if err != nil { + log.Fatal(err) + } + + if err = dlThemeFile(workspaceDir); err != nil { + log.Fatal(err) + } + for _, releaseVersion := range releaseBranches { - if err := genearteOneVersion(curDir, distDir, releaseVersion); err != nil { + if err := genearteOneVersion(workspaceDir, curDir, distDir, releaseVersion); err != nil { log.Fatal(err) } } - fmt.Println("----", distDir) } +var minDocVersion, _ = version.NewVersion("v1.16") + func fetchAllReleasesBranches(curDir string) ([]string, error) { var output bytes.Buffer var stderr strings.Builder @@ -68,26 +155,64 @@ func fetchAllReleasesBranches(curDir string) ([]string, error) { for scanner.Scan() { branch := strings.TrimPrefix(strings.TrimSpace(scanner.Text()), "origin/release/") + ver, _ := version.NewVersion(branch) + if ver.LessThan(minDocVersion) { + continue + } + branches = append(branches, branch) } + sort.Slice(branches, func(i, j int) bool { + a, _ := version.NewVersion(branches[i]) + b, _ := version.NewVersion(branches[j]) + return a.LessThan(b) + }) + return branches, nil } -func genearteOneVersion(curDir, distDir, releaseVersion string) error { - fmt.Println("Genera branch", releaseVersion) +func genearteOneVersion(workspaceDir, gitDir, distDir, releaseVersion string) error { + curVerDir := filepath.Join(workspaceDir, releaseVersion) + fmt.Printf("Genera branch %s in %s\n", releaseVersion, curVerDir) distSubDir := filepath.Join(distDir, releaseVersion) var stderr strings.Builder - cmd := exec.Command("git", "switch", "release/"+releaseVersion) - cmd.Dir = curDir + cmd := exec.Command("git", "clone", "-b", "release/"+releaseVersion, gitDir, releaseVersion) + cmd.Dir = workspaceDir cmd.Stderr = &stderr if err := cmd.Run(); err != nil { return fmt.Errorf("%v - %v", err, stderr.String()) } + + stderr.Reset() // hugo $(PUBLIC) - cmd = exec.Command("hugo", "--cleanDestinationDir", "--destination="+distSubDir) - cmd.Dir = curDir - return cmd.Run() + cmd = exec.Command("make", `clean`, "trans-copy") + cmd.Dir = filepath.Join(curVerDir, "docs") + cmd.Stderr = &stderr + if err := cmd.Run(); err != nil { + return fmt.Errorf("%v - %v", err, stderr.String()) + } + + if err := os.MkdirAll(filepath.Join(curVerDir, "docs", "themes", "gitea"), os.ModePerm); err != nil { + return err + } + + stderr.Reset() + cmd = exec.Command("cp", `-r`, filepath.Join(workspaceDir, "gitea"), filepath.Join(curVerDir, "docs", "themes", "gitea")) + cmd.Dir = filepath.Join(curVerDir, "docs") + cmd.Stderr = &stderr + if err := cmd.Run(); err != nil { + return fmt.Errorf("%v - %v", err, stderr.String()) + } + + stderr.Reset() + cmd = exec.Command("hugo", `--baseURL="/"`, "--cleanDestinationDir", "--destination="+distSubDir) + cmd.Dir = filepath.Join(curVerDir, "docs") + cmd.Stderr = &stderr + if err := cmd.Run(); err != nil { + return fmt.Errorf("%v - %v", err, stderr.String()) + } + return nil }