mirror of
https://github.com/inspec/inspec
synced 2024-11-10 07:04:15 +00:00
verifies that inspec.yml uses licenses in SPDX format
Signed-off-by: Christoph Hartmann <chris@lollyrock.com>
This commit is contained in:
parent
3f7b049981
commit
a6ef98c896
10 changed files with 403 additions and 8 deletions
2
Rakefile
2
Rakefile
|
@ -6,6 +6,7 @@ require 'bundler/gem_tasks'
|
||||||
require 'rake/testtask'
|
require 'rake/testtask'
|
||||||
require_relative 'tasks/changelog'
|
require_relative 'tasks/changelog'
|
||||||
require_relative 'tasks/maintainers'
|
require_relative 'tasks/maintainers'
|
||||||
|
require_relative 'tasks/spdx'
|
||||||
|
|
||||||
# The docs tasks rely on ruby-progressbar. If we can't load it, then don't
|
# The docs tasks rely on ruby-progressbar. If we can't load it, then don't
|
||||||
# load the docs tasks. This is necessary to allow this Rakefile to work
|
# load the docs tasks. This is necessary to allow this Rakefile to work
|
||||||
|
@ -195,4 +196,3 @@ namespace :www do
|
||||||
exit(1)
|
exit(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ title: InSpec example inheritance
|
||||||
maintainer: Chef Software, Inc.
|
maintainer: Chef Software, Inc.
|
||||||
copyright: Chef Software, Inc.
|
copyright: Chef Software, Inc.
|
||||||
copyright_email: support@chef.io
|
copyright_email: support@chef.io
|
||||||
license: Apache 2 license
|
license: Apache-2.0
|
||||||
summary: Demonstrates the use of InSpec profile inheritance
|
summary: Demonstrates the use of InSpec profile inheritance
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
supports:
|
supports:
|
||||||
|
|
|
@ -3,7 +3,7 @@ title: Meta Compliance Profile
|
||||||
maintainer: InSpec Authors
|
maintainer: InSpec Authors
|
||||||
copyright: InSpec Authors
|
copyright: InSpec Authors
|
||||||
copyright_email: support@chef.io
|
copyright_email: support@chef.io
|
||||||
license: Apache 2
|
license: Apache-2.0
|
||||||
summary: InSpec Profile that is only consuming dependencies
|
summary: InSpec Profile that is only consuming dependencies
|
||||||
version: 0.2.0
|
version: 0.2.0
|
||||||
depends:
|
depends:
|
||||||
|
|
|
@ -3,6 +3,6 @@ title: InSpec Profile
|
||||||
maintainer: The Authors
|
maintainer: The Authors
|
||||||
copyright: The Authors
|
copyright: The Authors
|
||||||
copyright_email: you@example.com
|
copyright_email: you@example.com
|
||||||
license: All Rights Reserved
|
license: Apache-2.0
|
||||||
summary: An InSpec Compliance Profile
|
summary: An InSpec Compliance Profile
|
||||||
version: 0.1.0
|
version: 0.1.0
|
||||||
|
|
|
@ -3,7 +3,7 @@ title: InSpec Example Profile
|
||||||
maintainer: Chef Software, Inc.
|
maintainer: Chef Software, Inc.
|
||||||
copyright: Chef Software, Inc.
|
copyright: Chef Software, Inc.
|
||||||
copyright_email: support@chef.io
|
copyright_email: support@chef.io
|
||||||
license: Apache 2 license
|
license: Apache-2.0
|
||||||
summary: Demonstrates the use of InSpec Compliance Profile
|
summary: Demonstrates the use of InSpec Compliance Profile
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
supports:
|
supports:
|
||||||
|
|
|
@ -3,6 +3,6 @@ title: InSpec Profile
|
||||||
maintainer: The Authors
|
maintainer: The Authors
|
||||||
copyright: The Authors
|
copyright: The Authors
|
||||||
copyright_email: you@example.com
|
copyright_email: you@example.com
|
||||||
license: All Rights Reserved
|
license: Apache-2.0
|
||||||
summary: An InSpec Compliance Profile
|
summary: An InSpec Compliance Profile
|
||||||
version: 0.1.0
|
version: 0.1.0
|
||||||
|
|
|
@ -7,6 +7,7 @@ require 'logger'
|
||||||
require 'rubygems/version'
|
require 'rubygems/version'
|
||||||
require 'rubygems/requirement'
|
require 'rubygems/requirement'
|
||||||
require 'semverse'
|
require 'semverse'
|
||||||
|
require 'utils/spdx'
|
||||||
|
|
||||||
module Inspec
|
module Inspec
|
||||||
# Extract metadata.rb information
|
# Extract metadata.rb information
|
||||||
|
@ -102,7 +103,7 @@ module Inspec
|
||||||
end
|
end
|
||||||
|
|
||||||
# return all warn and errors
|
# return all warn and errors
|
||||||
def valid
|
def valid # rubocop:disable Metrics/AbcSize
|
||||||
errors = []
|
errors = []
|
||||||
warnings = []
|
warnings = []
|
||||||
|
|
||||||
|
@ -116,11 +117,16 @@ module Inspec
|
||||||
errors.push('Version needs to be in SemVer format')
|
errors.push('Version needs to be in SemVer format')
|
||||||
end
|
end
|
||||||
|
|
||||||
%w{ title summary maintainer copyright }.each do |field|
|
%w{ title summary maintainer copyright license }.each do |field|
|
||||||
next unless params[field.to_sym].nil?
|
next unless params[field.to_sym].nil?
|
||||||
warnings.push("Missing profile #{field} in #{ref}")
|
warnings.push("Missing profile #{field} in #{ref}")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# if version is set, ensure it is in SPDX format
|
||||||
|
if !params[:license].nil? && !Spdx.valid_license?(params[:license])
|
||||||
|
errors.push("License '#{params[:license]}' needs to be in SPDX format. See https://spdx.org/licenses/.")
|
||||||
|
end
|
||||||
|
|
||||||
[errors, warnings]
|
[errors, warnings]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
13
lib/utils/spdx.rb
Normal file
13
lib/utils/spdx.rb
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
# encoding: utf-8
|
||||||
|
# author: Christoph Hartmann
|
||||||
|
# author: Dominik Richter
|
||||||
|
class Spdx
|
||||||
|
def self.licenses
|
||||||
|
spdx_file = File.join(File.dirname(__FILE__), 'spdx.txt').freeze
|
||||||
|
File.read(spdx_file).split("\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.valid_license?(license)
|
||||||
|
licenses.include?(license)
|
||||||
|
end
|
||||||
|
end
|
343
lib/utils/spdx.txt
Normal file
343
lib/utils/spdx.txt
Normal file
|
@ -0,0 +1,343 @@
|
||||||
|
Glide
|
||||||
|
Abstyles
|
||||||
|
AFL-1.1
|
||||||
|
AFL-1.2
|
||||||
|
AFL-2.0
|
||||||
|
AFL-2.1
|
||||||
|
AFL-3.0
|
||||||
|
AMPAS
|
||||||
|
APL-1.0
|
||||||
|
Adobe-Glyph
|
||||||
|
APAFML
|
||||||
|
Adobe-2006
|
||||||
|
AGPL-1.0
|
||||||
|
Afmparse
|
||||||
|
Aladdin
|
||||||
|
ADSL
|
||||||
|
AMDPLPA
|
||||||
|
ANTLR-PD
|
||||||
|
Apache-1.0
|
||||||
|
Apache-1.1
|
||||||
|
Apache-2.0
|
||||||
|
AML
|
||||||
|
APSL-1.0
|
||||||
|
APSL-1.1
|
||||||
|
APSL-1.2
|
||||||
|
APSL-2.0
|
||||||
|
Artistic-1.0
|
||||||
|
Artistic-1.0-Perl
|
||||||
|
Artistic-1.0-cl8
|
||||||
|
Artistic-2.0
|
||||||
|
AAL
|
||||||
|
Bahyph
|
||||||
|
Barr
|
||||||
|
Beerware
|
||||||
|
BitTorrent-1.0
|
||||||
|
BitTorrent-1.1
|
||||||
|
BSL-1.0
|
||||||
|
Borceux
|
||||||
|
BSD-2-Clause
|
||||||
|
BSD-2-Clause-FreeBSD
|
||||||
|
BSD-2-Clause-NetBSD
|
||||||
|
BSD-3-Clause
|
||||||
|
BSD-3-Clause-Clear
|
||||||
|
BSD-3-Clause-No-Nuclear-License
|
||||||
|
BSD-3-Clause-No-Nuclear-License-2014
|
||||||
|
BSD-3-Clause-No-Nuclear-Warranty
|
||||||
|
BSD-4-Clause
|
||||||
|
BSD-Protection
|
||||||
|
BSD-Source-Code
|
||||||
|
BSD-3-Clause-Attribution
|
||||||
|
0BSD
|
||||||
|
BSD-4-Clause-UC
|
||||||
|
bzip2-1.0.5
|
||||||
|
bzip2-1.0.6
|
||||||
|
Caldera
|
||||||
|
CECILL-1.0
|
||||||
|
CECILL-1.1
|
||||||
|
CECILL-2.0
|
||||||
|
CECILL-2.1
|
||||||
|
CECILL-B
|
||||||
|
CECILL-C
|
||||||
|
ClArtistic
|
||||||
|
MIT-CMU
|
||||||
|
CNRI-Jython
|
||||||
|
CNRI-Python
|
||||||
|
CNRI-Python-GPL-Compatible
|
||||||
|
CPOL-1.02
|
||||||
|
CDDL-1.0
|
||||||
|
CDDL-1.1
|
||||||
|
CPAL-1.0
|
||||||
|
CPL-1.0
|
||||||
|
CATOSL-1.1
|
||||||
|
Condor-1.1
|
||||||
|
CC-BY-1.0
|
||||||
|
CC-BY-2.0
|
||||||
|
CC-BY-2.5
|
||||||
|
CC-BY-3.0
|
||||||
|
CC-BY-4.0
|
||||||
|
CC-BY-ND-1.0
|
||||||
|
CC-BY-ND-2.0
|
||||||
|
CC-BY-ND-2.5
|
||||||
|
CC-BY-ND-3.0
|
||||||
|
CC-BY-ND-4.0
|
||||||
|
CC-BY-NC-1.0
|
||||||
|
CC-BY-NC-2.0
|
||||||
|
CC-BY-NC-2.5
|
||||||
|
CC-BY-NC-3.0
|
||||||
|
CC-BY-NC-4.0
|
||||||
|
CC-BY-NC-ND-1.0
|
||||||
|
CC-BY-NC-ND-2.0
|
||||||
|
CC-BY-NC-ND-2.5
|
||||||
|
CC-BY-NC-ND-3.0
|
||||||
|
CC-BY-NC-ND-4.0
|
||||||
|
CC-BY-NC-SA-1.0
|
||||||
|
CC-BY-NC-SA-2.0
|
||||||
|
CC-BY-NC-SA-2.5
|
||||||
|
CC-BY-NC-SA-3.0
|
||||||
|
CC-BY-NC-SA-4.0
|
||||||
|
CC-BY-SA-1.0
|
||||||
|
CC-BY-SA-2.0
|
||||||
|
CC-BY-SA-2.5
|
||||||
|
CC-BY-SA-3.0
|
||||||
|
CC-BY-SA-4.0
|
||||||
|
CC0-1.0
|
||||||
|
Crossword
|
||||||
|
CrystalStacker
|
||||||
|
CUA-OPL-1.0
|
||||||
|
Cube
|
||||||
|
curl
|
||||||
|
D-FSL-1.0
|
||||||
|
diffmark
|
||||||
|
WTFPL
|
||||||
|
DOC
|
||||||
|
Dotseqn
|
||||||
|
DSDP
|
||||||
|
dvipdfm
|
||||||
|
EPL-1.0
|
||||||
|
ECL-1.0
|
||||||
|
ECL-2.0
|
||||||
|
eGenix
|
||||||
|
EFL-1.0
|
||||||
|
EFL-2.0
|
||||||
|
MIT-advertising
|
||||||
|
MIT-enna
|
||||||
|
Entessa
|
||||||
|
ErlPL-1.1
|
||||||
|
EUDatagrid
|
||||||
|
EUPL-1.0
|
||||||
|
EUPL-1.1
|
||||||
|
Eurosym
|
||||||
|
Fair
|
||||||
|
MIT-feh
|
||||||
|
Frameworx-1.0
|
||||||
|
FreeImage
|
||||||
|
FTL
|
||||||
|
FSFAP
|
||||||
|
FSFUL
|
||||||
|
FSFULLR
|
||||||
|
Giftware
|
||||||
|
GL2PS
|
||||||
|
Glulxe
|
||||||
|
AGPL-3.0
|
||||||
|
GFDL-1.1
|
||||||
|
GFDL-1.2
|
||||||
|
GFDL-1.3
|
||||||
|
GPL-1.0
|
||||||
|
GPL-2.0
|
||||||
|
GPL-3.0
|
||||||
|
LGPL-2.1
|
||||||
|
LGPL-3.0
|
||||||
|
LGPL-2.0
|
||||||
|
gnuplot
|
||||||
|
gSOAP-1.3b
|
||||||
|
HaskellReport
|
||||||
|
HPND
|
||||||
|
IBM-pibs
|
||||||
|
IPL-1.0
|
||||||
|
ICU
|
||||||
|
ImageMagick
|
||||||
|
iMatix
|
||||||
|
Imlib2
|
||||||
|
IJG
|
||||||
|
Info-ZIP
|
||||||
|
Intel-ACPI
|
||||||
|
Intel
|
||||||
|
Interbase-1.0
|
||||||
|
IPA
|
||||||
|
ISC
|
||||||
|
JasPer-2.0
|
||||||
|
JSON
|
||||||
|
LPPL-1.0
|
||||||
|
LPPL-1.1
|
||||||
|
LPPL-1.2
|
||||||
|
LPPL-1.3a
|
||||||
|
LPPL-1.3c
|
||||||
|
Latex2e
|
||||||
|
BSD-3-Clause-LBNL
|
||||||
|
Leptonica
|
||||||
|
LGPLLR
|
||||||
|
Libpng
|
||||||
|
libtiff
|
||||||
|
LAL-1.2
|
||||||
|
LAL-1.3
|
||||||
|
LiLiQ-P-1.1
|
||||||
|
LiLiQ-Rplus-1.1
|
||||||
|
LiLiQ-R-1.1
|
||||||
|
LPL-1.02
|
||||||
|
LPL-1.0
|
||||||
|
MakeIndex
|
||||||
|
MTLL
|
||||||
|
MS-PL
|
||||||
|
MS-RL
|
||||||
|
MirOS
|
||||||
|
MITNFA
|
||||||
|
MIT
|
||||||
|
Motosoto
|
||||||
|
MPL-1.0
|
||||||
|
MPL-1.1
|
||||||
|
MPL-2.0
|
||||||
|
MPL-2.0-no-copyleft-exception
|
||||||
|
mpich2
|
||||||
|
Multics
|
||||||
|
Mup
|
||||||
|
NASA-1.3
|
||||||
|
Naumen
|
||||||
|
NBPL-1.0
|
||||||
|
Net-SNMP
|
||||||
|
NetCDF
|
||||||
|
NGPL
|
||||||
|
NOSL
|
||||||
|
NPL-1.0
|
||||||
|
NPL-1.1
|
||||||
|
Newsletr
|
||||||
|
NLPL
|
||||||
|
Nokia
|
||||||
|
NPOSL-3.0
|
||||||
|
NLOD-1.0
|
||||||
|
Noweb
|
||||||
|
NRL
|
||||||
|
NTP
|
||||||
|
Nunit
|
||||||
|
OCLC-2.0
|
||||||
|
ODbL-1.0
|
||||||
|
PDDL-1.0
|
||||||
|
OCCT-PL
|
||||||
|
OGTSL
|
||||||
|
OLDAP-2.2.2
|
||||||
|
OLDAP-1.1
|
||||||
|
OLDAP-1.2
|
||||||
|
OLDAP-1.3
|
||||||
|
OLDAP-1.4
|
||||||
|
OLDAP-2.0
|
||||||
|
OLDAP-2.0.1
|
||||||
|
OLDAP-2.1
|
||||||
|
OLDAP-2.2
|
||||||
|
OLDAP-2.2.1
|
||||||
|
OLDAP-2.3
|
||||||
|
OLDAP-2.4
|
||||||
|
OLDAP-2.5
|
||||||
|
OLDAP-2.6
|
||||||
|
OLDAP-2.7
|
||||||
|
OLDAP-2.8
|
||||||
|
OML
|
||||||
|
OPL-1.0
|
||||||
|
OSL-1.0
|
||||||
|
OSL-1.1
|
||||||
|
OSL-2.0
|
||||||
|
OSL-2.1
|
||||||
|
OSL-3.0
|
||||||
|
OpenSSL
|
||||||
|
OSET-PL-2.1
|
||||||
|
PHP-3.0
|
||||||
|
PHP-3.01
|
||||||
|
Plexus
|
||||||
|
PostgreSQL
|
||||||
|
psfrag
|
||||||
|
psutils
|
||||||
|
Python-2.0
|
||||||
|
QPL-1.0
|
||||||
|
Qhull
|
||||||
|
Rdisc
|
||||||
|
RPSL-1.0
|
||||||
|
RPL-1.1
|
||||||
|
RPL-1.5
|
||||||
|
RHeCos-1.1
|
||||||
|
RSCPL
|
||||||
|
RSA-MD
|
||||||
|
Ruby
|
||||||
|
SAX-PD
|
||||||
|
Saxpath
|
||||||
|
SCEA
|
||||||
|
SWL
|
||||||
|
SMPPL
|
||||||
|
Sendmail
|
||||||
|
SGI-B-1.0
|
||||||
|
SGI-B-1.1
|
||||||
|
SGI-B-2.0
|
||||||
|
OFL-1.0
|
||||||
|
OFL-1.1
|
||||||
|
SimPL-2.0
|
||||||
|
Sleepycat
|
||||||
|
SNIA
|
||||||
|
Spencer-86
|
||||||
|
Spencer-94
|
||||||
|
Spencer-99
|
||||||
|
SMLNJ
|
||||||
|
SugarCRM-1.1.3
|
||||||
|
SISSL
|
||||||
|
SISSL-1.2
|
||||||
|
SPL-1.0
|
||||||
|
Watcom-1.0
|
||||||
|
TCL
|
||||||
|
TCP-wrappers
|
||||||
|
Unlicense
|
||||||
|
TMate
|
||||||
|
TORQUE-1.1
|
||||||
|
TOSL
|
||||||
|
Unicode-DFS-2015
|
||||||
|
Unicode-DFS-2016
|
||||||
|
Unicode-TOU
|
||||||
|
UPL-1.0
|
||||||
|
NCSA
|
||||||
|
Vim
|
||||||
|
VOSTROM
|
||||||
|
VSL-1.0
|
||||||
|
W3C-20150513
|
||||||
|
W3C-19980720
|
||||||
|
W3C
|
||||||
|
Wsuipa
|
||||||
|
Xnet
|
||||||
|
X11
|
||||||
|
Xerox
|
||||||
|
XFree86-1.1
|
||||||
|
xinetd
|
||||||
|
xpp
|
||||||
|
XSkat
|
||||||
|
YPL-1.0
|
||||||
|
YPL-1.1
|
||||||
|
Zed
|
||||||
|
Zend-2.0
|
||||||
|
Zimbra-1.3
|
||||||
|
Zimbra-1.4
|
||||||
|
Zlib
|
||||||
|
zlib-acknowledgement
|
||||||
|
ZPL-1.1
|
||||||
|
ZPL-2.0
|
||||||
|
ZPL-2.1
|
||||||
|
eCos-2.0
|
||||||
|
GPL-1.0+
|
||||||
|
GPL-2.0+
|
||||||
|
GPL-2.0-with-autoconf-exception
|
||||||
|
GPL-2.0-with-bison-exception
|
||||||
|
GPL-2.0-with-classpath-exception
|
||||||
|
GPL-2.0-with-font-exception
|
||||||
|
GPL-2.0-with-GCC-exception
|
||||||
|
GPL-3.0+
|
||||||
|
GPL-3.0-with-autoconf-exception
|
||||||
|
GPL-3.0-with-GCC-exception
|
||||||
|
LGPL-2.1+
|
||||||
|
LGPL-3.0+
|
||||||
|
LGPL-2.0+
|
||||||
|
StandardML-NJ
|
||||||
|
WXwindows
|
33
tasks/spdx.rb
Normal file
33
tasks/spdx.rb
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# encoding: utf-8
|
||||||
|
# Copyright:: Copyright (c) 2017 Chef Software, Inc.
|
||||||
|
# License:: Apache License, Version 2.0
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
PROJECT_DIR = File.join(File.expand_path(File.dirname(__FILE__)), '..').freeze
|
||||||
|
UTILS_DIR = File.join(PROJECT_DIR, 'lib/utils').freeze
|
||||||
|
|
||||||
|
desc 'Updates the list of the spdx valid licenses'
|
||||||
|
task :spdx do
|
||||||
|
# Kudos to Foodcritic for providing that idea
|
||||||
|
# @see https://github.com/Foodcritic/foodcritic/pull/530/files
|
||||||
|
# list of valid SPDX.org license strings. To build an array run this:
|
||||||
|
require 'json'
|
||||||
|
require 'net/http'
|
||||||
|
json_data = JSON.parse(Net::HTTP.get(URI('https://raw.githubusercontent.com/spdx/license-list-data/master/json/licenses.json')))
|
||||||
|
licenses = json_data['licenses'].map { |l| l['licenseId'] }
|
||||||
|
# "All Rights Reserved" is non-standard extra value to cover proriatary license
|
||||||
|
licenses.push('All Rights Reserved')
|
||||||
|
File.write(File.join(UTILS_DIR, 'spdx.txt'), licenses.join("\n"))
|
||||||
|
end
|
Loading…
Reference in a new issue