From 52c2ef79023541f36fbb72b2e4598cb6f693335f Mon Sep 17 00:00:00 2001 From: silverwind Date: Wed, 7 Sep 2022 23:35:54 +0200 Subject: 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 Co-authored-by: zeripath --- build/generate-go-licenses.go | 74 +++++++++++++++++++++++++++++++++++++++++++ build/generate-go-licenses.js | 30 ------------------ 2 files changed, 74 insertions(+), 30 deletions(-) create mode 100644 build/generate-go-licenses.go delete mode 100644 build/generate-go-licenses.js (limited to 'build') 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); -- cgit v1.2.3