acr-cli: init at 0.14 (#359508)
[NixPkgs.git] / pkgs / by-name / za / zammad / package.nix
blobbf22b4b631cdcaa82b6110f1413a2196a8cafb67
2   stdenvNoCC,
3   lib,
4   nixosTests,
5   fetchFromGitHub,
6   applyPatches,
7   bundlerEnv,
8   defaultGemConfig,
9   callPackage,
10   procps,
11   ruby,
12   postgresql,
13   imlib2,
14   jq,
15   moreutils,
16   nodejs,
17   pnpm,
18   cacert,
19   redis,
20   dataDir ? "/var/lib/zammad",
23 let
24   pname = "zammad";
25   version = "6.4.0";
27   src = applyPatches {
28     src = fetchFromGitHub (lib.importJSON ./source.json);
29     patches = [
30       ./fix-sendmail-location.diff
31     ];
33     postPatch = ''
34       sed -i -e "s|ruby '3.2.[0-9]\+'|ruby '${ruby.version}'|" Gemfile
35       sed -i -e "s|ruby 3.2.[0-9]\+p[0-9]\+|ruby ${ruby.version}|" Gemfile.lock
36       sed -i -e "s|3.2.[0-9]\+|${ruby.version}|" .ruby-version
37       ${jq}/bin/jq '. += {name: "Zammad", version: "${version}"}' package.json | ${moreutils}/bin/sponge package.json
38     '';
39   };
41   rubyEnv = bundlerEnv {
42     name = "${pname}-gems-${version}";
43     inherit version;
45     # Which ruby version to select:
46     #   https://docs.zammad.org/en/latest/prerequisites/software.html#ruby-programming-language
47     inherit ruby;
49     gemdir = src;
50     gemset = ./gemset.nix;
51     groups = [
52       "assets"
53       "unicorn" # server
54       "test"
55       "mysql"
56       "puma"
57       "development"
58       "postgres" # database
59     ];
60     gemConfig = defaultGemConfig // {
61       pg = attrs: {
62         buildFlags = [ "--with-pg-config=${lib.getDev postgresql}/bin/pg_config" ];
63       };
64       rszr = attrs: {
65         buildInputs = [
66           imlib2
67           imlib2.dev
68         ];
69         buildFlags = [ "--without-imlib2-config" ];
70       };
71       mini_racer = attrs: {
72         buildFlags = [
73           "--with-v8-dir=\"${nodejs.libv8}\""
74         ];
75         dontBuild = false;
76         postPatch = ''
77           substituteInPlace ext/mini_racer_extension/extconf.rb \
78             --replace Libv8.configure_makefile '$CPPFLAGS += " -x c++"; Libv8.configure_makefile'
79         '';
80       };
81     };
82   };
85 stdenvNoCC.mkDerivation {
86   inherit pname version src;
88   buildInputs = [
89     rubyEnv
90     rubyEnv.wrappedRuby
91     rubyEnv.bundler
92   ];
94   nativeBuildInputs = [
95     redis
96     postgresql
97     pnpm.configHook
98     nodejs
99     procps
100     cacert
101   ];
103   env.RAILS_ENV = "production";
105   pnpmDeps = pnpm.fetchDeps {
106     inherit pname src;
108     hash = "sha256-bdm1nkJnXE7oZZhG2uBnk3fYhITaMROHGKPbf0G3bFs=";
109   };
111   buildPhase = ''
112     mkdir redis-work
113     pushd redis-work
114     redis-server &
115     REDIS_PID=$!
116     popd
118     mkdir postgres-work
119     initdb -D postgres-work --encoding=utf8
120     pg_ctl start -D postgres-work -o "-k $PWD/postgres-work -h '''"
121     createuser -h $PWD/postgres-work zammad -R -S
122     createdb -h $PWD/postgres-work --encoding=utf8 --owner=zammad zammad
124     rake DATABASE_URL="postgresql:///zammad?host=$PWD/postgres-work" assets:precompile
126     kill $REDIS_PID
127     pg_ctl stop -D postgres-work -m immediate
128     rm -r redis-work postgres-work
129   '';
131   installPhase = ''
132     cp -R . $out
133     rm -rf $out/config/database.yml $out/config/secrets.yml $out/tmp $out/log
134     # dataDir will be set in the module, and the package gets overriden there
135     ln -s ${dataDir}/config/database.yml $out/config/database.yml
136     ln -s ${dataDir}/config/secrets.yml $out/config/secrets.yml
137     ln -s ${dataDir}/tmp $out/tmp
138     ln -s ${dataDir}/log $out/log
139   '';
141   passthru = {
142     inherit rubyEnv;
143     updateScript = [
144       "${callPackage ./update.nix { }}/bin/update.sh"
145       pname
146       (toString ./.)
147     ];
148     tests = {
149       inherit (nixosTests) zammad;
150     };
151   };
153   meta = with lib; {
154     description = "Zammad, a web-based, open source user support/ticketing solution";
155     homepage = "https://zammad.org";
156     license = licenses.agpl3Plus;
157     platforms = [
158       "x86_64-linux"
159       "aarch64-linux"
160     ];
161     maintainers = with maintainers; [
162       n0emis
163       taeer
164       netali
165     ];
166   };