From 20e1428fae47a5a59376b624336597eed1b605f5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Fri, 3 May 2019 18:43:16 +0200 Subject: [PATCH] Move mastodon to pkgs --- .../websites/tools/mastodon/default.nix | 2 +- .../websites/tools/mastodon/mastodon.nix | 85 +----------------- pkgs/default.nix | 4 + pkgs/webapps/mastodon/default.nix | 86 +++++++++++++++++++ .../webapps}/mastodon/gemset.nix | 0 .../webapps}/mastodon/mastodon.json | 0 .../webapps}/mastodon/yarn-packages.nix | 0 7 files changed, 95 insertions(+), 82 deletions(-) create mode 100644 pkgs/webapps/mastodon/default.nix rename {nixops/modules/websites/tools => pkgs/webapps}/mastodon/gemset.nix (100%) rename {nixops/modules/websites/tools => pkgs/webapps}/mastodon/mastodon.json (100%) rename {nixops/modules/websites/tools => pkgs/webapps}/mastodon/yarn-packages.nix (100%) diff --git a/nixops/modules/websites/tools/mastodon/default.nix b/nixops/modules/websites/tools/mastodon/default.nix index a3f2364..919bac2 100644 --- a/nixops/modules/websites/tools/mastodon/default.nix +++ b/nixops/modules/websites/tools/mastodon/default.nix @@ -1,7 +1,7 @@ { lib, pkgs, config, myconfig, mylibs, ... }: let mastodon = pkgs.callPackage ./mastodon.nix { - inherit (mylibs) fetchedGithub yarn2nixPackage; + inherit (pkgs.webapps) mastodon; env = myconfig.env.tools.mastodon; }; diff --git a/nixops/modules/websites/tools/mastodon/mastodon.nix b/nixops/modules/websites/tools/mastodon/mastodon.nix index 67d4d48..83e3a54 100644 --- a/nixops/modules/websites/tools/mastodon/mastodon.nix +++ b/nixops/modules/websites/tools/mastodon/mastodon.nix @@ -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"; - 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"; @@ -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 { - 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"; diff --git a/pkgs/default.nix b/pkgs/default.nix index 409d028..d1d8fa4 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -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; + + 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 index 0000000..0f936b5 --- /dev/null +++ b/pkgs/webapps/mastodon/default.nix @@ -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; }; +} diff --git a/nixops/modules/websites/tools/mastodon/gemset.nix b/pkgs/webapps/mastodon/gemset.nix similarity index 100% rename from nixops/modules/websites/tools/mastodon/gemset.nix rename to pkgs/webapps/mastodon/gemset.nix diff --git a/nixops/modules/websites/tools/mastodon/mastodon.json b/pkgs/webapps/mastodon/mastodon.json similarity index 100% rename from nixops/modules/websites/tools/mastodon/mastodon.json rename to pkgs/webapps/mastodon/mastodon.json diff --git a/nixops/modules/websites/tools/mastodon/yarn-packages.nix b/pkgs/webapps/mastodon/yarn-packages.nix similarity index 100% rename from nixops/modules/websites/tools/mastodon/yarn-packages.nix rename to pkgs/webapps/mastodon/yarn-packages.nix -- 2.41.0