mastodon: support multiple versions

This commit is contained in:
Gaelan Steele 2023-07-09 22:38:08 -07:00
parent 076087fc36
commit 869c3ffccc
18 changed files with 3449 additions and 81 deletions

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
data
cert
.vscode

View file

@ -71,10 +71,19 @@
fi
mkdir -p cert
export MINIFEDI_CERT=$(pwd)/cert
CAROOT=$MINIFEDI_CERT ${pkgs.mkcert}/bin/mkcert -install
'';
in "${script}";
};
apps.x86_64-darwin.mastodon-mk-version =
let pkgs = nixpkgs.legacyPackages.x86_64-darwin;
in {
type = "app";
program = "${
import ./nix/fedi/mastodon/mk-version { inherit pkgs; }
}/bin/mastodon-mk-version";
};
};
}

View file

@ -132,6 +132,9 @@ in {
cat ${config} | envsubst > $data/config.exs
export AKKOMA_CONFIG_PATH=$data/config.exs
# elixir takes 2 sigints to exit if it has something on stdin
exec </dev/null
if ! [ -e $data/setup-done ]; then
createuser -h$postgres ${name}
createdb -h$postgres ${name} -O${name}
@ -152,8 +155,6 @@ in {
touch $data/setup-done
fi
# elixir takes 2 sigints to exit if it has something on stdin
exec </dev/null
exec pleroma start
'';
}];

View file

