Ramblings of a madman

or just a boring blog, whatever

Setting up Stalwart on Coolify

Posted on 2024-12-07


Recently I’ve started self-hosting (well, by self-hosting I mean on my own Hetzner server) many of my own projects to cut down on excessive cloud costs.

One of the tools I use to still be able to prototype quickly with all the comfort of automated deployments is Coolify, a really cool and easy to use open-source Heroko/Netlify/Vercel-type platform.

Using it, I quickly was able to host an instance of Infisical, an open source secrets manager, Directus an open-source alternative to contentful, a few of my applications and, why you’re probably here, Stalwart - my first introduction to self-hosting a mail server.

It took me a few hours over a couple of days to get it set up, so I thought I’d write this post helping out anyone else wanting to do the same.

The problem

Stalwart (or any mail server, for that matter) requires quite a bit of set up before you can start sending/receiving e-mails. …

Triggering and waiting for an external Github Workflow

Posted on 2023-02-07


Recently I was working on a project that has a lot of different services, all of which can be deployed independently. We have a test environment that we deploy to as soon as a PR is merged, so in order to make sure that the service doesn’t break the production environment I created an end-to-end testing step that runs on the test environment (using playwright) that should run and succeed before being allowed to deploy to production.

This meant I needed to figure out how to trigger a workflow from another repo on Github and retrieve the result from that workflow before allowing a next step to occur.

So the gist of the setup is:

  • E2E repo (e.g. frontend repo) which holds the workflow we want to call. playwright.yml in my case.

  • Some other repo that should call the E2E repo’s workflow from its own workflow and wait for success

There is no real quick and convenient way of doing this with Github, but using actions/github-script I was able to create a script that does the job nicely.

Using …