MCPcopy Index your code
hub / github.com/Metaswitch/floki

github.com/Metaswitch/floki @2.4.3

Chat with this repo
repository ↗ · DeepWiki ↗ · release 2.4.3 ↗ · + Follow
236 symbols 538 edges 16 files 24 documented · 10%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

floki

Floki was a boatbuilder. Floki now helps you manage interactive containers for building software.

What is floki?

Docker and kubernetes are great ways to run software, and it is often convenient to use the same containers interactively to get a repeatable and complete build environment. However, using these containers for development is not always straightforward.

floki aims to improve the human interface for launching and using interactive docker containers. Instead of remembering or constructing complicated docker run commands, or writing custom scripts to launch docker containers, floki lets you specify what you want from your docker container in a configuration file. You can then get your environment just by running floki. It doesn't replace docker or kubernetes, its an addition to try and improve the human interface for working on a codebase.

This has several advantages over the usual approaches (custom scripts, or, more commonly, leaving it to the user to figure out)

  • an immediate build environment
  • easier to share and on-board new developers
  • a consistent and uniform interface to get a working environment

Documentation

For installation, and basic usage, see getting started.

Full documentation can be found here.

Quickstart

This assumes you have already installed floki using the installation instructions below.

Suppose we want a build environment based on alpine:latest with a C compiler, and clang tools. Suppose we want to also have SSH credentials available from the host, so we can, for example, authenticate with a private git server.

First create your Dockerfile:

FROM alpine:latest

RUN apk update && apk add alpine-sdk clang openssh

and then add a file called floki.yaml to the root of your codebase:

image:
  build:
    name: hello-floki

forward_ssh_agent: true
init:
  - echo "Welcome to the hello-floki build container"

Now run floki. You should see the docker container be built, and you will be dropped into a shell. If you had an ssh-agent running on the host before running floki, you can run ssh-add -l and you should see the same keys loaded as you had on the host.

Install

Prerequisites

It's recommended you add your user to the docker group:

$ sudo usermod -a -G docker USERNAME

and logout and in again to pick up the changes.

Alternatively you can run floki (after installation) with sudo -E floki.

Installation from pre-built binaries

Precompiled binaries can be downloaded from the releases page (for linux and OSX).

To obtain curl and extract the latest linux binary directly in your shell, run

$ curl -L https://github.com/Metaswitch/floki/releases/download/2.2.0/floki-2.2.0-linux.tar.gz | tar xzvf -

You should be able to run floki from your working directory:

$ ./floki --version
floki 2.1.0

Move it onto your path to run it from anywhere. E.g.

$ mv floki /usr/local/bin/

Enjoy!

Installation from cargo

floki can also be installed directly from cargo.

$ cargo install floki

Handy features

  • Forwarding of ssh-agent (useful for authenticating with remote private git servers to pull private dependencies)
  • Docker-in-docker support
  • Forwarding of host user information (allows non-root users to be added and used).
  • volumes (shared, or per-project) for e.g. build caching.

Contributing

Contributors will need to sign their commits to acknowledge the DCO

Release process

  • Releases run automatically from main via semantic-release.
  • Follow the Conventional Commits message format so that new versions and changelogs can be generated.
  • Publishing to crates.io and GitHub Releases happens as part of the release workflow; no manual steps are required once a change lands on main.

TODO

See issues.

Core symbols most depended-on inside this repo

add_docker_switch
called by 9
src/command.rs
cache_path
called by 9
src/volumes.rs
add_environment
called by 6
src/command.rs
render_template
called by 6
src/config.rs
name
called by 6
src/image.rs
run
called by 5
src/command.rs
add_volume
called by 4
src/command.rs
makeloader
called by 3
src/config.rs

Shape

Function 177
Method 31
Class 21
Enum 7

Languages

Rust51%
TypeScript49%

Modules by API surface

docs/themes/purehugo/assets/js/jquery.min.js64 symbols
docs/themes/purehugo/static/js/all.min.js49 symbols
src/config.rs32 symbols
src/command.rs20 symbols
src/environment.rs15 symbols
src/image.rs14 symbols
src/spec.rs11 symbols
src/volumes.rs9 symbols
src/interpret.rs6 symbols
src/dind.rs5 symbols
src/errors.rs4 symbols
src/main.rs3 symbols

For agents

$ claude mcp add floki \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact