1. 2

    Here’s a question for the ages: are there any actually-existing good hosted CI providers out there?

    1. 7

      Not if you need speed: http://bitemyapp.com/posts/2016-03-28-speeding-up-builds.html

      I would honestly pay good money for reliable, tested deployment automation that stood things like CI up.

      1. 1

        Who’d you end up going with for the dedicated server / what are the specs on that machine like?

        1. 2

          Approximately this with NVMe RAID: https://www.ovh.com/us/dedicated-servers/infra/173eg1.xml

          tbqh, most the time we saved on compilation was lost to the GHCJS build later on. I was very sad.

      2. 5

        We use buildkite at my company. One nice aspect is that we get an agent to run on /our/ “hardware” (we just use large vm instances). It works pretty well.

        1. 3

          Another vote for buildkite here - their security posture is markedly better and you have much more control over performance.

          1. 2

            It’s probably worth mentioning here that GitLab offers similar functionality with their GitLab CI offering. You can use their infrastructure or install runners (their equivalent of agents) on as many machines as you like. Disclaimer: I haven’t used either yet but attended a meetup event where somebody praised them highly and ditched their Atlassian stack for that single reason.

            1. 1

              Their website looks intriguing could you elaborate on their security posture? Is it just an artifact of the on-premise build agent, or is there more to it than that?

          2. 5

            If you happen to run on Heroku, Heroku-CI works quite well. You don’t wait in a queue—we just launch a new dyno for every CI run, which happens while you blink. It’s definitely not as full features as Circle, or even Travis, but it’s typically good enough.

            1. 1

              At $WORK we run some things on Heroku but we can’t or don’t want to for most things — it’s either too expensive or the workload isn’t really well-suited for it.

            2. 4

              What do you need? I like Travis, they also get vastly better when you actually use the paid offering and they offer on-premise should you actually need it.

              1. 2

                I need builds to not take 25-30 minutes.

                Bloodhound averages 25 minutes right now on TravisCI and that’s after I did a lot of aggressive caching: https://travis-ci.org/bitemyapp/bloodhound/builds/286053172?utm_source=github_status&utm_medium=notification

                Gross.

                1. 2

                  I was asking cmhamill.

                  But, just to be clear: your builds take 8-14 minutes. What takes time for you is the low concurrency settings on travis public/free infrastructure. It’s a shared resource, you only get so many parallel builds. That’s precisely why I referred to their paid offering: travis is a vastly different beast when using the commercial infrastructure.

                  I also recommend not running the full matrix for every pull request, but just the stuff that frequently catches errors.

                  1. 3

                    I was asking cmhamill.

                    You were asking in a public forum. I didn’t ask you to rebut or debate my experiences with TravisCI. https://github.com/cmhamill their email is on their GitHub profile if you’d like to speak with them without anyone one else chiming in. I’m relating an objection that is tied to real time lost on my part and that of other maintainers. It is a persistent complaint of other people I work with in OSS. I’m glad TravisCI’s free offering exists but I am not under the illusion that the value they’re providing was brought into existence ex nihilo with zero value derived from OSS.

                    It’s a shared resource, you only get so many parallel builds. That’s precisely why I referred to their paid offering: travis is a vastly different beast when using the commercial infrastructure.

                    We use commercial TravisCI at work. It’s better than CircleCI or Travis’ public offering but still not close to running a CI service on a dedis (singular or plural).

                    I had to aggressively cache (multiple gigabytes) the build for Bloodhound before it stopped timing out. I’m glad their caching layer can tolerate something that fat but I wish it wasn’t necessary just to keep my builds working period.

                    That combined with how unresponsive TravisCI has been in general leaves a sour taste. If there was a better open source CI option than something like DroneCI I’d probably have rented a dedi for the projects I work on already.

                    1. 5

                      You were asking in a public forum. I didn’t ask you to rebut or debate my experiences with TravisCI.

                      You posted in a public forum and received some valid feedback based on the little context of your post ;)

                  2. 1

                    How long does it take on your local machine as a point of comparison?

                    1. 2

                      https://mail.haskell.org/pipermail/ghc-devs/2017-May/014200.html

                      That’s just build, doesn’t include test suite, but the tests are a couple more minutes.

                      1. 1

                        Hm, that’s roughly the time your travis needs, too?

                        https://travis-ci.org/bitemyapp/bloodhound/jobs/286053181#L539 -> 120.87s seconds

                        1. 0

                          Nope, the mailing list numbers do not include --fast and that makes a huge difference.

                          You are off your rocker if you think the EC2 machines Travis uses are going to get close to what my workstation can do.

                          1. 2

                            Would you rather pay for a licensed software distribution that you drop in a fast dedicated computer you’ve bought and it turns that computer into a node in a CI cluster that can be used like Travis?

                            Would you rather pay for a service just like Travis but more expensive and running on latest-and-greatest CPUs and such?

                            1. 3

                              Would you rather pay for a licensed software distribution that you drop in a fast dedicated computer you’ve bought and it turns that computer into a node in a CI cluster that can be used like Travis?

                              If it actually worked well and I could test it before committing to a purchase, probably yes I would prefer that to losing control of my hardware or committing to a SAAS treadmill but businesses loooooooove recurring revenue and I can’t blame them.

                              Would you rather pay for a service just like Travis but more expensive and running on latest-and-greatest CPUs and such?

                              That seems like a more likely stop-gap as nobody seems to want to sell software OTS anymore. Note: it’s not really just CPUs, it’s tenancy. I’d rather pay SAAS service premium + actual-cost-of-leasing-hardware and get fast builds than the “maybe pay us extra, maybe get faster builds” games that most CI services play. Tell me what hardware I’m actually running on and with what tenancy so I don’t waste my time.

                  3. 1

                    Has anyone done this kind of dependency scan on Travis that this guy did on CircleCI? I suspect you will see much the same.

                    Travis does have one clear advantage here in that it’s OSS so you can SEE its dependencies and make your own decisions. See my note about CircleCI needing to be better about communication above.

                    1. 3

                      Well… “scan”. They posted a screenshot of their network debugger tab :).

                      Travis (.org) uses Pusher, but not their tracking scripts. It integrates Google Analytics and as such, communicates with it. ga.js is loaded from google.

                      The page connects to:

                      • api.travis-ci.org
                      • cdn.travis-ci.org (which ends up being fast.ly)
                      • gravatar.com (loading avatar images)
                      • statuspage.io (loading some status information as JSON)
                      • fonts.googleapis.com (loading the used fonts)
                      • ws.pusherapp.com

                      All in all, it is considerably less messy then circle-ci’s frontend.

                      Also, Travis does not have your tokens or code in their web frontend, code is on Github, tokens should be encrypted using the encrypted environment: https://docs.travis-ci.com/user/environment-variables#Defining-encrypted-variables-in-.travis.yml

                      1. 2

                        You have proven my point perfectly.

                        CircleCI’s only sin here is one of a lack of communication. There is nothing actually wrong with any of the callouts the article mentions, they just need to be VERY sure that their users are aware of exactly who is seeing the source code they upload. This should be an object lesson for anyone running a SaS company, ESPECIALLY if said SaS company caters to developers.

                        1. 4

                          This is not an apples to apples comparison, in my post I cited Javascripts only (which can make AJAX requests and extract source code), @skade cites that Travis loads fonts, images, and CSS from third party domains, which don’t have those properties; a compromise in CSS might change the appearance of a page but generally can’t result in your source code/API tokens being leaked to a third party.

                          As far as I follow the only external Javascript run by Travis CI is Pusher. So, no, it has not proven your point perfectly, in fact it demonstrates the opposite.

                1. 3

                  I read this expected some basics but some of it was new to me, such as pushd/popd. Good writeup.

                  1. 3

                    I remembered those from your comment, and was kind of expecting more. Recommend checking it out, it’s a fast read for anyone who knows this stuff, and useful to anyone else.

                    disown was completely new to me, wonder if zsh has it ;)

                    1. [Comment removed by author]

                      1. 3

                        cd - is actually very useful every time you work in a path location but a build, or something, you invoke elsewhere may remove and recreate the directory. Like with tmux panes, one for build and one for messing around.

                        cd - && cd -

                        1. 2

                          While I don’t use cd - that often I was quite happy to learn that git checkout - behaves the same but for branches. Also, have a look at ripgrep (discussed here).