From d2b58dd39a43282a3657c591f636674912717aab Mon Sep 17 00:00:00 2001 From: Paweł Pacana Date: Thu, 10 Mar 2016 16:00:09 +0100 Subject: buildkite-agent: init at 2.1.8 * nixos module included * install compiled binary * only one platform now * limited config options * relies on providing ssh keys for agent --- lib/maintainers.nix | 1 + nixos/modules/module-list.nix | 5 +- .../continuous-integration/buildkite-agent.nix | 100 +++++++++++++++++++++ .../buildkite-agent/default.nix | 43 +++++++++ pkgs/top-level/all-packages.nix | 2 + 5 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 nixos/modules/services/continuous-integration/buildkite-agent.nix create mode 100644 pkgs/development/tools/continuous-integration/buildkite-agent/default.nix diff --git a/lib/maintainers.nix b/lib/maintainers.nix index 79cd4c364a779..f561972c93003 100644 --- a/lib/maintainers.nix +++ b/lib/maintainers.nix @@ -282,6 +282,7 @@ pakhfn = "Fedor Pakhomov "; palo = "Ingolf Wanger "; pashev = "Igor Pashev "; + pawelpacana = "Paweł Pacana "; pesterhazy = "Paulus Esterhazy "; peterhoeg = "Peter Hoeg "; peti = "Peter Simons "; diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index db159366c4e73..a7d81b8568e5a 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -125,10 +125,11 @@ ./services/computing/torque/server.nix ./services/computing/torque/mom.nix ./services/computing/slurm/slurm.nix + ./services/continuous-integration/buildkite-agent.nix + ./services/continuous-integration/hydra/default.nix ./services/continuous-integration/jenkins/default.nix - ./services/continuous-integration/jenkins/slave.nix ./services/continuous-integration/jenkins/job-builder.nix - ./services/continuous-integration/hydra/default.nix + ./services/continuous-integration/jenkins/slave.nix ./services/databases/4store-endpoint.nix ./services/databases/4store.nix ./services/databases/couchdb.nix diff --git a/nixos/modules/services/continuous-integration/buildkite-agent.nix b/nixos/modules/services/continuous-integration/buildkite-agent.nix new file mode 100644 index 0000000000000..b1449882b04f7 --- /dev/null +++ b/nixos/modules/services/continuous-integration/buildkite-agent.nix @@ -0,0 +1,100 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.buildkite-agent; + configFile = pkgs.writeText "buildkite-agent.cfg" + '' + token="${cfg.token}" + name="${cfg.name}" + meta-data="${cfg.meta-data}" + hooks-path="${pkgs.buildkite-agent}/share/hooks" + build-path="/var/lib/buildkite-agent/builds" + bootstrap-script="${pkgs.buildkite-agent}/share/bootstrap.sh" + ''; +in + +{ + options = { + services.buildkite-agent = { + enable = mkEnableOption "buildkite-agent"; + + token = mkOption { + type = types.str; + description = '' + The token from your Buildkite "Agents" page. + ''; + }; + + name = mkOption { + type = types.str; + description = '' + The name of the agent. + ''; + }; + + meta-data = mkOption { + type = types.str; + default = ""; + description = '' + Meta data for the agent. + ''; + }; + + openssh = + { privateKey = mkOption { + type = types.str; + description = '' + Private agent key. + ''; + }; + publicKey = mkOption { + type = types.str; + description = '' + Public agent key. + ''; + }; + }; + }; + }; + + config = mkIf config.services.buildkite-agent.enable { + users.extraUsers.buildkite-agent = + { name = "buildkite-agent"; + home = "/var/lib/buildkite-agent"; + createHome = true; + description = "Buildkite agent user"; + }; + + environment.systemPackages = [ pkgs.buildkite-agent ]; + + systemd.services.buildkite-agent = + { description = "Buildkite Agent"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + environment.HOME = "/var/lib/buildkite-agent"; + preStart = '' + ${pkgs.coreutils}/bin/mkdir -m 0700 -p /var/lib/buildkite-agent/.ssh + + if ! [ -f /var/lib/buildkite-agent/.ssh/id_rsa ]; then + echo "${cfg.openssh.privateKey}" > /var/lib/buildkite-agent/.ssh/id_rsa + ${pkgs.coreutils}/bin/chmod 600 /var/lib/buildkite-agent/.ssh/id_rsa + fi + + if ! [ -f /var/lib/buildkite-agent/.ssh/id_rsa.pub ]; then + echo "${cfg.openssh.publicKey}" > /var/lib/buildkite-agent/.ssh/id_rsa.pub + ${pkgs.coreutils}/bin/chmod 600 /var/lib/buildkite-agent/.ssh/id_rsa.pub + fi + ''; + + serviceConfig = + { ExecStart = "${pkgs.buildkite-agent}/bin/buildkite-agent start --config ${configFile}"; + User = "buildkite-agent"; + RestartSec = 5; + Restart = "on-failure"; + TimeoutSec = 10; + }; + }; + }; +} diff --git a/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix b/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix new file mode 100644 index 0000000000000..166c57a9529d2 --- /dev/null +++ b/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix @@ -0,0 +1,43 @@ +{ stdenv, fetchurl, makeWrapper, coreutils, git, openssh, bash, gnused, gnugrep }: + +stdenv.mkDerivation rec { + version = "2.1.8"; + name = "buildkite-agent-${version}"; + dontBuild = true; + + src = fetchurl { + url = "https://github.com/buildkite/agent/releases/download/v${version}/buildkite-agent-linux-386-${version}.tar.gz"; + sha256 = "f54ca7da4379180700f5038779a7cbb1cef31d49f4a06c42702d68c34387c242"; + }; + + nativeBuildInputs = [ makeWrapper ]; + sourceRoot = "."; + installPhase = '' + install -Dt "$out/bin/" buildkite-agent + + mkdir -p $out/share + mv hooks bootstrap.sh $out/share/ + ''; + + postFixup = '' + substituteInPlace $out/share/bootstrap.sh \ + --replace "#!/bin/bash" "#!$(type -P bash)" + wrapProgram $out/bin/buildkite-agent \ + --set PATH '"${openssh}/bin/:${git}/bin:${coreutils}/bin:${gnused}/bin:${gnugrep}/bin:$PATH"' + ''; + + meta = { + description = "Build runner for buildkite.com"; + longDescription = '' + The buildkite-agent is a small, reliable, and cross-platform build runner + that makes it easy to run automated builds on your own infrastructure. + It’s main responsibilities are polling buildkite.com for work, running + build jobs, reporting back the status code and output log of the job, + and uploading the job's artifacts. + ''; + homepage = https://buildkite.com/docs/agent; + license = stdenv.lib.licenses.mit; + maintainers = [ stdenv.lib.maintainers.pawelpacana ]; + platforms = stdenv.lib.platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 071c34824b179..9fbc40ed44813 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5951,6 +5951,8 @@ in inherit (pythonPackages) twisted; }; + buildkite-agent = callPackage ../development/tools/continuous-integration/buildkite-agent { }; + byacc = callPackage ../development/tools/parsing/byacc { }; cargo = callPackage ../development/tools/build-managers/cargo { -- cgit 1.4.1