From 301cf9f41b6fe8f583849b4f01791ba67ad77d6b Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Fri, 12 Mar 2021 20:20:36 -0800 Subject: [PATCH] Add GitHub workflow script to build Python wheels. Update PyPI package --- .github/workflows/wheels.yml | 31 +++++ ext/THIRDPARTY.txt | 219 +++++++++++++++++++++++++++++++++++ pkg/pypi/LICENSE | 149 ++++++++++++++++++++++++ pkg/pypi/build.sh | 23 +++- pkg/pypi/libzt/__init__.py | 3 +- pkg/pypi/libzt/version.py | 1 + pkg/pypi/setup.cfg | 4 +- pkg/pypi/setup.py | 20 ++-- 8 files changed, 432 insertions(+), 18 deletions(-) create mode 100644 .github/workflows/wheels.yml create mode 100644 ext/THIRDPARTY.txt create mode 100644 pkg/pypi/LICENSE create mode 100644 pkg/pypi/libzt/version.py diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml new file mode 100644 index 0000000..0bef61c --- /dev/null +++ b/.github/workflows/wheels.yml @@ -0,0 +1,31 @@ +name: Build New Wheels +on: [workflow_dispatch] +jobs: + build_wheels: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macOS-latest] + + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + + - uses: actions/setup-python@v2 + + - name: Install cibuildwheel + run: python -m pip install cibuildwheel==1.10.0 + + - name: Build wheels + env: + CIBW_ARCHS: auto + CIBW_BUILD: cp35-* cp36-* cp37-* cp38-* cp39-* + CIBW_BEFORE_BUILD: ln -s $(pwd) pkg/pypi/native; cp -f src/bindings/python/*.py pkg/pypi/libzt/; cd pkg/pypi; python setup.py build_clib + run: | + python -m cibuildwheel pkg/pypi --output-dir wheelhouse + + - uses: actions/upload-artifact@v2 + with: + path: wheelhouse/*.whl diff --git a/ext/THIRDPARTY.txt b/ext/THIRDPARTY.txt new file mode 100644 index 0000000..fd1300c --- /dev/null +++ b/ext/THIRDPARTY.txt @@ -0,0 +1,219 @@ +Third-Party Code + +ZeroTier and the ZeroTier SDK (including libzt) includes the following third +party code, either in ext/ or incorporated into the ZeroTier core. This third +party code remains licensed under its original license and is not subject to +ZeroTier's BSL license. + + + + + + + +LZ4 compression algorithm by Yann Collet - http://code.google.com/p/lz4/ +----------------------------------------------------------------------------- + +LZ4 - Fast LZ compression algorithm +Header File +Copyright (C) 2011-2016, Yann Collet. + +BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +You can contact the author at : +- LZ4 homepage : http://www.lz4.org +- LZ4 source repository : https://github.com/lz4/lz4 + + + + + + + +C++11 json (nlohmann/json) by Niels Lohmann +https://github.com/nlohmann/json +----------------------------------------------------------------------------- + +MIT License + +Copyright (c) 2013-2021 Niels Lohmann + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + + + + +MiniUPNPC and libnatpmp by Thomas Bernard - http://miniupnp.free.fr/ +----------------------------------------------------------------------------- + +MiniUPnPc +Copyright (c) 2005-2016, Thomas BERNARD +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + + + + + + +lwIP - https://www.nongnu.org/lwip/2_1_x/index.html +----------------------------------------------------------------------------- + +Copyright (c) 2001-2003 Swedish Institute of Computer Science. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. + +This file is part of the lwIP TCP/IP stack. + +Author: Adam Dunkels + + + + + + + +concurrentqueue - https://github.com/cameron314/concurrentqueue +----------------------------------------------------------------------------- + +Simplified BSD License: + +Copyright (c) 2013-2016, Cameron Desrochers. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + + + + + +curl - https://curl.se/ +----------------------------------------------------------------------------- + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1996 - 2021, Daniel Stenberg, , and many +contributors, see the THANKS file. + +All rights reserved. + +Permission to use, copy, modify, and distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright +notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall not +be used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization of the copyright holder. diff --git a/pkg/pypi/LICENSE b/pkg/pypi/LICENSE new file mode 100644 index 0000000..9784015 --- /dev/null +++ b/pkg/pypi/LICENSE @@ -0,0 +1,149 @@ +----------------------------------------------------------------------------- + +Business Source License 1.1 + +License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved. +"Business Source License" is a trademark of MariaDB Corporation Ab. + +----------------------------------------------------------------------------- + +Parameters + +Licensor: ZeroTier, Inc. +Licensed Work: ZeroTier Network Virtualization Engine 1.4.4 + The Licensed Work is (c)2019 ZeroTier, Inc. +Additional Use Grant: You may make use of the Licensed Work, provided you + do not use it in any of the following ways: + + * Sell hosted ZeroTier services as a "SaaS" Product + + (1) Operate or sell access to ZeroTier root servers, + network controllers, or authorization key or certificate + generation components of the Licensed Work as a + for-profit service, regardless of whether the use of + these components is sold alone or is bundled with other + services. Note that this does not apply to the use of + ZeroTier behind the scenes to operate a service not + related to ZeroTier network administration. + + * Create Non-Open-Source Commercial Derviative Works + + (2) Link or directly include the Licensed Work in a + commercial or for-profit application or other product + not distributed under an Open Source Initiative (OSI) + compliant license. See: https://opensource.org/licenses + + (3) Remove the name, logo, copyright, or other branding + material from the Licensed Work to create a "rebranded" + or "white labeled" version to distribute as part of + any commercial or for-profit product or service. + + * Certain Government Uses + + (4) Use or deploy the Licensed Work in a government + setting in support of any active government function + or operation with the exception of the following: + physical or mental health care, family and social + services, social welfare, senior care, child care, and + the care of persons with disabilities. + +Change Date: 2023-01-01 + +Change License: Apache License version 2.0 as published by the Apache + Software Foundation + https://www.apache.org/licenses/ + +Alternative Licensing + +If you would like to use the Licensed Work in any way that conflicts with +the stipulations of the Additional Use Grant, contact ZeroTier, Inc. to +obtain an alternative commercial license. + +Visit us on the web at: https://www.zerotier.com/ + +Notice + +The Business Source License (this document, or the "License") is not an Open +Source license. However, the Licensed Work will eventually be made available +under an Open Source License, as stated in this License. + +For more information on the use of the Business Source License for ZeroTier +products, please visit our pricing page which contains license details and +and license FAQ: https://zerotier.com/pricing + +For more information on the use of the Business Source License generally, +please visit the Adopting and Developing Business Source License FAQ at +https://mariadb.com/bsl-faq-adopting. + +----------------------------------------------------------------------------- + +Business Source License 1.1 + +Terms + +The Licensor hereby grants you the right to copy, modify, create derivative +works, redistribute, and make non-production use of the Licensed Work. The +Licensor may make an Additional Use Grant, above, permitting limited +production use. + +Effective on the Change Date, or the fourth anniversary of the first publicly +available distribution of a specific version of the Licensed Work under this +License, whichever comes first, the Licensor hereby grants you rights under +the terms of the Change License, and the rights granted in the paragraph +above terminate. + +If your use of the Licensed Work does not comply with the requirements +currently in effect as described in this License, you must purchase a +commercial license from the Licensor, its affiliated entities, or authorized +resellers, or you must refrain from using the Licensed Work. + +All copies of the original and modified Licensed Work, and derivative works +of the Licensed Work, are subject to this License. This License applies +separately for each version of the Licensed Work and the Change Date may vary +for each version of the Licensed Work released by Licensor. + +You must conspicuously display this License on each original or modified copy +of the Licensed Work. If you receive the Licensed Work in original or +modified form from a third party, the terms and conditions set forth in this +License apply to your use of that work. + +Any use of the Licensed Work in violation of this License will automatically +terminate your rights under this License for the current and all other +versions of the Licensed Work. + +This License does not grant you any right in any trademark or logo of +Licensor or its affiliates (provided that you may use a trademark or logo of +Licensor as expressly required by this License). + +TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON +AN "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, +EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND +TITLE. + +----------------------------------------------------------------------------- + +MariaDB hereby grants you permission to use this License’s text to license +your works, and to refer to it using the trademark "Business Source License", +as long as you comply with the Covenants of Licensor below. + +Covenants of Licensor + +In consideration of the right to use this License’s text and the "Business +Source License" name and trademark, Licensor covenants to MariaDB, and to all +other recipients of the licensed work to be provided by Licensor: + +1. To specify as the Change License the GPL Version 2.0 or any later version, + or a license that is compatible with GPL Version 2.0 or a later version, + where "compatible" means that software provided under the Change License can + be included in a program with software provided under GPL Version 2.0 or a + later version. Licensor may specify additional Change Licenses without + limitation. + +2. To either: (a) specify an additional grant of rights to use that does not + impose any additional restriction on the right granted in this License, as + the Additional Use Grant; or (b) insert the text "None". + +3. To specify a Change Date. + +4. Not to modify this License in any other way. \ No newline at end of file diff --git a/pkg/pypi/build.sh b/pkg/pypi/build.sh index df8527e..cdf5fb4 100755 --- a/pkg/pypi/build.sh +++ b/pkg/pypi/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -PYBIN=python3 +PYBIN=python3.9 #PYBIN=/opt/python/cp39-cp39/bin/python3 # Build the extension module @@ -29,7 +29,7 @@ clean() find . -name '*.so' -type f -delete find . -name '*.pyc' -type f -delete find . -name '__pycache__' -type d -delete - rm -rf libzt/prototype.py + rm -rf libzt/sockets.py rm -rf libzt/libzt.py rm -rf src ext build dist native rm -rf libzt.egg-info @@ -38,9 +38,24 @@ clean() manylinux() { - CONTAINER="quay.io/pypa/manylinux_2_24_aarch64" + CONTAINER="quay.io/pypa/manylinux_2_24_x86_64" docker pull ${CONTAINER} docker run --rm -it --entrypoint bash -v $(pwd)/../../:/media/libzt ${CONTAINER} } -"$@" \ No newline at end of file +cycle() +{ + #clean + #swig -c++ -python -o ../../src/bindings/python/zt_wrap.cpp -I../../include ../../src/bindings/python/zt.i + #wheel + #pip3 uninstall -y libzt + #pip3 install dist/libzt-1.3.3-cp39-cp39-macosx_11_0_x86_64.whl + +} + +update-version() +{ + echo "__version__ = \"$(git describe)\"" > libzt/version.py +} + +"$@" diff --git a/pkg/pypi/libzt/__init__.py b/pkg/pypi/libzt/__init__.py index 9c0487c..8e5a8ac 100644 --- a/pkg/pypi/libzt/__init__.py +++ b/pkg/pypi/libzt/__init__.py @@ -1,4 +1,3 @@ -__version__ = "1.3.3" - from .libzt import * from .sockets import * +from .version import __version__ diff --git a/pkg/pypi/libzt/version.py b/pkg/pypi/libzt/version.py new file mode 100644 index 0000000..9633af7 --- /dev/null +++ b/pkg/pypi/libzt/version.py @@ -0,0 +1 @@ +__version__ = "1.3.4b0" diff --git a/pkg/pypi/setup.cfg b/pkg/pypi/setup.cfg index 36b1ca0..239590c 100644 --- a/pkg/pypi/setup.cfg +++ b/pkg/pypi/setup.cfg @@ -1,4 +1,6 @@ [metadata] version = attr: libzt.__version__ description-file = README.md -license_files = LICENSE \ No newline at end of file +license_files = + native/LICENSE.txt + native/ext/THIRDPARTY.txt diff --git a/pkg/pypi/setup.py b/pkg/pypi/setup.py index 2af77a6..9597092 100644 --- a/pkg/pypi/setup.py +++ b/pkg/pypi/setup.py @@ -1,9 +1,15 @@ #!/usr/bin/env python from setuptools import setup, Extension, Command, Distribution +from distutils.util import convert_path import glob import os +main_ns = {} +ver_path = convert_path('libzt/version.py') +with open(ver_path) as ver_file: + exec(ver_file.read(), main_ns) + from os import path this_directory = path.abspath(path.dirname(__file__)) with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f: @@ -70,9 +76,8 @@ cstuff = ('cstuff', {'sources': setup( name = 'libzt', - version = '1.3.3', + version = main_ns['__version__'], description = 'ZeroTier', -# long_description = 'Encrypted P2P communication between apps and services', long_description=long_description, long_description_content_type='text/markdown', author = 'ZeroTier, Inc.', @@ -87,28 +92,21 @@ setup( 'Topic :: Internet', 'Topic :: System :: Networking', 'Topic :: Security :: Cryptography', - 'Operating System :: OS Independent', 'Intended Audience :: Developers', 'Intended Audience :: Information Technology', - 'Intended Audience :: Science/Research', 'Intended Audience :: System Administrators', 'Intended Audience :: Telecommunications Industry', 'Intended Audience :: End Users/Desktop', 'License :: Free for non-commercial use', 'Operating System :: MacOS', - 'Operating System :: Microsoft :: Windows', 'Operating System :: POSIX :: BSD', 'Operating System :: POSIX :: Linux', 'Operating System :: Unix', 'Programming Language :: C', 'Programming Language :: C++', - 'Programming Language :: Python', - 'Programming Language :: Java', - 'Programming Language :: C#', - 'Programming Language :: Rust' + 'Programming Language :: Python' ], distclass=BinaryDistribution, libraries=[cstuff], ext_modules = [libzt_module], - python_requires='>=3.0', -) \ No newline at end of file +)