From 20e1428fae47a5a59376b624336597eed1b605f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Fri, 3 May 2019 18:43:16 +0200 Subject: Move mastodon to pkgs --- pkgs/webapps/mastodon/default.nix | 86 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 pkgs/webapps/mastodon/default.nix (limited to 'pkgs/webapps/mastodon/default.nix') 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; }; +} -- cgit v1.2.3