Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add remaining copyright statements, add licenses sanity test #5098

Merged
merged 8 commits into from
Aug 8, 2022
Merged
2 changes: 1 addition & 1 deletion changelogs/fragments/licenses.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
minor_changes:
- "All software licenses are now in the ``LICENSES/`` directory of the collection root (https://github.com/ansible-collections/community.general/pull/5065, https://github.com/ansible-collections/community.general/pull/5079, https://github.com/ansible-collections/community.general/pull/5080, https://github.com/ansible-collections/community.general/pull/5083, https://github.com/ansible-collections/community.general/pull/5087, https://github.com/ansible-collections/community.general/pull/5095)."
- "All software licenses are now in the ``LICENSES/`` directory of the collection root (https://github.com/ansible-collections/community.general/pull/5065, https://github.com/ansible-collections/community.general/pull/5079, https://github.com/ansible-collections/community.general/pull/5080, https://github.com/ansible-collections/community.general/pull/5083, https://github.com/ansible-collections/community.general/pull/5087, https://github.com/ansible-collections/community.general/pull/5095, https://github.com/ansible-collections/community.general/pull/5098)."
- "Added MIT license as ``LICENSES/MIT.txt`` for tests/unit/plugins/modules/packaging/language/test_gem.py (https://github.com/ansible-collections/community.general/pull/5065)."
2 changes: 2 additions & 0 deletions plugins/module_utils/_mount.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
# This code is part of Ansible, but is an independent component.
# This particular file snippet, and this file snippet only, is based on
# Lib/posixpath.py of cpython
#
# Copyright (c) 2001-2022 Python Software Foundation. All rights reserved.
# It is licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
# (See LICENSES/PSF-2.0.txt in this collection)
# SPDX-License-Identifier: PSF-2.0
Expand Down
1 change: 1 addition & 0 deletions plugins/modules/monitoring/datadog/datadog_event.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#
# This module is proudly sponsored by iGeolise (www.igeolise.com) and
# Tiny Lab Productions (www.tinylabproductions.com).
# Copyright (c) Ansible project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later

Expand Down
1 change: 1 addition & 0 deletions plugins/modules/monitoring/icinga2_host.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

# This module is proudly sponsored by CGI (www.cgi.com) and
# KPN (www.kpn.com).
# Copyright (c) Ansible project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later

Expand Down
1 change: 1 addition & 0 deletions plugins/modules/net_tools/snmp_facts.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# -*- coding: utf-8 -*-

# This file is part of Networklore's snmp library for Ansible
# Copyright (c) Ansible project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later

Expand Down
4 changes: 2 additions & 2 deletions tests/integration/targets/jboss/tasks/jboss.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
# Integration tests for jboss module.
# SPDX-License-Identifier: GPL-3.0-or-later

# helloworld.war (got from https://github.com/aeimer/java-example-helloworld-war/) license:
# MIT License
# helloworld.war (got from https://github.com/aeimer/java-example-helloworld-war/) is licensed
# under the MIT license:
#
# Copyright (c) 2017 Alex Eimer
#
Expand Down
6 changes: 3 additions & 3 deletions tests/integration/targets/kernel_blacklist/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
expected_content: |
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-{{ '' }}License-Identifier: GPL-3.0-or-later

blacklist aaaa
blacklist bbbb
Expand All @@ -76,7 +76,7 @@
content: |
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-{{ '' }}License-Identifier: GPL-3.0-or-later

blacklist aaaa
blacklist bbbb
Expand Down Expand Up @@ -104,7 +104,7 @@
content: |
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-{{ '' }}License-Identifier: GPL-3.0-or-later

blacklist aaaa
blacklist cccc
Expand Down
4 changes: 4 additions & 0 deletions tests/sanity/extra/licenses.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"include_symlinks": false,
"output": "path-message"
}
113 changes: 113 additions & 0 deletions tests/sanity/extra/licenses.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#!/usr/bin/env python
# Copyright (c) 2022, Felix Fontein <[email protected]>
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
"""Prevent files without a correct license identifier from being added to the source tree."""
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import glob
import sys


def format_license_list(licenses):
if not licenses:
return '(empty)'
return ', '.join(['"%s"' % license for license in licenses])


