diff options
author | silverwind <me@silverwind.io> | 2022-09-07 23:35:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-07 17:35:54 -0400 |
commit | 52c2ef79023541f36fbb72b2e4598cb6f693335f (patch) | |
tree | 1f40ade459d6dbe62feb7e8b57b3cebef56f10ac /build/generate-go-licenses.go | |
parent | 8b8bdb30fbc522c38a35aad46a0036b926f5db9d (diff) | |
download | gitea-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.go | 74 |
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) + } +} |