From 1c55621706004ffe8a53f577a86d97b30d23197b Mon Sep 17 00:00:00 2001 From: WilliButz Date: Sun, 29 Nov 2020 18:51:50 +0100 Subject: [PATCH] nixos/codimd: rename to hedgedoc CodiMD was renamed to HedgeDoc. The user, group and state directory, will be named hedgedoc instead of codimd, starting with stateVersion "21.03". --- nixos/modules/module-list.nix | 2 +- .../web-apps/{codimd.nix => hedgedoc.nix} | 108 ++++++++++-------- nixos/tests/all-tests.nix | 2 +- nixos/tests/codimd.nix | 60 ---------- nixos/tests/hedgedoc.nix | 60 ++++++++++ 5 files changed, 120 insertions(+), 112 deletions(-) rename nixos/modules/services/web-apps/{codimd.nix => hedgedoc.nix} (90%) delete mode 100644 nixos/tests/codimd.nix create mode 100644 nixos/tests/hedgedoc.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 213048da500..3b67a857493 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -856,7 +856,6 @@ ./services/web-apps/atlassian/confluence.nix ./services/web-apps/atlassian/crowd.nix ./services/web-apps/atlassian/jira.nix - ./services/web-apps/codimd.nix ./services/web-apps/convos.nix ./services/web-apps/cryptpad.nix ./services/web-apps/documize.nix @@ -865,6 +864,7 @@ ./services/web-apps/gerrit.nix ./services/web-apps/gotify-server.nix ./services/web-apps/grocy.nix + ./services/web-apps/hedgedoc.nix ./services/web-apps/icingaweb2/icingaweb2.nix ./services/web-apps/icingaweb2/module-monitoring.nix ./services/web-apps/ihatemoney diff --git a/nixos/modules/services/web-apps/codimd.nix b/nixos/modules/services/web-apps/hedgedoc.nix similarity index 90% rename from nixos/modules/services/web-apps/codimd.nix rename to nixos/modules/services/web-apps/hedgedoc.nix index 0fbc9ee820e..3f646d7db0c 100644 --- a/nixos/modules/services/web-apps/codimd.nix +++ b/nixos/modules/services/web-apps/hedgedoc.nix @@ -3,10 +3,14 @@ with lib; let - cfg = config.services.codimd; + cfg = config.services.hedgedoc; + + name = if versionAtLeast config.system.stateVersion "21.03" + then "hedgedoc" + else "codimd"; prettyJSON = conf: - pkgs.runCommandLocal "codimd-config.json" { + pkgs.runCommandLocal "hedgedoc-config.json" { nativeBuildInputs = [ pkgs.jq ]; } '' echo '${builtins.toJSON conf}' | jq \ @@ -14,22 +18,26 @@ let ''; in { - options.services.codimd = { - enable = mkEnableOption "the CodiMD Markdown Editor"; + imports = [ + (mkRenamedOptionModule [ "services" "codimd" ] [ "services" "hedgedoc" ]) + ]; + + options.services.hedgedoc = { + enable = mkEnableOption "the HedgeDoc Markdown Editor"; groups = mkOption { type = types.listOf types.str; default = []; description = '' - Groups to which the codimd user should be added. + Groups to which the user ${name} should be added. ''; }; workDir = mkOption { type = types.path; - default = "/var/lib/codimd"; + default = "/var/lib/${name}"; description = '' - Working directory for the CodiMD service. + Working directory for the HedgeDoc service. ''; }; @@ -38,17 +46,17 @@ in domain = mkOption { type = types.nullOr types.str; default = null; - example = "codimd.org"; + example = "hedgedoc.org"; description = '' - Domain name for the CodiMD instance. + Domain name for the HedgeDoc instance. ''; }; urlPath = mkOption { type = types.nullOr types.str; default = null; - example = "/url/path/to/codimd"; + example = "/url/path/to/hedgedoc"; description = '' - Path under which CodiMD is accessible. + Path under which HedgeDoc is accessible. ''; }; host = mkOption { @@ -69,7 +77,7 @@ in path = mkOption { type = types.nullOr types.str; default = null; - example = "/run/codimd.sock"; + example = "/run/hedgedoc.sock"; description = '' Specify where a UNIX domain socket should be placed. ''; @@ -77,7 +85,7 @@ in allowOrigin = mkOption { type = types.listOf types.str; default = []; - example = [ "localhost" "codimd.org" ]; + example = [ "localhost" "hedgedoc.org" ]; description = '' List of domains to whitelist. ''; @@ -201,7 +209,7 @@ in ''; description = '' Specify which database to use. - CodiMD supports mysql, postgres, sqlite and mssql. + HedgeDoc supports mysql, postgres, sqlite and mssql. See https://sequelize.readthedocs.io/en/v3/ for more information. Note: This option overrides . @@ -213,12 +221,12 @@ in example = literalExample '' { dialect = "sqlite"; - storage = "/var/lib/codimd/db.codimd.sqlite"; + storage = "/var/lib/${name}/db.${name}.sqlite"; } ''; description = '' Specify the configuration for sequelize. - CodiMD supports mysql, postgres, sqlite and mssql. + HedgeDoc supports mysql, postgres, sqlite and mssql. See https://sequelize.readthedocs.io/en/v3/ for more information. Note: This option overrides . @@ -227,7 +235,7 @@ in sslKeyPath= mkOption { type = types.nullOr types.str; default = null; - example = "/var/lib/codimd/codimd.key"; + example = "/var/lib/hedgedoc/hedgedoc.key"; description = '' Path to the SSL key. Needed when is enabled. ''; @@ -235,7 +243,7 @@ in sslCertPath = mkOption { type = types.nullOr types.str; default = null; - example = "/var/lib/codimd/codimd.crt"; + example = "/var/lib/hedgedoc/hedgedoc.crt"; description = '' Path to the SSL cert. Needed when is enabled. ''; @@ -243,7 +251,7 @@ in sslCAPath = mkOption { type = types.listOf types.str; default = []; - example = [ "/var/lib/codimd/ca.crt" ]; + example = [ "/var/lib/hedgedoc/ca.crt" ]; description = '' SSL ca chain. Needed when is enabled. ''; @@ -251,7 +259,7 @@ in dhParamPath = mkOption { type = types.nullOr types.str; default = null; - example = "/var/lib/codimd/dhparam.pem"; + example = "/var/lib/hedgedoc/dhparam.pem"; description = '' Path to the SSL dh params. Needed when is enabled. ''; @@ -260,10 +268,10 @@ in type = types.str; default = "/tmp"; description = '' - Path to the temp directory CodiMD should use. + Path to the temp directory HedgeDoc should use. Note that is enabled for - the CodiMD systemd service by default. - (Non-canonical paths are relative to CodiMD's base directory) + the HedgeDoc systemd service by default. + (Non-canonical paths are relative to HedgeDoc's base directory) ''; }; defaultNotePath = mkOption { @@ -271,7 +279,7 @@ in default = "./public/default.md"; description = '' Path to the default Note file. - (Non-canonical paths are relative to CodiMD's base directory) + (Non-canonical paths are relative to HedgeDoc's base directory) ''; }; docsPath = mkOption { @@ -279,7 +287,7 @@ in default = "./public/docs"; description = '' Path to the docs directory. - (Non-canonical paths are relative to CodiMD's base directory) + (Non-canonical paths are relative to HedgeDoc's base directory) ''; }; indexPath = mkOption { @@ -287,7 +295,7 @@ in default = "./public/views/index.ejs"; description = '' Path to the index template file. - (Non-canonical paths are relative to CodiMD's base directory) + (Non-canonical paths are relative to HedgeDoc's base directory) ''; }; hackmdPath = mkOption { @@ -295,7 +303,7 @@ in default = "./public/views/hackmd.ejs"; description = '' Path to the hackmd template file. - (Non-canonical paths are relative to CodiMD's base directory) + (Non-canonical paths are relative to HedgeDoc's base directory) ''; }; errorPath = mkOption { @@ -304,7 +312,7 @@ in defaultText = "./public/views/error.ejs"; description = '' Path to the error template file. - (Non-canonical paths are relative to CodiMD's base directory) + (Non-canonical paths are relative to HedgeDoc's base directory) ''; }; prettyPath = mkOption { @@ -313,7 +321,7 @@ in defaultText = "./public/views/pretty.ejs"; description = '' Path to the pretty template file. - (Non-canonical paths are relative to CodiMD's base directory) + (Non-canonical paths are relative to HedgeDoc's base directory) ''; }; slidePath = mkOption { @@ -322,13 +330,13 @@ in defaultText = "./public/views/slide.hbs"; description = '' Path to the slide template file. - (Non-canonical paths are relative to CodiMD's base directory) + (Non-canonical paths are relative to HedgeDoc's base directory) ''; }; uploadsPath = mkOption { type = types.str; default = "${cfg.workDir}/uploads"; - defaultText = "/var/lib/codimd/uploads"; + defaultText = "/var/lib/${name}/uploads"; description = '' Path under which uploaded files are saved. ''; @@ -766,7 +774,7 @@ in type = types.str; default = ""; description = '' - LDAP field which is used as the username on CodiMD. + LDAP field which is used as the username on HedgeDoc. By default is used. ''; }; @@ -774,7 +782,7 @@ in type = types.str; example = "uid"; description = '' - LDAP field which is a unique identifier for users on CodiMD. + LDAP field which is a unique identifier for users on HedgeDoc. ''; }; tlsca = mkOption { @@ -840,7 +848,7 @@ in requiredGroups = mkOption { type = types.listOf types.str; default = []; - example = [ "Hackmd-users" "Codimd-users" ]; + example = [ "Hedgedoc-Users" ]; description = '' Required group names. ''; @@ -883,7 +891,7 @@ in environmentFile = mkOption { type = with types; nullOr path; default = null; - example = "/var/lib/codimd/codimd.env"; + example = "/var/lib/hedgedoc/hedgedoc.env"; description = '' Environment file as defined in systemd.exec5 @@ -894,9 +902,9 @@ in setting these variables accordingly in the environment file. - # snippet of CodiMD-related config - services.codimd.configuration.dbURL = "postgres://codimd:\''${DB_PASSWORD}@db-host:5432/codimddb"; - services.codimd.configuration.minio.secretKey = "$MINIO_SECRET_KEY"; + # snippet of HedgeDoc-related config + services.hedgedoc.configuration.dbURL = "postgres://hedgedoc:\''${DB_PASSWORD}@db-host:5432/hedgedocdb"; + services.hedgedoc.configuration.minio.secretKey = "$MINIO_SECRET_KEY"; @@ -906,15 +914,15 @@ in Note that this file needs to be available on the host on which - CodiMD is running. + HedgeDoc is running. ''; }; package = mkOption { type = types.package; - default = pkgs.codimd; + default = pkgs.hedgedoc; description = '' - Package that provides CodiMD. + Package that provides HedgeDoc. ''; }; }; @@ -924,20 +932,20 @@ in { assertion = cfg.configuration.db == {} -> ( cfg.configuration.dbURL != "" && cfg.configuration.dbURL != null ); - message = "Database configuration for CodiMD missing."; } + message = "Database configuration for HedgeDoc missing."; } ]; - users.groups.codimd = {}; - users.users.codimd = { - description = "CodiMD service user"; - group = "codimd"; + users.groups.${name} = {}; + users.users.${name} = { + description = "HedgeDoc service user"; + group = name; extraGroups = cfg.groups; home = cfg.workDir; createHome = true; isSystemUser = true; }; - systemd.services.codimd = { - description = "CodiMD Service"; + systemd.services.hedgedoc = { + description = "HedgeDoc Service"; wantedBy = [ "multi-user.target" ]; after = [ "networking.target" ]; preStart = '' @@ -947,14 +955,14 @@ in ''; serviceConfig = { WorkingDirectory = cfg.workDir; - ExecStart = "${cfg.package}/bin/codimd"; + ExecStart = "${cfg.package}/bin/hedgedoc"; EnvironmentFile = mkIf (cfg.environmentFile != null) [ cfg.environmentFile ]; Environment = [ "CMD_CONFIG_FILE=${cfg.workDir}/config.json" "NODE_ENV=production" ]; Restart = "always"; - User = "codimd"; + User = name; PrivateTmp = true; }; }; diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index f878b63e02b..306aca79d13 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -63,7 +63,6 @@ in clickhouse = handleTest ./clickhouse.nix {}; cloud-init = handleTest ./cloud-init.nix {}; cockroachdb = handleTestOn ["x86_64-linux"] ./cockroachdb.nix {}; - codimd = handleTest ./codimd.nix {}; consul = handleTest ./consul.nix {}; containers-bridge = handleTest ./containers-bridge.nix {}; containers-custom-pkgs.nix = handleTest ./containers-custom-pkgs.nix {}; @@ -147,6 +146,7 @@ in handbrake = handleTestOn ["x86_64-linux"] ./handbrake.nix {}; haproxy = handleTest ./haproxy.nix {}; hardened = handleTest ./hardened.nix {}; + hedgedoc = handleTest ./hedgedoc.nix {}; installed-tests = pkgs.recurseIntoAttrs (handleTest ./installed-tests {}); oci-containers = handleTestOn ["x86_64-linux"] ./oci-containers.nix {}; # 9pnet_virtio used to mount /nix partition doesn't support diff --git a/nixos/tests/codimd.nix b/nixos/tests/codimd.nix deleted file mode 100644 index aa581dfeb58..00000000000 --- a/nixos/tests/codimd.nix +++ /dev/null @@ -1,60 +0,0 @@ -import ./make-test-python.nix ({ pkgs, lib, ... }: -{ - name = "codimd"; - - meta = with lib.maintainers; { - maintainers = [ willibutz ]; - }; - - nodes = { - codimdSqlite = { ... }: { - services = { - codimd = { - enable = true; - configuration.dbURL = "sqlite:///var/lib/codimd/codimd.db"; - }; - }; - }; - - codimdPostgres = { ... }: { - systemd.services.codimd.after = [ "postgresql.service" ]; - services = { - codimd = { - enable = true; - configuration.dbURL = "postgres://codimd:\${DB_PASSWORD}@localhost:5432/codimddb"; - - /* - * Do not use pkgs.writeText for secrets as - * they will end up in the world-readable Nix store. - */ - environmentFile = pkgs.writeText "codimd-env" '' - DB_PASSWORD=snakeoilpassword - ''; - }; - postgresql = { - enable = true; - initialScript = pkgs.writeText "pg-init-script.sql" '' - CREATE ROLE codimd LOGIN PASSWORD 'snakeoilpassword'; - CREATE DATABASE codimddb OWNER codimd; - ''; - }; - }; - }; - }; - - testScript = '' - start_all() - - with subtest("CodiMD sqlite"): - codimdSqlite.wait_for_unit("codimd.service") - codimdSqlite.wait_for_open_port(3000) - codimdSqlite.wait_until_succeeds("curl -sSf http://localhost:3000/new") - - with subtest("CodiMD postgres"): - codimdPostgres.wait_for_unit("postgresql.service") - codimdPostgres.wait_for_unit("codimd.service") - codimdPostgres.wait_for_open_port(5432) - codimdPostgres.wait_for_open_port(3000) - codimdPostgres.wait_until_succeeds("curl -sSf http://localhost:3000/new") - ''; -}) diff --git a/nixos/tests/hedgedoc.nix b/nixos/tests/hedgedoc.nix new file mode 100644 index 00000000000..657d49c555e --- /dev/null +++ b/nixos/tests/hedgedoc.nix @@ -0,0 +1,60 @@ +import ./make-test-python.nix ({ pkgs, lib, ... }: +{ + name = "hedgedoc"; + + meta = with lib.maintainers; { + maintainers = [ willibutz ]; + }; + + nodes = { + hedgedocSqlite = { ... }: { + services = { + hedgedoc = { + enable = true; + configuration.dbURL = "sqlite:///var/lib/hedgedoc/hedgedoc.db"; + }; + }; + }; + + hedgedocPostgres = { ... }: { + systemd.services.hedgedoc.after = [ "postgresql.service" ]; + services = { + hedgedoc = { + enable = true; + configuration.dbURL = "postgres://hedgedoc:\${DB_PASSWORD}@localhost:5432/hedgedocdb"; + + /* + * Do not use pkgs.writeText for secrets as + * they will end up in the world-readable Nix store. + */ + environmentFile = pkgs.writeText "hedgedoc-env" '' + DB_PASSWORD=snakeoilpassword + ''; + }; + postgresql = { + enable = true; + initialScript = pkgs.writeText "pg-init-script.sql" '' + CREATE ROLE hedgedoc LOGIN PASSWORD 'snakeoilpassword'; + CREATE DATABASE hedgedocdb OWNER hedgedoc; + ''; + }; + }; + }; + }; + + testScript = '' + start_all() + + with subtest("HedgeDoc sqlite"): + hedgedocSqlite.wait_for_unit("hedgedoc.service") + hedgedocSqlite.wait_for_open_port(3000) + hedgedocSqlite.wait_until_succeeds("curl -sSf http://localhost:3000/new") + + with subtest("HedgeDoc postgres"): + hedgedocPostgres.wait_for_unit("postgresql.service") + hedgedocPostgres.wait_for_unit("hedgedoc.service") + hedgedocPostgres.wait_for_open_port(5432) + hedgedocPostgres.wait_for_open_port(3000) + hedgedocPostgres.wait_until_succeeds("curl -sSf http://localhost:3000/new") + ''; +})