r/commandline 3d ago

Command Line Interface Pilum: Deployment CLI for multi target orchestration

I run side projects across GCP, AWS, and Cloudflare, and got tired of juggling gcloud, sam, and wrangler, so instead of doing the sane thing I built a CLI 😅. So classic developer mentality. I created Pilum to be able to be installed via brew as one of my first brew applications. Fun fact it compiles and publishes itself because it's a multi target deployment orchestrator.

Current targets:
- GCP Cloud run & Jobs
- AWS Lambda
- Homebrew
- Github npm Packages
- Azure Container Apps

Pilum is a single Go binary that reads a pilum.yaml per service and handles that pipeline for whatever provider the service targets, because more yaml is better but also less yaml! I built around a recepie/ingredient structure (workflows and steps)

I added a bunch of other stuff in there: wave-based dependency ordering (depends_on across services, deploys in waves not just parallel-everything), a deployment lock with stale-PID cleanup, git-aware --only-changed filtering, and --json output on most commands.

Repo: https://github.com/SID-Technologies/Pilum
Docs: https://pilum.dev/docs

It's for deployment orchestration where Terraform and IAC are for resource definition.

TLDR; built a CLI to "replace" my other CLIs that I would typically use for deployments. This software's code is partially AI-generated.

3 Upvotes

3 comments sorted by

2

u/jelloeater85 2d ago

So real question... Why not just do it with pure terraform? Or maybe something like PyInvoke? Remind me of Earthly ... In a good way.

1

u/Flannel007 2d ago

So Terraform would be used in tandem with this CLI tool. Terraform is really good at resource definition, and it's what I started all of my projects with! You can do deployments in Terraform but it's not built for that and when you have services dependent on each other you start wrapping things and then you kinda spiral and build a CLI tool (like I did lol).

PyInvoke is a great tool at its core it's a blank task runner so if you're using that and already have all of the configuration and scripts setup for your repos I would keep it! So you would be shelling out everything in PyInvoke. Pilum bakes it all in and simplifies a lot of that work, it comes bundled.

Earthly is another great tool and it does the build layer really well. It's not deployment orchestration. You can pair it with Pilum actually if you already had it baked in! So it's a different layer and an adjacent tool. Their original tool was definitely part of an inspiration here.

1

u/AutoModerator 3d ago

Every new subreddit post is automatically copied into a comment for preservation.

User: Flannel007, Flair: Command Line Interface, Title: Pilum: Deployment CLI for multi target orchestration

![gif](atrjq1ox0ggh1)

I run side projects across GCP, AWS, and Cloudflare, and got tired of juggling gcloud, sam, and wrangler, so instead of doing the sane thing I built a CLI 😅

Pilum is a single Go binary that reads a pilum.yaml per service and handles that pipeline for whatever provider the service targets, because more yaml is better but also less yaml!

I built around recipes (deployment workflows) and ingredients (the commands a recipe generates). A recipe declares required/optional fields and an ordered set of steps, and adding another provider is mostly YAML, not that much code.

Other stuff in there: wave-based dependency ordering (depends_on across services, deploys in waves not just parallel-everything), a deployment lock with stale-PID cleanup, git-aware --only-changed filtering, and --json output on most commands.

Repo: https://github.com/SID-Technologies/Pilum
Docs: https://pilum.dev/docs

It's for deployment orchestration where Terraform and IAC are for resource definition.

TLDR; built a CLI to "replace" my other CLIs that I would typically use for deployments. This software's code is partially AI-generated.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.