diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Revision history for SJW
 
+## 0.1.2.4 -- 2022-02-13
+
+* Fix test data missing from sdist archive
+* Bump dependencies versions
+* Add a guix package for development
+
 ## 0.1.2.3 -- 2021-01-20
 
 * Ensure compilation on Nix as far as 18.09
diff --git a/SJW.cabal b/SJW.cabal
--- a/SJW.cabal
+++ b/SJW.cabal
@@ -1,18 +1,18 @@
-cabal-version:       >=1.10
+cabal-version:       2.4
 -- Initial package description 'SJW.cabal' generated by 'cabal init'.  For
 -- further documentation, see http://haskell.org/cabal/users-guide/
 
 name:                SJW
-version:             0.1.2.3
+version:             0.1.2.4
 synopsis:            The Simple Javascript Wrench
 description:
-  SJW is a very simple tool to pack several JS «modules» into a single script.
+  SJW is a very simple tool to pack several JS modules into a single script.
   It doesn't really do proper compilation work (yet) except resolving the
   modules dependencies and detecting import loops but it provides each module
   with an independent execution context in the resulting script.
 homepage:            https://git.marvid.fr/Tissevert/SJW
 -- bug-reports:
-license:             BSD3
+license:             BSD-3-Clause
 license-file:        LICENSE
 author:              Tissevert
 maintainer:          tissevert+devel@marvid.fr
@@ -20,7 +20,12 @@
 category:            Web
 build-type:          Simple
 extra-source-files:  CHANGELOG.md
+                   , test/data/**/*.js
 
+source-repository head
+  type:          git
+  location:      http://git.marvid.fr/Tissevert/SJW.git
+
 library
   exposed-modules:     SJW
   other-modules:       SJW.Compiler
@@ -29,15 +34,15 @@
                      , SJW.Module.File
                      , SJW.Module.Imports
                      , SJW.Source
-  build-depends:       attoparsec >= 0.13.2 && < 0.14
-                     , base >=4.9 && <4.15
+  build-depends:       attoparsec >= 0.13.2 && < 0.15
+                     , base >=4.9 && <4.16
                      , containers >= 0.5.0 && < 0.7
                      , directory >= 1.2.0 && < 1.4
                      , filepath >= 1.4.2 && < 1.5
                      , mtl >= 2.2.2 && < 2.3
                      , random >= 1.1 && < 1.3
-                     , text >= 1.2.3 && < 1.3
-                     , time >= 1.8.0 && < 1.12
+                     , text >= 1.2.3 && < 2.1
+                     , time >= 1.8.0 && < 1.14
                      , unix >= 2.7.2 && < 2.8
   hs-source-dirs:      src
   default-language:    Haskell2010
@@ -46,10 +51,11 @@
 executable sjw
   main-is:             src/Main.hs
   other-modules:       Paths_SJW
+  autogen-modules:     Paths_SJW
   -- other-extensions:
   build-depends:       attoparsec
                      , base
-                     , optparse-applicative >= 0.14 && < 0.17
+                     , optparse-applicative >= 0.14 && < 0.18
                      , SJW
                      , text
   default-language:    Haskell2010
