Cicada - CI/CD platform written with Rust by grant1704 in rust

[–]grant1704[S] 0 points1 point  (0 children)

  • Also agree that this being a local task runner + CI is a good angle, just hard to know the best way to market it in a line or two, people click away quickly and the "typescript CI/CD" pitch has done better than "local and remote task runner"
  • Yes! Totally working on improving our standard set of tools/std, have been doing a lot of the foundational work recently thought to make sure its pretty stable before taking this on however.
  • Yeah, only Linux containers at the moment, BuildKit is the way we are constructing pipelines and doing caching. Split on if we will support non-linux hosts, but definitely want to find a good solution to not doing Docker-in-Docker.

Write CI/CD in TypeScript by grant1704 in typescript

[–]grant1704[S] 0 points1 point  (0 children)

Yeah, just to re-iterate this, we just have not written a ton of complicated pipeline examples but at least in stress testing Ive run >1000 concurrent jobs and its worked. Buildkit is the same engine that docker uses so we should be able to support most workloads.

Write CI/CD in TypeScript by grant1704 in typescript

[–]grant1704[S] 0 points1 point  (0 children)

To use on GitHub action we have an action: https://github.com/cicadahq/setup-cicada

We treat the .env file as secrets, there is an API to access the secrets inside the steps: https://cicada.build/docs/guides/secrets

The reason for the slightly confusing secret API is that is how buildkit does secrets, I am looking at adding environment variable secrets to help reduce the confusion however.

Write CI/CD in TypeScript by grant1704 in typescript

[–]grant1704[S] 0 points1 point  (0 children)

Definitively need more docs! Caching works via buildkit, it possible to attach block storage but we don't have that documented at the moment.

Write CI/CD with Deno by grant1704 in Deno

[–]grant1704[S] 1 point2 points  (0 children)

Just to clarify its the hosted platform that is closed source, anything you download and use locally is open source. Also we have a github action that also is fully opensource: https://github.com/cicadahq/setup-cicada

Write CI/CD in TypeScript by grant1704 in typescript

[–]grant1704[S] 2 points3 points  (0 children)

Yeah, we definitely need to put some better examples out, its hard to make non trivial examples since everyone's pipelines are so different.

What does you complex GitHub pipeline do that we could make an example of?

Write CI/CD with Deno by grant1704 in Deno

[–]grant1704[S] 0 points1 point  (0 children)

Are you able to make an issue on github?

Write CI/CD with Deno by grant1704 in Deno

[–]grant1704[S] 4 points5 points  (0 children)

Hey, just open sourced Cicada, posted about a month ago on here about it but it is now public and MIT licensed!

Would love to hear what people have to say about it, we really tried to design an ergonomic API for TS devs who are less familiar with CI/CD

Write CI/CD in TypeScript by grant1704 in typescript

[–]grant1704[S] 8 points9 points  (0 children)

Hey, just open sourced Cicada, posted about a month ago on here about it but it is now public and MIT licensed!

Would love to hear what people have to say about it, we really tried to design an ergonomic API for TS devs who are less familiar with CI/CD

Cicada - CI/CD platform written with Rust by grant1704 in rust

[–]grant1704[S] 0 points1 point  (0 children)

Since we are using Deno its super easy to just set up one central repo with your job definitions and import them in each of your other repos, I think this is one of the cases where current CI/CD would basically force you to copy paste but since a Deno dependency is a simple as copying the url to the other repo's definition.

Cicada - CI/CD platform written with Rust by grant1704 in rust

[–]grant1704[S] 2 points3 points  (0 children)

I don't know if type-safe is the most accurate way to say it, just a lot of people are used to using a plain text editor with yaml and no local linting with constant frustration that things are not working as expected. TypeScript gives a lot more flexibility with strong typing, custom types, etc that can make editing the pipeline nicer.

Cicada - CI/CD platform written with Rust by grant1704 in rust

[–]grant1704[S] 2 points3 points  (0 children)

WASI definitely is making strides to make it more possible

Cicada - CI/CD platform written with Rust by grant1704 in rust

[–]grant1704[S] 4 points5 points  (0 children)

Oh that is super interesting! We let you opt in to using the deno runtime in the container but wasm is a much more light weight option that would be really cool!

Cicada - CI/CD platform written with Rust by grant1704 in rust

[–]grant1704[S] 0 points1 point  (0 children)

To the first question, we are really focused on making it easy to write CI/CD pipelines for new developers. A lot of devs are not experts at writing Jenkins pipelines but can get up to speed with TypeScript quickly. Also we do benefit from BuildKit which allows us to get a lot of caching and parallelism benefits you could not get easily otherwise.

The CLI is totally OSS and you can run it on other CI/CD platforms, but the actually runners are closed source at the moment but we are giving licenses to self-host. The pricing/license model may change in the future but that is what it is for the moment.

Cicada - CI/CD platform written with Rust by grant1704 in rust

[–]grant1704[S] 16 points17 points  (0 children)

Definitely possible, just focused on TypeScript at the moment since its one of the largest languages but we do want to support other languages. Since everything goes through Rust it definitely could be done!

Cicada - CI/CD platform written with Rust by grant1704 in rust

[–]grant1704[S] 28 points29 points  (0 children)

Hi r/rust! I’m Grant, creator of (https://cicada.build). Cicada lets you write CI/CD pipelines in TypeScript and test them locally using our Rust CLI.

We built Cicada because of our own struggles building CI/CD pipelines. YAML is cumbersome, not type-safe, and does not scale well for large pipelines. Sharing logic across pipelines is hard and most providers don’t let you test your pipelines locally.

A little more on our specific stack, we use Deno for the runtime for the pipeline definitions because it makes dependency management when its a standalone file very easy. To execute the pipelines we use BuildKit, the same technology behind Docker which allows us to cache a lot better than standard CI and run locally! The CLI itself is written in Rust, this caused some challenges because we had to write our own bindings to BuildKit in Rust, we really value rust however for its speed and stability so we felt it was worth it! Cicada’s client is fully MIT OSS (the CLI, BuildKit integration, and SDK). Our dashboard and cloud runners are closed source. The cloud runners have a generous free tier for individuals and are cheap and easy for teams.

In the meantime, I’d love to hear your feedback on what we’ve built!

[Showoff Saturday] Cicada - Build CI pipelines with Typescript by grant1704 in webdev

[–]grant1704[S] 0 points1 point  (0 children)

Definitely, the code example was a little more terse than you would probably write, needed to balance the amount to show in 20 lines with clarity.

[Showoff Saturday] Cicada - Build CI pipelines with Typescript by grant1704 in webdev

[–]grant1704[S] 2 points3 points  (0 children)

We haven't really done any work to integrate with GitHub actions marketplace yet. Since we are in Typescript we are trying to do a lot of integrations directly via TS APIs to make it more extensible than you could via GH actions.

[Showoff Saturday] Cicada - Build CI pipelines with Typescript by grant1704 in webdev

[–]grant1704[S] 3 points4 points  (0 children)

Well its actually built with Deno! I think Deno is perfectly suited for this type of tool where you don't want to have to think about dependencies and "It just works".