From 3a195d2881b293b5cf0cf21c0979bcdff9285662 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Sun, 12 Apr 2026 14:18:59 +0200 Subject: [PATCH] nixosTests.lasuite-docs: replace minio with garage --- nixos/tests/web-apps/lasuite-docs.nix | 68 +++++++++++++++------------ 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/nixos/tests/web-apps/lasuite-docs.nix b/nixos/tests/web-apps/lasuite-docs.nix index 42629ebba9d6..d57a9158779d 100644 --- a/nixos/tests/web-apps/lasuite-docs.nix +++ b/nixos/tests/web-apps/lasuite-docs.nix @@ -1,11 +1,11 @@ { lib, ... }: let domain = "docs.local"; - oidcDomain = "127.0.0.1:8080"; - s3Domain = "127.0.0.1:9000"; + oidcAddr = "127.0.0.1:8080"; + s3Addr = "127.0.0.1:9000"; - minioAccessKey = "a8dff633d164068418a5"; - minioSecretKey = "d546ea5f9c9bfdcf83755a7c09f2f7fb"; + garageAccessKey = "GKaaaaaaaaaaaaaaaaaaaaaaaa"; + garageSecretKey = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; in { @@ -24,7 +24,6 @@ in environment.systemPackages = with pkgs; [ jq - minio-client ]; services.lasuite-docs = { @@ -34,17 +33,17 @@ in postgresql.createLocally = true; inherit domain; - s3Url = "http://${s3Domain}/lasuite-docs"; + s3Url = "http://${s3Addr}/lasuite-docs"; settings = { DJANGO_SECRET_KEY_FILE = pkgs.writeText "django-secret-file" '' 8540db59c03943d48c3ed1a0f96ce3b560e0f45274f120f7ee4dace3cc366a6b ''; - OIDC_OP_JWKS_ENDPOINT = "http://${oidcDomain}/dex/keys"; - OIDC_OP_AUTHORIZATION_ENDPOINT = "http://${oidcDomain}/dex/auth/mock"; - OIDC_OP_TOKEN_ENDPOINT = "http://${oidcDomain}/dex/token"; - OIDC_OP_USER_ENDPOINT = "http://${oidcDomain}/dex/userinfo"; + OIDC_OP_JWKS_ENDPOINT = "http://${oidcAddr}/dex/keys"; + OIDC_OP_AUTHORIZATION_ENDPOINT = "http://${oidcAddr}/dex/auth/mock"; + OIDC_OP_TOKEN_ENDPOINT = "http://${oidcAddr}/dex/token"; + OIDC_OP_USER_ENDPOINT = "http://${oidcAddr}/dex/userinfo"; OIDC_RP_CLIENT_ID = "lasuite-docs"; OIDC_RP_SIGN_ALGO = "RS256"; OIDC_RP_SCOPES = "openid email"; @@ -54,9 +53,9 @@ in LOGIN_REDIRECT_URL_FAILURE = "http://${domain}"; LOGOUT_REDIRECT_URL = "http://${domain}"; - AWS_S3_ENDPOINT_URL = "http://${s3Domain}"; - AWS_S3_ACCESS_KEY_ID = minioAccessKey; - AWS_S3_SECRET_ACCESS_KEY = minioSecretKey; + AWS_S3_ENDPOINT_URL = "http://${s3Addr}"; + AWS_S3_ACCESS_KEY_ID = garageAccessKey; + AWS_S3_SECRET_ACCESS_KEY = garageSecretKey; AWS_STORAGE_BUCKET_NAME = "lasuite-docs"; MEDIA_BASE_URL = "http://${domain}"; @@ -72,7 +71,7 @@ in services.dex = { enable = true; settings = { - issuer = "http://${oidcDomain}/dex"; + issuer = "http://${oidcAddr}/dex"; storage = { type = "postgres"; config.host = "/var/run/postgresql"; @@ -101,25 +100,27 @@ in }; }; - services.minio = { + services.garage = { enable = true; - rootCredentialsFile = "/etc/minio/minio-root-credentials"; - }; + package = pkgs.garage_2; + settings = { + rpc_bind_addr = "127.0.0.1:3901"; + rpc_public_addr = "127.0.0.1:3901"; + rpc_secret = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + replication_factor = 1; + s3_api = { + s3_region = "garage"; + api_bind_addr = s3Addr; + }; + }; + }; environment.etc."dex/lasuite-docs" = { mode = "0400"; user = "dex"; text = "lasuitedocsclientsecret"; }; - environment.etc."minio/minio-root-credentials" = { - mode = "0400"; - text = '' - MINIO_ROOT_USER=${minioAccessKey} - MINIO_ROOT_PASSWORD=${minioSecretKey} - ''; - }; - services.postgresql = { enable = true; ensureDatabases = [ "dex" ]; @@ -135,25 +136,30 @@ in testScript = '' with subtest("Wait for units to start"): machine.wait_for_unit("dex.service") - machine.wait_for_unit("minio.service") + machine.wait_for_unit("garage.service") machine.wait_for_unit("lasuite-docs.service") machine.wait_for_unit("lasuite-docs-celery.service") machine.wait_for_unit("lasuite-docs-collaboration-server.service") with subtest("Create S3 bucket"): - machine.succeed("mc alias set minio http://${s3Domain} ${minioAccessKey} ${minioSecretKey} --api s3v4") - machine.succeed("mc mb lasuite-docs") + machine.wait_for_open_port(3901) + garage_node_id = machine.succeed("garage status | tail -n1 | awk '{ print $1 }'") + machine.succeed(f"garage layout assign -c 100MB -z garage {garage_node_id}") + machine.succeed("garage layout apply --version 1") + machine.succeed("garage key import ${garageAccessKey} ${garageSecretKey} --yes") + machine.succeed("garage bucket create lasuite-docs") + machine.succeed("garage bucket allow --read --write --owner lasuite-docs --key ${garageAccessKey}") with subtest("Wait for web servers to start"): machine.wait_until_succeeds("curl -fs 'http://${domain}/api/v1.0/authenticate/'", timeout=120) - machine.wait_until_succeeds("curl -fs '${oidcDomain}/dex/auth/mock?client_id=lasuite-docs&response_type=code&redirect_uri=http://${domain}/api/v1.0/callback/&scope=openid'", timeout=120) + machine.wait_until_succeeds("curl -fs '${oidcAddr}/dex/auth/mock?client_id=lasuite-docs&response_type=code&redirect_uri=http://${domain}/api/v1.0/callback/&scope=openid'", timeout=120) with subtest("Login"): state, nonce = machine.succeed("curl -fs -c cjar 'http://${domain}/api/v1.0/authenticate/' -w '%{redirect_url}' | sed -n 's/.*state=\\(.*\\)&nonce=\\(.*\\)/\\1 \\2/p'").strip().split(' ') - oidc_state = machine.succeed(f"curl -fs '${oidcDomain}/dex/auth/mock?client_id=lasuite-docs&response_type=code&redirect_uri=http://${domain}/api/v1.0/callback/&scope=openid+email&state={state}&nonce={nonce}' | sed -n 's/.*state=\\(.*\\)\">.*/\\1/p'").strip() + oidc_state = machine.succeed(f"curl -fs '${oidcAddr}/dex/auth/mock?client_id=lasuite-docs&response_type=code&redirect_uri=http://${domain}/api/v1.0/callback/&scope=openid+email&state={state}&nonce={nonce}' | sed -n 's/.*state=\\(.*\\)\">.*/\\1/p'").strip() - code = machine.succeed(f"curl -fs '${oidcDomain}/dex/auth/mock/login?back=&state={oidc_state}' -d 'login=admin&password=password' -w '%{{redirect_url}}' | sed -n 's/.*code=\\(.*\\)&.*/\\1/p'").strip() + code = machine.succeed(f"curl -fs '${oidcAddr}/dex/auth/mock/login?back=&state={oidc_state}' -d 'login=admin&password=password' -w '%{{redirect_url}}' | sed -n 's/.*code=\\(.*\\)&.*/\\1/p'").strip() print(f"Got approval code {code}") machine.succeed(f"curl -fs -c cjar -b cjar 'http://${domain}/api/v1.0/callback/?code={code}&state={state}'")