mirror of https://github.com/go-gitea/gitea
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>pull/21109/head
parent
8b8bdb30fb
commit
52c2ef7902
File diff suppressed because one or more lines are too long
@ -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) |
||||
} |
||||
} |
@ -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); |
Loading…
Reference in new issue