Yes, I know such a topic is really total war on the internet! But I want to drop a coin.
I want to provide a little bit more info on how I take such war. For the past few years, we use self-hosted Gitlab with our own Runners. Everything was great till the time when Gitlab starts to eat 16GB of RAM and still running really slow. Yeah, I know that they created a Memory team. But guys, In 2019 you still using Unicorn?!
So we have moved to gitea and drone.io. They use my loved language Go and working really fast. We run them on the same host with only 1 GB of memory. After I decided to make our tests scaled and installed drone-autoscale... It was really mistaken... What I can say - User Experience was really degraded... The biggest issue was a drone - nice UI, but unusable back-end part. At least now! It was unusable only for our case. Keep in mind this thing.
So, we have a hard decision - what to choose?! I decided to push there one of the hardest projects with a lot of tests and variables for them to test-drive BitBucket, Gitlab and GitHub. So let's start!
I have decided to test it as the first alternative. We using JIRA a lot, so it was logical. The speed of git push was not so big - around 600Kbs, but LFS items were uploaded really fast. Grouping by Projects not really usable. All the time I tried to find the root of my "Company" account on the sidebar. But you can easily control the default page for your repo. Also, I think Atlassian needs to think about SubGroups - so I can make some groups of repos per project/client/etc.
Another part which I want to test - Bitbucket Pipelines. Setup was really easiest, I just made only a few changes - all starts with our basic ruby test image(which I have created especially for this with Alpine in mind).
I really like the idea that I can run x2 instances with grouping two steps into one. Another really cool feature is running services as separate docker containers with 1GB of memory. So we can use a lot of memory for tests in the result. Speed of VMs really fast. The tests which run around 30 minutes on my laptop was only 17 minutes. Really cool!
But with team management all bad. If you need more control you need to pay more. Also, billing is separate from Atlassian, which looks strange.
But in total such service is a good performer. Many addons on the marketplace. And 2500 minutes for pipelines.
After BitBucket I think that any case needs to gives a chance to GitLab. So I have pushed the same repo there again. Push speed was around 800Kbs but LFS upload was slower than on BitBucket.
So UI is old GitLab. Nothing new as for me. Subgroups for clients, which really great feature. I just want to check the addon features and shared runners. As for me, their Integrations need to be extended a lot or have some interface for extending by the community. Or I have not found these things there... Anyway, let's go to the runners. They use Google Cloud, so you limited with 3.7Gb of RAM for tests. I think its really small for now. But again you can run your own runner. Shared runners are using Linux only. As I remember BB has some limitations. About tests run - 24 minutes. So 41% of the time more. If you have unlimited minutes - it could be not the issue, but by default, they give 2000 minutes. Not so big amount as for me.
So, this is a de facto(defunkt'o) standard. We using it a lot for opensource projects for years. I will not talk about UI - it's perfect! I will not talk about Integrations - they are a lot! So, let's talk about Github Actions. It's a new Github's product which provides a really powerful continuous integration/deployment/workflow for the project.
But our main metric for today is a speed! Upload speed for LFS was not so big, and as I understand it uploading data to AWS S3 directly. @github you need to think about how to speedup AWS S3! For actions, we have a virtual instance on Azure(yeah baby! It's Micro$oft) with 7GB of RAM and two CPUs. Our tests are passes in 16 minutes, which is the same as BitBucket. But there are more features. You can run ARM and Mac OS X, which is really helpful. Before with Gitlab, we have used an old MacMini Server.
About prices. Most expensive is a GitHub. After comes GitLab and the latest one is BitBucket. But there are one BIG thing - minutes!
BitBucket provides 2500 and $10 each 1000. Gitlab provides 2000 and $8 each 1000. Github provides 10000(10 thousand!!!) minutes. I was focused on small team organization and as for me, it's really cool!
If we have 10 team members and we need around 10000 minutes it will be next:
BitBucket - 10 * 6 + 60 = 120 USD
Gitlab - 10 * 4 + 64 = 104 USD
Github - 10 * 9 = 90 USD
1 Gitlab asking to pay annually, so as for me not so flexible.
2 You can use cheaper variant for BitBucket and cost will be 90 USD too.
So most cheaper * variant for a small team is to use GitHub! And now with Actions its more valuable again!
* In my opinion for my small team.