]> git.immae.eu Git - perso/Immae/Config/Nix.git/commitdiff
Move mastodon to pkgs
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Fri, 3 May 2019 16:43:16 +0000 (18:43 +0200)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Fri, 3 May 2019 16:43:16 +0000 (18:43 +0200)
nixops/modules/websites/tools/mastodon/default.nix
nixops/modules/websites/tools/mastodon/mastodon.nix
pkgs/default.nix
pkgs/webapps/mastodon/default.nix [new file with mode: 0644]
pkgs/webapps/mastodon/gemset.nix [moved from nixops/modules/websites/tools/mastodon/gemset.nix with 100% similarity]
pkgs/webapps/mastodon/mastodon.json [moved from nixops/modules/websites/tools/mastodon/mastodon.json with 100% similarity]
pkgs/webapps/mastodon/yarn-packages.nix [moved from nixops/modules/websites/tools/mastodon/yarn-packages.nix with 100% similarity]

index a3f2364ee0cdfcbb2e6add96ff889ad09a6f2cff..919bac2a148b5f078a8838048b564de9b259bb48 100644 (file)
@@ -1,7 +1,7 @@
 { lib, pkgs, config, myconfig, mylibs, ... }:
 let
   mastodon = pkgs.callPackage ./mastodon.nix {
 { lib, pkgs, config, myconfig, mylibs, ... }:
 let
   mastodon = pkgs.callPackage ./mastodon.nix {
-    inherit (mylibs) fetchedGithub yarn2nixPackage;
+    inherit (pkgs.webapps) mastodon;
     env = myconfig.env.tools.mastodon;
   };
 
     env = myconfig.env.tools.mastodon;
   };
 
index 67d4d48b01230351ce5b21f599b4f5c0789b44dc..83e3a54d97c5d6dc472f85267a806b07f1ceea46 100644 (file)
@@ -1,66 +1,7 @@
-{ env, ruby_2_6, bundlerEnv, defaultGemConfig, yarn2nixPackage, fetchedGithub, stdenv, writeText, pkgs }:
+{ env, mastodon }:
 let
   varDir = "/var/lib/mastodon_immae";
   socketsDir = "/run/mastodon";
 let
   varDir = "/var/lib/mastodon_immae";
   socketsDir = "/run/mastodon";
-  gems = bundlerEnv {
-    name = "mastodon-env";
-    ruby = ruby_2_6;
-    gemset = ./gemset.nix;
-    gemdir = (fetchedGithub ./mastodon.json).src;
-    groups = [ "default" "production" "test" "development" ];
-    gemConfig = defaultGemConfig // {
-      redis-rack = attrs: {
-        preBuild = ''
-          sed -i 's!s\.files.*!!' redis-rack.gemspec
-          '';
-      };
-      tzinfo = attrs: {
-        preBuild = ''
-          sed -i 's!s\.files.*!!' tzinfo.gemspec
-          '';
-      };
-      cld3 = attrs: {
-        buildInputs = with pkgs; [ protobuf protobufc pkgconfig ];
-      };
-      idn-ruby = attrs: {
-        buildInputs = with pkgs; [ libidn ];
-      };
-      rpam2 = attrs: {
-        buildInputs = with pkgs; [ pam ];
-      };
-    };
-  };
-  yarnModules = let
-      info = fetchedGithub ./mastodon.json;
-      packagejson = pkgs.runCommand "package.json" { buildInputs = [ pkgs.jq ]; } ''
-        cat ${info.src}/package.json | jq -r '.version = "${info.version}"' > $out
-        '';
-    in
-      yarn2nixPackage.mkYarnModules rec {
-        name = "mastodon-yarn";
-        pname = name;
-        version = info.version;
-        packageJSON = packagejson;
-        yarnLock = "${info.src}/yarn.lock";
-        yarnNix = ./yarn-packages.nix;
-        pkgConfig = {
-          all = {
-            buildInputs = [ yarn2nixPackage.src ];
-          };
-          uws = {
-            postInstall = ''
-              npx node-gyp rebuild > build_log.txt 2>&1 || true
-              '';
-          };
-        };
-      };
-  mastodon = stdenv.mkDerivation (fetchedGithub ./mastodon.json // rec {
-    installPhase = ''
-      cp -a . $out
-      cp -a ${yarnModules}/node_modules $out
-    '';
-    buildInputs = [ yarnModules ];
-  });
   keys.mastodon = {
     dest = "webapps/tools-mastodon";
     user = "mastodon";
   keys.mastodon = {
     dest = "webapps/tools-mastodon";
     user = "mastodon";
@@ -109,29 +50,11 @@ let
     '';
   };
 
     '';
   };
 
-    railsRoot = stdenv.mkDerivation {
-      name = "mastodon_immae";
-      inherit mastodon;
-      builder = writeText "build_mastodon_immae" ''
-        source $stdenv/setup
-        set -a
-        SECRET_KEY_BASE=Dummy
-        OTP_SECRET=Dummy
-        set +a
-        cp -a $mastodon $out
-        cd $out
-        chmod u+rwX . public
-        chmod -R u+rwX config/
-        sed -i -e 's@^end$@  config.action_mailer.sendmail_settings = { location: ENV.fetch("SENDMAIL_LOCATION", "/usr/sbin/sendmail") }\nend@' config/environments/production.rb
-        RAILS_ENV=production ${gems}/bin/rails assets:precompile
-        rm -rf tmp/cache
-        ln -sf ${varDir}/tmp/cache tmp
-        '';
-      buildInputs = [ gems gems.ruby pkgs.nodejs pkgs.yarn ];
-    };
+  railsRoot = mastodon.override { inherit varDir; };
 in
   {
 in
   {
-    inherit railsRoot varDir socketsDir gems;
+    inherit varDir railsRoot socketsDir;
+    inherit (railsRoot.passthru) gems;
     keys = builtins.attrValues keys;
     nodeSocket = "${socketsDir}/live_immae_node.sock";
     railsSocket = "${socketsDir}/live_immae_puma.sock";
     keys = builtins.attrValues keys;
     nodeSocket = "${socketsDir}/live_immae_node.sock";
     railsSocket = "${socketsDir}/live_immae_puma.sock";
index 409d028f044ce1683858b893465b76ddedf70d37..d1d8fa497bcaa69e96879a0240d9c064ab03cf6a 100644 (file)
@@ -33,4 +33,8 @@ in
   pure-ftpd = callPackage ../pkgs/pure-ftpd {};
   mpd = (callPackage ../pkgs/mpd_0_21 {}).mpd;
   mpd-small = (callPackage ../pkgs/mpd_0_21 {}).mpd-small;
   pure-ftpd = callPackage ../pkgs/pure-ftpd {};
   mpd = (callPackage ../pkgs/mpd_0_21 {}).mpd;
   mpd-small = (callPackage ../pkgs/mpd_0_21 {}).mpd-small;
+
+  webapps = {
+    mastodon = (callPackage ./webapps/mastodon { inherit mylibs; });
+  };
 }
 }
diff --git a/pkgs/webapps/mastodon/default.nix b/pkgs/webapps/mastodon/default.nix
new file mode 100644 (file)
index 0000000..0f936b5
--- /dev/null
@@ -0,0 +1,86 @@
+{ varDir ? "/var/lib/mastodon", mylibs,
+  stdenv, writeText, runCommand,
+  ruby_2_6, bundlerEnv, defaultGemConfig,
+  jq, protobuf, protobufc, pkgconfig, libidn, pam, nodejs, yarn }:
+let
+  gems = bundlerEnv {
+    name = "mastodon-env";
+    ruby = ruby_2_6;
+    gemset = ./gemset.nix;
+    gemdir = (mylibs.fetchedGithub ./mastodon.json).src;
+    groups = [ "default" "production" "test" "development" ];
+    gemConfig = defaultGemConfig // {
+      redis-rack = attrs: {
+        preBuild = ''
+          sed -i 's!s\.files.*!!' redis-rack.gemspec
+          '';
+      };
+      tzinfo = attrs: {
+        preBuild = ''
+          sed -i 's!s\.files.*!!' tzinfo.gemspec
+          '';
+      };
+      cld3 = attrs: {
+        buildInputs = [ protobuf protobufc pkgconfig ];
+      };
+      idn-ruby = attrs: {
+        buildInputs = [ libidn ];
+      };
+      rpam2 = attrs: {
+        buildInputs = [ pam ];
+      };
+    };
+  };
+  yarnModules = let
+    info = mylibs.fetchedGithub ./mastodon.json;
+    packagejson = runCommand "package.json" { buildInputs = [ jq ]; } ''
+      cat ${info.src}/package.json | jq -r '.version = "${info.version}"' > $out
+      '';
+  in
+    mylibs.yarn2nixPackage.mkYarnModules rec {
+      name = "mastodon-yarn";
+      pname = name;
+      version = info.version;
+      packageJSON = packagejson;
+      yarnLock = "${info.src}/yarn.lock";
+      yarnNix = ./yarn-packages.nix;
+      pkgConfig = {
+        all = {
+          buildInputs = [ mylibs.yarn2nixPackage.src ];
+        };
+        uws = {
+          postInstall = ''
+            npx node-gyp rebuild > build_log.txt 2>&1 || true
+            '';
+        };
+      };
+    };
+    mastodon_with_yarn = stdenv.mkDerivation (mylibs.fetchedGithub ./mastodon.json // rec {
+      installPhase = ''
+        cp -a . $out
+        cp -a ${yarnModules}/node_modules $out
+      '';
+      buildInputs = [ yarnModules ];
+    });
+in
+stdenv.mkDerivation {
+  name = "mastodon";
+  inherit mastodon_with_yarn;
+  builder = writeText "build_mastodon" ''
+      source $stdenv/setup
+      set -a
+      SECRET_KEY_BASE=Dummy
+      OTP_SECRET=Dummy
+      set +a
+      cp -a $mastodon_with_yarn $out
+      cd $out
+      chmod u+rwX . public
+      chmod -R u+rwX config/
+      sed -i -e 's@^end$@  config.action_mailer.sendmail_settings = { location: ENV.fetch("SENDMAIL_LOCATION", "/usr/sbin/sendmail") }\nend@' config/environments/production.rb
+      RAILS_ENV=production ${gems}/bin/rails assets:precompile
+      rm -rf tmp/cache
+      ln -sf ${varDir}/tmp/cache tmp
+  '';
+  buildInputs = [ gems gems.ruby nodejs yarn ];
+  passthru = { inherit gems varDir; };
+}