Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ TAGS
cabal.project.local
cabal.project.local~
.direnv
.hls-env
.hls-env
*.~undo-tree~
5 changes: 2 additions & 3 deletions ci/compile-and-test.sh
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
#!/usr/bin/env sh
#!/usr/bin/env bash

set -eu
set -euo pipefail

readonly repo=${1:?"Please provide path to repository"}

nix-env -iA nixpkgs.nixFlakes nixpkgs.git nixpkgs.cachix
cat >> /etc/nix/nix.conf <<EOF
experimental-features = nix-command flakes
EOF
Expand Down
2 changes: 2 additions & 0 deletions ci/pipeline.dhall
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,10 @@ let prJob =
[ Concourse.helpers.getStep
Concourse.schemas.GetStep::{ resource = pr, trigger = Some True }
, markCheckPending "test"
, ./start-remote-builder.dhall pr
, runPRTestsWithHooks
]
, ensure = Some (./stop-remote-builder.dhall pr)
}

in Concourse.render.pipeline [ mainBranchJob, prJob ]
50 changes: 50 additions & 0 deletions ci/start-remote-builder.dhall
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
let Concourse = ./deps/concourse.dhall

let Prelude = ./deps/prelude.dhall

let runTestsWith
: Concourse.Types.Resource -> Concourse.Types.Step
= \(repo : Concourse.Types.Resource) ->
Concourse.helpers.taskStep
Concourse.schemas.TaskStep::{
, task = "start-remote-builder"
, timeout = Some "2m"
, config =
Concourse.Types.TaskSpec.Config
Concourse.schemas.TaskConfig::{
, image_resource = Some Concourse.schemas.ImageResource::{
, type = "registry-image"
, source = Some
( toMap
{ repository = Prelude.JSON.string "nixos/nix"
, tag = Prelude.JSON.string "latest"
}
)
}
, inputs = Some
[ Concourse.schemas.TaskInput::{ name = repo.name } ]
, params = Some
( toMap
{ CACHIX_AUTH_TOKEN = Some "((cachix-token))"
, SCW_ACCESS_KEY = Some "((nix-builders-access-key))"
, SCW_SECRET_KEY = Some "((nix-builders-secret-key))"
, SCW_DEFAULT_PROJECT_ID = Some
"((nix-builders-project-id))"
}
)
, run = Concourse.schemas.TaskRunConfig::{
, path = "sh"
, args = Some
[ "-c"
, ./start-remote-builder.sh as Text
, let dollarZero = "start-remote-builder.sh" in dollarZero
, repo.name
, "((nix-builder-1-id))"
, "((nix-builder-1-zone))"
, "((nix-builder-ssh-key))"
]
}
}
}

in runTestsWith
43 changes: 43 additions & 0 deletions ci/start-remote-builder.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/usr/bin/env bash

set -euo pipefail

readonly repo=${1:?"Please provide path to repository"}
readonly server_id=${2:?"Please provide server-id"}
readonly zone=${3:?"Please provide server zone"}
readonly ssh_key=${4:?"Please provide the ssh key"}

cat >> /etc/nix/nix.conf <<EOF
experimental-features = nix-command flakes
EOF

cachix use akshaymankar
cachix watch-exec akshaymankar -- nix build "$repo#ci-env"
export PATH="$PWD/result/bin:$PATH"

echo "Starting server ${server_id} in ${zone}"
scw instance server start "$server_id" zone="$zone"

builder_hostname="$server_id.pub.instances.scw.cloud"

echo "Waiting for AAAA record for $builder_hostname"
while true; do
record=$(dig +short AAAA "$builder_hostname")
if ! [[ -z "$record" ]]; then
echo "$server_id.pub.instances.scw.cloud to $record"
break;
fi
sleep 1;
done

key_file=$(mktemp)
echo "$ssh_key" > "$key_file"
echo "Waiting for SSH to work"
while true; do
if ssh -o "StrictHostKeyChecking=no" "nix-builder@$builder_hostname" -i "$key_file" "echo Server alive" ; then
echo "SSH succeeded"
break;
fi
done

echo "Remote builder started"
48 changes: 48 additions & 0 deletions ci/stop-remote-builder.dhall
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
let Concourse = ./deps/concourse.dhall

let Prelude = ./deps/prelude.dhall

let runTestsWith
: Concourse.Types.Resource -> Concourse.Types.Step
= \(repo : Concourse.Types.Resource) ->
Concourse.helpers.taskStep
Concourse.schemas.TaskStep::{
, task = "stop-remote-builder"
, config =
Concourse.Types.TaskSpec.Config
Concourse.schemas.TaskConfig::{
, image_resource = Some Concourse.schemas.ImageResource::{
, type = "registry-image"
, source = Some
( toMap
{ repository = Prelude.JSON.string "nixos/nix"
, tag = Prelude.JSON.string "latest"
}
)
}
, inputs = Some
[ Concourse.schemas.TaskInput::{ name = repo.name } ]
, params = Some
( toMap
{ CACHIX_AUTH_TOKEN = Some "((cachix-token))"
, SCW_ACCESS_KEY = Some "((nix-builders-access-key))"
, SCW_SECRET_KEY = Some "((nix-builders-secret-key))"
, SCW_DEFAULT_PROJECT_ID = Some
"((nix-builders-project-id))"
}
)
, run = Concourse.schemas.TaskRunConfig::{
, path = "sh"
, args = Some
[ "-c"
, ./stop-remote-builder.sh as Text
, let dollarZero = "stop-remote-builder.sh" in dollarZero
, repo.name
, "((nix-builder-1-id))"
, "((nix-builder-1-zone))"
]
}
}
}

in runTestsWith
19 changes: 19 additions & 0 deletions ci/stop-remote-builder.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env bash

set -euo pipefail

readonly repo=${1:?"Please provide path to repository"}
readonly server_id=${2:?"Please provide server-id"}
readonly zone=${3:?"Please provide server zone"}

cat >> /etc/nix/nix.conf <<EOF
experimental-features = nix-command flakes
EOF

cachix watch-exec akshaymankar -- nix build "$repo#ci-env"
export PATH="$PWD/result/bin:$PATH"

echo "Stopping server ${server_id} in ${zone}"
scw instance server stop "$server_id" zone="$zone"

echo "Remote builder stopped"
8 changes: 8 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,14 @@
pkgs.dhall-json
];
};
ci-env = pkgs.buildEnv {
name = "CI Env for remote builder management";
paths = [
pkgs.scaleway-cli
pkgs.dig
pkgs.openssh
];
};
};
defaultPackage = packages.wire-cli;
devShell = packages.dev-shell;
Expand Down