{"id":27133631,"url":"https://github.com/kmohrf/pipedput","last_synced_at":"2026-04-16T03:32:20.400Z","repository":{"id":49987738,"uuid":"158743533","full_name":"kmohrf/pipedput","owner":"kmohrf","description":"A general-purpose GitLab pipeline artifact handler. GitHub mirror; see website for issues.","archived":false,"fork":false,"pushed_at":"2025-06-01T23:03:24.000Z","size":211,"stargazers_count":2,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-11T14:36:31.674Z","etag":null,"topics":["debian","debian-packaging","dput","gitlab","gitlab-ci"],"latest_commit_sha":null,"homepage":"https://git.hack-hro.de/kmohrf/pipedput","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kmohrf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-11-22T19:38:35.000Z","updated_at":"2025-06-01T23:03:28.000Z","dependencies_parsed_at":"2025-07-05T05:05:31.654Z","dependency_job_id":"9b2c3d03-8f91-41dd-a5d0-886b46c58f27","html_url":"https://github.com/kmohrf/pipedput","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/kmohrf/pipedput","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmohrf%2Fpipedput","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmohrf%2Fpipedput/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmohrf%2Fpipedput/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmohrf%2Fpipedput/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kmohrf","download_url":"https://codeload.github.com/kmohrf/pipedput/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmohrf%2Fpipedput/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31870507,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["debian","debian-packaging","dput","gitlab","gitlab-ci"],"created_at":"2025-04-07T23:49:54.902Z","updated_at":"2026-04-16T03:32:20.371Z","avatar_url":"https://github.com/kmohrf.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pipedput\n\npipedput is a small flask-based web service that acts as a web-hook\nreceiver for GitLab pipeline events. It scans the event payload for\nartifacts, downloads and extracts them and then defers control to\nhooks configured by you.\n\nSupport for pushing to deb and pypi repositories is built-in.\n\n## Installation\n\nReleases come with deb packages that you can install on your system.\nSee the [releases page](https://git.hack-hro.de/kmohrf/pipedput/-/releases).\n\nYou may install the deb packages with dpkg:\n\n```sh\ndpkg -i pipedput python3-pipedput\napt --fix-broken install -t buster-backports\n```\n\nA deb repository for your convenience is in the works.\n\n## Application Configuration\n\nYour config file should be placed in `/etc/pipedput/config.py`,\nis executed as python code and must set the `PROJECTS` variable.\nSee the following example:\n\n```python\nimport logging\n\n# There is a lot more to discover, where this is coming from!\nfrom pipedput.conf import (\n    Contact,\n    IsTag,\n    OnDefaultBranch,\n    Project,\n    PublishToDebRepository,\n    PublishToPythonRepository,\n    WasSuccessful,\n)\n\n# Configure logging for your needs.\n# See: https://docs.python.org/3/howto/logging.html\nlogging.basicConfig(\n    level=logging.INFO,\n    handlers=[logging.StreamHandler()],\n)\n\n# Mail settings are important for deployment reports!\n# See: https://pythonhosted.org/Flask-Mail/#configuring-flask-mail\nMAIL_SERVER = \"mail.example.org\"\nMAIL_PORT = 587\nMAIL_USE_TLS = True\nMAIL_USERNAME = \"pipedput@mail.example.org\"\nMAIL_PASSWORD = \"abc123\"\nMAIL_DEFAULT_SENDER = \"pipedput@mail.example.org\"\n\n# A link to your documentation will be included in outgoing\n# mail notifications if you set this option.\nDEPLOYMENT_DOCUMENTATION_URL = \"https://our-internal-deployment-documentation.example.org\"\n\n# You can define any type of variables like you would\n# in any other python file!\npipeline_token = \"my_secret_pipeline_token\"\ngitlab_api_token = \"a-gitlab-token\"\n# files must be readable by the _pipedput user\ndput_cfg = \"/etc/pipedput/my-vendor.dput.cf\"\npipy_cfg = \"/etc/pipedput/my-vendor.pypirc\"\n\n# The bitwise operators \u0026, | and ~ (AND, OR, NOT) can be used\n# to build complex constraints that define, if your hook\n# should be executed!\non_default_branch = OnDefaultBranch(gitlab_api_token)\non_default_branch_and_successful = on_default_branch \u0026 WasSuccessful()\nis_release = on_default_branch_and_successful \u0026 IsTag()\n\nPROJECTS = [\n    Project(\n        # This key must be unique!\n        \"my-private-project\",\n        PublishToDebRepository(dput_cfg, should_deploy=is_release),\n        # It’s good to protect your pipeline handlers with a secret!\n        # Fill in a 'Secret Token' in the GitLab Web-Hook settings and\n        # set it to the pipeline_secret option.\n        pipeline_secret=pipeline_token,\n        # Artifacts of non-public projects need a download token.\n        # You can create a personal or project access token and set it here.\n        artifact_download_token=gitlab_api_token,\n    ),\n    Project(\n        \"my-project\",\n        # You can define multiple hooks for the same project by passing a list\n        # instead of a single hook!\n        [\n            PublishToDebRepository(dput_cfg, should_deploy=is_release),\n            PublishToPythonRepository(pipy_cfg, should_deploy=on_default_branch_and_successful)\n        ],\n        # Email notifications for deployments and errors are sent to the user\n        # who triggered the pipeline and authored the commit by default. If\n        # you add maintainers to your project configuration they will receive\n        # these notifications as well.\n        maintainers={\n            Contact(\"A maintainer\", \"maintainer@example.com\"),\n        },\n    ),\n]\n\n```\n\npipedput integrates Flask-Mail for sending deployment reports. See the\n[configuration variables](https://pythonhosted.org/Flask-Mail/#configuring-flask-mail)\nof Flask-Mail to enable these reports.\n\n## Web-Hook Configuration\n\nOnce installed on a server you can add the following URL to your\nGitLab Web-Hook page:\n\n```\nhttps://example.com/api/projects/\u003cproject_key\u003e/publish\n```\n\nwhere `\u003cproject_key\u003e` refers to the first argument you’ve passed to\n`Project` (in the example configuration from above this is `my-project`).\n\n## Future\n\nThis project is considered feature-complete for as long as GitLab\ndoesn’t change the content of the pipeline event payload.\nLow update-frequency is not an indication of lack of maintenance :).\n\nFeel free to submit issues and pull requests in case you’ll find\nsomething that is missing though!\n\n## License\n\npipedput is released under the terms of the\n*GNU Affero General Public License v3 or later*.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkmohrf%2Fpipedput","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkmohrf%2Fpipedput","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkmohrf%2Fpipedput/lists"}