惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Vercel News
Vercel News
月光博客
月光博客
S
SegmentFault 最新的问题
A
About on SuperTechFans
Microsoft Security Blog
Microsoft Security Blog
U
Unit 42
Google DeepMind News
Google DeepMind News
Engineering at Meta
Engineering at Meta
B
Blog RSS Feed
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
N
Netflix TechBlog - Medium
小众软件
小众软件
WordPress大学
WordPress大学
G
Google Developers Blog
Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
F
Fortinet All Blogs
博客园 - 【当耐特】
I
InfoQ

jola.dev

Migrating your Bluesky account the hard way | jola.dev Cluster singleton pattern | jola.dev cove.town, atproto self-hosted self-hosting | jola.dev Speeding up a Phoenix LiveView web app with a CDN | jola.dev Self-hosting an atproto container registry | jola.dev Migrating to the new Tangled knot2 | jola.dev Self-hosting and Tangled | jola.dev Self-hosting your PDS | jola.dev Taking control of your atproto account | jola.dev No cost, no value | jola.dev Latch - an Elixir atproto OAuth library | jola.dev Limited output is a feature | jola.dev Distributed rate limiter with HRW in Elixir | jola.dev A computer can never be held accountable | jola.dev Elixir Cluster 101 | jola.dev How to stop Claude from saying load-bearing | jola.dev Let libraries be libraries | jola.dev Automatically syncing your blog to atproto and standard.site | jola.dev Appreciation for the small web | jola.dev Treating LLMs as programming books Publishing your blog to standard.site in Elixir Generating OG images in Elixir The social contract of writing Highest Random Weight in Elixir bunnyx: a bunny.net Elixir client library Building for the joy of building Running local models on an M4 with 24GB memory How to hit your Claude weekly limit so you can go outside and touch grass Dropping Cloudflare for bunny.net Building a blog with Elixir and Phoenix
CI workflows on Tangled for Elixir | jola.dev
https://jola.dev/about · 2026-07-04 · via jola.dev

Tangled is a Github competitor built on top of atproto. The company behind it is a Finnish startup, situated in Finland, with all servers and data held in the EU. They have taken VC money, but at least conceptually the fact that it's built on top of atproto means that if the strings that came with that cash pull the company in the wrong direction, your data is still yours and you could potentially move it somewhere else.

Continuing down my atproto rabbit hole, I spent some time getting a CI workflow set up for https://tangled.org/jola.dev/annot.at. I couldn’t find any examples of Elixir CI workflows for Tangled so it took some experimenting.

This uses the new microvm engine that was only recently released, which enables us to run a PostgreSQL service in the workflow. By default it only listens on a unix socket, so we have to set some extra configuration there for it to match the standard Phoenix scaffold setup.

when:

- event: ["push", "pull_request"]

branch: ["main"]

engine: microvm

image: nixos

dependencies:

- beam29Packages.elixir_1_20

- beam29Packages.erlang

services:

postgresql:

enable: true

enableTCPIP: true

authentication: |

host all all 127.0.0.1/32 trust

host all all ::1/128 trust

steps:

- name: setup

command: |

mix local.hex --force

mix local.rebar --force

mix deps.get

- name: compile

command: mix compile --warnings-as-errors

- name: format

command: mix format --check-formatted

- name: credo

command: mix credo --strict

- name: test

command: mix test --warnings-as-errors

- name: unused

command: mix deps.unlock --check-unused

The trickiest part was using specific versions of Elixir and Erlang. You can use

dependencies:

- elixir

- erlang

but that gives you an unspecified version of Elixir. It happened to be 1.18 when I tried. Instead, you'll want to find specific NixOS packages to depend on, like the full workflow does.

dependencies:

- beam29Packages.elixir_1_20

- beam29Packages.erlang

The BEAM 29 packages I found here https://mynixos.com/nixpkgs/packages/beam29Packages. This still doesn't give me an exact version, but it was close enough for me.

I don’t have much experience with NixOS so it was a bit of trial and error to get here, but once I got the config right it runs perfect. Here’s an example run https://tangled.org/jola.dev/annot.at/pipelines/28076/workflow/ci.yml.

Now to go figure out how to self-host a knot and a spindle. Don’t have to do that, you can use the servers Tangled offer, but I figure it’s more fun this way.