Elm: automate packaging with elm2nix
- rewrite documentation - automate whole process into update.sh - remove all legacy snippets
This commit is contained in:
parent
24d1d6cf9d
commit
6da4584acf
|
@ -307,23 +307,19 @@ packageOverrides = pkgs: {
|
||||||
</screen>
|
</screen>
|
||||||
</para>
|
</para>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section xml:id="sec-elm">
|
<section xml:id="sec-elm">
|
||||||
<title>Elm</title>
|
<title>Elm</title>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The Nix expressions for Elm reside in
|
To update Elm compiler, see <filename>nixpkgs/pkgs/development/compilers/elm/README.md</filename>.
|
||||||
<filename>pkgs/development/compilers/elm</filename>. They are generated
|
</para>
|
||||||
automatically by <command>update-elm.rb</command> script. One should specify
|
|
||||||
versions of Elm packages inside the script, clear the
|
<para>
|
||||||
<filename>packages</filename> directory and run the script from inside it.
|
To package Elm applications, <link xlink:href="https://github.com/hercules-ci/elm2nix#elm2nix">read about elm2nix</link>.
|
||||||
<literal>elm-reactor</literal> is special because it also has Elm package
|
|
||||||
dependencies. The process is not automated very much for now -- you should
|
|
||||||
get the <literal>elm-reactor</literal> source tree (e.g. with
|
|
||||||
<command>nix-shell</command>) and run <command>elm2nix.rb</command> inside
|
|
||||||
it. Place the resulting <filename>package.nix</filename> file into
|
|
||||||
<filename>packages/elm-reactor-elm.nix</filename>.
|
|
||||||
</para>
|
</para>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section xml:id="sec-shell-helpers">
|
<section xml:id="sec-shell-helpers">
|
||||||
<title>Interactive shell helpers</title>
|
<title>Interactive shell helpers</title>
|
||||||
|
|
||||||
|
|
24
pkgs/development/compilers/elm/README.md
Normal file
24
pkgs/development/compilers/elm/README.md
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# To update Elm:
|
||||||
|
|
||||||
|
Modify revision in ./update.sh and run it
|
||||||
|
|
||||||
|
# Notes about the build process:
|
||||||
|
|
||||||
|
The elm binary embeds a piece of pre-compiled elm code, used by 'elm
|
||||||
|
reactor'. This means that the build process for 'elm' effectively
|
||||||
|
executes 'elm make'. that in turn expects to retrieve the elm
|
||||||
|
dependencies of that code (elm/core, etc.) from
|
||||||
|
package.elm-lang.org, as well as a cached bit of metadata
|
||||||
|
(versions.dat).
|
||||||
|
|
||||||
|
The makeDotElm function lets us retrieve these dependencies in the
|
||||||
|
standard nix way. we have to copy them in (rather than symlink) and
|
||||||
|
make them writable because the elm compiler writes other .dat files
|
||||||
|
alongside the source code. versions.dat was produced during an
|
||||||
|
impure build of this same code; the build complains that it can't
|
||||||
|
update this cache, but continues past that warning.
|
||||||
|
|
||||||
|
Finally, we set ELM_HOME to point to these pre-fetched artifacts so
|
||||||
|
that the default of ~/.elm isn't used.
|
||||||
|
|
||||||
|
More: https://blog.hercules-ci.com/elm/2019/01/03/elm2nix-0.1/
|
|
@ -2,54 +2,6 @@
|
||||||
, haskell, nodejs
|
, haskell, nodejs
|
||||||
, fetchurl, fetchpatch, makeWrapper, git }:
|
, fetchurl, fetchpatch, makeWrapper, git }:
|
||||||
|
|
||||||
# To update:
|
|
||||||
|
|
||||||
# 1) Modify ./update.sh and run it
|
|
||||||
|
|
||||||
# 2) to generate versions.dat:
|
|
||||||
# 2.1) git clone https://github.com/elm/compiler.git
|
|
||||||
# 2.2) cd compiler
|
|
||||||
# 2.3) cabal2nix --shell . | sed 's/"default",/"ghc822",/' > shell.nix
|
|
||||||
# 2.4) nix-shell
|
|
||||||
# 2.5) mkdir .elm
|
|
||||||
# 2.6) export ELM_HOME=$(pwd)/.elm
|
|
||||||
# 2.7) cabal build
|
|
||||||
# 2.8) cp .elm/0.19.0/package/versions.dat ...
|
|
||||||
|
|
||||||
# 3) generate a template for elm-elm.nix with:
|
|
||||||
# (
|
|
||||||
# echo "{";
|
|
||||||
# jq '.dependencies | .direct, .indirect | to_entries | .[] | { (.key) : { version : .value, sha256: "" } } ' \
|
|
||||||
# < ui/browser/elm.json \
|
|
||||||
# | sed 's/:/ =/' \
|
|
||||||
# | sed 's/^[{}]//' \
|
|
||||||
# | sed -E 's/(["}]),?$/\1;/' \
|
|
||||||
# | sed -E 's/"(version|sha256)"/\1/' \
|
|
||||||
# | grep -v '^$';
|
|
||||||
# echo "}"
|
|
||||||
# )
|
|
||||||
#
|
|
||||||
# ... then fill in the sha256s
|
|
||||||
|
|
||||||
# Notes:
|
|
||||||
|
|
||||||
# the elm binary embeds a piece of pre-compiled elm code, used by 'elm
|
|
||||||
# reactor'. this means that the build process for 'elm' effectively
|
|
||||||
# executes 'elm make'. that in turn expects to retrieve the elm
|
|
||||||
# dependencies of that code (elm/core, etc.) from
|
|
||||||
# package.elm-lang.org, as well as a cached bit of metadata
|
|
||||||
# (versions.dat).
|
|
||||||
|
|
||||||
# the makeDotElm function lets us retrieve these dependencies in the
|
|
||||||
# standard nix way. we have to copy them in (rather than symlink) and
|
|
||||||
# make them writable because the elm compiler writes other .dat files
|
|
||||||
# alongside the source code. versions.dat was produced during an
|
|
||||||
# impure build of this same code; the build complains that it can't
|
|
||||||
# update this cache, but continues past that warning.
|
|
||||||
|
|
||||||
# finally, we set ELM_HOME to point to these pre-fetched artifacts so
|
|
||||||
# that the default of ~/.elm isn't used.
|
|
||||||
|
|
||||||
let
|
let
|
||||||
fetchElmDeps = import ./fetchElmDeps.nix { inherit stdenv lib fetchurl; };
|
fetchElmDeps = import ./fetchElmDeps.nix { inherit stdenv lib fetchurl; };
|
||||||
hsPkgs = haskell.packages.ghc822.override {
|
hsPkgs = haskell.packages.ghc822.override {
|
||||||
|
@ -58,8 +10,8 @@ let
|
||||||
elm = overrideCabal (self.callPackage ./packages/elm.nix { }) (drv: {
|
elm = overrideCabal (self.callPackage ./packages/elm.nix { }) (drv: {
|
||||||
# sadly with parallelism most of the time breaks compilation
|
# sadly with parallelism most of the time breaks compilation
|
||||||
enableParallelBuilding = false;
|
enableParallelBuilding = false;
|
||||||
preConfigure = fetchElmDeps {
|
preConfigure = self.fetchElmDeps {
|
||||||
elmPackages = (import ./packages/elm-elm.nix);
|
elmPackages = (import ./packages/elm-srcs.nix);
|
||||||
versionsDat = ./versions.dat;
|
versionsDat = ./versions.dat;
|
||||||
};
|
};
|
||||||
buildTools = drv.buildTools or [] ++ [ makeWrapper ];
|
buildTools = drv.buildTools or [] ++ [ makeWrapper ];
|
||||||
|
@ -75,8 +27,6 @@ let
|
||||||
'';
|
'';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The elm-format expression is updated via a script in the https://github.com/avh4/elm-format repo:
|
The elm-format expression is updated via a script in the https://github.com/avh4/elm-format repo:
|
||||||
`pacakge/nix/build.sh`
|
`pacakge/nix/build.sh`
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
#!/usr/bin/env ruby
|
|
||||||
|
|
||||||
require 'json'
|
|
||||||
|
|
||||||
system("elm-package install -y")
|
|
||||||
depsSrc = JSON.parse(File.read("elm-stuff/exact-dependencies.json"))
|
|
||||||
deps = Hash[ depsSrc.map { |pkg, ver|
|
|
||||||
url = "https://github.com/#{pkg}/archive/#{ver}.tar.gz"
|
|
||||||
sha256 = `nix-prefetch-url #{url}`
|
|
||||||
|
|
||||||
[ pkg, { version: ver,
|
|
||||||
sha256: sha256.strip
|
|
||||||
}
|
|
||||||
]
|
|
||||||
} ]
|
|
||||||
|
|
||||||
File.open("package.nix", 'w') do |file|
|
|
||||||
file.puts "{"
|
|
||||||
for pkg, info in deps
|
|
||||||
file.puts " \"#{pkg}\" = {"
|
|
||||||
file.puts " version = \"#{info[:version]}\";"
|
|
||||||
file.puts " sha256 = \"#{info[:sha256]}\";"
|
|
||||||
file.puts " };"
|
|
||||||
end
|
|
||||||
file.puts "}"
|
|
||||||
end
|
|
|
@ -1,50 +0,0 @@
|
||||||
{
|
|
||||||
"elm/browser" = {
|
|
||||||
version = "1.0.0";
|
|
||||||
sha256 = "1apmvyax93nvmagwj00y16zx10kfv640cxpi64xgqbgy7d2wphy4";
|
|
||||||
};
|
|
||||||
"elm/core" = {
|
|
||||||
version = "1.0.0";
|
|
||||||
sha256 = "10kr86h4v5h4p0586q406a5wbl8xvr1jyrf6097zp2wb8sv21ylw";
|
|
||||||
};
|
|
||||||
"elm/html" = {
|
|
||||||
version = "1.0.0";
|
|
||||||
sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k";
|
|
||||||
};
|
|
||||||
"elm/http" = {
|
|
||||||
version = "1.0.0";
|
|
||||||
sha256 = "1igmm89ialzrjib1j8xagkxalq1x2gj4l0hfxcd66mpwmvg7psl8";
|
|
||||||
};
|
|
||||||
"elm/json" = {
|
|
||||||
version = "1.0.0";
|
|
||||||
sha256 = "1g0hafkqf2q633r7ir9wxpb1lnlzskhpsyi0h5bkzj0gl072zfnb";
|
|
||||||
};
|
|
||||||
"elm/project-metadata-utils" = {
|
|
||||||
version = "1.0.0";
|
|
||||||
sha256 = "1d4rd4grrnbdvj9gf00h7dr6hbkjzawgkzpizfrkp1z1pyr3mvq9";
|
|
||||||
};
|
|
||||||
"elm/svg" = {
|
|
||||||
version = "1.0.0";
|
|
||||||
sha256 = "08x0v8p9wm699jjmsnbq69pxv3jh60j4f6fg7y6hyr7xxj85y390";
|
|
||||||
};
|
|
||||||
"elm-explorations/markdown" = {
|
|
||||||
version = "1.0.0";
|
|
||||||
sha256 = "0k3110ixa4wwf3vkkdplagwah9ypr965qxr1y147rnsc1xsxmr6y";
|
|
||||||
};
|
|
||||||
"elm/parser" = {
|
|
||||||
version = "1.0.0";
|
|
||||||
sha256 = "0k4zlq30lrvawqvzwbvsl0hrmwf9s832mb41z7fdspm4549dj7wc";
|
|
||||||
};
|
|
||||||
"elm/time" = {
|
|
||||||
version = "1.0.0";
|
|
||||||
sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1";
|
|
||||||
};
|
|
||||||
"elm/url" = {
|
|
||||||
version = "1.0.0";
|
|
||||||
sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4";
|
|
||||||
};
|
|
||||||
"elm/virtual-dom" = {
|
|
||||||
version = "1.0.0";
|
|
||||||
sha256 = "0hm8g92h7z39km325dlnhk8n00nlyjkqp3r3jppr37k2k13md6aq";
|
|
||||||
};
|
|
||||||
}
|
|
62
pkgs/development/compilers/elm/packages/elm-srcs.nix
Normal file
62
pkgs/development/compilers/elm/packages/elm-srcs.nix
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
{
|
||||||
|
|
||||||
|
"elm-explorations/markdown" = {
|
||||||
|
sha256 = "0k3110ixa4wwf3vkkdplagwah9ypr965qxr1y147rnsc1xsxmr6y";
|
||||||
|
version = "1.0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
"elm/json" = {
|
||||||
|
sha256 = "1g0hafkqf2q633r7ir9wxpb1lnlzskhpsyi0h5bkzj0gl072zfnb";
|
||||||
|
version = "1.0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
"elm/html" = {
|
||||||
|
sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k";
|
||||||
|
version = "1.0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
"elm/svg" = {
|
||||||
|
sha256 = "08x0v8p9wm699jjmsnbq69pxv3jh60j4f6fg7y6hyr7xxj85y390";
|
||||||
|
version = "1.0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
"elm/project-metadata-utils" = {
|
||||||
|
sha256 = "1d4rd4grrnbdvj9gf00h7dr6hbkjzawgkzpizfrkp1z1pyr3mvq9";
|
||||||
|
version = "1.0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
"elm/browser" = {
|
||||||
|
sha256 = "1apmvyax93nvmagwj00y16zx10kfv640cxpi64xgqbgy7d2wphy4";
|
||||||
|
version = "1.0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
"elm/core" = {
|
||||||
|
sha256 = "10kr86h4v5h4p0586q406a5wbl8xvr1jyrf6097zp2wb8sv21ylw";
|
||||||
|
version = "1.0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
"elm/http" = {
|
||||||
|
sha256 = "1igmm89ialzrjib1j8xagkxalq1x2gj4l0hfxcd66mpwmvg7psl8";
|
||||||
|
version = "1.0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
"elm/parser" = {
|
||||||
|
sha256 = "0k4zlq30lrvawqvzwbvsl0hrmwf9s832mb41z7fdspm4549dj7wc";
|
||||||
|
version = "1.0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
"elm/url" = {
|
||||||
|
sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4";
|
||||||
|
version = "1.0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
"elm/time" = {
|
||||||
|
sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1";
|
||||||
|
version = "1.0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
"elm/virtual-dom" = {
|
||||||
|
sha256 = "0hm8g92h7z39km325dlnhk8n00nlyjkqp3r3jppr37k2k13md6aq";
|
||||||
|
version = "1.0.0";
|
||||||
|
};
|
||||||
|
}
|
|
@ -13,6 +13,7 @@ mkDerivation {
|
||||||
url = "https://github.com/elm/compiler";
|
url = "https://github.com/elm/compiler";
|
||||||
sha256 = "13jks6c6i80z71mjjfg46ri570g5ini0k3xw3857v6z66zcl56x4";
|
sha256 = "13jks6c6i80z71mjjfg46ri570g5ini0k3xw3857v6z66zcl56x4";
|
||||||
rev = "d5cbc41aac23da463236bbc250933d037da4055a";
|
rev = "d5cbc41aac23da463236bbc250933d037da4055a";
|
||||||
|
fetchSubmodules = true;
|
||||||
};
|
};
|
||||||
isLibrary = false;
|
isLibrary = false;
|
||||||
isExecutable = true;
|
isExecutable = true;
|
||||||
|
|
|
@ -1 +1,8 @@
|
||||||
cabal2nix https://github.com/elm/compiler --revision 32059a289d27e303fa1665e9ada0a52eb688f302 > packages/elm.nix
|
#!/usr/bin/env nix-shell
|
||||||
|
#!nix-shell -p cabal2nix elm2nix -i bash ../../..
|
||||||
|
|
||||||
|
cabal2nix https://github.com/elm/compiler --revision d5cbc41aac23da463236bbc250933d037da4055a > packages/elm.nix
|
||||||
|
elm2nix snapshot > versions.dat
|
||||||
|
pushd "$(nix-build -A elmPackages.elm.src --no-out-link ../../../..)/ui/browser"
|
||||||
|
elm2nix convert > $OLDPWD/packages/elm-srcs.nix
|
||||||
|
popd
|
||||||
|
|
Binary file not shown.
Loading…
Reference in a new issue