Skip to content

Commit

Permalink
kanboard: init at 1.2.42 (#357229)
Browse files Browse the repository at this point in the history
  • Loading branch information
yzx9 authored Dec 9, 2024
1 parent c2a7c0a commit 53bd25e
Show file tree
Hide file tree
Showing 6 changed files with 250 additions and 0 deletions.
2 changes: 2 additions & 0 deletions nixos/doc/manual/release-notes/rl-2505.section.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@

- [Buffyboard](https://gitlab.postmarketos.org/postmarketOS/buffybox/-/tree/master/buffyboard), a framebuffer on-screen keyboard. Available as [services.buffyboard](option.html#opt-services.buffyboard).

- [KanBoard](https://github.com/kanboard/kanboard), a project management tool that focuses on the Kanban methodology. Available as [services.kanboard](#opt-services.kanboard.enable).

<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->

## Backward Incompatibilities {#sec-release-25.05-incompatibilities}
Expand Down
1 change: 1 addition & 0 deletions nixos/modules/module-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -1471,6 +1471,7 @@
./services/web-apps/jirafeau.nix
./services/web-apps/jitsi-meet.nix
./services/web-apps/kasmweb/default.nix
./services/web-apps/kanboard.nix
./services/web-apps/kavita.nix
./services/web-apps/keycloak.nix
./services/web-apps/kimai.nix
Expand Down
175 changes: 175 additions & 0 deletions nixos/modules/services/web-apps/kanboard.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
{
config,
lib,
pkgs,
...
}:

let
cfg = config.services.kanboard;

toStringAttrs = lib.mapAttrs (lib.const toString);
in
{
meta.maintainers = with lib.maintainers; [ yzx9 ];

options.services.kanboard = {
enable = lib.mkEnableOption "Kanboard";

package = lib.mkPackageOption pkgs "kanboard" { };

dataDir = lib.mkOption {
type = lib.types.str;
default = "/var/lib/kanboard";
description = "Default data folder for Kanboard.";
example = "/mnt/kanboard";
};

user = lib.mkOption {
type = lib.types.str;
default = "kanboard";
description = "User under which Kanboard runs.";
};

group = lib.mkOption {
type = lib.types.str;
default = "kanboard";
description = "Group under which Kanboard runs.";
};

settings = lib.mkOption {
type =
with lib.types;
attrsOf (oneOf [
str
int
bool
]);

default = { };

description = ''
Customize the default settings, refer to <https://github.com/kanboard/kanboard/blob/main/config.default.php>
for details on supported values.
'';
};

# Nginx
domain = lib.mkOption {
type = lib.types.str;
default = "kanboard";
description = "FQDN for the Kanboard instance.";
example = "kanboard.example.org";
};
nginx = lib.mkOption {
type = lib.types.nullOr (
lib.types.submodule (import ../web-servers/nginx/vhost-options.nix { inherit config lib; })
);
default = { };
description = ''
With this option, you can customize an NGINX virtual host which already
has sensible defaults for Kanboard. Set to `{ }` if you do not need any
customization for the virtual host. If enabled, then by default, the
{option}`serverName` is `''${domain}`. If this is set to null (the
default), no NGINX virtual host will be configured.
'';
example = lib.literalExpression ''
{
enableACME = true;
forceHttps = true;
}
'';
};

phpfpm.settings = lib.mkOption {
type =
with lib.types;
attrsOf (oneOf [
int
str
bool
]);

default = { };

description = ''
Options for kanboard's PHPFPM pool.
'';
};
};

config = lib.mkIf cfg.enable {
users = {
users = lib.mkIf (cfg.user == "kanboard") {
kanboard = {
isSystemUser = true;
group = cfg.group;
home = cfg.dataDir;
createHome = true;
};
};

groups = lib.mkIf (cfg.group == "kanboard") {
kanboard = { };
};
};

services.phpfpm.pools.kanboard = {
user = cfg.user;
group = cfg.group;

settings = lib.mkMerge [
{
"pm" = "dynamic";
"php_admin_value[error_log]" = "stderr";
"php_admin_flag[log_errors]" = true;
"listen.owner" = "nginx";
"catch_workers_output" = true;
"pm.max_children" = "32";
"pm.start_servers" = "2";
"pm.min_spare_servers" = "2";
"pm.max_spare_servers" = "4";
"pm.max_requests" = "500";
}
cfg.phpfpm.settings
];

phpEnv = lib.mkMerge [
{ DATA_DIR = cfg.dataDir; }
(toStringAttrs cfg.settings)
];
};

services.nginx = lib.mkIf (cfg.nginx != null) {
enable = lib.mkDefault true;
virtualHosts."${cfg.domain}" = lib.mkMerge [
{
root = lib.mkForce "${cfg.package}/share/kanboard";
locations."/".extraConfig = ''
rewrite ^ /index.php;
'';
locations."~ \\.php$".extraConfig = ''
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:${config.services.phpfpm.pools.kanboard.socket};
include ${config.services.nginx.package}/conf/fastcgi.conf;
include ${config.services.nginx.package}/conf/fastcgi_params;
'';
locations."~ \\.(js|css|ttf|woff2?|png|jpe?g|svg)$".extraConfig = ''
add_header Cache-Control "public, max-age=15778463";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;
access_log off;
'';
extraConfig = ''
try_files $uri /index.php;
'';
}
cfg.nginx
];
};
};
}
1 change: 1 addition & 0 deletions nixos/tests/all-tests.nix
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,7 @@ in {
jotta-cli = handleTest ./jotta-cli.nix {};
k3s = handleTest ./k3s {};
kafka = handleTest ./kafka.nix {};
kanboard = handleTest ./web-apps/kanboard.nix {};
kanidm = handleTest ./kanidm.nix {};
kanidm-provisioning = handleTest ./kanidm-provisioning.nix {};
karma = handleTest ./karma.nix {};
Expand Down
25 changes: 25 additions & 0 deletions nixos/tests/web-apps/kanboard.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import ../make-test-python.nix (
{ lib, ... }:

{
name = "kanboard";
meta.maintainers = with lib.maintainers; [ yzx9 ];

nodes = {
machine = {
services.kanboard = {
enable = true;
};
};
};

testScript = ''
start_all()
machine.wait_for_unit("nginx.service")
machine.wait_for_unit("phpfpm-kanboard.service")
machine.wait_for_open_port(80)
machine.succeed("curl -k --fail http://localhost", timeout=10)
'';
}
)
46 changes: 46 additions & 0 deletions pkgs/by-name/ka/kanboard/package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
nixosTests,
nix-update-script,
php,
}:

stdenvNoCC.mkDerivation (finalAttrs: {
pname = "kanboard";
version = "1.2.42";

src = fetchFromGitHub {
owner = "kanboard";
repo = "kanboard";
rev = "refs/tags/v${finalAttrs.version}";
hash = "sha256-/Unxl9Vh9pEWjO89sSviGGPFzUwxdb1mbOfpTFTyRL0=";
};

dontBuild = true;

installPhase = ''
runHook preInstall
mkdir -p $out/share/kanboard
cp -rv . $out/share/kanboard
runHook postInstall
'';

passthru = {
updateScript = nix-update-script { };
tests = lib.optionalAttrs stdenvNoCC.hostPlatform.isLinux {
inherit (nixosTests) kanboard;
};
};

meta = {
inherit (php.meta) platforms;
description = "Kanban project management software";
homepage = "https://kanboard.org";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ yzx9 ];
};
})

0 comments on commit 53bd25e

Please sign in to comment.