diff --git a/test/data/cycle/A.js b/test/data/cycle/A.js
new file mode 100644
--- /dev/null
+++ b/test/data/cycle/A.js
@@ -0,0 +1,5 @@
+import B;
+
+return {
+  s: 'a' + B.s
+};
diff --git a/test/data/cycle/B.js b/test/data/cycle/B.js
new file mode 100644
--- /dev/null
+++ b/test/data/cycle/B.js
@@ -0,0 +1,5 @@
+import C;
+
+return {
+  s: 'b' + C.s
+};
diff --git a/test/data/cycle/C.js b/test/data/cycle/C.js
new file mode 100644
--- /dev/null
+++ b/test/data/cycle/C.js
@@ -0,0 +1,5 @@
+import A;
+
+return {
+  s: 'c' + A.s
+}
diff --git a/test/data/cycle/Main.js b/test/data/cycle/Main.js
new file mode 100644
--- /dev/null
+++ b/test/data/cycle/Main.js
@@ -0,0 +1,3 @@
+import A;
+
+console.log(A.s);
diff --git a/test/data/diamond/A.js b/test/data/diamond/A.js
new file mode 100644
--- /dev/null
+++ b/test/data/diamond/A.js
@@ -0,0 +1,5 @@
+import C;
+
+return {
+  s: "Hello" + C.punctuation
+};
diff --git a/test/data/diamond/B.js b/test/data/diamond/B.js
new file mode 100644
--- /dev/null
+++ b/test/data/diamond/B.js
@@ -0,0 +1,5 @@
+import C;
+
+return {
+  s: "world" + C.exclamation
+};
diff --git a/test/data/diamond/C.js b/test/data/diamond/C.js
new file mode 100644
--- /dev/null
+++ b/test/data/diamond/C.js
@@ -0,0 +1,4 @@
+return {
+  punctuation: ", ",
+  exclamation: " !"
+};
diff --git a/test/data/diamond/Main.js b/test/data/diamond/Main.js
new file mode 100644
--- /dev/null
+++ b/test/data/diamond/Main.js
@@ -0,0 +1,4 @@
+import A;
+import B;
+
+console.log(A.s + B.s);
diff --git a/test/data/loop/A.js b/test/data/loop/A.js
new file mode 100644
--- /dev/null
+++ b/test/data/loop/A.js
@@ -0,0 +1,5 @@
+import A;
+
+return {
+  s: 'a' + A.s
+};
diff --git a/test/data/loop/Main.js b/test/data/loop/Main.js
new file mode 100644
--- /dev/null
+++ b/test/data/loop/Main.js
@@ -0,0 +1,3 @@
+import A;
+
+console.log(A.s);
diff --git a/test/data/q/A.js b/test/data/q/A.js
new file mode 100644
--- /dev/null
+++ b/test/data/q/A.js
@@ -0,0 +1,5 @@
+import B;
+
+return {
+	s: 'a' + B.s;
+};
diff --git a/test/data/q/B.js b/test/data/q/B.js
new file mode 100644
--- /dev/null
+++ b/test/data/q/B.js
@@ -0,0 +1,5 @@
+import C;
+
+return {
+  s: 'b' + C.s
+};
diff --git a/test/data/q/C.js b/test/data/q/C.js
new file mode 100644
--- /dev/null
+++ b/test/data/q/C.js
@@ -0,0 +1,5 @@
+import D;
+
+return {
+  s: 'c' + D.s
+}
diff --git a/test/data/q/D.js b/test/data/q/D.js
new file mode 100644
--- /dev/null
+++ b/test/data/q/D.js
@@ -0,0 +1,5 @@
+import B;
+
+return {
+  s: 'd' + B.s
+}
diff --git a/test/data/q/Main.js b/test/data/q/Main.js
new file mode 100644
--- /dev/null
+++ b/test/data/q/Main.js
@@ -0,0 +1,3 @@
+import A;
+
+console.log(A.s);
diff --git a/test/data/simple/A.js b/test/data/simple/A.js
new file mode 100644
--- /dev/null
+++ b/test/data/simple/A.js
@@ -0,0 +1,3 @@
+return {
+  s: "Hello, "
+};
diff --git a/test/data/simple/B.js b/test/data/simple/B.js
new file mode 100644
--- /dev/null
+++ b/test/data/simple/B.js
@@ -0,0 +1,3 @@
+return {
+  s: "world !"
+};
diff --git a/test/data/simple/Main.js b/test/data/simple/Main.js
new file mode 100644
--- /dev/null
+++ b/test/data/simple/Main.js
@@ -0,0 +1,4 @@
+import A;
+import B;
+
+console.log(A.s + B.s);
diff --git a/test/data/triangle/Main.js b/test/data/triangle/Main.js
new file mode 100644
--- /dev/null
+++ b/test/data/triangle/Main.js
@@ -0,0 +1,4 @@
+import N;
+import O;
+
+console.log(N.s + O.s);
diff --git a/test/data/triangle/N.js b/test/data/triangle/N.js
new file mode 100644
--- /dev/null
+++ b/test/data/triangle/N.js
@@ -0,0 +1,5 @@
+import O;
+
+return {
+  s: O.s
+};
diff --git a/test/data/triangle/O.js b/test/data/triangle/O.js
new file mode 100644
--- /dev/null
+++ b/test/data/triangle/O.js
@@ -0,0 +1,3 @@
+return {
+  s: 'o'
+};
