Unverified Commit 059e0f89 authored by Jonas Heinrich's avatar Jonas Heinrich Committed by GitHub
Browse files

Merge pull request #209316 from e1mo/dokuwiki/housekeeping

nixosTests.dokuwiki: Deduplicate node configuration
parents 8552d36e 05510061
Loading
Loading
Loading
Loading
+18 −24
Original line number Diff line number Diff line
@@ -180,18 +180,14 @@ let
          '';
          example = literalExpression ''
                let
                  # Let's package the icalevents plugin
                  plugin-icalevents = pkgs.stdenv.mkDerivation {
                  plugin-icalevents = pkgs.stdenv.mkDerivation rec {
                    name = "icalevents";
                    # Download the plugin from the dokuwiki site
                    src = pkgs.fetchurl {
                      url = "https://github.com/real-or-random/dokuwiki-plugin-icalevents/releases/download/2017-06-16/dokuwiki-plugin-icalevents-2017-06-16.zip";
                      sha256 = "e40ed7dd6bbe7fe3363bbbecb4de481d5e42385b5a0f62f6a6ce6bf3a1f9dfa8";
                    };
                    sourceRoot = ".";
                    # We need unzip to build this package
                    buildInputs = [ pkgs.unzip ];
                    # Installing simply means copying all files to the output directory
                    version = "2017-06-16";
                    src = pkgs.fetchzip {
                      stripRoot = false;
                      url = "https://github.com/real-or-random/dokuwiki-plugin-icalevents/releases/download/''${version}/dokuwiki-plugin-icalevents-''${version}.zip";
                      hash = "sha256-IPs4+qgEfe8AAWevbcCM9PnyI0uoyamtWeg4rEb+9Wc=";
                    };
                    installPhase = "mkdir -p $out; cp -R * $out/";
                  };
                # And then pass this theme to the plugin list like this:
@@ -211,17 +207,15 @@ let
          '';
          example = literalExpression ''
                let
                  # Let's package the bootstrap3 theme
                  template-bootstrap3 = pkgs.stdenv.mkDerivation {
                  template-bootstrap3 = pkgs.stdenv.mkDerivation rec {
                  name = "bootstrap3";
                    # Download the theme from the dokuwiki site
                    src = pkgs.fetchurl {
                      url = "https://github.com/giterlizzi/dokuwiki-template-bootstrap3/archive/v2019-05-22.zip";
                      sha256 = "4de5ff31d54dd61bbccaf092c9e74c1af3a4c53e07aa59f60457a8f00cfb23a6";
                    };
                    # We need unzip to build this package
                    buildInputs = [ pkgs.unzip ];
                    # Installing simply means copying all files to the output directory
                  version = "2022-07-27";
                  src = pkgs.fetchFromGitHub {
                    owner = "giterlizzi";
                    repo = "dokuwiki-template-bootstrap3";
                    rev = "v''${version}";
                    hash = "sha256-B3Yd4lxdwqfCnfmZdp+i/Mzwn/aEuZ0ovagDxuR6lxo=";
                  };
                  installPhase = "mkdir -p $out; cp -R * $out/";
                };
                # And then pass this theme to the template list like this:
@@ -310,8 +304,8 @@ in
          Further nginx configuration can be done by adapting `services.nginx.virtualHosts.<name>`.
          See [](#opt-services.nginx.virtualHosts) for further information.

          Further apache2 configuration can be done by adapting `services.httpd.virtualHosts.<name>`.
          See [](#opt-services.httpd.virtualHosts) for further information.
          Further caddy configuration can be done by adapting `services.caddy.virtualHosts.<name>`.
          See [](#opt-services.caddy.virtualHosts) for further information.
        '';
      };

+64 −61
Original line number Diff line number Diff line
import ./make-test-python.nix ({ pkgs, ... }:

let
  template-bootstrap3 = pkgs.stdenv.mkDerivation {
  template-bootstrap3 = pkgs.stdenv.mkDerivation rec {
    name = "bootstrap3";
    # Download the theme from the dokuwiki site
    src = pkgs.fetchurl {
      url = "https://github.com/giterlizzi/dokuwiki-template-bootstrap3/archive/v2019-05-22.zip";
      sha256 = "4de5ff31d54dd61bbccaf092c9e74c1af3a4c53e07aa59f60457a8f00cfb23a6";
    version = "2022-07-27";
    src = pkgs.fetchFromGitHub {
      owner = "giterlizzi";
      repo = "dokuwiki-template-bootstrap3";
      rev = "v${version}";
      hash = "sha256-B3Yd4lxdwqfCnfmZdp+i/Mzwn/aEuZ0ovagDxuR6lxo=";
    };
    # We need unzip to build this package
    nativeBuildInputs = [ pkgs.unzip ];
    # Installing simply means copying all files to the output directory
    installPhase = "mkdir -p $out; cp -R * $out/";
  };


  # Let's package the icalevents plugin
  plugin-icalevents = pkgs.stdenv.mkDerivation {
  plugin-icalevents = pkgs.stdenv.mkDerivation rec {
    name = "icalevents";
    # Download the plugin from the dokuwiki site
    src = pkgs.fetchurl {
      url = "https://github.com/real-or-random/dokuwiki-plugin-icalevents/releases/download/2017-06-16/dokuwiki-plugin-icalevents-2017-06-16.zip";
      sha256 = "e40ed7dd6bbe7fe3363bbbecb4de481d5e42385b5a0f62f6a6ce6bf3a1f9dfa8";
    version = "2017-06-16";
    src = pkgs.fetchzip {
      stripRoot = false;
      url = "https://github.com/real-or-random/dokuwiki-plugin-icalevents/releases/download/${version}/dokuwiki-plugin-icalevents-${version}.zip";
      hash = "sha256-IPs4+qgEfe8AAWevbcCM9PnyI0uoyamtWeg4rEb+9Wc=";
    };
    # We need unzip to build this package
    nativeBuildInputs = [ pkgs.unzip ];
    sourceRoot = ".";
    # Installing simply means copying all files to the output directory
    installPhase = "mkdir -p $out; cp -R * $out/";
  };

in {
  name = "dokuwiki";
  meta = with pkgs.lib; {
    maintainers = with maintainers; [
      _1000101
      onny
    ];
  };
  acronymsFile = pkgs.writeText "acronyms.local.conf" ''
    r13y  reproducibility
  '';

  nodes = {
    dokuwiki_nginx = {...}: {
  dwWithAcronyms = pkgs.dokuwiki.overrideAttrs (prev: {
    installPhase = prev.installPhase or "" + ''
      ln -sf ${acronymsFile} $out/share/dokuwiki/conf/acronyms.local.conf
    '';
  });

  mkNode = webserver: { ... }: {
    services.dokuwiki = {
      inherit webserver;

      sites = {
        "site1.local" = {
          aclUse = false;
          superUser = "admin";
        };
        "site2.local" = {
          package = dwWithAcronyms;
          usersFile = "/var/lib/dokuwiki/site2.local/users.auth.php";
          superUser = "admin";
          templates = [ template-bootstrap3 ];
@@ -60,27 +58,18 @@ in {
    networking.hosts."127.0.0.1" = [ "site1.local" "site2.local" ];
  };

    dokuwiki_caddy = {...}: {
      services.dokuwiki = {
        webserver = "caddy";
        sites = {
          "site1.local" = {
            aclUse = false;
            superUser = "admin";
          };
          "site2.local" = {
            usersFile = "/var/lib/dokuwiki/site2.local/users.auth.php";
            superUser = "admin";
            templates = [ template-bootstrap3 ];
            plugins = [ plugin-icalevents ];
          };
        };
      };

      networking.firewall.allowedTCPPorts = [ 80 ];
      networking.hosts."127.0.0.1" = [ "site1.local" "site2.local" ];
in {
  name = "dokuwiki";
  meta = with pkgs.lib; {
    maintainers = with maintainers; [
      _1000101
      onny
    ];
  };

  nodes = {
    dokuwiki_nginx = mkNode "nginx";
    dokuwiki_caddy = mkNode "caddy";
  };

  testScript = ''
@@ -102,10 +91,24 @@ in {
        machine.succeed("curl -sSfL http://site2.local/ | grep 'DokuWiki'")
        machine.succeed("curl -sSfL 'http://site2.local/doku.php?do=login' | grep 'Login'")

        with subtest("ACL Operations"):
          machine.succeed(
            "echo 'admin:$2y$10$ijdBQMzSVV20SrKtCna8gue36vnsbVm2wItAXvdm876sshI4uwy6S:Admin:admin@example.test:user' >> /var/lib/dokuwiki/site2.local/users.auth.php",
            "curl -sSfL -d 'u=admin&p=password' --cookie-jar cjar 'http://site2.local/doku.php?do=login'",
            "curl -sSfL --cookie cjar --cookie-jar cjar 'http://site2.local/doku.php?do=login' | grep 'Logged in as: <bdi>Admin</bdi>'",
          )

        with subtest("Customizing Dokuwiki"):
          machine.succeed(
            "echo 'r13y is awesome!' >> /var/lib/dokuwiki/site2.local/data/pages/acronyms-test.txt",
            "curl -sSfL 'http://site2.local/doku.php?id=acronyms-test' | grep '<abbr title=\"reproducibility\">r13y</abbr>'",
          )

        # Just to ensure both Webserver configurations are consistent in allowing that
        with subtest("Rewriting"):
          machine.succeed(
            "echo 'Hello, NixOS!' >> /var/lib/dokuwiki/site1.local/data/pages/rewrite-test.txt",
            "curl -sSfL http://site1.local/rewrite-test | grep 'Hello, NixOS!'",
          )
  '';
})