{"id":42194628,"url":"https://github.com/scientific-python/meeseeksdev","last_synced_at":"2026-01-27T00:01:56.524Z","repository":{"id":14945048,"uuid":"76991515","full_name":"scientific-python/MeeseeksDev","owner":"scientific-python","description":"Development deployment of MeeseeksBox (use at your own risk)","archived":false,"fork":false,"pushed_at":"2025-11-24T14:46:03.000Z","size":519,"stargazers_count":37,"open_issues_count":28,"forks_count":22,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-11-28T02:21:18.939Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scientific-python.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-12-20T21:04:26.000Z","updated_at":"2025-11-24T14:46:00.000Z","dependencies_parsed_at":"2023-11-07T01:44:14.922Z","dependency_job_id":"f72b8ebc-0101-4a8c-ba4c-31d2cd100177","html_url":"https://github.com/scientific-python/MeeseeksDev","commit_stats":{"total_commits":660,"total_committers":18,"mean_commits":"36.666666666666664","dds":0.2439393939393939,"last_synced_commit":"8e8161777506d8a8b6692d69fbf8d152d392f694"},"previous_names":["scientific-python/meeseeksdev"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/scientific-python/MeeseeksDev","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scientific-python%2FMeeseeksDev","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scientific-python%2FMeeseeksDev/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scientific-python%2FMeeseeksDev/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scientific-python%2FMeeseeksDev/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scientific-python","download_url":"https://codeload.github.com/scientific-python/MeeseeksDev/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scientific-python%2FMeeseeksDev/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28792638,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T21:49:50.245Z","status":"ssl_error","status_checked_at":"2026-01-26T21:48:29.455Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-01-27T00:01:56.232Z","updated_at":"2026-01-27T00:01:56.516Z","avatar_url":"https://github.com/scientific-python.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MeeseeksBox\n\nA base for stateless GitHub Bot,and one hosted implementation thereof.\n\nSee what is a [Meeseeks and a MeeseeksBox](https://www.youtube.com/watch?v=qUYvIAP3qQk).\n\nSee [usage statistics](https://meeseeksbox.github.io/).\n\n## Hosted for you\n\nWe host MeeseeksBox(es) and will expose them as GitHub Integrations so you don't\nhave to host and run your own. You can if you want, it should be pretty\nsimple.\n\nThe advantage of having one and only one box, is to do cross repository\noperations (and fix security bugs).\n\nThe drawback is if there is a security issue, then we're screwed.\n\n## Activate on your Repo\n\n1. Head [there](https://github.com/apps/lumberbot-app/) and activate\n   MeeseeksDev on repos you have access to.\n\n1. On a repository with MeeseeksDev installed say: `@MeeseeksDev Hello` to be\n   sure MeeseeksDev is correctly installed.\n\n1. Enjoy\n\nYou might also want to tell your CI-integration (like travis-ci) **not** to test the **push** __and__ **the merge**.\nTo do so use:\n\n```\nbranches:\n  except:\n    - /^auto-backport-of-pr-[0-9]+$/\n```\n\n## per-repository configuration\n\nIf you want per-repository configuration, create a `.meeseeksdev.yml` file at\nthe root of the repository. For now this file allow you to give fine-grained\npermissions to users.\n\n```\nusers:\n  \u003cusername\u003e:\n    can:\n      - \u003ccommand 1\u003e\n      - \u003ccommand 2\u003e\n      - ...\n  \u003cusername\u003e\n    can:\n      - ...\n```\n\nThis will allow `\u003cusername\u003e` to ask `@meeseeksdev` to perform above commands.\nThe conf file is the one that sits on the repository default  branch (usually\n`master`).\n\n## What can a MeeseeksBox do ?\n\nComment on a Pr or issue.\n\nYou _may_ put multiple commands, one per line.\n\nMrMeeseeks _may_ not like what you ask, and just ignore you.\n\n### @MeeseeksDev hello\n\nRespond with\n\n\u003e Hello {user} look at me, I'm Mr Meeseeks\n\nTo test whether a Meeseeks understand you.\n\n### @MeeseeksDev backport \\[to\\] {branch}\n\nIf issued from a  PR which is merged, attempt to backport (cherry-pick the\nmerge commit) on an older branch and submit a PR with this backport (on said branch)\n\nApply origin-pr labels and milestone to backport.\n\n- No option to push directly (yet), if implemented should apply only with clean backport.\n- Investigate what to do in case of conflict\n  - likely commit with conflict, and let maintainers resolve conflict\n\nRepo admins only\n\nNote: Cloning can take a long-time. So expect MrMeeseeks to be busy while this\nhappen. Also heroku has a 2min deadline and other limitations, so MrMeeseeks can\nlikely be killed. I haven't implemented a queue yet.\n\n### @MeeseeksDev black\n\nIf issued from a PR, will apply black to commits made in this PR and push\nthe updated commits.\n\nYou can also use \"blackify\" as an alias.\n\nRepo admins only, we plan to make it available to PR authors as well.\n\nMeeseeksDev Bot needs to be installed on the PR source repository for this to work.\nIf it's not it will ask you to do so.\n\n### @MeeseeksDev pre-commit\n\nIf issued from a PR, will apply pre-commit to this PR and push\na commit with the changes made.  If no changes are made, or the changes\ncannot be automatically fixed, it will show a comment in the PR and bail.\n\nYou can also use \"precommit\" as an alias.\n\nRepo admins only, we plan to make it available to PR authors as well.\n\nMeeseeksDev Bot needs to be installed on the PR source repository for this to work.\nIf it's not it will ask you to do so.\n\n### @MeeseeksDev pep8ify\n\n(in progress)\n\nIf issued from a PR, will apply autopep8 to the current lines changed by this\nPR, and push an extra commit to it that fixes pep8.\n\nCode in progress and due to GitHub API limitation only works if MeeseeksDev\nalso available on Source repo of the PR.\n\nRepo admins only, plan to make it available to PR author as well.\n\nMeeseeksDev Bot need to be installed on the PR source repository for this to work.\nIf it's not it will ask you to do so.\n\n### @MeeseeksDev migrate \\[to\\] {target org/repo}\n\nNeeds MeeseeksBox to be installed on both current and target repo. Command\nissuer to be admin on both.\n\nMeeseeksDev will open a similar issue, replicate all comments with links to\nfirst, migrate labels (if possible).\n\n### @MeeseeksDev close\n\nClose the issue. Useful when replying by mail\n\n### @MeeseeksDev open\n\nReopen the issue.\n\n### @MeeseeksDev tag {comma, separated, case sensitive, taglist}\n\nTag with said tags if availlable (comma separated, need to be exact match)\n\n### @MeeseeksDev untag {comma, separated, case sensitive, taglist}\n\nRemove said tags if present (comma separated, need to be exact match)\n\n### @MeeseeksDev merge \\[merge|squash|rebase\\]\n\nIssuer needs at least write permission.\n\nIf Mergeable, Merge current PR using said methods (`merge` if no arguments)\n\n## Command Extras\n\nYou can be polite and use \"please\" with any of the commands, e.g. \"@Meeseeksdev please close\".\n\nYou can optionally use the word \"run\" in the command, e.g. \"@Meeseeksdev please run pre-commit\".\n\n## Simple extension.\n\nMost extension and new command for the MeeseeksBox are only one function, for\nexample here is how to let everyone request the zen of Python:\n\n````python\nfrom textwrap import dedent\n\n@everyone\ndef zen(*, session, payload, arguments):\n    comment_url     = payload['issue']['comments_url']\n    session.post_comment(comment_url,\n    dedent(\n        \"\"\"\n        Zen of Python ([pep 20](https://www.python.org/dev/peps/pep-0020/))\n        ```\n        \u003e\u003e\u003e import this\n        Beautiful is better than ugly.\n        Sparse is better than dense.\n        ....\n        Although never is often better than *right* now.\n        Namespaces are one honking great idea -- let's do more of those!\n        ```\n        \"\"\"\n    ))\n````\n\nThe `session` object is authenticated with the repository the command came from.\nIf you need to authenticate with another repository with MeeseeksBox installed `yield` the `org/repo` slug.\n\n```python\n@admin\ndef foo(*, session, payload, argument):\n    other_session = yield 'MeeseeksBox/MeeseeksBox'\n    if other_session:\n        print('you are allowed to access MeeseeksBox/MeeseeksBox')\n        other_session.do_stuff()\n    else:\n        session.post_comment(\"Sorry Jerry you are not allowed to do that.\")\n```\n\n# Why do you request so much permission ?\n\nGitHub API does not allow to change permissions once given (yet). We don't want\nyou to go though the process of reinstalling all integrations.\n\nWe would like to request less permission if necessary.\n\n# Setup.\n\nSee CONTIBUTING.md for for information.\n\n# Warnings\n\nThis is still alpha software, user and org that can use it are still hardcoded.\nIf you want access open an issue for me to allowlist your org and users.\n\nBecause of GitHub API limitation, MeeseeksBox can not yet make the distinction\nbetween read-only and read-write collaborators.\n\n## Addons\n\n```\nheroku addons:create keen\n```\n\n## Changelog\n\n- 2017-10-31: Backport now support squash-merge\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscientific-python%2Fmeeseeksdev","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscientific-python%2Fmeeseeksdev","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscientific-python%2Fmeeseeksdev/lists"}