Travis CI's new pricing plan threw a wrench in my open source works
jeffgeerling.com
jeffgeerling.com
This is hitting me hard, too. I hope this is the right moment for me to pipe up and say this:
I always just do the minimum with these CI integrations to get my shell script to run. I am grateful for the free minutes they offer open source projects - but any of the deeper integrations, the advanced automation?
No, thanks.
It's not like the other developers who use what I write have any more motivation than I do. No one wants to learn the custom setup steps, not even for the "biggest" of the bunch. (Is that still Github? Who knows? I don't.)
Oh, and if or when I migrate away from a CI system, like right now... Good thing I just kept it simple, you know?
Even for builds that target Windows, I just run a shell script.
I get it that Node and Rust builds really benefit from the advanced features. Anyone care to comment - is it as portable as a shell script?
This. 100%. Where I'm working is migrating from Bamboo to Jenkins. For my team the new process is just calling "./build-test $params" while others are stuck re-implementing various stages, tasks and blah blah blah. Also an added bonus to this is having the full history of changes to the CI/CD process tracked in git.
Now get off my lawn!
make prepare
make build
make test
make release
Working the same waylocally and in jenkins makes things very easy.
What it does is up to the team but make prepare usually pulls some docker image and install dependencies, make build builds something inside the docker image, make test runs test inside it and make release publishes the docker img
Added bonus is that pipelines are defined in YAML rather than web GUI so you can version control the pipelines themselves and not just any build or test suites.
I have heard good things about Concourse, want to give it a try in the future!
There's several ways you can codify Jenkins pipelines, Groovy being just one of them. But ultimately it's secondary to the main design of Jenkins. I'm not taking anything away from Jenkins as a solution - it has been invaluable over the years. But the way we write, test and deploy software has changed since Jenkins rose in popularity and as such we need to rely on different workflows that utilise different tooling. While Jenkins can be used in that way, I'd sooner use something which was primarily designed to be configured via code and used docker by default rather than something that requires enforcement to follow those best practices. That doesn't necessarily mean Concourse, there's Travis, Circle CI, AWS CodeBuild and a bunch of others that all default to that kind of workflow too, but it does mean I'm unlikely to ever advocate Jenkins again in future jobs.
I have yet to see other tools be as flexible (perforce , git, legacy tools, docker, 100s of workers across datacenters etc.)
Can't those stages, tasks, etc. be specified in the CI specific config files of the repository? Specifying them via an UI seems horrible to me. At least Github actions is all file-specified (except for secrets).
https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitla... https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitla... https://gitlab.com/gitlab-org/cluster-integration/auto-deplo...
I found these fascinating, I mean they still have lots of things in their ci file, but basically the have tons of shell scripts that would work without their gitlab-runner.
Not affiliated with gitlab I just tried to figure out how some of their stuff works to have the same k8s integration than their autodevops offers.
But in every case, unless you encode a whole plethora of hacks in your golden build script, you still need minimal environment setup, like Python + Docker + [insert library here].
Most of my Travis files are only 10-20 lines long, but I work in a lot of different types of environments, so it's not always as easy as "three lines of bash and a docker run command".
Plus I have a number of legacy projects which did use some of Travis' more exotic features, and those will take longer. Not just for myself, but I'm thinking of tons of smaller OSS libraries and projects that are minimally maintained yet have a large footprint under more popular and maintained software!
We've actually migrated all our projects off Makefiles. Developers hate having to live within the constraints.
In these scenarios the lines between build system, package manager, and task runner all become pretty blurred. Haven't found an all in one solution that I would call "portable" yet.
Something like Bazel[0], Buck[1] Pants[2], etc. One of their main features is robust caching of build artifacts, which is helpful for larger projects. But they require some major investment compared to your typical `scripts/build.sh`.
[0]: https://bazel.build [1]: https://buck.build [2]: https://www.pantsbuild.org
The cons of that solution are that there’s a tendency to make them ornate, and the trap of circular dependencies. Reusing an internal library in your build scripts, you have it building itself which can get out of hand quickly.
Absolutely. Moving CI systems always shows up where your build logic has leaked into the CI system, rather than staying in your repo.
If you can't identically build your code from the command line and from the CI system, you're going to have problems.
Developers hate being thought of as idiots, and being an asshole is a problem you can take to HR. So for the people who don’t pitch in on general principle, straightforward processes help bring them around. And in general that means not leaning on clever CI features, and instead leaning hard on the CLI tools your ecosystem supports.
There are exceptions to every rule of course. Features around scheduling have little to no impact on what gets built and how, just when and why. Similarly, analytics have second order effects on how and when, but once a problem is discovered you can mostly ignore them for a while. Integration with external tools and services on the other hand, should always be questioned. Do I have another way to do this mostly outside of the CI system?
Python's easy too: https://github.com/serprex/aespython/blob/c3256b656308af8119...
A Rust repo I contribute to has a .travis.yml not created by me, but still pretty simple: https://github.com/dpc/hex2d-rs/blob/master/.travis.yml
edit: updated node project to Github Actions https://github.com/serprex/openEtG/commit/4196992bb23ce43f34...
Travis-CI was giving a ton of computing power for free, no questions asked. That was incredibly generous but had certainly a gigantic cost and it powered many OSS projects for a long time.
Yet how can we complain that they can throw money around, some says that it will reduce the number of new users that discover the service and the number of paying client in the long run (many are saying this but are not paying users anyway) but it's not like the number of potential clients is unlimited anyway and at what point it becomes to costly to get the last ones.
Why would this be a "private equity" thing, you can't always loose (or invest to get more users) money. Does your company sponsors the infrastructure of that many OSS projects? Would it be willing to cover the costs of all servers used by OSS projects for Travis?
Could be onetime payment or a recurring donation (charged together with whatever payments you have for the platform).
I agree with the parent comment, it’s bizarre to blame this on the new acquiring company and to be mad about this development. Travis ci has been asleep at the wheel for many years, and projects have been benefiting from it with huge amounts of free compute for years, but now the free money has run out.
Effectively removing or severely restricting that benefit will essentially lose the goodwill and word of mouth marketing.
It's true that to criticise someone giving you something for free is being a "choosing beggar", but that's not really what's happening here. TravisCI has bought something with their free offering, so it's fair that they lose that when they revoke that offering.
(Despite the travis FAQ that said "we’re making a number of changes to the travis-ci.org infrastructure to ensure the service will remain as reliable and available to you as it always has been until [it goes away Dec 31]", that was not the case, builds simply stopped working on .org. https://docs.travis-ci.com/user/migrate/open-source-reposito...)
I actually had not seen that announcement at all, this is the first I'm seeing it. So I'm in the same position as OP, I maybe should not have spent time migrating my projects to travis-ci.com. Although I guess this buys me a bit of time to move to github actions instead.
Travis is the reason that many people DO CI at all, in my experience. They made it so easy -- and free for open source -- that there was no reason NOT to do it. Then once you see the value of it, you are hooked, you can't do without it. But I think the number of projects doing CI (open source and not) skyrocketed because of travis. Prior to travis's entry on the scene, CI was not nearly as universal as it is now.
So to say that offering free CI to open source is "unsustainable".... I dunno, they managed to do it for 9 years, were they losing money the whole time?
I think the free service for open source literally created the market. Or expanded it exponentially. It was the first exposure a lot of people had to CI, and they took that first step because it was so easy and free.
And now we're hooked. If there weren't other free alternatives like Github Actions, I don't know what open source would do... we all know we can't develop this stuff without CI, but so many open source projects simply don't have a budget for it.
Without that funnel, and knowing it's all integrated deeply in both GitLab and GitHub, I wonder where Travis CI could ever expect growth again... but that's probably not the end goal anymore, just milking the current paying clients and maintaining the status quo.
Yep, that's private equity. I won't forget it again.
If it makes less and less profit every year even that's probably fine, eventually they'll shut it down, as long as they made back a multiple of what they paid by that point, then it was a good investment.
It's sad to me just as an engineer, that travis is actually really well-built product, it works magnificently and sets a high bar for ease of use, because of many hours of work that developers who cared put into it... and it's now just going to be allowed to slowly sink into the sea.
Probably. Many "startups" these days are not profitable for years as they burn mountains of VC money to gain market share and drown out competitors.
Of course we can, we just down't want to.
Many people wound up discovering/learning that and raising expectations because Travis's extraordinarily easy-to-use and reliable, and free for open source service, got them to try it out and discover the benefits. People had been talking about how everyone should be doing CI before travis, but I think travis played a major role in significantly increasingly how many people were actually doing CI (and thus learning that they didn't want to do without it's benefits), changing the way software is developed. Which is to the credit of those who developed the original travis service, for sure.
I think it really created a market, by offering something with very low barriers that 'hooked' people. Now we're hooked.
One that could more easily be set up by individuals, making it amendable to open source, possibly with some small degree of federation.
[2] https://man.sr.ht/tutorials/getting-started-with-builds.md
[3] https://man.sr.ht/builds.sr.ht/compatibility.md
[4] https://git.sr.ht/~sircmpwn/builds.sr.ht/tree/master/images/...
https://news.ycombinator.com/item?id=18978251
I had pretty much already learned that "bought by private equity" means "run away as fast as you can, they are going to gut it", and I suspected as much from the travis purchase... but I didn't take action, hoping it would not be true, and not wanting the work of moving projects away. Next time I'll remind myself, no, really, you know what "private equity" means, start looking for an escape now on your own timeline before circumstances give you a deadline.
https://news.ycombinator.com/item?id=19218036
That's when I started recommending clients make plans to move to another provider
Sucks though for Travis CI users, I used it in the past and it worked well.
Travis CI is owned by Idera, Inc. who also own Sencha who make Ext.js -- a pay-to-use JavaScript framework.
First thing they did when Idera, Inc. bought Travis CI? They gutted the Travis CI team.
I pity anyone who's paying for Ext.js (self-described as "The Best JavaScript Framework In The World"). That is some ancient shit right there. They must have some poor sods who're really, truly, stuck if they're managing to get people to pay for it. I guess at least you get support in your quagmire. But good luck finding quality developers who want to work on an Ext.js project...
The amount of vendor lock-in of Extjs is massive though. It had its own JSX-like pseudolanguage for describing UI that was impossible to port to anything else. Moving away meant a total rewrite.
Far from a bad actor just utilizing CPU time for pet projects, Jeff's code is probably in use in a large majority of companies that use Ansible, mine included.
"Testing your open source projects will always be free! Seriously. Always. We like to think of it as our way of giving back to a community that connects so many people."
This is to say, if I were in Jeff's situation, I would seriously consider moving to GitLab (with mirrors in github for visibility), or at least setting up their ci to trigger from github.
Though maybe I'm just speaking from lack of experience, as I've only set up actions in one project so far.
Travis Staff accounts in the travis "community forum" were linking to this FAQ as recently as 9 days ago, which still at this moment contains a question:
> Q. Will Travis CI be getting rid of free users? #
> A. Travis CI will continue to offer a free tier for public or open-source repositories on travis-ci.com and will not be affected by the migration.
https://docs.travis-ci.com/user/migrate/open-source-reposito...
This would seem to be grossly misleading, if not simply wrong info? There are still a bunch of travis users on travis community forums trying to figure out what's going on and why travis-ci.org seems to have stopped working (also different from what the FAQ says), who don't seem aware of the pricing change.
The first line of the document is "On May 2nd, 2018 Travis CI announced that open source projects will be joining private projects on travis-ci.com!", which also includes this FAQ:
> Q. Will there be lower concurrency for free accounts on travis-ci.org?
> A. As part of the shift of infrastructure from .org to .com and needing to make sure all users have equal access to resources, free and open-source .org accounts will have concurrency reduced from 5 to 4 concurrent jobs. Concurrent jobs have not changed on .com, so please consider migrating your repositories as soon as possible if this is an issue.
So... that's all not quite right, it turns out. They're providing an FAQ about "free accounts" without saying there no longer is no such thing as a free account, and "open source projects" are "joining private projects on travis-ci.com" only in the sense they can choose to pay for the same plans as private projects.
It's true that nobody owes us anything for free, and the free support for open source CI for the past 9 years has been a gift...
It's also true that they are not being particularly transparent (an understatement; if they don't fix that FAQ soon I'm just going to call it lying) or gracious in how they are handling this transition, for an open source community that has come to rely on them.
But to go from the status quo to 1000 build minutes and that's it in one day, with literally no lead time.
That's what caused the wincing. I'm sure many of the engineers who were laid off at Travis after the buyout are shaking their heads this week.
I honestly did not expect they would eliminate free CI for open source altogether. With virtually no notice. Many people STILL haven't noticed the announcmeent, the FAQ is still misleading them.
Was the "free plan" added after you commented?
> Free Plan
> Free
> - 10000 Credits
> - Unlimited unique users
> - Private & Open-Source Repos
> - Windows, Linux, MacOS
> Free Plan is trial plan. The credits will not be replenished.
It's not clear if that's actually true - some people have had emails suggesting there are 1000 free credits (100 minutes on Linux) per month.
So, yeah, there is something they call the "free plan". If gives you 10K "credits" that once they are gone they are gone (I'm not sure exactly what a "credit" corresponds to in terms of workers/minutes, but could probably find it somewhere).
Do you feel like this is what you expected it to be, that they are being transparent about the fate of open source projects that previously had free CI? You can say you do, it's your perspective!
As someone pointed out here the other day. With build minutes as a concept they're inherently incentivized to keep old slow gear running as well.
I reckon self-hosted gitlab is a good bet, but admittedly tricky for big FOSS projects that need to be public
Travis CI could shutdown overnight, there's Circle CI and AppVeyor doing the exact same thing. They take pretty much the same configuration so there's nothing to adjust.
Apparently the transition is painful enough to warrant a sizable hn discussion though.
I don't really want to lock myself into GH actions (ideally, I wouldn't be on GH at all), does anyone have any suggestions for alternatives? I don't mind paying some money, but the almost $1K/year for Travis' lowest tier is about an order of magnitude more than I can justify. I've also got plenty of compute laying around if anyone has suggestions for something self-hosted.
[1] I did also ask about selfhosted stuff, but I'm not willing to host Jenkins for myself. I've heard nothing but complaints about managing a Jenkins install. It's been fine as a user (if a bit confusing), but I really don't want to admin it.
My current gripe is that there doesn't seem to be any way to declare that one pipeline depends on another, though I may just be missing something in the docs.
What I'm trying to do is have my front-end feature branch builds run against the build of matching back-end branch, but there doesn't seem a way to declare "this build should depends on the output artifact of that build".
I don't really want to have to wire it up myself using their API.
Other options:
* Gitlab CI. Good value, great integration with Gitlab, has integration with Github.
* CircleCI. Something of a gold standard in CIaaS among growing companies. But, it goes down a lot, and the new UI isn't an improvement. But, it works and its a good value. Word of advice, I'd avoid using their "Orbs" if I were you. You can accumulate a lot of lock-in with those, and they're infamous for stability issues. Instead, use their docker builder and just build a base docker image with all the stuff you need installed.
* Buildkite. Really cool product; they handle the control plane and the UI and webhooks, you host the runners. Its a simple binary or docker image you can install anywhere. If you're looking for something with low lock-in that's still easy to manage, Buildkite is a great option. I'll warn you though: if you're going to do any kind of cloud hosting for your runners, and you want to build docker images, best to avoid their dockerized runners. Just install natively on a linux box, either manually, with an AMI, etc. Docker-in-Docker sucks; not impossible to get working, but not worth your time.
* Jenkins/JenkinsX. If you want something with zero lockin but also hard to manage.
* AWS CodeBuild/CodePipeline/CodeDeploy. There is, like, no one I feel comfortable recommending these options to, but people still use them because they're AWS.
Almost all current CI systems suck at building Docker containers :-(
Yep. Now I'm thinking on migrating my AppImage build scripts (Travis CI + Transfer.sh used for my projects on GitHub) from Travis CI to Gitlab CI. Hope, that there is simple "3-step switch" option.
Really appreciate those FLOSS projects which already use "Gitlab repo + Gitlab CI" to build & provide builds/artifacts, e.g. GrafX2[0], Inkscape[1], etc.
https://docs.github.com/en/free-pro-team@latest/actions/host...
For self-hosted, I've heard really good things about build-kite (https://buildkite.com/) although I've not used it myself.
The CI they offer makes no assumptions about where your repos might live (git is git. Who cares who the host is), and offers the stuff you might need like secrets, ssh keys, etc. The images they supply for testing actually seem more extensive than the other players.
And if you really want to self-host it... Go ahead. The whole of sourcehut is open source and reasonably well documented. You can host your own build server with minimal fuss.
Also, do you know if it's possible to use gitlab CI as a merge gate on github PRs?
To answer your questions: yes, you can configure the Runner to work behind a firewall [1] and you can use GitLab CI for GitHub repos [2].
Hope that helps!
1 - https://forum.gitlab.com/t/how-does-communicate-gitlab-runne... 2 - https://docs.gitlab.com/ee/ci/ci_cd_for_external_repos/#pipe...
From jenkins to gitlab... From travis to github actions...
So I build this small project that helps me to change faster without touch in real CI logic.
https://github.com/rosineygp/mkdkr
I think your problem is bigger than mine, but this kind of approach can help you in the future.
Then what about paying for it? The service is definitely very valuable to this person.
Large corporate backed opensource projects should absolutely be paying for tools like Travis CI. Just because it's open source doesn't mean there isn't money floating around.
It's not super hard to rent a VPS or Physical Server somewhere and spend a few hours setting up <insert ci tool of your choice).
More time on all that (or risking hacks and having more downtime) equals less time actually working on the projects being tested.
I can totally understand limiting the number of minutes available. It must cost an absolute fortune, and having it unbounded makes it easy to abuse. Having to pay makes developers have to consider if they really need to go overboard on huge build matrices and limit themselves to something reasonable. Likewise for constraining the amount of network traffic. If you don't want to blow your budget, then self-hosting is an obvious and easy choice.
If I'm an open source software maintainer, and I make a project that is used by 3,000 companies, helping them generate $Xmm in revenue... how much of that money ever trickles back to the maintainers? The typical answer is $0.
Some maintainers are lucky to have some form of corporate sponsorship, others spend many cycles on some form of marketing to build up some kind of financial support (tip jars, Patreon, etc), but the pricing for Travis is astronomical for non-enterprise usage.
But as I said in the post, I'm grateful for what I got for the 8 years I had it. And I'm happy that GitHub/MS is now running with that gauntlet.
Thanks for your fantastic contributions to the Ansible ecosystem and to open source in general. Apologies for my past freeloading!
[0] https://mtlynch.io/retrospectives/2020/11/
[1] https://github.com/mtlynch/ansible-role-tinypilot/blob/b56c1...
It's possible that most OSS won't have CI servers in the future. I don't imagine that's the end of the world but it does suck.
> Your account name and VCS provider How many credits (build minutes) you’d like to request (should your run out of credits again you can repeat the process to request more or discuss a renewable amount)
Sounds like a tedious, repetitive process. If only there were a way to automate creating support tickets on a schedule...
Idera has fired a lot of Travis CI engineers, and your private repositories are now at risk. They can save some extra money on security.
Ultimately your .travis.yml file is a proprietary format for a service that you have no control over. You probably shouldn't have built your project's future on the assumption that it's always available.
Ideally you should have your own testing infrastructure in scripts or test frameworks. And your travis file shouldn't do much more than installing dependencies and running the stuff that's under your control. Put all the logic into the stuff you can control - and next time you find out that your favorite CI provider is no longer nice to you you simply use another one, the migration should not take more than a few minutes.
I know from experience that CI takes a lot of time, but even the very worse one that I have worked so far (dozens of parallel runs on different machines and a thousand lines of yaml) only took me 3 days to migrate.
Have spent several days over the past few months working on a reimplementation of Nix support to make it possible to wind down "community" support without forcing projects to find a new CI.
Feels like a lot of wasted effort. :/
One thing I will say - I like the way that you've done your migration. I'm very wary of using defined actions written by GitHub or otherwise, because it seems to me that it leads to vendor lock in for CI.
I was already migrating projects for a while, and long term may even go back to a local server for builds if GitHub pulls the rug out too. But allowing a service to manage the build system for me saved/saves a good chunk of time.
Also just noticed I'm running a really old version.
Man. Sounds like my personal hell.
I’ll never understand how people motivate themselves to run projects. When I think about it I just envision doing a bunch of crap like that, dealing with issues people file, etc etc. No thank you.