Class: RuboCop::Cop::Chef::Sharing::InvalidLicenseString

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Defined in:
lib/rubocop/cop/chef/sharing/invalid_license_string.rb

Overview

metadata.rb license field should include a SPDX compliant string or “all rights reserved” (not case sensitive)

Examples:


# bad
license 'Apache 2.0'

# good
license 'Apache-2.0'
license 'all rights reserved'

Constant Summary collapse

VALID_LICENSE_STRING =

list of valid SPDX.org license strings. To build an array run this ruby: “‘ruby require ’net/http’ json_data = JSON.parse(Net::HTTP.get(URI(‘raw.githubusercontent.com/spdx/license-list-data/master/json/licenses.json’))) licenses = json_data.map {|l| l }.sort puts licenses “‘

%w(
  0BSD
  3D-Slicer-1.0
  AAL
  ADSL
  AFL-1.1
  AFL-1.2
  AFL-2.0
  AFL-2.1
  AFL-3.0
  AGPL-1.0
  AGPL-1.0-only
  AGPL-1.0-or-later
  AGPL-3.0
  AGPL-3.0-only
  AGPL-3.0-or-later
  ALGLIB-Documentation
  AMD-newlib
  AMDPLPA
  AML
  AML-glslang
  AMPAS
  ANTLR-PD
  ANTLR-PD-fallback
  APAFML
  APL-1.0
  APSL-1.0
  APSL-1.1
  APSL-1.2
  APSL-2.0
  ASWF-Digital-Assets-1.0
  ASWF-Digital-Assets-1.1
  Abstyles
  AdaCore-doc
  Adobe-2006
  Adobe-Display-PostScript
  Adobe-Glyph
  Adobe-Utopia
  Advanced-Cryptics-Dictionary
  Afmparse
  Aladdin
  Apache-1.0
  Apache-1.1
  Apache-2.0
  App-s2p
  Arphic-1999
  Artistic-1.0
  Artistic-1.0-Perl
  Artistic-1.0-cl8
  Artistic-2.0
  Artistic-dist
  Aspell-RU
  BSD-1-Clause
  BSD-2-Clause
  BSD-2-Clause-Darwin
  BSD-2-Clause-FreeBSD
  BSD-2-Clause-NetBSD
  BSD-2-Clause-Patent
  BSD-2-Clause-Views
  BSD-2-Clause-first-lines
  BSD-2-Clause-pkgconf-disclaimer
  BSD-3-Clause
  BSD-3-Clause-Attribution
  BSD-3-Clause-Clear
  BSD-3-Clause-HP
  BSD-3-Clause-LBNL
  BSD-3-Clause-Modification
  BSD-3-Clause-No-Military-License
  BSD-3-Clause-No-Nuclear-License
  BSD-3-Clause-No-Nuclear-License-2014
  BSD-3-Clause-No-Nuclear-Warranty
  BSD-3-Clause-Open-MPI
  BSD-3-Clause-Sun
  BSD-3-Clause-Tso
  BSD-3-Clause-acpica
  BSD-3-Clause-flex
  BSD-4-Clause
  BSD-4-Clause-Shortened
  BSD-4-Clause-UC
  BSD-4.3RENO
  BSD-4.3TAHOE
  BSD-Advertising-Acknowledgement
  BSD-Attribution-HPND-disclaimer
  BSD-Inferno-Nettverk
  BSD-Mark-Modifications
  BSD-Protection
  BSD-Source-Code
  BSD-Source-beginning-file
  BSD-Systemics
  BSD-Systemics-W3Works
  BSL-1.0
  BUSL-1.1
  Baekmuk
  Bahyph
  Barr
  Beerware
  BitTorrent-1.0
  BitTorrent-1.1
  Bitstream-Charter
  Bitstream-Vera
  BlueOak-1.0.0
  Boehm-GC
  Boehm-GC-without-fee
  Borceux
  Brian-Gladman-2-Clause
  Brian-Gladman-3-Clause
  Buddy
  C-UDA-1.0
  CAL-1.0
  CAL-1.0-Combined-Work-Exception
  CAPEC-tou
  CATOSL-1.1
  CC-BY-1.0
  CC-BY-2.0
  CC-BY-2.5
  CC-BY-2.5-AU
  CC-BY-3.0
  CC-BY-3.0-AT
  CC-BY-3.0-AU
  CC-BY-3.0-DE
  CC-BY-3.0-IGO
  CC-BY-3.0-NL
  CC-BY-3.0-US
  CC-BY-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-3.0-DE
  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-3.0-DE
  CC-BY-NC-ND-3.0-IGO
  CC-BY-NC-ND-4.0
  CC-BY-NC-SA-1.0
  CC-BY-NC-SA-2.0
  CC-BY-NC-SA-2.0-DE
  CC-BY-NC-SA-2.0-FR
  CC-BY-NC-SA-2.0-UK
  CC-BY-NC-SA-2.5
  CC-BY-NC-SA-3.0
  CC-BY-NC-SA-3.0-DE
  CC-BY-NC-SA-3.0-IGO
  CC-BY-NC-SA-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-3.0-DE
  CC-BY-ND-4.0
  CC-BY-SA-1.0
  CC-BY-SA-2.0
  CC-BY-SA-2.0-UK
  CC-BY-SA-2.1-JP
  CC-BY-SA-2.5
  CC-BY-SA-3.0
  CC-BY-SA-3.0-AT
  CC-BY-SA-3.0-DE
  CC-BY-SA-3.0-IGO
  CC-BY-SA-4.0
  CC-PDDC
  CC-PDM-1.0
  CC-SA-1.0
  CC0-1.0
  CDDL-1.0
  CDDL-1.1
  CDL-1.0
  CDLA-Permissive-1.0
  CDLA-Permissive-2.0
  CDLA-Sharing-1.0
  CECILL-1.0
  CECILL-1.1
  CECILL-2.0
  CECILL-2.1
  CECILL-B
  CECILL-C
  CERN-OHL-1.1
  CERN-OHL-1.2
  CERN-OHL-P-2.0
  CERN-OHL-S-2.0
  CERN-OHL-W-2.0
  CFITSIO
  CMU-Mach
  CMU-Mach-nodoc
  CNRI-Jython
  CNRI-Python
  CNRI-Python-GPL-Compatible
  COIL-1.0
  CPAL-1.0
  CPL-1.0
  CPOL-1.02
  CUA-OPL-1.0
  Caldera
  Caldera-no-preamble
  Catharon
  ClArtistic
  Clips
  Community-Spec-1.0
  Condor-1.1
  Cornell-Lossless-JPEG
  Cronyx
  Crossword
  CryptoSwift
  CrystalStacker
  Cube
  D-FSL-1.0
  DEC-3-Clause
  DL-DE-BY-2.0
  DL-DE-ZERO-2.0
  DOC
  DRL-1.0
  DRL-1.1
  DSDP
  DocBook-DTD
  DocBook-Schema
  DocBook-Stylesheet
  DocBook-XML
  Dotseqn
  ECL-1.0
  ECL-2.0
  EFL-1.0
  EFL-2.0
  EPICS
  EPL-1.0
  EPL-2.0
  ESA-PL-permissive-2.4
  ESA-PL-strong-copyleft-2.4
  ESA-PL-weak-copyleft-2.4
  EUDatagrid
  EUPL-1.0
  EUPL-1.1
  EUPL-1.2
  Elastic-2.0
  Entessa
  ErlPL-1.1
  Eurosym
  FBM
  FDK-AAC
  FSFAP
  FSFAP-no-warranty-disclaimer
  FSFUL
  FSFULLR
  FSFULLRSD
  FSFULLRWD
  FSL-1.1-ALv2
  FSL-1.1-MIT
  FTL
  Fair
  Ferguson-Twofish
  Frameworx-1.0
  FreeBSD-DOC
  FreeImage
  Furuseth
  GCR-docs
  GD
  GFDL-1.1
  GFDL-1.1-invariants-only
  GFDL-1.1-invariants-or-later
  GFDL-1.1-no-invariants-only
  GFDL-1.1-no-invariants-or-later
  GFDL-1.1-only
  GFDL-1.1-or-later
  GFDL-1.2
  GFDL-1.2-invariants-only
  GFDL-1.2-invariants-or-later
  GFDL-1.2-no-invariants-only
  GFDL-1.2-no-invariants-or-later
  GFDL-1.2-only
  GFDL-1.2-or-later
  GFDL-1.3
  GFDL-1.3-invariants-only
  GFDL-1.3-invariants-or-later
  GFDL-1.3-no-invariants-only
  GFDL-1.3-no-invariants-or-later
  GFDL-1.3-only
  GFDL-1.3-or-later
  GL2PS
  GLWTPL
  GPL-1.0
  GPL-1.0+
  GPL-1.0-only
  GPL-1.0-or-later
  GPL-2.0
  GPL-2.0+
  GPL-2.0-only
  GPL-2.0-or-later
  GPL-2.0-with-GCC-exception
  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-3.0
  GPL-3.0+
  GPL-3.0-only
  GPL-3.0-or-later
  GPL-3.0-with-GCC-exception
  GPL-3.0-with-autoconf-exception
  Game-Programming-Gems
  Giftware
  Glide
  Glulxe
  Graphics-Gems
  Gutmann
  HDF5
  HIDAPI
  HP-1986
  HP-1989
  HPND
  HPND-DEC
  HPND-Fenneberg-Livingston
  HPND-INRIA-IMAG
  HPND-Intel
  HPND-Kevlin-Henney
  HPND-MIT-disclaimer
  HPND-Markus-Kuhn
  HPND-Netrek
  HPND-Pbmplus
  HPND-SMC
  HPND-UC
  HPND-UC-export-US
  HPND-doc
  HPND-doc-sell
  HPND-export-US
  HPND-export-US-acknowledgement
  HPND-export-US-modify
  HPND-export2-US
  HPND-merchantability-variant
  HPND-sell-MIT-disclaimer-xserver
  HPND-sell-regexpr
  HPND-sell-variant
  HPND-sell-variant-MIT-disclaimer
  HPND-sell-variant-MIT-disclaimer-rev
  HPND-sell-variant-critical-systems
  HTMLTIDY
  HaskellReport
  Hippocratic-2.1
  IBM-pibs
  ICU
  IEC-Code-Components-EULA
  IJG
  IJG-short
  IPA
  IPL-1.0
  ISC
  ISC-Veillard
  ISO-permission
  ImageMagick
  Imlib2
  Info-ZIP
  Inner-Net-2.0
  InnoSetup
  Intel
  Intel-ACPI
  Interbase-1.0
  JPL-image
  JPNIC
  JSON
  Jam
  JasPer-2.0
  Kastrup
  Kazlib
  Knuth-CTAN
  LAL-1.2
  LAL-1.3
  LGPL-2.0
  LGPL-2.0+
  LGPL-2.0-only
  LGPL-2.0-or-later
  LGPL-2.1
  LGPL-2.1+
  LGPL-2.1-only
  LGPL-2.1-or-later
  LGPL-3.0
  LGPL-3.0+
  LGPL-3.0-only
  LGPL-3.0-or-later
  LGPLLR
  LOOP
  LPD-document
  LPL-1.0
  LPL-1.02
  LPPL-1.0
  LPPL-1.1
  LPPL-1.2
  LPPL-1.3a
  LPPL-1.3c
  LZMA-SDK-9.11-to-9.20
  LZMA-SDK-9.22
  Latex2e
  Latex2e-translated-notice
  Leptonica
  LiLiQ-P-1.1
  LiLiQ-R-1.1
  LiLiQ-Rplus-1.1
  Libpng
  Linux-OpenIB
  Linux-man-pages-1-para
  Linux-man-pages-copyleft
  Linux-man-pages-copyleft-2-para
  Linux-man-pages-copyleft-var
  Lucida-Bitmap-Fonts
  MIPS
  MIT
  MIT-0
  MIT-CMU
  MIT-Click
  MIT-Festival
  MIT-Khronos-old
  MIT-Modern-Variant
  MIT-STK
  MIT-Wu
  MIT-advertising
  MIT-enna
  MIT-feh
  MIT-open-group
  MIT-testregex
  MITNFA
  MMIXware
  MMPL-1.0.1
  MPEG-SSG
  MPL-1.0
  MPL-1.1
  MPL-2.0
  MPL-2.0-no-copyleft-exception
  MS-LPL
  MS-PL
  MS-RL
  MTLL
  Mackerras-3-Clause
  Mackerras-3-Clause-acknowledgment
  MakeIndex
  Martin-Birgmeier
  McPhee-slideshow
  Minpack
  MirOS
  Motosoto
  MulanPSL-1.0
  MulanPSL-2.0
  Multics
  Mup
  NAIST-2003
  NASA-1.3
  NBPL-1.0
  NCBI-PD
  NCGL-UK-2.0
  NCL
  NCSA
  NGPL
  NICTA-1.0
  NIST-PD
  NIST-PD-TNT
  NIST-PD-fallback
  NIST-Software
  NLOD-1.0
  NLOD-2.0
  NLPL
  NOSL
  NPL-1.0
  NPL-1.1
  NPOSL-3.0
  NRL
  NTIA-PD
  NTP
  NTP-0
  Naumen
  Net-SNMP
  NetCDF
  Newsletr
  Nokia
  Noweb
  Nunit
  O-UDA-1.0
  OAR
  OCCT-PL
  OCLC-2.0
  ODC-By-1.0
  ODbL-1.0
  OFFIS
  OFL-1.0
  OFL-1.0-RFN
  OFL-1.0-no-RFN
  OFL-1.1
  OFL-1.1-RFN
  OFL-1.1-no-RFN
  OGC-1.0
  OGDL-Taiwan-1.0
  OGL-Canada-2.0
  OGL-UK-1.0
  OGL-UK-2.0
  OGL-UK-3.0
  OGTSL
  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.2.2
  OLDAP-2.3
  OLDAP-2.4
  OLDAP-2.5
  OLDAP-2.6
  OLDAP-2.7
  OLDAP-2.8
  OLFL-1.3
  OML
  OPL-1.0
  OPL-UK-3.0
  OPUBL-1.0
  OSET-PL-2.1
  OSL-1.0
  OSL-1.1
  OSL-2.0
  OSL-2.1
  OSL-3.0
  OSSP
  OpenMDW-1.0
  OpenPBS-2.3
  OpenSSL
  OpenSSL-standalone
  OpenVision
  PADL
  PDDL-1.0
  PHP-3.0
  PHP-3.01
  PPL
  PSF-2.0
  ParaType-Free-Font-1.3
  Parity-6.0.0
  Parity-7.0.0
  Pixar
  Plexus
  PolyForm-Noncommercial-1.0.0
  PolyForm-Small-Business-1.0.0
  PostgreSQL
  Python-2.0
  Python-2.0.1
  QPL-1.0
  QPL-1.0-INRIA-2004
  Qhull
  RHeCos-1.1
  RPL-1.1
  RPL-1.5
  RPSL-1.0
  RSA-MD
  RSCPL
  Rdisc
  Ruby
  Ruby-pty
  SAX-PD
  SAX-PD-2.0
  SCEA
  SGI-B-1.0
  SGI-B-1.1
  SGI-B-2.0
  SGI-OpenGL
  SGMLUG-PM
  SGP4
  SHL-0.5
  SHL-0.51
  SISSL
  SISSL-1.2
  SL
  SMAIL-GPL
  SMLNJ
  SMPPL
  SNIA
  SOFA
  SPL-1.0
  SSH-OpenSSH
  SSH-short
  SSLeay-standalone
  SSPL-1.0
  SUL-1.0
  SWL
  Saxpath
  SchemeReport
  Sendmail
  Sendmail-8.23
  Sendmail-Open-Source-1.1
  SimPL-2.0
  Sleepycat
  Soundex
  Spencer-86
  Spencer-94
  Spencer-99
  StandardML-NJ
  SugarCRM-1.1.3
  Sun-PPP
  Sun-PPP-2000
  SunPro
  Symlinks
  TAPR-OHL-1.0
  TCL
  TCP-wrappers
  TGPPL-1.0
  TMate
  TORQUE-1.1
  TOSL
  TPDL
  TPL-1.0
  TTWL
  TTYP0
  TU-Berlin-1.0
  TU-Berlin-2.0
  TekHVC
  TermReadKey
  ThirdEye
  TrustedQSL
  UCAR
  UCL-1.0
  UMich-Merit
  UPL-1.0
  URT-RLE
  Ubuntu-font-1.0
  UnRAR
  Unicode-3.0
  Unicode-DFS-2015
  Unicode-DFS-2016
  Unicode-TOU
  UnixCrypt
  Unlicense
  Unlicense-libtelnet
  Unlicense-libwhirlpool
  VOSTROM
  VSL-1.0
  Vim
  Vixie-Cron
  W3C
  W3C-19980720
  W3C-20150513
  WTFNMFPL
  WTFPL
  Watcom-1.0
  Widget-Workshop
  WordNet
  Wsuipa
  X11
  X11-distribute-modifications-variant
  X11-no-permit-persons
  X11-swapped
  XFree86-1.1
  XSkat
  Xdebug-1.03
  Xerox
  Xfig
  Xnet
  YPL-1.0
  YPL-1.1
  ZPL-1.1
  ZPL-2.0
  ZPL-2.1
  Zed
  Zeeff
  Zend-2.0
  Zimbra-1.3
  Zimbra-1.4
  Zlib
  any-OSI
  any-OSI-perl-modules
  bcrypt-Solar-Designer
  blessing
  bzip2-1.0.5
  bzip2-1.0.6
  check-cvs
  checkmk
  copyleft-next-0.3.0
  copyleft-next-0.3.1
  curl
  cve-tou
  diffmark
  dtoa
  dvipdfm
  eCos-2.0
  eGenix
  etalab-2.0
  fwlw
  gSOAP-1.3b
  generic-xts
  gnuplot
  gtkbook
  hdparm
  hyphen-bulgarian
  iMatix
  jove
  libpng-1.6.35
  libpng-2.0
  libselinux-1.0
  libtiff
  libutil-David-Nugent
  lsof
  magaz
  mailprio
  man2html
  metamail
  mpi-permissive
  mpich2
  mplus
  ngrep
  pkgconf
  pnmstitch
  psfrag
  psutils
  python-ldap
  radvd
  snprintf
  softSurfer
  ssh-keyscan
  swrule
  threeparttable
  ulem
  w3m
  wwl
  wxWindows
  xinetd
  xkeyboard-config-Zinoviev
  xlock
  xpp
  xzoom
  zlib-acknowledgement
).freeze
COMMON_TYPOS =
{
  "all_rights": 'all rights reserved',
  "apache 2.0": 'Apache-2.0',
  "apache v2": 'Apache-2.0',
  "apache v2.0": 'Apache-2.0',
  "apache license version 2.0": 'Apache-2.0',
  "apache2": 'Apache-2.0',
  "mit": 'MIT',
  '3-clause bsd': 'BSD-3-Clause',
  'gnu public license 3.0': 'GPL-3.0',
  'gpl v2': 'GPL-2.0',
  'gpl v3': 'GPL-3.0',
  'gplv2': 'GPL-2.0',
  'gplv3': 'GPL-3.0',
  'mit license': 'MIT',
  'UNLICENSED': 'all rights reserved',
}.freeze
MSG =
'Cookbook metadata.rb does not use a SPDX compliant license string or "all rights reserved". See https://spdx.org/licenses/ for a complete list of license identifiers.'
RESTRICT_ON_SEND =
[:license].freeze

Instance Method Summary collapse

Methods inherited from Base

#target_chef_version

Instance Method Details

#autocorrect_license_string(bad_string) ⇒ Object

private



807
808
809
# File 'lib/rubocop/cop/chef/sharing/invalid_license_string.rb', line 807

def autocorrect_license_string(bad_string)
  COMMON_TYPOS[bad_string.delete(',').downcase.to_sym]
end

#on_send(node) ⇒ Object



795
796
797
798
799
800
801
802
803
# File 'lib/rubocop/cop/chef/sharing/invalid_license_string.rb', line 795

def on_send(node)
  license?(node) do |license|
    return if valid_license?(license.str_content)
    add_offense(license, severity: :refactor) do |corrector|
      correct_string = autocorrect_license_string(license.str_content)
      corrector.replace(license, "'#{correct_string}'") if correct_string
    end
  end
end

#valid_license?(license) ⇒ Boolean

Returns:

  • (Boolean)


811
812
813
814
# File 'lib/rubocop/cop/chef/sharing/invalid_license_string.rb', line 811

def valid_license?(license)
  VALID_LICENSE_STRING.include?(license) ||
    license.casecmp('all rights reserved') == 0
end