You've already forked goreleaser
mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-10-08 23:12:05 +02:00
feat(nix): validate licenses (#4497)
this will check if the license provided by the user is a valid one. valid list of licenses is generated from nix's source code. closes #4496
This commit is contained in:
committed by
GitHub
parent
8586878fdf
commit
dda1c708ae
1
.github/workflows/generate.yml
vendored
1
.github/workflows/generate.yml
vendored
@@ -28,6 +28,7 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- run: task docs:generate
|
||||
- run: task schema:generate
|
||||
- run: task nix:licenses:generate
|
||||
- uses: stefanzweifel/git-auto-commit-action@8756aa072ef5b4a080af5dc8fef36c5d586e521d # v5
|
||||
with:
|
||||
commit_message: "chore: docs auto-update"
|
||||
|
@@ -67,6 +67,13 @@ tasks:
|
||||
cmds:
|
||||
- task: ci
|
||||
|
||||
nix:licenses:generate:
|
||||
desc: Generate nix/licenses.go
|
||||
cmds:
|
||||
- ./scripts/gen-nix-licenses.sh
|
||||
generates:
|
||||
- ./internal/pipe/nix/licenses.go
|
||||
|
||||
schema:generate:
|
||||
desc: Generate JSONSchema
|
||||
cmds:
|
||||
|
234
internal/pipe/nix/licenses.go
Normal file
234
internal/pipe/nix/licenses.go
Normal file
@@ -0,0 +1,234 @@
|
||||
// AUTO-GENERATED. DO NOT EDIT.
|
||||
|
||||
package nix
|
||||
|
||||
var validLicenses = []string{
|
||||
"abstyles",
|
||||
"acsl14",
|
||||
"activision",
|
||||
"afl20",
|
||||
"afl21",
|
||||
"afl3",
|
||||
"agpl3Only",
|
||||
"agpl3Plus",
|
||||
"aladdin",
|
||||
"amazonsl",
|
||||
"amd",
|
||||
"aom",
|
||||
"apsl10",
|
||||
"apsl20",
|
||||
"arphicpl",
|
||||
"artistic1",
|
||||
"artistic1-cl8",
|
||||
"artistic2",
|
||||
"asl20",
|
||||
"asl20-llvm",
|
||||
"bitstreamVera",
|
||||
"bitTorrent10",
|
||||
"bitTorrent11",
|
||||
"bola11",
|
||||
"boost",
|
||||
"beerware",
|
||||
"blueOak100",
|
||||
"bsd0",
|
||||
"bsd1",
|
||||
"bsd2",
|
||||
"bsd2Patent",
|
||||
"bsd2WithViews",
|
||||
"bsd3",
|
||||
"bsd3Clear",
|
||||
"bsdOriginal",
|
||||
"bsdOriginalShortened",
|
||||
"bsdOriginalUC",
|
||||
"bsdProtection",
|
||||
"bsl11",
|
||||
"caossl",
|
||||
"cal10",
|
||||
"caldera",
|
||||
"capec",
|
||||
"clArtistic",
|
||||
"cc0",
|
||||
"cc-by-nc-nd-30",
|
||||
"cc-by-nc-nd-40",
|
||||
"cc-by-nc-sa-20",
|
||||
"cc-by-nc-sa-25",
|
||||
"cc-by-nc-sa-30",
|
||||
"cc-by-nc-sa-40",
|
||||
"cc-by-nc-30",
|
||||
"cc-by-nc-40",
|
||||
"cc-by-nd-30",
|
||||
"cc-by-sa-10",
|
||||
"cc-by-sa-20",
|
||||
"cc-by-sa-25",
|
||||
"cc-by-10",
|
||||
"cc-by-30",
|
||||
"cc-by-sa-30",
|
||||
"cc-by-40",
|
||||
"cc-by-sa-40",
|
||||
"cddl",
|
||||
"cecill20",
|
||||
"cecill21",
|
||||
"cecill-b",
|
||||
"cecill-c",
|
||||
"cpal10",
|
||||
"cpl10",
|
||||
"curl",
|
||||
"doc",
|
||||
"drl10",
|
||||
"eapl",
|
||||
"ecl20",
|
||||
"efl10",
|
||||
"efl20",
|
||||
"elastic20",
|
||||
"epl10",
|
||||
"epl20",
|
||||
"epson",
|
||||
"eupl11",
|
||||
"eupl12",
|
||||
"fdl11Only",
|
||||
"fdl11Plus",
|
||||
"fdl12Only",
|
||||
"fdl12Plus",
|
||||
"fdl13Only",
|
||||
"fdl13Plus",
|
||||
"ffsl",
|
||||
"fraunhofer-fdk",
|
||||
"free",
|
||||
"ftl",
|
||||
"g4sl",
|
||||
"geogebra",
|
||||
"generaluser",
|
||||
"gfl",
|
||||
"gfsl",
|
||||
"gpl1Only",
|
||||
"gpl1Plus",
|
||||
"gpl2Only",
|
||||
"gpl2Classpath",
|
||||
"gpl2ClasspathPlus",
|
||||
"gpl2Oss",
|
||||
"gpl2Plus",
|
||||
"gpl3Only",
|
||||
"gpl3Plus",
|
||||
"gpl3ClasspathPlus",
|
||||
"hpnd",
|
||||
"hpndSellVariant",
|
||||
"iasl",
|
||||
"ijg",
|
||||
"imagemagick",
|
||||
"imlib2",
|
||||
"info-zip",
|
||||
"inria-compcert",
|
||||
"inria-icesl",
|
||||
"inria-zelus",
|
||||
"ipa",
|
||||
"ipl10",
|
||||
"isc",
|
||||
"databricks",
|
||||
"databricks-dbx",
|
||||
"fair",
|
||||
"fairsource09",
|
||||
"hl3",
|
||||
"issl",
|
||||
"knuth",
|
||||
"lal12",
|
||||
"lal13",
|
||||
"lens",
|
||||
"lgpl2Only",
|
||||
"lgpl2Plus",
|
||||
"lgpl21Only",
|
||||
"lgpl21Plus",
|
||||
"lgpl3Only",
|
||||
"lgpl3Plus",
|
||||
"lgpllr",
|
||||
"libpng",
|
||||
"libpng2",
|
||||
"libssh2",
|
||||
"libtiff",
|
||||
"llgpl21",
|
||||
"lppl1",
|
||||
"lppl12",
|
||||
"lppl13a",
|
||||
"lppl13c",
|
||||
"lpl-102",
|
||||
"miros",
|
||||
"mit",
|
||||
"mit-feh",
|
||||
"mitAdvertising",
|
||||
"mit0",
|
||||
"mpl10",
|
||||
"mpl11",
|
||||
"mpl20",
|
||||
"mspl",
|
||||
"mulan-psl2",
|
||||
"nasa13",
|
||||
"ncsa",
|
||||
"ncul1",
|
||||
"nlpl",
|
||||
"nposl3",
|
||||
"nvidiaCuda",
|
||||
"nvidiaCudaRedist",
|
||||
"obsidian",
|
||||
"ocamlLgplLinkingException",
|
||||
"ocamlpro_nc",
|
||||
"odbl",
|
||||
"ofl",
|
||||
"oml",
|
||||
"openldap",
|
||||
"openssl",
|
||||
"opubl",
|
||||
"osl2",
|
||||
"osl21",
|
||||
"osl3",
|
||||
"parity70",
|
||||
"php301",
|
||||
"postgresql",
|
||||
"postman",
|
||||
"psfl",
|
||||
"publicDomain",
|
||||
"purdueBsd",
|
||||
"prosperity30",
|
||||
"qhull",
|
||||
"qpl",
|
||||
"qwt",
|
||||
"ruby",
|
||||
"sendmail",
|
||||
"sgi-b-20",
|
||||
"sgmlug",
|
||||
"sleepycat",
|
||||
"smail",
|
||||
"sspl",
|
||||
"stk",
|
||||
"sudo",
|
||||
"sustainableUse",
|
||||
"tsl",
|
||||
"tcltk",
|
||||
"ucd",
|
||||
"ufl",
|
||||
"unfree",
|
||||
"unfreeRedistributable",
|
||||
"unfreeRedistributableFirmware",
|
||||
"unicode-dfs-2015",
|
||||
"unicode-dfs-2016",
|
||||
"unlicense",
|
||||
"upl",
|
||||
"vim",
|
||||
"virtualbox-puel",
|
||||
"vol-sl",
|
||||
"vsl10",
|
||||
"watcom",
|
||||
"w3c",
|
||||
"wadalab",
|
||||
"wtfpl",
|
||||
"wxWindows",
|
||||
"x11",
|
||||
"xfig",
|
||||
"zlib",
|
||||
"zpl20",
|
||||
"zpl21",
|
||||
"agpl3",
|
||||
"gpl2",
|
||||
"gpl3",
|
||||
"lgpl2",
|
||||
"lgpl21",
|
||||
"lgpl3",
|
||||
}
|
@@ -9,6 +9,7 @@ import (
|
||||
"os/exec"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"slices"
|
||||
"sort"
|
||||
"strings"
|
||||
"text/template"
|
||||
@@ -43,6 +44,7 @@ var (
|
||||
errNoRepoName = pipe.Skip("repository name is not set")
|
||||
errSkipUpload = pipe.Skip("nix.skip_upload is set")
|
||||
errSkipUploadAuto = pipe.Skip("nix.skip_upload is set to 'auto', and current version is a pre-release")
|
||||
errInvalidLicense = errors.New("nix.license is invalid")
|
||||
)
|
||||
|
||||
// NewBuild returns a pipe to be used in the build phase.
|
||||
@@ -83,6 +85,9 @@ func (Pipe) Default(ctx *context.Context) error {
|
||||
if nix.Goamd64 == "" {
|
||||
nix.Goamd64 = "v1"
|
||||
}
|
||||
if nix.License != "" && !slices.Contains(validLicenses, nix.License) {
|
||||
return fmt.Errorf("%w: %s", errInvalidLicense, nix.License)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@@ -86,6 +86,7 @@ func TestPrefetcher(t *testing.T) {
|
||||
func TestRunPipe(t *testing.T) {
|
||||
for _, tt := range []struct {
|
||||
name string
|
||||
expectDefaultErrorIs error
|
||||
expectRunErrorIs error
|
||||
expectPublishErrorIs error
|
||||
nix config.Nix
|
||||
@@ -100,6 +101,18 @@ func TestRunPipe(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "invalid license",
|
||||
expectDefaultErrorIs: errInvalidLicense,
|
||||
nix: config.Nix{
|
||||
IDs: []string{"foo"},
|
||||
License: "mitt",
|
||||
Repository: config.RepoRef{
|
||||
Owner: "foo",
|
||||
Name: "bar",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "deps",
|
||||
nix: config.Nix{
|
||||
@@ -529,12 +542,18 @@ func TestRunPipe(t *testing.T) {
|
||||
}
|
||||
|
||||
// default
|
||||
if tt.expectDefaultErrorIs != nil {
|
||||
err := bpipe.Default(ctx)
|
||||
require.ErrorAs(t, err, &tt.expectDefaultErrorIs)
|
||||
return
|
||||
|
||||
}
|
||||
require.NoError(t, bpipe.Default(ctx))
|
||||
|
||||
// run
|
||||
if tt.expectRunErrorIs != nil {
|
||||
err := bpipe.runAll(ctx, client)
|
||||
require.ErrorAs(t, err, &tt.expectPublishErrorIs)
|
||||
require.ErrorAs(t, err, &tt.expectRunErrorIs)
|
||||
return
|
||||
}
|
||||
require.NoError(t, bpipe.runAll(ctx, client))
|
||||
|
17
scripts/gen-nix-licenses.sh
Executable file
17
scripts/gen-nix-licenses.sh
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
{
|
||||
echo "// AUTO-GENERATED. DO NOT EDIT."
|
||||
echo
|
||||
echo "package nix"
|
||||
echo "var validLicenses = []string {"
|
||||
curl -s https://raw.githubusercontent.com/NixOS/nixpkgs/master/lib/licenses.nix |
|
||||
grep -E '.* = \{' |
|
||||
grep -v default |
|
||||
cut -f1 -d= |
|
||||
awk '{print "\"" $1 "\","}'
|
||||
echo -e "}"
|
||||
} >./internal/pipe/nix/licenses.go
|
||||
|
||||
gofumpt -w ./internal/pipe/nix/licenses.go
|
Reference in New Issue
Block a user