{ "info": { "author": "Adam Uhlir", "author_email": "hello@adam-uhlir.me", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython" ], "description": "# IPFS Publish\n\n![Git+IPFS=Love](https://raw.githubusercontent.com/AuHau/ipfs-publish/master/docs/assets/love.png)\n\n[![PyPI version](https://badge.fury.io/py/ipfs-publish.svg)](https://badge.fury.io/py/ipfs-publish) \n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ipfs-publish.svg)](https://pypi.org/project/ipfs-publish)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/ipfs-publish.svg)](https://pypi.org/project/ipfs-publish/) \n[![Docker Hub - Pulls](https://img.shields.io/docker/pulls/auhau/ipfs-publish.svg?style=flat)](https://hub.docker.com/r/auhau/ipfs-publish) \n[![codecov](https://codecov.io/gh/AuHau/ipfs-publish/branch/master/graph/badge.svg)](https://codecov.io/gh/AuHau/ipfs-publish) \n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/58e8cff391b74f679d9d05a59df6bd77)](https://app.codacy.com/app/AuHau/ipfs-publish)\n[![Updates](https://pyup.io/repos/github/AuHau/ipfs-publish/shield.svg)](https://pyup.io/repos/github/AuHau/ipfs-publish/)\n\n\n> Continuous Delivery of static websites from Git to IPFS\n\n## About\n\nThis is a tool that aims to enable automatic publishing of static webpages from Git repositories into IPFS. \nIt consists of two parts: small web server and management CLI.\n\nWeb server exposes an endpoint which you use as your Git's webhook. When the hook is invoked, it clones\nyour repo, build it (if needed), add it to the IPFS node (pin it if configured) and publish the new IPFS address\nunder configured IPNS name.\n\nCLI is in place to manage the repos.\n\n### Features\n\n* Ignore files - `.ipfs_publish_ignore` file specify entries that should be removed before adding the repo to IPFS\n* Publish directory - you can publish only specific sub-directory inside the repo\n* Publish specific branch - you can specify which branch should be published from the repo\n* Build script - before adding to IPFS you can run script/binary inside the cloned repo\n* After publish script - after the publishing to IPFS, this script is run with argument of the created IPFS address\n\n### Git providers\n\nCurrently the webhook supports generic mode, where the repo's **secret** is passed through as URL's parameter.\n\nThere is also special mode for GitHub, where the **secret** should be configured as part of the Webhook's configuration. \n\n## Warning\n\n**This tool is not meant as public service and only trusted Git repos should be used with it.\nIt can introduce serious security risk into your system as the runtime environment for the scripts is not \nisolated from rest of your machine!** \n\n## Install\n\n### Requirements\n\n* Python 3.7 and higher\n* Git\n* go-ipfs daemon\n* UNIX-Like machine with public IP\n\n### pip\n\nYou can install ipfs-publish directly on your machine using `pip`:\n\n```shell\n$ pip install ipfs-publish\n```\n\nThen you can use the command `ipfs-publish` to manage your repos and/or start the webhook's server.\n\n### Docker\n\nThere is official Docker image build with name: `auhau/ipfs-publish`\n\nEasiest way to run ipfs-publish is with docker-compose. Here is example for its configuration:\n\n```yaml\nversion: '3'\n\nservices:\n ipfs:\n image: ipfs/go-ipfs:v0.4.18\n volumes:\n - /data/ipfs # or you can mount it directly to some directory on your system\n ipfs-publish:\n image: auhau/ipfs-publish\n environment:\n IPFS_PUBLISH_CONFIG: /data/ipfs_publish/config.toml\n IPFS_PUBLISH_VERBOSITY: 3\n IPFS_PUBLISH_IPFS_HOST: ipfs\n IPFS_PUBLISH_IPFS_PORT: 5001\n volumes:\n - /data/ipfs_publish\n depends_on:\n - ipfs\n ports:\n - 8080:8000\n```\n\nFor more information see [documentation](https://ipfs-publish.adam-uhlir.me/#docker).\n\n## Usage\n\n```shell\n# Add new repo\n$ ipfs-publish add\n[?] Git URL of the repo: https://github.com/auhau/auhau.github.io\n[?] Name of the new repo: github_com_auhau_auhau_github_io\n[?] Do you want to publish to IPNS? (Y/n):\n[?] Path to build binary, if you want to do some pre-processing before publishing:\n[?] Path to after-publish binary, if you want to do some actions after publishing:\n[?] Directory to be published inside the repo. Path related to the root of the repo: /\n\nSuccessfully added new repo!\nUse this URL for you webhook: http://localhost:8080/publish/github_com_auhau_auhau_github_io\nAlso set this string as your hook's Secret: NIHT4785CVFT358GFE08RDAZG\nYour IPNS address: /ipns/QmRTqaW3AJJXmKyiNT7MqqZ4VjGtNNxPyTkgo3Q7pmoCeX/\n\n# List current enabled repos\n$ ipfs-publish list\ngithub_com_auhau_auhau_github_io\n\n# Show details of repo\n$ ipfs-publish show github_com_auhau_auhau_github_io\ngithub_com_auhau_auhau_github_io\nGit URL: https://github.com/auhau/auhau.github.io\nSecret: EAHJ43UYT7LUEM4QFRZ4IFAXL\nIPNS key: ipfs_publishg_github_com_auhau_auhau_github_io\nIPNS lifetime: 24h\nIPNS ttl: 15m\nIPNS address: /ipns/QmRTqaW3AJJXmKyiNT7MqqZ4VjGtNNxPyTkgo3Q7pmoCeX/\nLast IPFS address: None\nWebhook address: http://localhost:8080/publish/github_com_auhau_auhau_github_io\n\n# You can manually publish repo\n$ ipfs-publish publish github_com_auhau_auhau_github_io\n\n# Starts HTTP server & IPNS republishing service\n$ ipfs-publish server &\nRunning on http://localhost:8080 (CTRL + C to quit)\n```\n\n## Contributing\n\nFeel free to dive in, contributions are welcomed! [Open an issue](https://github.com/AuHau/ipfs-publish/issues/new) or submit PRs.\n\nFor PRs and tips about development please see [contribution guideline](https://github.com/AuHau/ipfs-publish/blob/master/CONTRIBUTING.md).\n\n## License\n\n[MIT \u00a9 Adam Uhlir](https://github.com/AuHau/ipfs-publish/blob/master/LICENSE)\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/AuHau/ipfs-publish", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "ipfs-publish", "package_url": "https://pypi.org/project/ipfs-publish/", "platform": "", "project_url": "https://pypi.org/project/ipfs-publish/", "project_urls": { "Homepage": "https://github.com/AuHau/ipfs-publish" }, "release_url": "https://pypi.org/project/ipfs-publish/0.1.3/", "requires_dist": [ "gitpython (==2.1.11)", "click (==7.0)", "inquirer (==2.5.1)", "click-completion (==0.5.0)", "pbr (==5.1.2)", "quart (==0.8.1)", "ipfsapi (==0.4.3)", "toml (==0.10.0)", "appdirs (==1.4.3)" ], "requires_python": ">=3.7.0, <3.8.0", "summary": "CD-like tool for publishing your static website from Git to IPFS", "version": "0.1.3" }, "last_serial": 4881615, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "45893f247f1e4a1a18ed49a4699557dd", "sha256": "e573f0281c58bc4cba6ef668f959037e40951ef1c974ee667db8bebeabd04511" }, "downloads": -1, "filename": "ipfs_publish-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "45893f247f1e4a1a18ed49a4699557dd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7.0, <3.8.0", "size": 19747, "upload_time": "2019-02-14T01:11:42", "url": "https://files.pythonhosted.org/packages/ee/ac/81ddb52c5d744e04868b664bd11cacd0403ccdb3fd31e45959281d631d7f/ipfs_publish-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3fa453d381c2f6524287c1a66a62e083", "sha256": "de3296c32ed990a95e1dc66f2365754760d4df78f639c5987f90a06ae625bd99" }, "downloads": -1, "filename": "ipfs-publish-0.1.0.tar.gz", "has_sig": false, "md5_digest": "3fa453d381c2f6524287c1a66a62e083", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7.0, <3.8.0", "size": 50544, "upload_time": "2019-02-14T01:11:43", "url": "https://files.pythonhosted.org/packages/43/49/0e29346adbd103bc6cb37175709636b39c99ab993dcba4e6d017ffa1d39f/ipfs-publish-0.1.0.tar.gz" } ], "0.1.0.0b1": [ { "comment_text": "", "digests": { "md5": "e96ebc167c75153fe5774b966a93cbdd", "sha256": "b4362b1006350ae1c3e502b6486ccf61e7d9f1876674841b1c9dd982757dfdcf" }, "downloads": -1, "filename": "ipfs_publish-0.1.0.0b1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e96ebc167c75153fe5774b966a93cbdd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7.0, <3.8.0", "size": 19809, "upload_time": "2019-02-14T00:46:32", "url": "https://files.pythonhosted.org/packages/9c/e8/942f98310b64510ce1538a64bc1bc4593d600abe397b0683d5079a6aea54/ipfs_publish-0.1.0.0b1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41f349c06079dc9e3673fb28f1146e21", "sha256": "dab813c1116dad1c35db01bd51b1c3b8a388656ba0729059c41d423b74af762b" }, "downloads": -1, "filename": "ipfs-publish-0.1.0.0b1.tar.gz", "has_sig": false, "md5_digest": "41f349c06079dc9e3673fb28f1146e21", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7.0, <3.8.0", "size": 50517, "upload_time": "2019-02-14T00:46:34", "url": "https://files.pythonhosted.org/packages/d1/21/c5f117d2a67a44a1a6149b53b0a4a8e196900904ac37571fe6acdc0b0533/ipfs-publish-0.1.0.0b1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "a5800ed4e054c09d44d83ae9ac653d1d", "sha256": "f54b1e1ee0c968a4ec6c1f223c3a89bad95e4181783aeee17bb289f88a241367" }, "downloads": -1, "filename": "ipfs_publish-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a5800ed4e054c09d44d83ae9ac653d1d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7.0, <3.8.0", "size": 19745, "upload_time": "2019-02-27T05:38:46", "url": "https://files.pythonhosted.org/packages/bf/5e/f00142e72875487a4d2f5134e5cbe8128191ff75b2febf99da3d5c9aeffe/ipfs_publish-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0b84e161d69edf90c774bbb8344b7b91", "sha256": "fbdf0d91d42c3addf740958dfdd321609f3f3829030b7dd1f4a0593bda90eecd" }, "downloads": -1, "filename": "ipfs-publish-0.1.1.tar.gz", "has_sig": false, "md5_digest": "0b84e161d69edf90c774bbb8344b7b91", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7.0, <3.8.0", "size": 50743, "upload_time": "2019-02-27T05:38:47", "url": "https://files.pythonhosted.org/packages/5b/ff/b65ab554c4892a98ea297ae5cd1d1a3058b430fc8878ab1d5a9270f92e0a/ipfs-publish-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "738915117aaf9cd15dbd756508a7b732", "sha256": "4965ed4089157e130017cfd4ecceb03b8b5c37f0f3c904dae25a0b922b2ea852" }, "downloads": -1, "filename": "ipfs_publish-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "738915117aaf9cd15dbd756508a7b732", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7.0, <3.8.0", "size": 19787, "upload_time": "2019-02-28T21:00:34", "url": "https://files.pythonhosted.org/packages/3c/55/154164969c94fa2d0bf58982ab3bd5ad3cecaf7493224b037bd6b5f7ea3b/ipfs_publish-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ffa3268ff08d5b7ff41a065789b210f6", "sha256": "923a11264766cb32301efc86b961f89fd247833c3d4d808199b1104ad8915dd6" }, "downloads": -1, "filename": "ipfs-publish-0.1.2.tar.gz", "has_sig": false, "md5_digest": "ffa3268ff08d5b7ff41a065789b210f6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7.0, <3.8.0", "size": 50962, "upload_time": "2019-02-28T21:00:36", "url": "https://files.pythonhosted.org/packages/db/c2/a3a6134e43af8bf785df4f15fcc0a08d70326b2be3f8a51ba259d694072a/ipfs-publish-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "d8e8d292187b725369b1f204647cca3c", "sha256": "0644fbead42f96aecc76a3417f8901fe67b788a3988f59c7209e8b01e35bffe5" }, "downloads": -1, "filename": "ipfs_publish-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d8e8d292187b725369b1f204647cca3c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7.0, <3.8.0", "size": 20143, "upload_time": "2019-02-28T23:42:01", "url": "https://files.pythonhosted.org/packages/36/fe/5be06e3e769c318af18f7899014c5029a485f70585b71775f91a3bb9601e/ipfs_publish-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d6b90ef4626f268ac9b0504f87309000", "sha256": "465f67643cd4dc948ae742e0637716c1a0f2ace88f46c7228b4c332fbd1f28ba" }, "downloads": -1, "filename": "ipfs-publish-0.1.3.tar.gz", "has_sig": false, "md5_digest": "d6b90ef4626f268ac9b0504f87309000", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7.0, <3.8.0", "size": 51355, "upload_time": "2019-02-28T23:42:03", "url": "https://files.pythonhosted.org/packages/68/02/f3b33e869e6122c3d01dae9480e8fac97f507d8c689f2cbc7fccef12b9f9/ipfs-publish-0.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d8e8d292187b725369b1f204647cca3c", "sha256": "0644fbead42f96aecc76a3417f8901fe67b788a3988f59c7209e8b01e35bffe5" }, "downloads": -1, "filename": "ipfs_publish-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d8e8d292187b725369b1f204647cca3c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7.0, <3.8.0", "size": 20143, "upload_time": "2019-02-28T23:42:01", "url": "https://files.pythonhosted.org/packages/36/fe/5be06e3e769c318af18f7899014c5029a485f70585b71775f91a3bb9601e/ipfs_publish-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d6b90ef4626f268ac9b0504f87309000", "sha256": "465f67643cd4dc948ae742e0637716c1a0f2ace88f46c7228b4c332fbd1f28ba" }, "downloads": -1, "filename": "ipfs-publish-0.1.3.tar.gz", "has_sig": false, "md5_digest": "d6b90ef4626f268ac9b0504f87309000", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7.0, <3.8.0", "size": 51355, "upload_time": "2019-02-28T23:42:03", "url": "https://files.pythonhosted.org/packages/68/02/f3b33e869e6122c3d01dae9480e8fac97f507d8c689f2cbc7fccef12b9f9/ipfs-publish-0.1.3.tar.gz" } ] }