[HN Gopher] Cicada - A FOSS, Cross-Platform Version of GitHub Ac...
       ___________________________________________________________________
        
       Cicada - A FOSS, Cross-Platform Version of GitHub Actions and
       Gitlab CI
        
       Author : microflash
       Score  : 74 points
       Date   : 2023-11-06 15:36 UTC (5 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | danpalmer wrote:
       | Having built CI/CD pipelines in CircleCI, Jenkins, GitLab CI,
       | Concourse, Semaphore, and GitHub Actions, I'm not entirely sure
       | what this offers, other than being FOSS. That's not to say that
       | it being FOSS is not valuable - for some users it most certainly
       | is - but that I can't see another way that this would be
       | valuable.
       | 
       | The config language is nice, but honestly I've never been
       | bothered by YAML for pipelines. I want my pipelines to be
       | declarative anyway. I'm a little disappointed that Cicada didn't
       | go with one of the existing options such as Jsonnet, Cue, Dhall,
       | etc.
       | 
       | Lastly, there's a feature I've always found useful and in many
       | cases necessary, that many CI systems don't have - enforced
       | serial execution. When you're doing continuous delivery it's
       | often critical to make sure that only one release is going out at
       | a time and that the version being released strictly increases.
       | I've seen outages because of release jobs racing and an
       | unintended downgrade happening. This requires CI system support
       | to achieve. Last time I checked, Jenkins, Concourse, and GitHub
       | Actions all provided mechanisms for this, Semaphore may have as
       | well. Circle and GitLab did not (the former after endless
       | discussion with our account manager over it!) and I found it hard
       | to trust the platforms as a result. Cicada does not appear to
       | have this, which is a shame. It suggests to me a lack of hands-on
       | production experience with continuous delivery. Arguably this is
       | not a CD system, but there's no reason why a CI system shouldn't
       | be CD as well, it's not until a much larger team/product size
       | that a dedicated CD system becomes truly necessary and they take
       | a lot of work to set up well.
        
         | digi59404 wrote:
         | Maybe I'm misunderstanding? For GitLab this should be doable by
         | two different ways.
         | 
         | The first is merge trains, which merges requests one by one to
         | prevent this exact outcome. You just have to force all
         | deployments to be done via a merge request. That's the
         | downside.
         | 
         | The second being forcing a GitLab Runner to run one job at a
         | time. Tag it as "deployer" then ensure all deployment jobs are
         | marked as "deployer". That runner will pick up deployment jobs
         | one by one in order of first creation.
        
           | danpalmer wrote:
           | I think merge trains weren't a feature when I worked with
           | GitLab, it was a while ago. This does certainly solve it, but
           | at the cost of quite a different process. If what you're
           | optimising for is time to release, merge trains add an
           | overhead. At some point that overhead is worth it, but it
           | depends on the team/product/etc.
           | 
           | Having just one runner be the deployer is an option too. I
           | think we used hosted runners so not sure if this is possible
           | in that setup? This would also make pipelines harder to
           | optimise. Often there are many parts in pipelines that are
           | safe to do in parallel, and only a few "critical sections"
           | around which you want locking. This would solve simultaneous
           | releases, but not the general case of the problem (which at
           | least Jenkins and GitHub Actions manage ok).
           | 
           | GitLab always felt to me like Travis++, whereas systems
           | developed later felt like they were built on fundamentally
           | better primitives. Jenkins is a weird one because it has all
           | of the features, can do all of these things, really quite
           | well in many cases, but has a pretty bad developer experience
           | and required a lot of maintenance to run a performant and
           | secure install.
        
           | tsak wrote:
           | There's also a third way called resource groups [1]. We use
           | that to ensure that we only run the newest job if we have
           | multiple deployment jobs waiting for execution. This way even
           | if we have multiple pipelines racing each other, only the
           | last deployment job wins.
           | 
           | [1] https://docs.gitlab.com/ee/ci/resource_groups/index.html
        
       | skinner927 wrote:
       | This project looks interesting, I very much like how secrets are
       | handled, but here's 3 reasons why, given what I can gather from
       | the docs, I can't use it right now.
       | 
       | 1. It doesn't seem it's possible to include other .ci files? I
       | have multiple projects that use the same ci config with their own
       | augments and Cicada seemingly won't work with that flow?
       | 
       | 2. Self hosted non-docker runners are Python3.11. Some of us
       | (albeit few of us) don't have the luxury of being able to abandon
       | ancient OS targets.
       | 
       | 3. Doesn't seem git.push allows branch to specified as
       | "$DEFAULT_BRANCH" macro (or similar). Some projects use master,
       | some use main, some use gold, whatever, it would be nice to not
       | have to know.
       | 
       | The example CI repo is no more than a "hello world". I don't
       | think people with simple CI requirements are interesting in
       | switching from what they already have. Your target audience is
       | likely someone like me who maintains 10k+ lines (merged) of
       | GitLab YAML and wants to get out. I would be more encouraged to
       | look deeper into this project if it could show me the value it
       | adds, because right now it just seems like a different YAML that
       | I'll eventually loathe too.
       | 
       | Very neat project, I hope to see it mature.
        
         | snapplebobapple wrote:
         | It also seems to require github credentials instead of just
         | supporting saml/ldap/local accounts and I don't see a way to
         | make it work with over git providers (i.e. gitea) so not sure
         | where the home gamer market would use this either? If I'm
         | ponying up private github repositories already why wouldn't I
         | just pony up slightly more to use their system? maybe I'm just
         | missing it (I am, after all, a noob just scraping by on
         | beginning to learn git and using it to manage a few things).
        
       | spankalee wrote:
       | This is very light on details. Does it actually allow you to run
       | your GitHub Actions on your own servers?
        
         | capableweb wrote:
         | This is the syntax of the pipeline it seems:
         | https://github.com/Cicada-Software/demo/blob/main/hello_worl...
         | 
         | Short answer: No
        
         | dboreham wrote:
         | See comment above for how you can do that.
        
       | barkingcat wrote:
       | There is a collision in names:
       | 
       | Cicada, this CI tool, uses a DSL (domain specific language) to
       | write configuration, and this DSL is referred to as "Cicada
       | language", and blasted in marketing copy as a "real programming
       | language" on https://cicada.sh/ . The Cicada DSL is documented in
       | https://cicada.sh/docs/ci-lang/index.html
       | 
       | However, this is a completely different language from Cicada
       | language, a programming language and theorem prover hosted at
       | https://cicada-lang.org/ and https://github.com/cicada-
       | lang/cicada .
       | 
       | This name collision is very confusing, and I wonder why Cicada
       | the CI tool didn't just stick to python, since it is also a "real
       | programming language."
        
         | bogwog wrote:
         | I didn't know about that other Cicada language, but the part
         | about using a DSL for this does seem unnecessary to me. I
         | haven't dived into the docs at all, so if anyone has I'd be
         | curious to know what this DSL offers over Python, Starlark, or
         | any other existing programming language?
         | 
         | Especially since, as far as I can tell, this is built on
         | Python. So you already have a working Python installation at
         | least.
        
       | dbingham wrote:
       | This is a misleading title. Being yet another CI tool is not the
       | same thing as being a cross platform version of Github Actions
       | and Gitlab CI.
       | 
       | A cross platform version of Github Actions would allow you to run
       | your actions using your own tooling.
        
         | dboreham wrote:
         | Also this exists:
         | 
         | https://github.com/nektos/act
         | 
         | which is conveniently packaged in a GH-a-like system by:
         | 
         | https://gitea.com/gitea/act_runner
         | 
         | in
         | 
         | https://github.com/go-gitea
        
       | debarshri wrote:
       | Something I have noticed lately, First startup idea that every
       | Devops person starts with is to create a CI/CD project because
       | they think world is inefficient and workflows can be optimized,
       | and then they pivot to other ideas.
        
         | j45 wrote:
         | So would that mean there is still room for improvement?
        
       | leonheld wrote:
       | What I really want is a 'Grand Translator' tool that allows any
       | CI pipeline definition to be translated into any other CI
       | pipeline definition.
       | 
       | I want to take any .gitlab-ci.yml and magically translate it to a
       | github workflow, and vice-versa. I know it isn't impossible, but
       | it's a heck lot of work to get it right with all the hidden
       | features behind declarative pipelines.
        
         | ska wrote:
         | If doing this sort of a migration is a real possibility, it's
         | an argument for having the bare minimum logic in the CI tool
         | and as much as you can in your own scripts...
        
           | dindresto wrote:
           | That's actually what we did for our monorepo. We had a huge
           | Gitlab pipeline of multiple steps and jobs, now it's a single
           | job pipeline that builds, tests and deploys 15 different
           | projects, all powered by Nix and some Python scripts.
        
         | sakopov wrote:
         | We need a "terraform" for build pipelines.
        
           | _joel wrote:
           | oh god, please, no. :)
           | 
           | I mean, go for it if you want but I'm not sure why you'd need
           | to maintain so many heterogeous pipelines that would warrant
           | a tool like this.
        
       | endigma wrote:
       | You should change your name. "Cicada" was also a CI/CD tool
       | recently sunset by AWS after acquiring Fig. I maintain the
       | community fork so I happen to know Amazon still holds a trademark
       | on "Cicada"[1]. We rebranded to "Katoa" but you're going to run
       | into them directly especially if you have any commercial plans.
       | 
       | 1: Can't link, you can search "Cicada" and "Amazon" on the USPTO
       | TESS
        
       | biugbkifcjk wrote:
       | I'm going to plug https://onedev.io/ its awesome. Its self hosted
       | and has its own tooling for CI/CD. I feel it doesn't get enough
       | love, but I've been using it for years for my own stuff.
        
       ___________________________________________________________________
       (page generated 2023-11-06 21:00 UTC)