all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Pierre-Henry Fröhring" <phfrohring@deeplinks.com>
To: Liliana Marie Prikler <liliana.prikler@gmail.com>
Cc: 66801@debbugs.gnu.org
Subject: [bug#66801] [PATCH 1/5] guix: build-system: rebar: build Erlang packages with dependencies.
Date: Mon, 13 Nov 2023 19:58:45 +0100	[thread overview]
Message-ID: <CAP84DVUtUsP7dorLPip2EWgNLEMCfL779BJckzSCniBHF0=PPg@mail.gmail.com> (raw)
In-Reply-To: <196ea16d78b1f2292b0dd7f3bfae254ae83c496f.camel@gmail.com>


[-- Attachment #1.1: Type: text/plain, Size: 2004 bytes --]

      This loses the previous erlang-depends logic, which unpackaged the
      already compiled packages.  I really don't think we should have
erlang be
      yet another rust that heats up the planet compiling leftpad over and
over
      again.  Can we somehow have that cake?

Okay, perhaps it would have been better to start working on the Mix
building system
and inform you simultaneously, instead of sending patches all at once. So,
let's
start anew.

I have taken into account all of your suggestions and have crafted this
patch
introducing the mix-build-system. Yes, there are ChangeLogs now. Currently,
the
"Machete" package is compiled and tested without repeatedly compiling
leftpad — i.e.,
considering pure Elixir packages up to transitive dependencies, it works as
expected. This is new.

As I'm learning how all this works, I'm not entirely sure that updating the
rebar
build system is absolutely necessary. I suppose we will understand more as
we add an
increasing number of Elixir packages, especially when incorporating Elixir
packages
with Erlang dependencies.

So, here's what's coming up:

1. A patch that introduces the mix-build-system variable.
2. Several patches that introduce Elixir packages, up to elixir-machete,
which is one
   of the few packages that includes tests in the tarball.

I guess the next steps are as follows:

1. To determine if the approach is acceptable. Will we boil the world by
compiling
   left-pad endlessly?
2. If the approach is deemed acceptable, the next step is to evaluate the
code. Is
   the code riddled with delicious regexes?
3. If the first two points are verified, it might be worthwhile to continue
   developing this implementation until Phoenix is successfully compiled
and tested
   as expected.

For reference, I have attached a file named `mix-build-system.org'.
This file contains a description of a prototype in Bash that
illustrates the approach taken in this patch.

Cheers.

[-- Attachment #1.2: Type: text/html, Size: 2218 bytes --]

[-- Attachment #2: mix-build-system.org --]
[-- Type: application/octet-stream, Size: 12495 bytes --]

# begin_properties
#+PROPERTY: header-args :noweb yes
# end_properties


#+TITLE: Mix build system


* Introduction
The aim is to introduce a ~mix build system~, a standardized method that enables Guix
to construct Elixir packages. Initially, we establish a Bash procedure for building
Elixir packages. We then explore the adaptation of this procedure to Guix.


* A procedure to build Elixir packages
The build procedure is divided into two steps: ~build_directory~ and
~compile_test_install~. These steps use arguments that mirror the project configuration
options outlined in [[https://hexdocs.pm/mix/1.14/Mix.Project.html][Mix.Project]].
#+begin_src bash
guix shell -D -f guix.scm -- bash build_directory \
     --archive <filename> \
     --build-per-environment <boolean> \
     --log <boolean> \
     --out <path> \
     --deps-path <path> \
     --test <boolean> \
     --workdir <path>

guix shell -C -D -f guix.scm -- bash compile_test_install \
     --archive <filename> \
     --build-per-environment <boolean> \
     --log <boolean> \
     --out <path> \
     --deps-path <path> \
     --test <boolean> \
     --workdir <path>
#+end_src
- ~archive~ refers to the name of the tarball to be retrieved from [[https://hex.pm/]], for example, ~phoenix-1.7.10.tar~.
- ~build-per-environment~ is a setting detailed in [[https://hexdocs.pm/mix/1.14/Mix.Project.html][Mix.Project]].
- ~log~ indicates whether the execution should be logged.
- ~test~ determines whether to run tests.
- ~out~ specifies the directory path where the package will be installed.
- ~deps~ is a configuration option explained in [[https://hexdocs.pm/mix/1.14/Mix.Project.html][Mix.Project]].
- ~workdir~ is either the absolute or relative path to the current directory where the build process will take place.


** Environment
:PROPERTIES:
:ID:       5f55ed2d-6301-460b-bc78-c4100e95e274
:END:

Except for ~tree~, all native inputs are necessary to execute the build
procedure. These inputs are listed in the ~native-inputs~ property of the package in
~guix.scm~.
#+caption: guix.scm
#+begin_src scheme :tangle guix.scm
(use-modules (guix build-system gnu)
             (gnu packages)
             (guix packages)
             (gnu packages base)
             (gnu packages elixir)
             (gnu packages erlang)
             (gnu packages admin))

(define glibc-utf8-locales
  (make-glibc-utf8-locales glibc
                           #:locales (list "en_US")
                           #:name "glibc-utf8-locales"))

(package
  (name "")
  (version "")
  (source #f)
  (build-system gnu-build-system)
  (native-inputs (list
                  glibc-utf8-locales
                  coreutils
                  which
                  elixir
                  erlang
                  rebar3
                  tree
                  ))
  (synopsis "")
  (description "")
  (home-page "")
  (license #f))
#+end_src

** The ~build_directory~ Step
The ~build_directory~ step involves using the network to fetch any external data
required for compiling and testing the package. Each step of the script is detailed
in the following subsections.
#+name: build_directory
#+begin_src bash :shebang "#! /usr/bin/env bash" :tangle build_directory :exports none
<<script-conf>>

<<arguments>>

<<debug>>

<<workdir>>

<<env>>

<<hex>>

<<rebar3>>

<<archive>>

<<unpack>>

<<deps>>

<<show:0>>
#+end_src


*** The Bash script is configured
#+name: script-conf
#+begin_src bash
set -euo pipefail
IFS=$'\n\t'
#+end_src


*** Arguments
#+name: arguments
#+begin_src bash
DEPS_DIR="deps"
LOG="false"
BUILD_PER_ENVIRONMENT="true"
while [ "${1:-}" != "" ]; do
  case "$1" in
    --archive)
        shift
        ARCHIVE=$1
      ;;
    --log)
        shift
        LOG=$1
      ;;
    --build-per-environment)
        shift
        BUILD_PER_ENVIRONMENT=$1
      ;;
    --out)
        shift
        OUT=$1
      ;;
    --deps-path)
        shift
        DEPS_DIR=$1
      ;;
    --test)
        shift
        TEST=$1
      ;;
    --workdir)
        shift
        WORKDIR=$1
      ;;
    ,*)
      echo "Invalid argument: $1"
      exit 1
  esac
  shift
done
#+end_src


*** Debug mode
#+name: debug
#+begin_src bash
[[ $LOG == "true" ]] && set -x
#+end_src


*** Work directory
#+name: workdir
#+begin_src bash
mkdir -p $WORKDIR
cd $WORKDIR
#+end_src


*** Environment variables
#+name: env
#+begin_src bash :exports none
<<env:0>>

<<env:1>>

<<env:2>>

<<env:3>>

<<env:4>>

<<env:5>>
#+end_src

The current locale must be set to a ~UTF-8~ compatible format; otherwise, the Erlang VM
will emit a warning: "Warning: The VM is running with the native name encoding of
latin1, which may cause Elixir to malfunction, as it expects UTF-8. Please ensure
your locale is set to UTF-8 (which can be verified by running 'locale' in your
shell)."
#+name: env:0
#+begin_src bash
export LC_ALL=en_US.UTF-8
#+end_src

~mix~ expects to have access to a few local directories.
#+name: env:1
#+begin_src bash
export MIX_HOME=$PWD/mix-home
export MIX_ARCHIVES=$MIX_HOME/archives
mkdir -p "$MIX_ARCHIVES"
#+end_src

~mix~ expects to install dependencies sources in ~DEPS_DIR~.
#+name: env:2
#+begin_src bash
mkdir -p $DEPS_DIR
#+end_src

~mix~ installs compilations artifacts under the ~BUILD_DIR~ directory.
#+name: env:3
#+begin_src bash
export BUILD_DIR=_build
mkdir -p "$BUILD_DIR"
#+end_src

~mix~ expects to fetch tarballs from ~HEX_PM~.
#+name: env:4
#+begin_src bash
export HEX_PM=https://repo.hex.pm/tarballs
#+end_src

This procedure installs compilation artifacts under ~ELIXIR_LIB~. ~1.14~ is the version
number of the current Elixir used.
#+name: env:5
#+begin_src bash
export ELIXIR_LIB=lib/elixir/1.14
#+end_src


*** Hex is installed
Hex must be installed under ~MIX_ARCHIVES~; otherwise, ~mix~ will refuse to compile.
#+name: hex
#+begin_src bash
mix local.hex --force
[[ $LOG == "true" ]] && tree $MIX_HOME
#+end_src


*** Rebar3 is installed
Rebar3 must be installed under ~MIX_ARCHIVES~; otherwise, ~mix~ will refuse to compile if
Erlang dependencies are present.
#+name: rebar3
#+begin_src bash
mix local.rebar --force rebar3 $(which rebar3)
[[ $LOG == "true" ]] && tree $MIX_HOME
#+end_src


*** The archive is fetched
#+name: archive
#+begin_src bash
if [[ -f "../$ARCHIVE" ]]; then
    cp "../$ARCHIVE" ./
else
    wget $HEX_PM/$ARCHIVE >/dev/null
    cp "$ARCHIVE" ../
fi
ls -al "$ARCHIVE"
#+end_src


*** The archive is unpacked
Sources are unpacked in the current directory.
#+name: unpack
#+begin_src bash
tar xf $ARCHIVE
tar xvf contents.tar.gz
#+end_src


*** Dependencies are installed
:PROPERTIES:
:ID:       9526e510-90cf-4595-bcad-4411ea822c23
:END:

#+name: deps
#+begin_src bash :exports none
<<deps:0>>

<<deps:1>>

<<deps:2>>
#+end_src

~MIX_ENVS~ represents all environments that should be considered for building and
testing the package.
#+name: deps:0
#+begin_src bash
if [[ "$BUILD_PER_ENVIRONMENT" == "true" ]]; then
    MIX_ENVS=( "prod" )
    if [[ $TEST == "true" ]]; then
        MIX_ENVS+=( "test" )
    fi
else
    MIX_ENVS=( "shared" )
fi
#+end_src

then, for each ~MIX_ENV~, we get the dependencies and compile them. For each
environment ~MIX_ENV~, the result will be installed in ~_build/$MIX_ENV~.
#+name: deps:1
#+begin_src bash
for profile in ${MIX_ENVS[@]}; do
    export MIX_ENV=$profile

    mix deps.get --only $MIX_ENV
    [[ $LOG == "true" ]] && tree $DEPS_DIR

    mix deps.compile
    [[ $LOG == "true" ]] && tree $BUILD_DIR
done
#+end_src

then, we remove the sources as we only need the compiled dependencies.
#+name: deps:2
#+begin_src bash
rm -rf $DEPS_DIR
#+end_src


*** What has been built is shown
#+name: show:0
#+begin_src bash
tree -L 3 ${BUILD_DIR}
tree -L 3 ${MIX_HOME}
#+end_src


** The ~compile_test_install~ step
The ~compile_test_install~ step compiles, tests, and installs the package within a
container.
#+name: compile_test_install
#+begin_src bash :shebang "#! /usr/bin/env bash" :tangle compile_test_install :exports none
<<script-conf>>

<<arguments>>

<<debug>>

<<workdir>>

<<env>>

<<test>>

<<compile>>

<<install>>

<<show:1>>
#+end_src


*** The package is tested
The compilation environment ~MIX_ENV~ is computed then the package is compiled,
installed in ~_build/$MIX_ENV~ and tested.
#+name: test
#+begin_src bash
if [[ "$TEST" == "true" ]]; then
    if [[ "$BUILD_PER_ENVIRONMENT" == "true" ]]; then
        export MIX_ENV=test
    else
        export MIX_ENV=shared
    fi
    TEST_DIR=$BUILD_DIR/$MIX_ENV
    mix test --no-deps-check
    [[ $LOG == "true" ]] && tree $TEST_DIR
fi
#+end_src


*** The package is built
The compilation environment ~MIX_ENV~ is computed then the package is compiled and
installed in ~_build/$MIX_ENV~.
#+name: compile
#+begin_src bash
if [[ "$BUILD_PER_ENVIRONMENT" == "true" ]]; then
    export MIX_ENV=prod
else
    export MIX_ENV=shared
fi
PROD_DIR=$BUILD_DIR/$MIX_ENV
mix compile --no-deps-check
[[ $LOG == "true" ]] && tree $PROD_DIR
#+end_src


*** The package is installed
The Elixir version number ~X.Y~ is computed and the built package is installed under
~$OUT/lib/elixir/X.Y/~.
#+name: install
#+begin_src bash
NAME="${ARCHIVE%%-*}"
INSTALL_DIR=$OUT/${ELIXIR_LIB}/${NAME}
mkdir -p $INSTALL_DIR
# …/* because we don't want to copy hidden files.
cp -vLrf $PROD_DIR/${ELIXIR_LIB%%/*}/${NAME}/* $INSTALL_DIR
#+end_src


*** What has been built is shown
#+name: show:1
#+begin_src bash
tree -L 3 $BUILD_DIR
tree -L 4 $OUT
#+end_src


* A few packages have been built
** ~makeup~
#+begin_src bash
WORKDIR=$PWD/workdir
INSTALLDIR=$WORKDIR/install
rm -rf $WORKDIR $INSTALLDIR

guix shell -D -f guix.scm -- bash build_directory \
     --archive makeup-1.1.1.tar \
     --log true \
     --out $INSTALLDIR \
     --deps-path deps \
     --test false \
     --workdir $WORKDIR

guix shell -C -D -f guix.scm -- bash compile_test_install \
     --archive makeup-1.1.1.tar \
     --log true \
     --out $INSTALLDIR \
     --deps-path deps \
     --test false \
     --workdir $WORKDIR
#+end_src


** ~machete~
#+begin_src bash
WORKDIR=$PWD/workdir
INSTALLDIR=$WORKDIR/install
rm -rf $WORKDIR $INSTALLDIR

guix shell -D -f guix.scm -- bash build_directory \
     --archive machete-0.2.8.tar \
     --log true \
     --out $INSTALLDIR \
     --deps-path deps \
     --test true \
     --workdir $WORKDIR

guix shell -C -D -f guix.scm -- bash compile_test_install \
     --archive machete-0.2.8.tar \
     --log true \
     --out $INSTALLDIR \
     --deps-path deps \
     --test true \
     --workdir $WORKDIR
#+end_src


** ~phoenix~
#+begin_src bash
WORKDIR=$PWD/workdir
INSTALLDIR=$WORKDIR/install
rm -rf $WORKDIR $INSTALLDIR

guix shell -D -f guix.scm -- bash build_directory \
     --archive phoenix-1.7.10.tar \
     --log true \
     --out $INSTALLDIR \
     --deps-path deps \
     --test false \
     --workdir $WORKDIR

guix shell -C -D -f guix.scm -- bash compile_test_install \
     --archive phoenix-1.7.10.tar \
     --log true \
     --out $INSTALLDIR \
     --deps-path deps \
     --test false \
     --workdir $WORKDIR
#+end_src


* Adapting the procedure to Guix
The goal is to answer the question: given the above procedure, how to adapt it to
Guix? We examine each step and, when necessary, map it to Guix.
1) The build procedure should match the ~mix-build-system~ variable.
2) For all Elixir package, the ~native-inputs~ of ~guix.scm~ except ~tree~ should be in
   default native-inputs.
3) The Elixir version number should be computed from the Elixir used to compile.
4) Arguments should be provided: ~#:tests?~, ~#:deps-path~, ~#:build-per-environment~.
5) A phase should install ~Hex~.
6) A phase should install ~Rebar3~.
7) The ~unpack~ phase should be adapted to tarballs and source checkouts.
8) All Erlang and Elixir packages should be deduced from all the inputs of the
   package being built and installed in the necessary build directories to mimic the
   [[id:9526e510-90cf-4595-bcad-4411ea822c23][Dependencies are installed]].


* Conclusion
  A preliminary build procedure for Elixir packages, designed for integration into
  Guix, has been presented. The issue of bit reproducibility within the build process
  requires further investigation. If the current methodology is deemed satisfactory,
  the subsequent step will be to implement this procedure in the Guix build system.


* Annex
** ~build_directory~
#+begin_src bash
<<build_directory>>
#+end_src


** ~compile_test_install~
#+begin_src bash
<<compile_test_install>>
#+end_src


# Local Variables:
# fill-column: 85
# End:

  reply	other threads:[~2023-11-13 18:59 UTC|newest]

Thread overview: 152+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-28 20:19 [bug#66801] [PATCH] mix-build-system: draft 1 Pierre-Henry Fröhring
2023-10-28 21:43 ` Liliana Marie Prikler
2023-10-29 17:19   ` Pierre-Henry Fröhring
2023-10-29 14:36 ` [bug#66801] [PATCH va3e5ae0f..37252e07 01/32] rebar-build-system and packages Pierre-Henry Fröhring
2023-10-29 14:36   ` [bug#66801] [PATCH va3e5ae0f..37252e07 02/32] gnu: erlang updated Pierre-Henry Fröhring
2023-10-29 19:22     ` Liliana Marie Prikler
2023-10-29 14:36   ` [bug#66801] [PATCH va3e5ae0f..37252e07 03/32] gnu: erlang-certifi: moved to erlang-xyz.scm Pierre-Henry Fröhring
2023-10-29 19:25     ` Liliana Marie Prikler
2023-10-29 14:36   ` [bug#66801] [PATCH va3e5ae0f..37252e07 04/32] gnu: erlang-getopt: " Pierre-Henry Fröhring
2023-10-29 14:36   ` [bug#66801] [PATCH va3e5ae0f..37252e07 05/32] gnu: erlang-edown: " Pierre-Henry Fröhring
2023-10-29 14:36   ` [bug#66801] [PATCH va3e5ae0f..37252e07 06/32] gnu: erlang-rebar3-git-vsn: " Pierre-Henry Fröhring
2023-10-29 19:31     ` Liliana Marie Prikler
2023-10-29 19:42       ` Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 07/32] gnu: erlang-rebar3-raw-deps: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 08/32] gnu: erlang-rebar3-proper: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 09/32] gnu: erlang-bbmustache: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 10/32] gnu: erlang-cf: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 11/32] gnu: erlang-yamerl: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 12/32] gnu: erlang-covertool: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 13/32] gnu: erlang-cth-readable: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 14/32] gnu: erlang-erlware-commons: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 15/32] gnu: erlang-eunit-formatters: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 16/32] gnu: erlang-proper: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 17/32] gnu: erlang-hex-core: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 18/32] gnu: erlang-jsx: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 19/32] gnu: erlang-relx: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 20/32] gnu: erlang-providers: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 21/32] gnu: erlang-jsone: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 22/32] gnu: erlang-parse-trans: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 23/32] gnu: erlang-unicode-util-compat: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 24/32] gnu: erlang-idna: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 25/32] gnu: erlang-bear: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 26/32] gnu: erlang-erlang-color: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 27/32] gnu: erlang-tdiff: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 28/32] gnu: erlang-rebar3-ex-doc: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 29/32] gnu: erlang-samovar: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 30/32] gnu: erlang-geas: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 31/32] gnu: erlang-covertool: " Pierre-Henry Fröhring
2023-10-29 14:37   ` [bug#66801] [PATCH va3e5ae0f..37252e07 32/32] gnu: erlang-telemetry: " Pierre-Henry Fröhring
2023-10-29 18:29   ` [bug#66801] [PATCH va3e5ae0f..37252e07 01/32] rebar-build-system and packages Liliana Marie Prikler
2023-10-29 22:14     ` Pierre-Henry Fröhring
2023-10-30  5:29       ` Liliana Marie Prikler
2023-10-30 12:30         ` Pierre-Henry Fröhring
2023-10-30 20:40           ` Liliana Marie Prikler
2023-11-08  9:21 ` [bug#66801] A minimal set of changes Pierre-Henry Fröhring
2023-11-08  9:22 ` [bug#66801] [PATCH 0/5] build Erlang packages with dependencies Pierre-Henry Fröhring
2023-11-08  9:22   ` [bug#66801] [PATCH 1/5] guix: build-system: rebar: " Pierre-Henry Fröhring
2023-11-08 20:40     ` Liliana Marie Prikler
2023-11-13 18:58       ` Pierre-Henry Fröhring [this message]
2023-11-08  9:22   ` [bug#66801] [PATCH 2/5] gnu: Add erlang-goldrush Pierre-Henry Fröhring
2023-11-08  9:22   ` [bug#66801] [PATCH 3/5] gnu: Add erlang-lager Pierre-Henry Fröhring
2023-11-08  9:22   ` [bug#66801] [PATCH 4/5] gnu: Add erlang-unicode-util-compat Pierre-Henry Fröhring
2023-11-08  9:22   ` [bug#66801] [PATCH 5/5] gnu: Add erlang-idna Pierre-Henry Fröhring
2023-11-13 20:26 ` [bug#66801] ['PATCH v2' 01/14] build-system: Add mix-build-system Pierre-Henry Fröhring
2023-11-13 21:22   ` Liliana Marie Prikler
2023-11-14 10:37     ` Pierre-Henry Fröhring
2023-11-14 17:53       ` Liliana Marie Prikler
2023-11-15  9:57         ` Pierre-Henry Fröhring
2023-11-15  9:59           ` Pierre-Henry Fröhring
2023-11-15 12:40           ` [bug#66801] Fwd: " Pierre-Henry Fröhring
2023-11-15 18:36           ` [bug#66801] " Liliana Marie Prikler
2023-11-15 22:49             ` Pierre-Henry Fröhring
2023-11-15 22:51 ` [bug#66801] [PATCH v3 " Pierre-Henry Fröhring
2023-11-16  2:05   ` Liliana Marie Prikler
2023-11-16 13:01     ` Pierre-Henry Fröhring
2023-11-16 15:11       ` Liliana Marie Prikler
2023-11-16 18:12         ` Pierre-Henry Fröhring
2023-11-16 19:34           ` Liliana Marie Prikler
2023-11-17  7:36             ` Pierre-Henry Fröhring
2023-11-17  8:03 ` Pierre-Henry Fröhring
2023-11-17 19:24   ` Liliana Marie Prikler
2023-11-18  4:44     ` Pierre-Henry Fröhring
2023-11-18  7:12       ` Liliana Marie Prikler
2023-11-18 10:19         ` Pierre-Henry Fröhring
2023-11-18 11:11           ` Liliana Marie Prikler
2023-11-18 12:02             ` Pierre-Henry Fröhring
2023-12-07 22:34 ` [bug#66801] [PATCH] " Pierre-Henry Fröhring
2023-12-08  7:25   ` Liliana Marie Prikler
2023-12-08  8:01     ` Pierre-Henry Fröhring
2023-12-08  9:52       ` Liliana Marie Prikler
2023-12-08 10:17         ` Pierre-Henry Fröhring
2023-12-08 11:50           ` Liliana Marie Prikler
2023-12-08 14:20             ` Pierre-Henry Fröhring
2023-12-08 14:55               ` Liliana Marie Prikler
2023-12-08 11:10 ` [bug#66801] [PATCH 01/15] " Pierre-Henry Fröhring
2023-12-08 11:10   ` [bug#66801] [PATCH 02/15] gnu: elixir: Wrap binaries Pierre-Henry Fröhring
2023-12-08 11:10   ` [bug#66801] [PATCH 03/15] gnu: Add elixir-hex Pierre-Henry Fröhring
2023-12-08 14:27 ` [bug#66801] [PATCH v3 01/15] build-system: Add mix-build-system Pierre-Henry Fröhring
2023-12-08 14:27   ` [bug#66801] [PATCH v3 02/15] gnu: elixir: Wrap binaries Pierre-Henry Fröhring
2023-12-08 14:27   ` [bug#66801] [PATCH v3 03/15] gnu: Add elixir-hex Pierre-Henry Fröhring
2023-12-08 15:29     ` Liliana Marie Prikler
2023-12-08 15:03   ` [bug#66801] [PATCH v3 04/15] gnu: Add elixir-nimble-parsec Pierre-Henry Fröhring
2023-12-08 15:30     ` Liliana Marie Prikler
2023-12-08 15:03   ` [bug#66801] [PATCH v3 05/15] gnu: Add elixir-makeup Pierre-Henry Fröhring
2023-12-08 15:30     ` Liliana Marie Prikler
2023-12-08 15:03   ` [bug#66801] [PATCH v3 06/15] gnu: Add elixir-jason Pierre-Henry Fröhring
2023-12-08 15:31     ` Liliana Marie Prikler
2023-12-08 15:03   ` [bug#66801] [PATCH v3 07/15] gnu: Add elixir-file-system Pierre-Henry Fröhring
2023-12-08 15:33     ` Liliana Marie Prikler
2023-12-08 15:03   ` [bug#66801] [PATCH v3 08/15] gnu: Add elixir-bunt Pierre-Henry Fröhring
2023-12-08 15:33     ` Liliana Marie Prikler
2023-12-08 15:03   ` [bug#66801] [PATCH v3 09/15] gnu: Add elixir-inch-ex Pierre-Henry Fröhring
2023-12-08 15:35     ` Liliana Marie Prikler
2023-12-08 15:03   ` [bug#66801] [PATCH v3 10/15] gnu: Add elixir-castore Pierre-Henry Fröhring
2023-12-08 15:36     ` Liliana Marie Prikler
2023-12-08 15:03   ` [bug#66801] [PATCH v3 11/15] gnu: Add elixir-excoveralls Pierre-Henry Fröhring
2023-12-08 15:38     ` Liliana Marie Prikler
2023-12-08 15:03   ` [bug#66801] [PATCH v3 12/15] gnu: Add elixir-credo Pierre-Henry Fröhring
2023-12-08 15:39     ` Liliana Marie Prikler
2023-12-08 15:03   ` [bug#66801] [PATCH v3 13/15] gnu: Add elixir-erlex Pierre-Henry Fröhring
2023-12-08 15:39     ` Liliana Marie Prikler
2023-12-08 15:03   ` [bug#66801] [PATCH v3 14/15] gnu: Add elixir-dialyxir Pierre-Henry Fröhring
2023-12-08 15:03   ` [bug#66801] [PATCH v3 15/15] gnu: Add elixir-machete Pierre-Henry Fröhring
2023-12-08 15:40     ` Liliana Marie Prikler
2023-12-08 17:30       ` Pierre-Henry Fröhring
2023-12-08 18:01         ` Liliana Marie Prikler
2023-12-08 18:19           ` Pierre-Henry Fröhring
2023-12-08 18:35 ` [bug#66801] [PATCH v4 01/15] build-system: Add mix-build-system Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 02/15] gnu: elixir: Wrap binaries Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 03/15] gnu: Add elixir-hex Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 04/15] gnu: Add elixir-nimble-parsec Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 05/15] gnu: Add elixir-makeup Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 06/15] gnu: Add elixir-jason Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 07/15] gnu: Add elixir-file-system Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 08/15] gnu: Add elixir-bunt Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 09/15] gnu: Add elixir-inch-ex Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 10/15] gnu: Add elixir-castore Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 11/15] gnu: Add elixir-excoveralls Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 12/15] gnu: Add elixir-credo Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 13/15] gnu: Add elixir-erlex Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 14/15] gnu: Add elixir-dialyxir Pierre-Henry Fröhring
2023-12-08 18:35   ` [bug#66801] [PATCH v4 15/15] gnu: Add elixir-machete Pierre-Henry Fröhring
2023-12-10 12:34 ` [bug#66801] (no subject) Pierre-Henry Fröhring
2023-12-10 13:03 ` [bug#66801] [PATCH v5 01/15] build-system: Add mix-build-system Pierre-Henry Fröhring
2023-12-10 13:03   ` [bug#66801] [PATCH v5 02/15] gnu: elixir: Wrap binaries Pierre-Henry Fröhring
2023-12-10 13:03   ` [bug#66801] [PATCH v5 03/15] gnu: Add elixir-hex Pierre-Henry Fröhring
2023-12-10 13:03   ` [bug#66801] [PATCH v5 04/15] gnu: Add elixir-nimble-parsec Pierre-Henry Fröhring
2023-12-10 13:03   ` [bug#66801] [PATCH v5 05/15] gnu: Add elixir-makeup Pierre-Henry Fröhring
2023-12-10 13:03   ` [bug#66801] [PATCH v5 06/15] gnu: Add elixir-jason Pierre-Henry Fröhring
2023-12-10 13:04   ` [bug#66801] [PATCH v5 07/15] gnu: Add elixir-file-system Pierre-Henry Fröhring
2023-12-10 13:04   ` [bug#66801] [PATCH v5 08/15] gnu: Add elixir-bunt Pierre-Henry Fröhring
2023-12-10 13:04   ` [bug#66801] [PATCH v5 09/15] gnu: Add elixir-inch-ex Pierre-Henry Fröhring
2023-12-10 13:04   ` [bug#66801] [PATCH v5 10/15] gnu: Add elixir-castore Pierre-Henry Fröhring
2023-12-10 13:04   ` [bug#66801] [PATCH v5 11/15] gnu: Add elixir-excoveralls Pierre-Henry Fröhring
2023-12-10 13:04   ` [bug#66801] [PATCH v5 12/15] gnu: Add elixir-credo Pierre-Henry Fröhring
2023-12-10 13:04   ` [bug#66801] [PATCH v5 13/15] gnu: Add elixir-erlex Pierre-Henry Fröhring
2023-12-10 13:04   ` [bug#66801] [PATCH v5 14/15] gnu: Add elixir-dialyxir Pierre-Henry Fröhring
2023-12-10 13:04   ` [bug#66801] [PATCH v5 15/15] gnu: Add elixir-machete Pierre-Henry Fröhring
2023-12-10 14:20   ` [bug#66801] [PATCH v5 01/15] build-system: Add mix-build-system Liliana Marie Prikler
2023-12-10 14:22     ` Pierre-Henry Fröhring
2023-12-18  3:01       ` bug#66801: " Liliana Marie Prikler
2023-12-10 13:05 ` [bug#66801] Erratum Pierre-Henry Fröhring

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAP84DVUtUsP7dorLPip2EWgNLEMCfL779BJckzSCniBHF0=PPg@mail.gmail.com' \
    --to=phfrohring@deeplinks.com \
    --cc=66801@debbugs.gnu.org \
    --cc=liliana.prikler@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.