Add a derivation for loomio
This commit is contained in:
commit
c073c82096
61
flake.lock
Normal file
61
flake.lock
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1710146030,
|
||||||
|
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1710889954,
|
||||||
|
"narHash": "sha256-Pr6F5Pmd7JnNEMHHmspZ0qVqIBVxyZ13ik1pJtm2QXk=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "7872526e9c5332274ea5932a0c3270d6e4724f3b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
17
flake.nix
Normal file
17
flake.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
description = "The loomio flake";
|
||||||
|
|
||||||
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||||
|
inputs.flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
|
||||||
|
outputs = {nixpkgs, flake-utils, ...}:
|
||||||
|
flake-utils.lib.eachDefaultSystem (system:
|
||||||
|
let
|
||||||
|
pkgs = import nixpkgs { inherit system; };
|
||||||
|
in rec {
|
||||||
|
packages = rec {
|
||||||
|
loomio = pkgs.callPackage ./pkg/loomio/default.nix {};
|
||||||
|
inherit pkgs;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
30
pkg/loomio/default.nix
Normal file
30
pkg/loomio/default.nix
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
{stdenv, callPackage, bundlerEnv, ruby_3_2 }:
|
||||||
|
|
||||||
|
let
|
||||||
|
gemfile-patch = callPackage ./gemfile-patch.nix {};
|
||||||
|
src = callPackage ./source.nix { patches = [gemfile-patch];};
|
||||||
|
gems = bundlerEnv {
|
||||||
|
name = "loomio-env";
|
||||||
|
ruby = ruby_3_2;
|
||||||
|
gemset = ./. + "/gemset.nix";
|
||||||
|
gemdir = src;
|
||||||
|
};
|
||||||
|
in stdenv.mkDerivation {
|
||||||
|
name = "loomio";
|
||||||
|
inherit src;
|
||||||
|
buildInputs = [gems ruby_3_2];
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/{bin,share/loomio}
|
||||||
|
cp -r * $out/share/loomio
|
||||||
|
bin=$out/bin/loomio
|
||||||
|
cat > $bin <<EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
export BUNDLE_FORCE_RUBY_PLATFORM=true
|
||||||
|
exec ${gems}/bin/bundle exec puma -C $out/share/loomio/config/puma.rb
|
||||||
|
|
||||||
|
EOF
|
||||||
|
chmod +x $bin
|
||||||
|
'';
|
||||||
|
}
|
6
pkg/loomio/gemfile-patch.nix
Normal file
6
pkg/loomio/gemfile-patch.nix
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{fetchurl}:
|
||||||
|
fetchurl {
|
||||||
|
url = "https://github.com/akshaymankar/loomio/commit/528641fd04135a186232568fbf9a4717e2053e86.patch";
|
||||||
|
hash = "sha256-sg/4U72gZHoTYepZ4dIQlyC4YBjU5+YgIKI/Oj+XlRs=";
|
||||||
|
}
|
||||||
|
|
2413
pkg/loomio/gemset.nix
Normal file
2413
pkg/loomio/gemset.nix
Normal file
File diff suppressed because it is too large
Load diff
17
pkg/loomio/source.nix
Normal file
17
pkg/loomio/source.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# This file was generated by pkgs.mastodon.updateScript.
|
||||||
|
{ fetchFromGitHub, applyPatches, patches ? [] }:
|
||||||
|
let
|
||||||
|
version = "2.22.2";
|
||||||
|
in
|
||||||
|
(
|
||||||
|
applyPatches {
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "loomio";
|
||||||
|
repo = "loomio";
|
||||||
|
rev = "v${version}";
|
||||||
|
hash = "sha256-JJ0WBHSRUWacRbpF5Pssj3zxG0I7351kCxMKHiNpw5k=";
|
||||||
|
};
|
||||||
|
patches = patches ++ [];
|
||||||
|
}) // {
|
||||||
|
inherit version;
|
||||||
|
}
|
114
pkg/loomio/update.sh
Executable file
114
pkg/loomio/update.sh
Executable file
|
@ -0,0 +1,114 @@
|
||||||
|
#!/usr/bin/env nix-shell
|
||||||
|
#! nix-shell -i bash -p ruby_3_2 bundix coreutils diffutils nix-prefetch-github gnused jq
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
OWNER=loomio
|
||||||
|
REPO=loomio
|
||||||
|
|
||||||
|
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 [[ -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 REVISION is not provided, the latest tag from github.com/mastodon/mastodon is fetched and VERSION is calculated from it."
|
||||||
|
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="$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s "https://api.github.com/repos/$OWNER/$REPO/releases" | jq -r 'map(select(.prerelease == false)) | .[0].tag_name')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
VERSION="$(echo "$REVISION" | cut -c2-)"
|
||||||
|
|
||||||
|
rm -f gemset.nix source.nix
|
||||||
|
cd "$(dirname "${BASH_SOURCE[0]}")" || exit 1
|
||||||
|
|
||||||
|
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
|
||||||
|
grep "fatal" $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)
|
||||||
|
HASH=$(echo "$JSON" | jq -r .hash)
|
||||||
|
|
||||||
|
cat > source.nix << EOF
|
||||||
|
# This file was generated by pkgs.mastodon.updateScript.
|
||||||
|
{ fetchFromGitHub, applyPatches, patches ? [] }:
|
||||||
|
let
|
||||||
|
version = "$VERSION";
|
||||||
|
in
|
||||||
|
(
|
||||||
|
applyPatches {
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "$OWNER";
|
||||||
|
repo = "$REPO";
|
||||||
|
rev = "v\${version}";
|
||||||
|
hash = "$HASH";
|
||||||
|
};
|
||||||
|
patches = patches ++ [$PATCHES];
|
||||||
|
}) // {
|
||||||
|
inherit version;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
SOURCE_DIR="$(nix-build --no-out-link -E '(import <nixpkgs> {}).callPackage ./source.nix {}')"
|
||||||
|
|
||||||
|
echo "Creating gemset.nix"
|
||||||
|
pushd $SOURCE_DIR
|
||||||
|
bundle lock --add-platform ruby --print > Gemfile.lock
|
||||||
|
popd
|
||||||
|
BUNDLE_FORCE_RUBY_PLATFORM=true bundix --lockfile="$SOURCE_DIR/Gemfile.lock" --gemfile="$SOURCE_DIR/Gemfile"
|
||||||
|
echo "" >> gemset.nix # Create trailing newline to please EditorConfig checks
|
||||||
|
|
||||||
|
# echo "Creating yarn-hash.nix"
|
||||||
|
# YARN_HASH="$(prefetch-yarn-deps "$SOURCE_DIR/yarn.lock")"
|
||||||
|
# YARN_HASH="$(nix hash to-sri --type sha256 "$YARN_HASH")"
|
||||||
|
# sed -i "s/sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=/$YARN_HASH/g" source.nix
|
Loading…
Reference in a new issue