aboutsummaryrefslogtreecommitdiffstats
path: root/build/generate-go-licenses.go
diff options
context:
space:
mode:
authorsilverwind <me@silverwind.io>2022-09-07 23:35:54 +0200
committerGitHub <noreply@github.com>2022-09-07 17:35:54 -0400
commit52c2ef79023541f36fbb72b2e4598cb6f693335f (patch)
tree1f40ade459d6dbe62feb7e8b57b3cebef56f10ac /build/generate-go-licenses.go
parent8b8bdb30fbc522c38a35aad46a0036b926f5db9d (diff)
downloadgitea-52c2ef79023541f36fbb72b2e4598cb6f693335f.tar.gz
gitea-52c2ef79023541f36fbb72b2e4598cb6f693335f.zip
Rewrite go license generator in go (#21078)
This removes the JS dependency in the checks pipeline. JSON output is different because the previous JS did indent the license data differently and a JSON key was changed, but the end result is the same as it gets re-indented by wepack. Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: zeripath <art27@cantab.net>
Diffstat (limited to 'build/generate-go-licenses.go')
-rw-r--r--build/generate-go-licenses.go74
1 files changed, 74 insertions, 0 deletions
diff --git a/build/generate-go-licenses.go b/build/generate-go-licenses.go
new file mode 100644
index 0000000000..8840cae4a5
--- /dev/null
+++ b/build/generate-go-licenses.go
@@ -0,0 +1,74 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+//go:build ignore
+
+package main
+
+import (
+ "encoding/json"
+ "io/fs"
+ "os"
+ "path/filepath"
+ "regexp"
+ "sort"
+ "strings"
+)
+
+// regexp is based on go-license, excluding README and NOTICE
+// https://github.com/google/go-licenses/blob/master/licenses/find.go
+var licenseRe = regexp.MustCompile(`^(?i)((UN)?LICEN(S|C)E|COPYING).*$`)
+
+type LicenseEntry struct {
+ Name string `json:"name"`
+ Path string `json:"path"`
+ LicenseText string `json:"licenseText"`
+}
+
+func main() {
+ base, out := os.Args[1], os.Args[2]
+
+ paths := []string{}
+ err := filepath.WalkDir(base, func(path string, entry fs.DirEntry, err error) error {
+ if err != nil {
+ return err
+ }
+ if entry.IsDir() || !licenseRe.MatchString(entry.Name()) {
+ return nil
+ }
+ paths = append(paths, path)
+ return nil
+ })
+ if err != nil {
+ panic(err)
+ }
+
+ sort.Strings(paths)
+
+ entries := []LicenseEntry{}
+ for _, path := range paths {
+ licenseText, err := os.ReadFile(path)
+ if err != nil {
+ panic(err)
+ }
+
+ path := strings.Replace(path, base+string(os.PathSeparator), "", 1)
+
+ entries = append(entries, LicenseEntry{
+ Name: filepath.Dir(path),
+ Path: path,
+ LicenseText: string(licenseText),
+ })
+ }
+
+ jsonBytes, err := json.MarshalIndent(entries, "", " ")
+ if err != nil {
+ panic(err)
+ }
+
+ err = os.WriteFile(out, jsonBytes, 0o644)
+ if err != nil {
+ panic(err)
+ }
+}