I prefer Forgejo, but both it and Gitea support actions like GitHub's. You can have a nice CI/CD pipeline that runs 100% in-house, for free. I adore it for personal projects.
If you want to run a process after each push to a branch or merge into main or whatever, you describe it in a YAML file in that repo. Configure some workers to run those actions and off you go! I use it for things like running tests and applying Terraform changes.
I understand that part. Mostly interested where the runners are coming from? macOS especially is pretty costly to provide runners for, so who is doing that for free?
We've run Gitea actions (and contributed here and there) for a couple of years, since-by-side with Github. We host in containers on the Gitea side so there are some marginal differences as to what can be run in a job, but our experience has been very positive.