diff --git a/.gitignore b/.gitignore index d1b0f72..78b6b36 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ TAGS cabal.project.local cabal.project.local~ .direnv -.hls-env \ No newline at end of file +.hls-env +*.~undo-tree~ \ No newline at end of file diff --git a/ci/compile-and-test.sh b/ci/compile-and-test.sh index cf342b1..4eb7ec3 100644 --- a/ci/compile-and-test.sh +++ b/ci/compile-and-test.sh @@ -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 < 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 diff --git a/ci/start-remote-builder.sh b/ci/start-remote-builder.sh new file mode 100644 index 0000000..713b494 --- /dev/null +++ b/ci/start-remote-builder.sh @@ -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 < "$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" diff --git a/ci/stop-remote-builder.dhall b/ci/stop-remote-builder.dhall new file mode 100644 index 0000000..b54a620 --- /dev/null +++ b/ci/stop-remote-builder.dhall @@ -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 diff --git a/ci/stop-remote-builder.sh b/ci/stop-remote-builder.sh new file mode 100644 index 0000000..d81c886 --- /dev/null +++ b/ci/stop-remote-builder.sh @@ -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 <