I would love to know more details about your CI setup. I'm running all of my self-hosted services as Quadlets (which I generally really love!) and CI (using Gitea) was/is a huge pain point.
I have a simple setup on GCP. I am using Cloud Build with the companion Github app to trigger builds on branch updates.
I like it because I am deploying to GCP, and storing containers in Artifact Registry. Cloud Build has good interop with those other products and terraform, so its pretty convenient to live with.
The pipelines themselves are pretty straight forward. Each step gets an image that it is executed in, and you can do anything you want in that step. There is some state sharing between steps, so if you build something in one step, you can use it in another.
I do a lot of self hosting as well and relegated to git post receive hook that sends events through https://pipe.pico.sh and then have a script that listens on that topic and builds what I need.