mattermost: 10.11.15 -> 11.6.1 (#513665)
This commit is contained in:
@@ -182,6 +182,9 @@
|
||||
|
||||
- `services.uptime` has been removed because the package it relies on does not exist anymore in nixpkgs.
|
||||
|
||||
- `services.mattermost` now defaults to version 11, which has dropped support for MySQL in favor of Postgres. As a result, all support for MySQL has been removed from the module.
|
||||
See the [migration steps](https://docs.mattermost.com/deployment-guide/manual-postgres-migration.html) if you were not running Postgres.
|
||||
|
||||
- `post-resume.target` has been removed. See {manpage}`systemd.special(7)` about `sleep.target` for instructions on ordering a process after resume with `ExecStop=`.
|
||||
|
||||
- `services.kubernetes.addons.dns.coredns` has been renamed to `services.kubernetes.addons.dns.corednsImage` and now expects a
|
||||
|
||||
@@ -27,9 +27,9 @@ let
|
||||
|
||||
inherit (lib.modules)
|
||||
mkRenamedOptionModule
|
||||
mkRemovedOptionModule
|
||||
mkMerge
|
||||
mkIf
|
||||
mkDefault
|
||||
;
|
||||
|
||||
inherit (lib.trivial) warnIf throwIf;
|
||||
@@ -55,10 +55,13 @@ let
|
||||
# Ensure that it's inside mutableDataDir since it can get rather large.
|
||||
tempDir = "${mutableDataDir}/tmp";
|
||||
|
||||
# Database supported by Mattermost.
|
||||
databaseDriverName = "postgres";
|
||||
|
||||
# Creates a database URI.
|
||||
mkDatabaseUri =
|
||||
{
|
||||
scheme,
|
||||
scheme ? databaseDriverName,
|
||||
user ? null,
|
||||
password ? null,
|
||||
escapeUserAndPassword ? true,
|
||||
@@ -105,54 +108,24 @@ let
|
||||
let
|
||||
hostIsPath = hasInfix "/" cfg.database.host;
|
||||
in
|
||||
if cfg.database.driver == "postgres" then
|
||||
if cfg.database.peerAuth then
|
||||
mkDatabaseUri {
|
||||
scheme = cfg.database.driver;
|
||||
inherit (cfg.database) user;
|
||||
path = escapeURL cfg.database.name;
|
||||
query = {
|
||||
host = cfg.database.socketPath;
|
||||
}
|
||||
// cfg.database.extraConnectionOptions;
|
||||
}
|
||||
else
|
||||
mkDatabaseUri {
|
||||
scheme = cfg.database.driver;
|
||||
inherit (cfg.database) user password;
|
||||
host = if hostIsPath then null else cfg.database.host;
|
||||
port = if hostIsPath then null else cfg.database.port;
|
||||
path = escapeURL cfg.database.name;
|
||||
query =
|
||||
optionalAttrs hostIsPath { host = cfg.database.host; } // cfg.database.extraConnectionOptions;
|
||||
}
|
||||
else if cfg.database.driver == "mysql" then
|
||||
if cfg.database.peerAuth then
|
||||
mkDatabaseUri {
|
||||
scheme = null;
|
||||
inherit (cfg.database) user;
|
||||
escapeUserAndPassword = false;
|
||||
host = "unix(${cfg.database.socketPath})";
|
||||
escapeHost = false;
|
||||
path = escapeURL cfg.database.name;
|
||||
query = cfg.database.extraConnectionOptions;
|
||||
}
|
||||
else
|
||||
mkDatabaseUri {
|
||||
scheme = null;
|
||||
inherit (cfg.database) user password;
|
||||
escapeUserAndPassword = false;
|
||||
host =
|
||||
if hostIsPath then
|
||||
"unix(${cfg.database.host})"
|
||||
else
|
||||
"tcp(${cfg.database.host}:${toString cfg.database.port})";
|
||||
escapeHost = false;
|
||||
path = escapeURL cfg.database.name;
|
||||
query = cfg.database.extraConnectionOptions;
|
||||
if cfg.database.peerAuth then
|
||||
mkDatabaseUri {
|
||||
inherit (cfg.database) user;
|
||||
path = escapeURL cfg.database.name;
|
||||
query = {
|
||||
host = cfg.database.socketPath;
|
||||
}
|
||||
// cfg.database.extraConnectionOptions;
|
||||
}
|
||||
else
|
||||
throw "Invalid database driver: ${cfg.database.driver}";
|
||||
mkDatabaseUri {
|
||||
inherit (cfg.database) user password;
|
||||
host = if hostIsPath then null else cfg.database.host;
|
||||
port = if hostIsPath then null else cfg.database.port;
|
||||
path = escapeURL cfg.database.name;
|
||||
query =
|
||||
optionalAttrs hostIsPath { host = cfg.database.host; } // cfg.database.extraConnectionOptions;
|
||||
};
|
||||
|
||||
mattermostPluginDerivations = map (
|
||||
plugin:
|
||||
@@ -213,7 +186,7 @@ let
|
||||
EnableSecurityFixAlert = cfg.telemetry.enableSecurityAlerts;
|
||||
};
|
||||
TeamSettings.SiteName = cfg.siteName;
|
||||
SqlSettings.DriverName = cfg.database.driver;
|
||||
SqlSettings.DriverName = databaseDriverName;
|
||||
SqlSettings.DataSource =
|
||||
if cfg.database.fromEnvironment then
|
||||
null
|
||||
@@ -358,6 +331,11 @@ in
|
||||
"dataDir"
|
||||
]
|
||||
)
|
||||
(mkRemovedOptionModule [ "services" "mattermost" "database" "driver" ] ''
|
||||
services.mattermost.database.driver has been removed, as the only option is '${databaseDriverName}' in v11+.
|
||||
If you were using MySQL, please migrate to Postgres:
|
||||
https://docs.mattermost.com/deployment-guide/manual-postgres-migration.html
|
||||
'')
|
||||
];
|
||||
|
||||
options = {
|
||||
@@ -558,22 +536,11 @@ in
|
||||
};
|
||||
|
||||
database = {
|
||||
driver = mkOption {
|
||||
type = types.enum [
|
||||
"postgres"
|
||||
"mysql"
|
||||
];
|
||||
default = "postgres";
|
||||
description = ''
|
||||
The database driver to use (Postgres or MySQL).
|
||||
'';
|
||||
};
|
||||
|
||||
create = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Create a local PostgreSQL or MySQL database for Mattermost automatically.
|
||||
Create a local PostgreSQL database for Mattermost automatically.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -591,13 +558,9 @@ in
|
||||
|
||||
socketPath = mkOption {
|
||||
type = types.path;
|
||||
default =
|
||||
if cfg.database.driver == "postgres" then "/run/postgresql" else "/run/mysqld/mysqld.sock";
|
||||
defaultText = ''
|
||||
if config.services.mattermost.database.driver == "postgres" then "/run/postgresql" else "/run/mysqld/mysqld.sock";
|
||||
'';
|
||||
default = "/run/postgresql";
|
||||
description = ''
|
||||
The database (Postgres or MySQL) socket path.
|
||||
The database socket path.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -630,11 +593,8 @@ in
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = if cfg.database.driver == "postgres" then 5432 else 3306;
|
||||
defaultText = ''
|
||||
if config.services.mattermost.database.type == "postgres" then 5432 else 3306
|
||||
'';
|
||||
example = 3306;
|
||||
default = 5432;
|
||||
example = 1234;
|
||||
description = ''
|
||||
Port to use for the database.
|
||||
'';
|
||||
@@ -660,34 +620,15 @@ in
|
||||
|
||||
extraConnectionOptions = mkOption {
|
||||
type = with types; attrsOf (either int str);
|
||||
default =
|
||||
if cfg.database.driver == "postgres" then
|
||||
{
|
||||
sslmode = "disable";
|
||||
connect_timeout = 60;
|
||||
}
|
||||
else if cfg.database.driver == "mysql" then
|
||||
{
|
||||
charset = "utf8mb4";
|
||||
writeTimeout = "60s";
|
||||
readTimeout = "60s";
|
||||
}
|
||||
else
|
||||
throw "Invalid database driver ${cfg.database.driver}";
|
||||
default = {
|
||||
sslmode = "disable";
|
||||
connect_timeout = 60;
|
||||
};
|
||||
defaultText = ''
|
||||
if config.mattermost.database.driver == "postgres" then
|
||||
{
|
||||
sslmode = "disable";
|
||||
connect_timeout = 60;
|
||||
}
|
||||
else if config.mattermost.database.driver == "mysql" then
|
||||
{
|
||||
charset = "utf8mb4";
|
||||
writeTimeout = "60s";
|
||||
readTimeout = "60s";
|
||||
}
|
||||
else
|
||||
throw "Invalid database driver";
|
||||
{
|
||||
sslmode = "disable";
|
||||
connect_timeout = 60;
|
||||
}
|
||||
'';
|
||||
description = ''
|
||||
Extra options that are placed in the connection URI's query parameters.
|
||||
@@ -756,7 +697,7 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
services.postgresql = mkIf (cfg.database.driver == "postgres" && cfg.database.create) {
|
||||
services.postgresql = mkIf cfg.database.create {
|
||||
enable = true;
|
||||
ensureDatabases = singleton cfg.database.name;
|
||||
ensureUsers = singleton {
|
||||
@@ -772,26 +713,6 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
services.mysql = mkIf (cfg.database.driver == "mysql" && cfg.database.create) {
|
||||
enable = true;
|
||||
package = mkDefault pkgs.mariadb;
|
||||
ensureDatabases = singleton cfg.database.name;
|
||||
ensureUsers = singleton {
|
||||
name = cfg.database.user;
|
||||
ensurePermissions = {
|
||||
"${cfg.database.name}.*" = "ALL PRIVILEGES";
|
||||
};
|
||||
};
|
||||
settings = rec {
|
||||
mysqld = {
|
||||
collation-server = mkDefault "utf8mb4_general_ci";
|
||||
init-connect = mkDefault "SET NAMES utf8mb4";
|
||||
character-set-server = mkDefault "utf8mb4";
|
||||
};
|
||||
mysqld_safe = mysqld;
|
||||
};
|
||||
};
|
||||
|
||||
environment = {
|
||||
variables = mkIf cfg.socket.export {
|
||||
MMCTL_LOCAL = "true";
|
||||
@@ -840,8 +761,7 @@ in
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = mkMerge [
|
||||
[ "network.target" ]
|
||||
(mkIf (cfg.database.driver == "postgres" && cfg.database.create) [ "postgresql.target" ])
|
||||
(mkIf (cfg.database.driver == "mysql" && cfg.database.create) [ "mysql.service" ])
|
||||
(mkIf cfg.database.create [ "postgresql.target" ])
|
||||
];
|
||||
requires = after;
|
||||
|
||||
@@ -945,8 +865,7 @@ in
|
||||
];
|
||||
|
||||
unitConfig.JoinsNamespaceOf = mkMerge [
|
||||
(mkIf (cfg.database.driver == "postgres" && cfg.database.create) [ "postgresql.target" ])
|
||||
(mkIf (cfg.database.driver == "mysql" && cfg.database.create) [ "mysql.service" ])
|
||||
(mkIf cfg.database.create [ "postgresql.target" ])
|
||||
];
|
||||
};
|
||||
|
||||
@@ -966,13 +885,6 @@ in
|
||||
or hostname, and services.mattermost.port to specify the port separately.
|
||||
'';
|
||||
}
|
||||
{
|
||||
# Can't use MySQL on version 11.
|
||||
assertion = versionAtLeast cfg.package.version "11" -> cfg.database.driver == "postgres";
|
||||
message = ''
|
||||
Only Postgres is supported as the database driver in Mattermost 11 and later.
|
||||
'';
|
||||
}
|
||||
];
|
||||
})
|
||||
(mkIf cfg.matterircd.enable {
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
buildGoModule,
|
||||
fetchFromGitHub,
|
||||
buildNpmPackage,
|
||||
nodejs_22,
|
||||
nodejs,
|
||||
nix-update-script,
|
||||
npm-lockfile-fix,
|
||||
fetchNpmDeps,
|
||||
@@ -13,20 +13,21 @@
|
||||
nixosTests,
|
||||
|
||||
versionInfo ? {
|
||||
# ESR releases only.
|
||||
# See https://docs.mattermost.com/upgrade/extended-support-release.html
|
||||
# ESR releases only. Note: if NixOS would release with an ESR that goes out
|
||||
# of support during the lifetime of the NixOS release, it is acceptable
|
||||
# to put the latest non-ESR release here if we change it to an ESR shortly after
|
||||
# the NixOS release.
|
||||
#
|
||||
# See <https://docs.mattermost.com/upgrade/extended-support-release.html>.
|
||||
# When a new ESR version is available (e.g. 8.1.x -> 9.5.x), update
|
||||
# the version regex here as well.
|
||||
#
|
||||
# Ensure you also check ../mattermostLatest/package.nix.
|
||||
regex = "^v(10\\.11\\.[0-9]+)$";
|
||||
version = "10.11.15";
|
||||
srcHash = "sha256-b/hXZHYULl9nNJZT4GtKsaOfX8BEzz/v3Uy3EEbzN8U=";
|
||||
vendorHash = "sha256-Z94d1eCIkuMG72Mlvk5su/99+4kJoaeHxaeZuk96Hlc=";
|
||||
npmDepsHash = "sha256-p9dq31qw0EZDQIl2ysKE38JgDyLA6XvSv+VtHuRh+8A=";
|
||||
lockfileOverlay = ''
|
||||
unlock(.; "@floating-ui/react"; "channels/node_modules/@floating-ui/react")
|
||||
'';
|
||||
regex = "^v(11\\.[67]\\.[0-9]+)$";
|
||||
version = "11.6.1";
|
||||
srcHash = "sha256-0TUh5qKi64jt3YhgCTceoizOGzqyt70Rh8VH+bSfS5o=";
|
||||
vendorHash = "sha256-bWl1rdVRTOJzS2HKKsSRhzVcH1sPgEAlRLjrc+/o0lo=";
|
||||
npmDepsHash = "sha256-30xwoizNh6fAWS0YdEheXtcO6I9MjoFdCekvLnnoBMc=";
|
||||
},
|
||||
...
|
||||
}:
|
||||
@@ -223,9 +224,7 @@ buildMattermost rec {
|
||||
--replace-fail 'options: {}' 'options: { disable: true }'
|
||||
'';
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/issues/474535
|
||||
nodejs = nodejs_22;
|
||||
|
||||
inherit nodejs;
|
||||
npmDepsHash = npmDeps.hash;
|
||||
makeCacheWritable = true;
|
||||
forceGitDeps = true;
|
||||
@@ -235,10 +234,9 @@ buildMattermost rec {
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
npm run build --workspace=platform/types
|
||||
npm run build --workspace=platform/client
|
||||
npm run build --workspace=platform/components
|
||||
npm run build --workspace=channels
|
||||
for ws in platform/{types,client,components,shared} channels; do
|
||||
npm run build --workspace="$ws"
|
||||
done
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
gotestsum,
|
||||
which,
|
||||
postgresql,
|
||||
mariadb,
|
||||
redis,
|
||||
curl,
|
||||
net-tools,
|
||||
@@ -20,7 +19,6 @@ mattermost.overrideAttrs (
|
||||
nativeCheckInputs = [
|
||||
which
|
||||
postgresql
|
||||
mariadb
|
||||
redis
|
||||
curl
|
||||
net-tools
|
||||
@@ -113,11 +111,6 @@ mattermost.overrideAttrs (
|
||||
fi
|
||||
}
|
||||
|
||||
# Waits for MySQL to come up or down.
|
||||
wait_mysql() {
|
||||
wait_cmd mysql "$1" mysqladmin ping
|
||||
}
|
||||
|
||||
# Waits for Postgres to come up or down.
|
||||
wait_postgres() {
|
||||
wait_cmd postgres "$1" pg_isready -h localhost
|
||||
@@ -128,33 +121,6 @@ mattermost.overrideAttrs (
|
||||
wait_cmd redis "$1" redis-cli ping
|
||||
}
|
||||
|
||||
# Starts MySQL.
|
||||
start_mysql() {
|
||||
echo "Starting MySQL at $MYSQL_HOME" >&2
|
||||
mysqld &
|
||||
mysql_pid=$!
|
||||
echo "... PID $mysql_pid" >&2
|
||||
wait_mysql up
|
||||
}
|
||||
|
||||
# Stops MySQL.
|
||||
stop_mysql() {
|
||||
if [ "$mysql_pid" -gt 0 ]; then
|
||||
echo "Terminating MySQL at $MYSQL_HOME (PID $mysql_pid)" >&2
|
||||
mysqladmin --host=127.0.0.1 --user=root --password=mostest --wait-for-all-slaves --shutdown-timeout=30 shutdown
|
||||
wait_mysql down
|
||||
wait_cmd 'mysql pid' down kill -0 "$mysql_pid"
|
||||
|
||||
# Make sure the worker PID went down too (but it may be already gone).
|
||||
local worker_pid="$(<"$MYSQL_HOME"/mysqld.pid || echo 0)"
|
||||
if [ -n "$worker_pid" ] && [ $worker_pid -gt 0 ]; then
|
||||
wait_cmd 'mysql workers' down kill -0 "$worker_pid"
|
||||
fi
|
||||
|
||||
mysql_pid=0
|
||||
fi
|
||||
}
|
||||
|
||||
# Starts Postgres.
|
||||
start_postgres() {
|
||||
echo "Starting Postgres at $PGDATA" >&2
|
||||
@@ -186,52 +152,6 @@ mattermost.overrideAttrs (
|
||||
redis_pid=0
|
||||
}
|
||||
|
||||
# Configure MySQL.
|
||||
export MYSQL_HOME="$NIX_BUILD_TOP/.mysql"
|
||||
mkdir -p "$MYSQL_HOME"
|
||||
cat <<EOF >"$MYSQL_HOME/my.cnf"
|
||||
[client]
|
||||
port = 3306
|
||||
default-character-set = utf8mb4
|
||||
socket = $MYSQL_HOME/mysqld.sock
|
||||
|
||||
[mysqld]
|
||||
skip-host-cache
|
||||
skip-name-resolve
|
||||
basedir = ${mariadb}
|
||||
datadir = $MYSQL_HOME/
|
||||
pid-file = $MYSQL_HOME/mysqld.pid
|
||||
socket = $MYSQL_HOME/mysqld.sock
|
||||
port = 3306
|
||||
explicit_defaults_for_timestamp
|
||||
collation-server = utf8mb4_general_ci
|
||||
init-connect = 'SET NAMES utf8mb4'
|
||||
character-set-server = utf8mb4
|
||||
EOF
|
||||
|
||||
# Start MySQL.
|
||||
mysql_install_db --skip-name-resolve --auth-root-authentication-method=normal
|
||||
start_mysql
|
||||
|
||||
# Init MySQL.
|
||||
cat <<EOF | mysql --defaults-file="$MYSQL_HOME/my.cnf" -u root -v
|
||||
-- This is the admin password for tests; see the docker-compose:
|
||||
-- https://github.com/mattermost/mattermost/blob/v${final.version}/server/docker-compose.yaml
|
||||
create user if not exists 'mmuser' identified by 'mostest';
|
||||
create database if not exists mattermost_test;
|
||||
grant all privileges on *.* to 'mmuser' with grant option;
|
||||
|
||||
-- Also need to set up root (tests seem to override the user to root)
|
||||
alter user 'root'@'127.0.0.1' identified by 'mostest';
|
||||
|
||||
flush privileges;
|
||||
show grants for 'root'@'127.0.0.1';
|
||||
show grants for 'mmuser';
|
||||
EOF
|
||||
|
||||
# Need to change this so we use 127.0.0.1 in tests.
|
||||
export TEST_DATABASE_MYSQL_DSN='root:mostest@tcp(127.0.0.1:3306)/mattermost_test?charset=utf8mb4&readTimeout=30s&writeTimeout=30s'
|
||||
|
||||
# Start Postgres.
|
||||
export PGDATA="$NIX_BUILD_TOP/.postgres"
|
||||
initdb -E UTF8 -U postgres
|
||||
@@ -284,12 +204,6 @@ mattermost.overrideAttrs (
|
||||
'';
|
||||
|
||||
postCheck = ''
|
||||
# Clean up MySQL.
|
||||
if [ -d "$MYSQL_HOME" ]; then
|
||||
stop_mysql
|
||||
rm -rf "$MYSQL_HOME"
|
||||
fi
|
||||
|
||||
# Clean up Postgres.
|
||||
if [ -d "$PGDATA" ]; then
|
||||
stop_postgres
|
||||
|
||||
@@ -3,25 +3,4 @@
|
||||
...
|
||||
}@args:
|
||||
|
||||
mattermost.override (
|
||||
{
|
||||
versionInfo = {
|
||||
# Latest, non-RC releases only.
|
||||
# If the latest is an ESR (Extended Support Release),
|
||||
# duplicate it here to facilitate the update script.
|
||||
# See https://docs.mattermost.com/about/mattermost-server-releases.html
|
||||
# and make sure the version regex is up to date here.
|
||||
# Ensure you also check ../mattermost/package.nix for ESR releases.
|
||||
regex = "^v(11\\.[0-9]+\\.[0-9]+)$";
|
||||
version = "11.5.3";
|
||||
srcHash = "sha256-r7rfiQ4C0E511QWdpQihydsuoRZCzboodmh1iT4a8r4=";
|
||||
vendorHash = "sha256-/ts6j86tvbYFjVACkJwcSnXDd+8BXzpaFVdV9DRHkqY=";
|
||||
npmDepsHash = "sha256-r7iq1pCAJjFyspZBdeNWe00W7A3l73PGC6rrsZ7O6Uw=";
|
||||
lockfileOverlay = ''
|
||||
unlock(.; "@floating-ui/react"; "channels/node_modules/@floating-ui/react")
|
||||
'';
|
||||
autoUpdate = ./package.nix;
|
||||
};
|
||||
}
|
||||
// args
|
||||
)
|
||||
mattermost.override args
|
||||
|
||||
Reference in New Issue
Block a user