feat: add Python packaging metadata and a Nix flake
Build and publish container / build (pull_request) Successful in 7m8s
Build and publish container / build (pull_request) Successful in 7m8s
Package the proxy properly so it can be consumed outside a container, and without downstream users vendoring a package definition into their own configuration. - pyproject.toml: setuptools metadata with a `legacy-email-proxy` console script. Runtime dependencies are read dynamically from requirements.txt, so the Docker build and the package cannot drift apart. - proxy_server.run(): a synchronous entry point for the console script, since `main` is a coroutine and cannot be referenced by one directly. The `__main__` path is unchanged in behaviour. - package.nix / flake.nix: the package, an overlay, and a dev shell. The test suite runs as part of the build, so `nix flake check` covers it. - module.nix: a NixOS module exposing `services.legacy-email-proxy` with freeform `settings` (environment variables) and a separate `environmentFile` for credentials, so secrets stay out of the Nix store. Runs under DynamicUser with CAP_NET_BIND_SERVICE only while a listener needs a privileged port, and opens no firewall ports. The Dockerfile and its CI workflow are deliberately untouched. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
4bde4f884d
commit
fe540e1831
+10
-1
@@ -458,8 +458,17 @@ async def main():
|
||||
await pop3_server.serve_forever()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
def run():
|
||||
"""Run the proxy until interrupted.
|
||||
|
||||
Entry point for the ``legacy-email-proxy`` console script; ``main`` is a
|
||||
coroutine and cannot be referenced directly by one.
|
||||
"""
|
||||
try:
|
||||
asyncio.run(main())
|
||||
except KeyboardInterrupt:
|
||||
logger.info("Shutdown requested")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
run()
|
||||
|
||||
Reference in New Issue
Block a user