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 | |
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')
-rw-r--r-- | build/generate-go-licenses.go | 74 | ||||
-rw-r--r-- | build/generate-go-licenses.js | 30 |
2 files changed, 74 insertions, 30 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) + } +} diff --git a/build/generate-go-licenses.js b/build/generate-go-licenses.js deleted file mode 100644 index a645e594ba..0000000000 --- a/build/generate-go-licenses.js +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env node -import fastGlob from 'fast-glob'; -import {fileURLToPath} from 'url'; -import {readFileSync, writeFileSync} from 'fs'; -import wrapAnsi from 'wrap-ansi'; -import {join, dirname} from 'path'; - -const base = process.argv[2]; -const out = process.argv[3]; - -function exit(err) { - if (err) console.error(err); - process.exit(err ? 1 : 0); -} - -async function main() { - const data = fastGlob.sync('**/*', { - cwd: fileURLToPath(new URL(`../${base}`, import.meta.url)), - }).filter((path) => { - return /\/((UN)?LICEN(S|C)E|COPYING|NOTICE)/i.test(path); - }).sort().map((path) => { - return { - name: dirname(path), - body: wrapAnsi(readFileSync(join(base, path), 'utf8') || '', 80) - }; - }); - writeFileSync(out, JSON.stringify(data, null, 2)); -} - -main().then(exit).catch(exit); |