@ -2,25 +2,28 @@
, nixosTests, yarn, callPackage, imagemagick, ffmpeg, file, ruby_3_0
, writeShellScript, fetchYarnDeps, fixup_yarn_lock, brotli
# Allow building a fork or custom version of Mastodon:
, pname ? "mastodon", version ? import ./version.nix, srcOverride ? null
, dependenciesDir ? ./. # Should contain gemset.nix, yarn.nix and package.json.
}:
, pname ? "mastodon", versionDef }:
stdenv.mkDerivation rec {
inherit pname version;
inherit pname;
version = import "${versionDef}/version.nix";
# Using overrideAttrs on src does not build the gems and modules with the overridden src.
# Putting the callPackage up in the arguments list also does not work.
src =
if srcOverride != null then srcOverride else callPackage ./source.nix { };
src = callPackage "${versionDef}/source.nix" { };
mastodonGems = bundlerEnv {
name = "${pname}-gems-${version}";
inherit version;
ruby = ruby_3_0;
gemdir = src;
gemset = dependenciesDir + "/gemset.nix";
# hack: bundix doesn't properly handle deps in non-default groups, so we get
# rpam (which depends on linux-pam) even though pam_authentication isn't
# enabled. just patch it out
gemset = lib.attrsets.filterAttrs
(k: v: k != "rpam2" && k != "devise_pam_authenticatable2")
(import (versionDef + "/gemset.nix"));
# This fix (copied from https://github.com/NixOS/nixpkgs/pull/76765) replaces the gem
# symlinks with directories, resolving this error when running rake:
# /nix/store/451rhxkggw53h7253izpbq55nrhs7iv0-mastodon-gems-3.0.1/lib/ruby/gems/2.6.0/gems/bundler-1.17.3/lib/bundler/settings.rb:6:in `<module:Bundler>': uninitialized constant Bundler::Settings (NameError)
@ -41,7 +44,7 @@ stdenv.mkDerivation rec {
yarnOfflineCache = fetchYarnDeps {
yarnLock = "${src}/yarn.lock";
sha256 = "sha256-e3rl/WuKXaUdeDEYvo1sSubuIwtBjkbguCYdAijwXOA=";
sha256 = import "${versionDef}/yarn-hash.nix";
};
nativeBuildInputs = [

View file

@ -1,6 +1,6 @@
{ pkgs, name }:
{ pkgs, name, versionDef }:
let
mastodon = pkgs.callPackage ./build.nix { };
mastodon = pkgs.callPackage ./build.nix { inherit versionDef; };
env = {
LOCAL_DOMAIN = "${name}.lvh.me";
WEB_DOMAIN = "${name}.lvh.me";
@ -107,15 +107,17 @@ in {
touch $data/setup-done
tootctl accounts create a --email=a@${name}.example --confirmed --role Owner
rails runner "Account.find_local('a').user.update!(password: 'Aa12345!')"
tootctl accounts create b --email=b@${name}.example --confirmed
rails runner "Account.find_local('b').user.update!(password: 'Bb12345!')"
tootctl accounts create c --email=c@${name}.example --confirmed
rails runner "Account.find_local('c').user.update!(password: 'Cc12345!')"
tootctl accounts create d --email=d@${name}.example --confirmed
rails runner "Account.find_local('d').user.update!(password: 'Dd12345!')"
tootctl accounts create e --email=e@${name}.example --confirmed
rails runner "Account.find_local('e').user.update!(password: 'Ee12345!')"
rails runner "
Account.find_local('a').user.update!(password: 'Aa12345!')
Account.find_local('b').user.update!(password: 'Bb12345!')
Account.find_local('c').user.update!(password: 'Cc12345!')
Account.find_local('d').user.update!(password: 'Dd12345!')
Account.find_local('e').user.update!(password: 'Ee12345!')
"
fi
exec ${s6.start}

View file

@ -0,0 +1,20 @@
{ pkgs }:
let
binPath = pkgs.lib.makeBinPath (with pkgs; [
bundix
coreutils
diffutils
nix-prefetch-github
nix-prefetch-git
gnused
jq
prefetch-yarn-deps
]);
in pkgs.runCommand "mastodon-mk-version" {
nativeBuildInputs = [ pkgs.makeWrapper ];
} ''
mkdir -p $out/bin
cp ${./mk-version.sh} $out/bin/mastodon-mk-version
patchShebangs $out/bin/mastodon-mk-version
wrapProgram $out/bin/mastodon-mk-version --prefix PATH : ${binPath}
''

View file

@ -0,0 +1,108 @@
#!/usr/bin/env bash
# Derived from the update script for nixpkgs#mastodon. BSD-licensed.
set -e
OWNER=mastodon
REPO=mastodon
POSITIONAL=()
while [[ $# -gt 0 ]]; do
key="$1"
case $key in
--owner)
OWNER="$2"
shift # past argument
shift # past value
;;
--repo)
REPO="$2"
shift # past argument
shift # past value
;;
--ver)
VERSION="$2"
shift # past argument
shift # past value
;;
--rev)
REVISION="$2"
shift # past argument
shift # past value
;;
--patches)
PATCHES="$2"
shift # past argument
shift # past value
;;
*) # unknown option
POSITIONAL+=("$1")
shift # past argument
;;
esac
done
if [[ -z "$VERSION" || -n "$POSITIONAL" ]]; then
echo "Usage: update.sh [--owner OWNER] [--repo REPO] --ver VERSION [--rev REVISION] [--patches PATCHES]"
echo "OWNER and repo must be paths on github."
echo "If VERSION is not a revision acceptable to 'git checkout', you must provide one in REVISION."
echo "If OWNER and REPO are not provided, it defaults they default to mastodon and mastodon."
echo "PATCHES, if provided, should be one or more Nix expressions separated by spaces."
exit 1
fi
if [[ -z "$REVISION" ]]; then
REVISION="$VERSION"
fi
rm -f gemset.nix version.nix source.nix
TARGET_DIR="$PWD"
WORK_DIR=$(mktemp -d)
# Check that working directory was created.
if [[ -z "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then
echo "Could not create temporary directory"
exit 1
fi
# Delete the working directory on exit.
function cleanup {
# Report errors, if any, from nix-prefetch-git
cat $WORK_DIR/nix-prefetch-git.out >/dev/stderr || true
rm -rf "$WORK_DIR"
}
trap cleanup EXIT
echo "Fetching source code $REVISION"
JSON=$(nix-prefetch-github "$OWNER" "$REPO" --rev "$REVISION" 2> $WORK_DIR/nix-prefetch-git.out)
SHA=$(echo "$JSON" | jq -r .sha256)
echo "Creating version.nix"
echo "\"$VERSION\"" | sed 's/^"v/"/' > version.nix
cat > source.nix << EOF
# This file was generated by pkgs.mastodon.updateScript.
{ fetchFromGitHub, applyPatches }: let
src = fetchFromGitHub {
owner = "mastodon";
repo = "mastodon";
rev = "$REVISION";
sha256 = "$SHA";
};
in applyPatches {
inherit src;
patches = [$PATCHES];
}
EOF
SOURCE_DIR="$(nix-build --no-out-link -E '(import <nixpkgs> {}).callPackage ./source.nix {}')"
echo "Creating gemset.nix"
bundix --lockfile="$SOURCE_DIR/Gemfile.lock" --gemfile="$SOURCE_DIR/Gemfile"
echo "" >> "$TARGET_DIR/gemset.nix" # Create trailing newline to please EditorConfig checks
echo "Creating yarn-hash.nix"
echo '"'$(prefetch-yarn-deps "$SOURCE_DIR/yarn.lock")'"' > "$TARGET_DIR/yarn-hash.nix"

View file

@ -1,11 +0,0 @@
# This file was generated by pkgs.mastodon.updateScript.
{ fetchgit, applyPatches }: let
src = fetchgit {
url = "https://github.com/mastodon/mastodon.git";
rev = "v4.1.2";
sha256 = "18yzpc2rz9sa04y2sdxzsfkndbqqsfqvji47imwc3yj40l8hciws";
};
in applyPatches {
inherit src;
patches = [];
}

View file

@ -1 +0,0 @@
"4.1.2"

View file

@ -4,6 +4,12 @@ let
mastodon = import ./fedi/mastodon {
inherit pkgs;
name = "mastodon";
versionDef = ../versions/mastodon/mastodon-4.1.4;
};
glitch = import ./fedi/mastodon {
inherit pkgs;
name = "glitch";
versionDef = ../versions/mastodon/glitch-a40529f;
};
akkoma = import ./fedi/akkoma {
inherit pkgs;

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,12 @@
# This file was generated by pkgs.mastodon.updateScript.
{ fetchFromGitHub, applyPatches }: let
src = fetchFromGitHub {
owner = "mastodon";
repo = "mastodon";
rev = "a40529fa79c6882eb1929014e5f9324d8e81ae49";
sha256 = "/b7Z5WbErerqRb5nHh57mbjOyP7tDpi4KUglXdd693Y=";
};
in applyPatches {
inherit src;
patches = [];
}

View file

@ -0,0 +1 @@
"a40529f"

View file

@ -0,0 +1 @@
"05phsp5wj2p63vjd8hr9h39wxqwz3j8zqh4avj8mwrsh23ahkxgi"

View file

@ -5,10 +5,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1y9lj7ra9xf4q4mryydmd498grsndqmz1zwasb4ai9gv62igvw3s";
sha256 = "10y18l67i6ry7v9w0qwh26477g4gm0qrjjpa87pa5a42hzkglnc7";
type = "gem";
};
version = "6.1.7.2";
version = "6.1.7.4";
};
actionmailbox = {
dependencies = ["actionpack" "activejob" "activerecord" "activestorage" "activesupport" "mail"];
@ -16,10 +16,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0bzacsr93sxv90nljv3ajw54nmyz1v9k2v2wx1pxsi0jasqg5fvn";
sha256 = "1ihayijdgasf0rp10x6h335k3y1hgqr6c9s8lxqmhm4gpczajaac";
type = "gem";
};
version = "6.1.7.2";
version = "6.1.7.4";
};
actionmailer = {
dependencies = ["actionpack" "actionview" "activejob" "activesupport" "mail" "rails-dom-testing"];
@ -27,10 +27,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1rjddp1a5l4amsbibhnf7g2rb69qvq0nc0a2dvr6r57bpkf82hj4";
sha256 = "03557cskby5alpncnhgm1j1kq43xqq75sdd6r2x22q3j2jv68pj5";
type = "gem";
};
version = "6.1.7.2";
version = "6.1.7.4";
};
actionpack = {
dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"];
@ -38,10 +38,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0c2y6sqpan68lrx78pvhbxb2917m75s808r6cg1kyygwvg31niza";
sha256 = "1x7ffyan8sbv4ywjghiyiv077vfxyf6i6y0h4k0mfpdmf76l0i86";
type = "gem";
};
version = "6.1.7.2";
version = "6.1.7.4";
};
actiontext = {
dependencies = ["actionpack" "activerecord" "activestorage" "activesupport" "nokogiri"];
@ -49,10 +49,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1jx8wi961i34v7x0j3h4wjw3qbyx9bkzb598vg42kidzk2f90dyj";
sha256 = "0g5gw9ywirw7814wn8cdnnv1df58x5gplgpb15gaw5gzkw9cgvd8";
type = "gem";
};
version = "6.1.7.2";
version = "6.1.7.4";
};
actionview = {
dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"];
@ -60,10 +60,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "10g5gk8h4mfhvgqylzbf591fqf5p78ca35cb97p9bclpv9jfy0za";
sha256 = "0cmzc2c00lsdr5hpmsgs8axs5pbhv5xyqiyi69wf81pqypd2cy3l";
type = "gem";
};
version = "6.1.7.2";
version = "6.1.7.4";
};
active_model_serializers = {
dependencies = ["actionpack" "activemodel" "case_transform" "jsonapi-renderer"];
@ -92,10 +92,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0ililjwy4x52a6x5fidh1iyllf6vx49nz93fd2hxypc5bpryx9mz";
sha256 = "153z9lmkip3v243xxa5rcc8am82ma73ar46q4vxbmzi850a5yjj2";
type = "gem";
};
version = "6.1.7.2";
version = "6.1.7.4";
};
activemodel = {
dependencies = ["activesupport"];
@ -103,10 +103,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0nn17y72fhsynwn11bqg75bazqp6r1g8mpwwyv64harwvh3fh5qj";
sha256 = "1bpr0zspih2rf2ppzjxaw8sq6gfqg9vss5h0fs4r85p03579swin";
type = "gem";
};
version = "6.1.7.2";
version = "6.1.7.4";
};
activerecord = {
dependencies = ["activemodel" "activesupport"];
@ -114,10 +114,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1k69m3b0lb4jx20jx8vsvdqm1ki1r6riq9haabyddkcpvmgz1wh7";
sha256 = "06403rkjnyr80yj4g05lb5hn04yfzipa7bm0gplbqrrykr3hvh5r";
type = "gem";
};
version = "6.1.7.2";
version = "6.1.7.4";
};
activestorage = {
dependencies = ["actionpack" "activejob" "activerecord" "activesupport" "marcel" "mini_mime"];
@ -125,10 +125,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0c3cvc01azfkccg5hsl96wafsxb5hf1nva3cn8rif2mlwx17p8n3";
sha256 = "094kvh8bp792xccql54kky8prmvqvfzwwv9xas2pnh8s4v3avbzl";
type = "gem";
};
version = "6.1.7.2";
version = "6.1.7.4";
};
activesupport = {
dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
@ -136,10 +136,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "14pjq2k761qaywaznpqq8ziivjk2ks1ma2cjwdflkxqgndxjmsr2";
sha256 = "0s465919p6fcgcsqin8w8hay2m598dvnzks490hbsb0p68sdz69m";
type = "gem";
};
version = "6.1.7.2";
version = "6.1.7.4";
};
addressable = {
dependencies = ["public_suffix"];
@ -609,10 +609,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1qnsflsbjj38im8xq35g0vihlz96h09wjn2dad5g543l3vvrkrx5";
sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
type = "gem";
};
version = "1.2.0";
version = "1.2.2";
};
connection_pool = {
groups = ["default" "test"];
@ -709,6 +709,17 @@
};
version = "4.0.2";
};
devise_pam_authenticatable2 = {
dependencies = ["devise" "rpam2"];
groups = ["pam_authentication"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "13ipl52pkhc6vxp8ca31viwv01237bi2bfk3b1fixq1x46nf87p2";
type = "gem";
};
version = "9.2.0";
};
diff-lcs = {
groups = ["default" "development" "test"];
platforms = [];
@ -757,10 +768,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0fxrvqv3l5w9p20s129rg41zc6agf1n4yrmganancnvykbkygki2";
sha256 = "1q2pywgyn6cbnm0fh3dln5z1qgd1g8hvb4x8rppjc1bpfxnfhi13";
type = "gem";
};
version = "5.6.4";
version = "5.6.6";
};
dotenv = {
groups = ["default"];
@ -1555,10 +1566,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0n0pijrc465zzrv5flxc41375zwaz9yfc2n0r80zjwarc1ixkdx1";
sha256 = "1bf9pysw1jfgynv692hhaycfxa8ckay1gjw5hz3madrbrynryfzc";
type = "gem";
};
version = "2.8.0.1";
version = "2.8.1";
};
makara = {
dependencies = ["activerecord"];
@ -1658,10 +1669,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1af4yarhbbx62f7qsmgg5fynrik0s36wjy3difkawy536xg343mp";
sha256 = "0z7f38iq37h376n9xbl4gajdrnwzq284c9v1py4imw3gri2d5cj6";
type = "gem";
};
version = "2.8.1";
version = "2.8.2";
};
minitest = {
groups = ["default" "development" "pam_authentication" "production" "test"];
@ -1709,10 +1720,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1d996zf3g8xz244791b0qsl9vr7zg4lqnnmf9k2kshr9lki5jam8";
sha256 = "1k1qyjr9lkk5y3483k6wk6d9h1jx4v5hzby1mf0pj3b4kr2arxbm";
type = "gem";
};
version = "0.3.4";
version = "0.3.6";
};
net-ldap = {
groups = ["default"];
@ -1783,10 +1794,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0xk64wghkscs6bv2n22853k2nh39d131c6rfpnlw12mbjnnv9v1v";
sha256 = "0w9978zwjf1qhy3amkivab0f9syz6a7k0xgydjidaf7xc831d78f";
type = "gem";
};
version = "2.5.8";
version = "2.5.9";
};
nokogiri = {
dependencies = ["mini_portile2" "racc"];
@ -1794,10 +1805,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0qr6psd9qgv83pklpw7cpmshkcasnv8d777ksmvwsacwfvvkmnxj";
sha256 = "1g6wvxab4qwnbny983n9bckc0afy6y6s3g5v3csdbsp8n7g9vxi3";
type = "gem";
};
version = "1.14.1";
version = "1.14.5";
};
nsa = {
dependencies = ["activesupport" "concurrent-ruby" "sidekiq" "statsd-ruby"];
@ -2121,10 +2132,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0qvp6h2abmlsl4sqjsvac03cr2mxq6143gbx4kq52rpazp021qsb";
sha256 = "16w217k9z02c4hqizym8dkj6bqmmzx4qdvqpnskgzf174a5pwdxk";
type = "gem";
};
version = "2.2.6.2";
version = "2.2.7";
};
rack-attack = {
dependencies = ["rack"];
@ -2187,10 +2198,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1b7ggchi3d7pwzmj8jn9fhbazr5fr4dy304f0hz7kqbg23s9c1ym";
sha256 = "17ympjpkhz06xqsay18hskpbs64nh05hzrsckx8va6ikrxhs2ksq";
type = "gem";
};
version = "6.1.7.2";
version = "6.1.7.4";
};
rails-controller-testing = {
dependencies = ["actionpack" "actionview" "activesupport"];
@ -2253,10 +2264,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0mm3nf3y715ln6v8k6g4351ggkr1bcwc5637vr979yw8vsmdi42k";
sha256 = "0g92if3cxxysl9h6x6ibs7y9dsbcniiwgcldvg00kib02b3pxkbb";
type = "gem";
};
version = "6.1.7.2";
version = "6.1.7.4";
};
rainbow = {
groups = ["default" "development" "test"];
@ -2394,6 +2405,16 @@
};
version = "6.2.0";
};
rpam2 = {
groups = ["default" "pam_authentication"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1zvli3s4z1hf2l7gyfickm5i3afjrnycc3ihbiax6ji6arpbyf33";
type = "gem";
};
version = "4.0.2";
};
rqrcode = {
dependencies = ["chunky_png" "rqrcode_core"];
groups = ["default"];
@ -2616,10 +2637,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1ga8yzc9zj45m92ycwnzhzahkwvc3dp3lym5m3f3880hs4jhh7l3";
sha256 = "1kymrjdpbmn4yaml3aaqyj1dzj8gqmm9h030dc2rj5mvja7fpi28";
type = "gem";
};
version = "6.0.1";
version = "6.0.2";
};
scenic = {
dependencies = ["activerecord" "railties"];
@ -2872,10 +2893,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
sha256 = "0k7j2wn14h1pl4smibasw0bp66kg626drxb59z7rzflch99cd4rg";
type = "gem";
};
version = "1.2.1";
version = "1.2.2";
};
tilt = {
groups = ["default"];
@ -2892,10 +2913,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0lnh0kr7f43m1cjzc2jvggfsl1rzsaj2rd3pn6vp7mcqliymzaza";
sha256 = "1pfddf51n5fnj4f9ggwj3wbf23ynj0nbxlxqpz12y1gvl9g7d6r6";
type = "gem";
};
version = "0.3.1";
version = "0.3.2";
};
tpm-key_attestation = {
dependencies = ["bindata" "openssl" "openssl-signature_algorithm"];
@ -3181,10 +3202,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "09pqhdi6q4sqv0p1gnjpbcy4az0yv8hrpykjngdgh9qiqd87nfdv";
sha256 = "0ck6bj7wa73dkdh13735jl06k6cfny98glxjkas82aivlmyzqqbk";
type = "gem";
};
version = "2.6.6";
version = "2.6.8";
};
}

View file

@ -0,0 +1,12 @@
# This file was generated by pkgs.mastodon.updateScript.
{ fetchFromGitHub, applyPatches }: let
src = fetchFromGitHub {
owner = "mastodon";
repo = "mastodon";
rev = "v4.1.4";
sha256 = "8ULBO8IdwBzC5dgX3netTHbbRrODX4CropWZWtqWHZw=";
};
in applyPatches {
inherit src;
patches = [];
}

View file

@ -0,0 +1 @@
"4.1.4"

View file

@ -0,0 +1 @@
"1q2wy0l04796p3h4d3j11ciyxrjadj6vw61ig0fsapcadgyyaykv"