summaryrefslogtreecommitdiffstats
path: root/build
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
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')
-rw-r--r--build/generate-go-licenses.go74
-rw-r--r--build/generate-go-licenses.js30
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);