+1 for Gitea, it's super easy to set up to selfhost through something like Docker or just grabbing the executable from their site and running it on your machine. Been using it for personal repos & mirroring repos I use a lot and have I haven't had any issues or annoying errors in nearly 2 years.
CI isnt as good, there aren't any options as advanced as Gitlab, except maybe Jenkins.
There are a number of options. I don't know how good they are.
Gitea can import all those things, it's referred to as a Migration - you can sign up for a free account on, say, codeberg.org and give it a try before committing to running your own instance. Click the + button top right after logging in and choose New Migration -> Gitlab and follow your nose. Create an access token in your Gitlab account first, Gitea will need to use it.