def find_licenses(filename, relax=False):
spdx_license_identifiers = []
other_license_identifiers = []
has_copyright = False
try:
with open(filename, 'r', encoding='utf-8') as f:
for line in f:
line = line.rstrip()
if 'Copyright ' in line:
has_copyright = True
if 'Copyright: ' in line:
print('%s: found copyright line with "Copyright:". Please remove the colon.' % (filename, ))
if 'SPDX-FileCopyrightText: ' in line:
has_copyright = True
idx = line.find('SPDX-License-Identifier: ')
if idx >= 0:
spdx_license_identifiers.append(line[idx + len('SPDX-License-Identifier: '):])
if 'GNU General Public License' in line:
if 'v3.0+' in line:
other_license_identifiers.append('GPL-3.0-or-later')
if 'version 3 or later' in line:
other_license_identifiers.append('GPL-3.0-or-later')
if 'Simplified BSD License' in line:
other_license_identifiers.append('BSD-2-Clause')
if 'Apache License 2.0' in line:
other_license_identifiers.append('Apache-2.0')
if 'PSF License' in line or 'Python-2.0' in line:
other_license_identifiers.append('PSF-2.0')
if 'MIT License' in line:
other_license_identifiers.append('MIT')
except Exception as exc:
print('%s: error while processing file: %s' % (filename, exc))
if len(set(spdx_license_identifiers)) < len(spdx_license_identifiers):
print('%s: found identical SPDX-License-Identifier values' % (filename, ))
if other_license_identifiers and set(other_license_identifiers) != set(spdx_license_identifiers):
print('%s: SPDX-License-Identifier yielded the license list %s, while manual guessing yielded the license list %s' % (
filename, format_license_list(spdx_license_identifiers), format_license_list(other_license_identifiers)))
if not has_copyright and not relax:
print('%s: found no copyright notice' % (filename, ))
return sorted(spdx_license_identifiers)


def main():
"""Main entry point."""
paths = sys.argv[1:] or sys.stdin.read().splitlines()

# The following paths are allowed to have no license identifier
no_comments_allowed = [
'changelogs/fragments/*.yml',
'changelogs/fragments/*.yaml',
'tests/sanity/extra/*.json',
'tests/sanity/ignore-2.*.txt',
'COPYING',
]

# These files are completely ignored
ignore_paths = [
'CHANGELOG.rst',
'changelogs/changelog.yaml',
'tests/sanity/extra/licenses.py', # The strings in find_licenses() confuse this code :-)
'.ansible-test-timeout.json',
'LICENSES/*.txt',
]

no_comments_allowed = [fn for pattern in no_comments_allowed for fn in glob.glob(pattern)]
ignore_paths = [fn for pattern in ignore_paths for fn in glob.glob(pattern)]

valid_licenses = [license_file[len('LICENSES/'):-len('.txt')] for license_file in glob.glob('LICENSES/*.txt')]

for path in paths:
if path.startswith('./'):
path = path[2:]
if path in ignore_paths or path.startswith('tests/output/'):
continue
if os.stat(path).st_size == 0:
continue
if not path.endswith('.license') and os.path.exists(path + '.license'):
path = path + '.license'
valid_licenses_for_path = valid_licenses
if path.startswith('plugins/') and not path.startswith(('plugins/modules/', 'plugins/module_utils/', 'plugins/doc_fragments/')):
valid_licenses_for_path = [license for license in valid_licenses if license == 'GPL-3.0-or-later']
licenses = find_licenses(path, relax=path in no_comments_allowed)
if not licenses:
if path not in no_comments_allowed:
print('%s: must have at least one license' % (path, ))
else:
for license in licenses:
if license not in valid_licenses_for_path:
print('%s: found not allowed license "%s", must be one of %s' % (
path, license, format_license_list(valid_licenses_for_path)))


if __name__ == '__main__':
main()
6 changes: 3 additions & 3 deletions tests/unit/plugins/modules/packaging/language/test_cpanm.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Author: Alexei Znamensky ([email protected])
# Largely adapted from test_redhat_subscription by
# Jiri Hnidek ([email protected])
# Copyright (c) Alexei Znamensky ([email protected])
# Largely adapted from test_redhat_subscription:
# Copyright (c) Jiri Hnidek ([email protected])
#
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Author: Jiri Hnidek ([email protected])
# Copyright (c) Jiri Hnidek ([email protected])
#
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/plugins/modules/system/test_gconftool2_info.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Author: Alexei Znamensky ([email protected])
# Copyright (c) Alexei Znamensky ([email protected])
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later

Expand Down
6 changes: 3 additions & 3 deletions tests/unit/plugins/modules/system/test_xfconf.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# Author: Alexei Znamensky ([email protected])
# Largely adapted from test_redhat_subscription by
# Jiri Hnidek ([email protected])
# Copyright (c) Alexei Znamensky ([email protected])
# Largely adapted from test_redhat_subscription:
# Copyright (c) Jiri Hnidek ([email protected])
#
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/plugins/modules/system/test_xfconf_info.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Author: Alexei Znamensky ([email protected])
# Copyright (c) Alexei Znamensky ([email protected])
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later

Expand Down