{ "info": { "author": "Jonas Maurus (@jdelic)", "author_email": "jonas@gopythongo.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", "Operating System :: POSIX", "Programming Language :: Python :: 3 :: Only" ], "description": "GoPythonGo creates Python deployment artifacts\n==============================================\n\nYou can go to many conferences and watch many talks on Youtube about Python deployment and they invariably\ninclude a slide with a diagram that looks something like this:\n\n Developer -push-> GitHub/GitLab/BitBucket -webhook-> SomeBuildServer -magic-> Fabulous cloud stuff\n\nGoPythonGo is a opinionated, extensible, well-structured and highly configurable implementation of the arrow\nthat says \"magic\".\n\nGoPythonGo is built around 4 ideas:\n\n 1. Python applications should always be run from a virtual environment.\n 2. Builds should be as fast as possible, so Python Wheels should be used and should be cached.\n 3. Applications should be deployed using manageable binary artifacts, like DEBs, RPMs or Docker containers and it\n should be easy to switch between their type.\n 4. The binary artifacts should be as small as possible.\n\n**This is still under very active development.** Currently you can use it to build .deb packages to deploy virtual\nenvironments using Apt. It will use pbuilder or Docker to do so, it can auto-increment your version strings or integrate\nwith other tools that do that, it can integrate with aptly to publish your packages to your server or Amazon S3. It\nincludes tools to integrate with Hashicorp Vault for secure package signing using GPG and implementing build server\nSSL credential management. BUT, it's still changing all the time. That said, GoPythonGo is used to distribute\nGoPythonGo, so there.\n\n\nBasic philosophy\n----------------\nGoPythonGo is built to allow you to put build configuration where it makes the most sense. In practice, this means \nthat the command-line tool takes it's parameters from three sources: a configuration file, environment variables and\ncommand-line parameters. This way, keep the configuration for *how to build* with your code in a checked-in config\nfile, but the configuration for *assembling* your build on your build server server in environment variables or on\nthe command-line or a second configuration file that will be merged.\n\n\nGetting started\n---------------\nOn Debian:\n\n 1. Install the GoPythonGo and Aptly distribution keys\n\n apt-key adv --keyserver hkp://keys.gnupg.net --recv-key DDB131CF1DF6A9CF8200799002CBD940A78049AF\n apt-key adv --keyserver keys.gnupg.net --recv-keys 9E3E53F19C7DE460\n\n 2. Install GoPythonGo, [aptly](https://aptly.info), pbuilder and fpm. As `root`:\n\n echo \"deb http://repo.gopythongo.com/nightly/stretch gopythongo main\" > /etc/apt/sources.list.d/gopythongo.list\n echo \"deb http://repo.aptly.info/ squeeze main\" > /etc/apt/sources.list.d/aptly.list\n apt-get update\n apt-get --no-install-recommends install gopythongo aptly pbuilder ruby ruby-dev\n gem install fpm\n\n 3. create a simple example project:\n\n mkdir -p /tmp/helloworld/helloworld\n cat > /tmp/helloworld/helloworld/__init__.py < /tmp/helloworld/setup.py < .gopythongo/config.1\n mv .gopythongo/config.1 .gopythongo/config\n sed -e 's/PACKAGENAME/helloworld/g' .gopythongo/fpm_opts > .gopythongo/fpm_opts.1\n mv .gopythongo/fpm_opts.1 .gopythongo/fpm_opts\n\n 5. Create a Debian repository managed by aptly\n\n aptly repo create helloworld\n\n 6. Build the helloworld package (-v enables verbose output):\n\n /opt/gopythongo/bin/gopythongo -v /opt/helloworld /tmp/helloworld\n\n 7. You know what? Build it again and watch how the version number changes as GoPythonGo appends a revision number!\n Also, the second build will go much faster now that the initial setup is out of the way.\n\n 8. Now install your creation\n\n dpkg -i helloworld_1.0~dev1-1.deb\n\n 9. And run it:\n\n /opt/helloworld/bin/helloworld\n\n 10. Go party!\n\n\nExamples\n--------\n[Authserver](https://github.com/jdelic/authserver/) is a full project that I'm building using gopythongo. Just look in \nthe .gopythongo folder and its README.\n\nNext steps\n----------\nIf you create an aptly configuration file, you can use GoPythonGo to sign and push the package to, for example,\nAmazon S3. Just look at GoPythonGo's own `.gopythongo` folder for examples. You should also have a look at the output\nof `--debug-config` to see how GoPythonGo loads configuration from the different sources (config file, environment\nvariables and command-line parameters).\n\n\nFuture features\n---------------\n\n * Potentially add an additional class of plug-ins \"composers\" which execute even before the creation of the\n build environment to prepare the source tree for building. These might do things like: clean up temp files,\n request/download/install stuff or clone submodules.\n * Add Docker Store support to build, tag and upload Docker containers\n * Create integration and unittests\n * Add RPM and createrepo support\n\n\nLicense\n=======\n\nGoPythonGo, meaning:\n\n 1. It's source code as published on https://github.com/gopythongo/gopythongo\n 2. It's documentation as published on https://github.com/gopythongo/gopythongo\n\nis wholly subject to the Mozilla Public License v. 2.0 as published by the Mozilla Foundation and included with this\nsource code in the file \"LICENSE\". You can also find a copy of the full license at\nhttps://www.mozilla.org/en-US/MPL/2.0/.\n\n```\n\"Grant of license\" PGP signature.\n\n-----BEGIN PGP MESSAGE-----\nVersion: GnuPG v2\n\nowGbwMvMwMHYcmwh8703tVcYT79MYgh/uf6QT2Zyal5xKi+XLQTwcvFyuecHVJZk\n5Oe55+so5KYm5mXmpVuBxBUUDPUUPEvUixWK80uLklMVkvNTUhUSixUKSpNyMosz\nUlMU8vMUMkpKCoqt9PXTM0sySpP0kvNz9dPzC8AGpucjMUHmGUHNS8lPLs1NzStJ\nLMkEmkC+ibxcmcUK5Rn5OTmVCsWlSVmpySUKJfkKJRmpCr75VZk5OYkKASCTkxWg\n/lYo0wM6wgDVyqRKFB1u+aV5KVCX5aUoZOYl55SmAJWVA50DVJhZzMuFHB6ZeWDd\naZk5qQpKPp7Orn7Brkp6CpH5pQrJiXlAcaAZiUClBZUK+WkQpaU5OQo5UAcllsD9\nW15erpcLcYReflG6fmqebmiwvm+Ajz7Qyfp6IO8CI6soMa8EZFIOLCZ10QAvl2Mx\n2J7ifKCTEkuBgVUEDJUGsNsVgD5L1VHwVEhML0pNBQUWzCGIVKAA9H9qEdiIktSi\n3GKYu/EGKdB5ugrBqQUKRuY6CkYGhmYKugpe+XnAgPZNLC0qBQZaJ5MMCwMjBwMb\nKxMwJR5h4OIUgCXPD578/z0W7Jo72f+aqvuyWVOSOr8wxYquDLkXHyTsaMi+x0r2\nwW73X/5ap3l50u+VsYUyVF5+9/Xn7m8PzfzOPzO5u3lSgnVx75UbJWztsznWTP/g\n+95NpYxBtf6FUppTT+ItC8f8NMH0n11f37A8Oli7OFqjStZ7Qv6rcwf1fGZfPl65\n54T1loCm9LPCln2VhTeYL8kWhTYVCvw3U3aZK1FY0Vy54ATnP/Wq/OTEzQvuz7H9\ncVTC6KT4Mvbnmq+29y358DpafJuGRPjBrG2KViIWkXMi9/5KdTlUdnBF0cP+yyt8\nMuZcz6s7Xfm49kGEYa54dMm195/LhWZcZMldc+m7/gemNVsUDumtk9q8Z0vkpzX/\nnyaEd5efOea0qMGEPSgkyazSZkVD87oN227OztyyPPloROaCd7kT2By/6n/WtVHf\nwbLyA1vekSAfW9f/qeIOiSrG58tlHvBueLBv7k5vi+p7/9v7/Cvlz2REb72quLfh\n4S3Hun21Ry1jynoqTI3z/xQeeRk3z3VBnK6Tor+bMr9ebMrGQ+s63Xb/VF/tVBeb\nU1FpMU3m31/bvaslpt0tnr9tYTar+PKJd6e3XxHumdd1bcMUTx7r1//bHljHvciM\ntNp4V5CtYf5db5WuwIgHUWlntEsjEperCUiEn+T6my5zn8ti09JtVYcnXli5MHz6\n5poS68ifh5sW8Oqu4Vz+Tus5vynDtoTSlsm6AA==\n=Z94o\n-----END PGP MESSAGE-----\n```\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "", "maintainer": "GoPythonGo.com", "maintainer_email": "info@gopythongo.com", "name": "gopythongo", "package_url": "https://pypi.org/project/gopythongo/", "platform": "", "project_url": "https://pypi.org/project/gopythongo/", "project_urls": null, "release_url": "https://pypi.org/project/gopythongo/0.7.4.dev0/", "requires_dist": [ "Jinja2 (==2.10)", "ConfigArgParse (==0.13.0)", "Sphinx (==1.7.5)", "sphinx-rtd-theme (==0.4.0)", "colorama (==0.3.9)", "semantic-version (==2.6.0)", "packaging (==17.1)", "typing (==3.6.4)", "hvac (==0.6.0)", "docker-py (==1.10.6)", "dockerpty (==0.4.1)", "pyopenssl (==18.0.0)", "bumpversion (==0.5.3)" ], "requires_python": "", "summary": "Build shippable virtualenvs", "version": "0.7.4.dev0" }, "last_serial": 3970627, "releases": { "0.7.4.dev0": [ { "comment_text": "", "digests": { "md5": "043e5b317fbc6d714383f99cadbaf735", "sha256": "4da075a2438c5f715485032d3a98afc161141ed6d0cc528c215074b9f1b94429" }, "downloads": -1, "filename": "gopythongo-0.7.4.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "043e5b317fbc6d714383f99cadbaf735", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 108624, "upload_time": "2018-06-17T08:11:36", "url": "https://files.pythonhosted.org/packages/20/71/093cc4629180330d6ac9bb3801c38eab0a0141052c08d5165c13c05c2380/gopythongo-0.7.4.dev0-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "043e5b317fbc6d714383f99cadbaf735", "sha256": "4da075a2438c5f715485032d3a98afc161141ed6d0cc528c215074b9f1b94429" }, "downloads": -1, "filename": "gopythongo-0.7.4.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "043e5b317fbc6d714383f99cadbaf735", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 108624, "upload_time": "2018-06-17T08:11:36", "url": "https://files.pythonhosted.org/packages/20/71/093cc4629180330d6ac9bb3801c38eab0a0141052c08d5165c13c05c2380/gopythongo-0.7.4.dev0-py3-none-any.whl" } ] }