Something went wrong. Try again.
Stitch any CI into Tangled
Something went wrong. Try again.
Files
- Go 98%
- Nix 2%
- Shell <1%
README.md
# tack - Connect Tangled to your CI
Tack is a custom [Tangled](https://tangled.org) spindle that runs
CI on alternate providers and reports their results back
to Tangled using standard ATProto records so they show up natively
in Tangled's UI.
> [!WARNING]
>
> **Project status:** Tack is early and experimental software.
> This repo itself uses Tack and I (mitchellh) use Tack for my projects,
> but it is still new and relatively unproven.
## Example
A Tangled workflow that fires a Buildkite pipeline on every push to
`main` and every pull request targeting `main`:
```yaml
# .tangled/workflows/ci.yml
when:
- event: ["push"]
branch: ["main"]
- event: ["pull_request"]
branch: ["main"]
engine: tack
tack:
buildkite:
pipeline: my-app-ci
```
The `when:` block is the standard Tangled trigger schema; the
`tack:` block tells tack which Buildkite pipeline to fire and how.
See [docs/buildkite.md](docs/buildkite.md) for the full set of
options and end-to-end Buildkite setup. Tack can support multiple
providers.
## How it Works
Tack is a drop-in alternative to the stock `spindle` runner. You run
`tack` and [register it using the standard UI](https://tangled.org/settings/spindles).
Native installations require `git` in `PATH`; the Docker and Nix packages
include it automatically.
Instead of executing workflows in local containers, tack receives push triggers from knots
(the Tangled servers that host git repositories), loads `.tangled/workflows` at the pushed
commit, and translates matching workflows into 3rd party CI builds. Tack owns the resulting
pipeline records and serves them through Tangled's standard CI XRPC API.
This makes even 3rd party CIs integrate first class into Tangled so their
status, counts, etc. can show up inline in things like pull requests.
Tack speaks both generations of the Tangled spindle protocol:
* **Current (Tangled v1.20, knot2):** a repo selects tack by setting the `spindle` field of
its repo manifest (the knot-hosted `org.tangled.repo.manifest` record) to tack's DID,
…