feat!: add daemon to build & especially cache

This commit is contained in:
Technofab 2023-06-09 16:36:29 +02:00
parent bd1cfe94a4
commit 92f3560899
No known key found for this signature in database
GPG key ID: A0AA746B951C8830
12 changed files with 93 additions and 17 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
.idea/
gitlab-runner.toml

View file

@ -1,10 +0,0 @@
ARG NIX_TAG="latest"
FROM nixos/nix:$NIX_TAG
COPY entrypoint.sh /usr/local/bin/
RUN mkdir -p ~/.config/nix && \
echo -e "experimental-features = nix-command flakes\naccept-flake-config = true" > ~/.config/nix/nix.conf
ENTRYPOINT ["/bin/sh", "/usr/local/bin/entrypoint.sh"]

View file

@ -12,3 +12,6 @@ rec {
};
...
```
## Daemon
For caching this uses a separate docker container where a nix-daemon runs in

12
ci-image/Dockerfile Normal file
View file

@ -0,0 +1,12 @@
ARG NIX_TAG="latest"
FROM nixos/nix:$NIX_TAG
COPY entrypoint.sh /usr/local/bin/
COPY nix.conf /etc/nix/nix.conf
COPY nix.conf /root/.config/nix/nix.conf
VOLUME "/mnt/nix/daemon-socket"
VOLUME "/mnt/nix/store"
ENTRYPOINT ["/bin/sh", "/usr/local/bin/entrypoint.sh"]

7
ci-image/entrypoint.sh Normal file
View file

@ -0,0 +1,7 @@
#!/bin/sh
set -e
cd "$CI_PROJECT_DIR"
echo "Activating flake's CI shell..."
nix develop .#ci --impure --command "bash"

4
ci-image/nix.conf Normal file
View file

@ -0,0 +1,4 @@
experimental-features = nix-command flakes
accept-flake-config = true
store = unix:///mnt/nix/daemon-socket/socket?real=/mnt/nix/store
sandbox = true

10
daemon/Dockerfile Normal file
View file

@ -0,0 +1,10 @@
FROM nixos/nix:latest
RUN nix-env -iA nixpkgs.mount
VOLUME "/mnt/nix/store"
COPY entrypoint.sh /usr/local/bin/
COPY nix.conf /etc/nix/nix.conf
ENTRYPOINT ["/bin/sh", "/usr/local/bin/entrypoint.sh"]

10
daemon/entrypoint.sh Normal file
View file

@ -0,0 +1,10 @@
#!/bin/sh
# this needs elevated permissions, as long as docker mounts a volume and not a hostpath the contents get kept without
# needing an overlay mount
# mount -t overlay overlay -o \
# lowerdir=/nix/store,upperdir=/mnt/nix/store/upper,workdir=/mnt/nix/store/workdir \
# /nix/store
nix-daemon

2
daemon/nix.conf Normal file
View file

@ -0,0 +1,2 @@
experimental-features = nix-command flakes
sandbox = true

22
docker-compose.yml Normal file
View file

@ -0,0 +1,22 @@
services:
gitlab-runner:
image: gitlab/gitlab-runner:latest
restart: unless-stopped
container_name: Gitlab-Runner
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./gitlab-runner.toml:/etc/gitlab-runner/config.toml
nix-ci-daemon:
# comment out build to use the dockerhub image
build: ./daemon
image: technofab/nix-ci-daemon
restart: unless-stopped
container_name: Nix-CI-Daemon
volumes:
- nix-daemon-socket:/nix/var/nix/daemon-socket
- nix-shared-store:/nix/store
volumes:
nix-shared-store:
nix-daemon-socket:

View file

@ -1,7 +0,0 @@
#!/bin/sh
set -e
cd "$CI_PROJECT_DIR"
echo "Activating flake's CI shell..."
nix --extra-experimental-features "flakes nix-command" develop .#ci --accept-flake-config --impure --command "bash"

View file

@ -0,0 +1,21 @@
[[runners]]
name = "Nix CI Runner"
url = "https://gitlab.com"
token = ""
executor = "docker"
[runners.custom_build_dir]
[runners.docker]
tls_verify = false
image = "technofab/nix-gitlab-ci"
privileged = true
# we cant specify a json file here, so we need privileged for now
#security_opt = [ "seccomp=/usr/share/containers/seccomp.json" ]
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = [
# prefixed with the docker-compose name
"nix-gitlab-ci_nix-shared-store:/mnt/nix/store:ro",
"nix-gitlab-ci_nix-daemon-socket:/mnt/nix/daemon-socket:ro"
]
shm_size = 0