Merge pull request #39008 from serokell/youtrack

Youtrack package and service
This commit is contained in:
Yegor Timoshenko 2018-04-27 22:16:57 +03:00 committed by GitHub
commit 6e33df0f6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 209 additions and 0 deletions

View File

@ -0,0 +1,177 @@
{ config, lib, pkgs, options, ... }:
with lib;
let
cfg = config.services.youtrack;
extraAttr = concatStringsSep " " (mapAttrsToList (k: v: "-D${k}=${v}") (stdParams // cfg.extraParams));
mergeAttrList = lib.foldl' lib.mergeAttrs {};
stdParams = mergeAttrList [
(optionalAttrs (cfg.baseUrl != null) {
"jetbrains.youtrack.baseUrl" = cfg.baseUrl;
})
{
"java.aws.headless" = "true";
"jetbrains.youtrack.disableBrowser" = "true";
}
];
in
{
options.services.youtrack = {
enable = mkEnableOption "YouTrack service";
address = mkOption {
description = ''
The interface youtrack will listen on.
'';
default = "127.0.0.1";
type = types.string;
};
baseUrl = mkOption {
description = ''
Base URL for youtrack. Will be auto-detected and stored in database.
'';
type = types.nullOr types.string;
default = null;
};
extraParams = mkOption {
default = {};
description = ''
Extra parameters to pass to youtrack. See
https://www.jetbrains.com/help/youtrack/standalone/YouTrack-Java-Start-Parameters.html
for more information.
'';
example = {
"jetbrains.youtrack.overrideRootPassword" = "tortuga";
};
type = types.attrsOf types.string;
};
package = mkOption {
description = ''
Package to use.
'';
type = types.package;
default = pkgs.youtrack;
defaultText = "pkgs.youtrack";
};
port = mkOption {
description = ''
The port youtrack will listen on.
'';
default = 8080;
type = types.int;
};
statePath = mkOption {
description = ''
Where to keep the youtrack database.
'';
type = types.string;
default = "/var/lib/youtrack";
};
virtualHost = mkOption {
description = ''
Name of the nginx virtual host to use and setup.
If null, do not setup anything.
'';
default = null;
type = types.nullOr types.string;
};
jvmOpts = mkOption {
description = ''
Extra options to pass to the JVM.
See https://www.jetbrains.com/help/youtrack/standalone/Configure-JVM-Options.html
for more information.
'';
type = types.string;
example = "-XX:MetaspaceSize=250m";
default = "";
};
maxMemory = mkOption {
description = ''
Maximum Java heap size
'';
type = types.string;
default = "1g";
};
maxMetaspaceSize = mkOption {
description = ''
Maximum java Metaspace memory.
'';
type = types.string;
default = "350m";
};
};
config = mkIf cfg.enable {
systemd.services.youtrack = {
environment.HOME = cfg.statePath;
environment.YOUTRACK_JVM_OPTS = "-Xmx${cfg.maxMemory} -XX:MaxMetaspaceSize=${cfg.maxMetaspaceSize} ${cfg.jvmOpts} ${extraAttr}";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
User = "youtrack";
Group = "youtrack";
ExecStart = ''${cfg.package}/bin/youtrack ${cfg.address}:${toString cfg.port}'';
};
};
users.users.youtrack = {
description = "Youtrack service user";
isSystemUser = true;
home = cfg.statePath;
createHome = true;
group = "youtrack";
};
users.groups.youtrack = {};
services.nginx = mkIf (cfg.virtualHost != null) {
upstreams.youtrack.servers."${cfg.address}:${toString cfg.port}" = {};
virtualHosts.${cfg.virtualHost}.locations = {
"/" = {
proxyPass = "http://youtrack";
extraConfig = ''
client_max_body_size 10m;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
'';
};
"/api/eventSourceBus" = {
proxyPass = "http://youtrack";
extraConfig = ''
proxy_cache off;
proxy_buffering off;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
proxy_set_header Connection "";
chunked_transfer_encoding off;
client_max_body_size 10m;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
'';
};
};
};
};
}

View File

@ -0,0 +1,30 @@
{ stdenv, fetchurl, makeWrapper, jre }:
stdenv.mkDerivation rec {
name = "youtrack-${version}";
version = "2018.1.41051";
jar = fetchurl {
url = "https://download.jetbrains.com/charisma/${name}.jar";
sha256 = "1sznay3lbyb2i977103hzh61rw1bpkdv0raffbir68apmvv1r0rb";
};
buildInputs = [ makeWrapper ];
unpackPhase = "true";
installPhase = ''
runHook preInstall
makeWrapper ${jre}/bin/java $out/bin/youtrack --add-flags "\$YOUTRACK_JVM_OPTS -jar $jar"
runHook postInstall
'';
meta = with stdenv.lib; {
description = ''
Issue Tracking and Project Management Tool for Developers
'';
maintainers = with maintainers; [ yorickvp ];
# https://www.jetbrains.com/youtrack/buy/license.html
license = licenses.unfree;
};
}

View File

@ -12955,6 +12955,8 @@ with pkgs;
erlang = erlangR18;
};
youtrack = callPackage ../servers/jetbrains/youtrack.nix { };
zabbix = recurseIntoAttrs (callPackages ../servers/monitoring/zabbix {});
zabbix20 = callPackage ../servers/monitoring/zabbix/2.0.nix { };