An now with the attachment.
#!/bin/bash # Put this script in a subfolder (e.g. gpwc) # of the guix source # And install sharness in it # https://github.com/chriscool/sharness # Install prove as well # https://linux.die.net/man/1/prove # To run the tests, invoke # prove gpwc.t
# Fill in the names of the packages you've been meddling with # In my case it was python-prompt-toolkit PACKAGES=(python-prompt-toolkit python-ipywidgets) test_description="Checking my meddling with ${PACKAGES[*]} did not break anything" . ./sharness.sh # Check that the new packages themselves are OK for package in "${PACKAGES[@]}" do test_expect_success "Build $package" " guix environment guix --pure -- ${SHARNESS_BUILD_DIRECTORY}/pre-inst-env guix build $package " test_expect_success "Lint $package" " guix environment guix --pure -- ${SHARNESS_BUILD_DIRECTORY}/pre-inst-env guix lint $package " test_expect_success "See if $package is reproducible" " guix environment guix --pure -- ${SHARNESS_BUILD_DIRECTORY}/pre-inst-env guix build --rounds=2 python-websockets " test_expect_success "Install $package" " guix environment guix --pure -- ${SHARNESS_BUILD_DIRECTORY}/pre-inst-env \ guix install --profile=./${package}-tmp-profile ${package} " done # Check the consequences of having meddled with the new packages dependents(){ guix environment guix --pure -- "${SHARNESS_BUILD_DIRECTORY}"/pre-inst-env \ guix graph --type=reverse-bag "$1" | \ grep @ | sed 's/.*\"\(.*\)@.*/\1/' } # Union of all the dependents for package in "${PACKAGES[@]}" do dependents "$package" done | sort -u > dependents.txt for package in $(cat dependents.txt) do test_expect_success "Build dependent $package" " guix environment guix --pure -- \"${SHARNESS_BUILD_DIRECTORY}\"/pre-inst-env guix build $package " profile="$SHARNESS_TRASH_DIRECTORY/$(echo $package | sed 's/\(.*\)@/\1'/)-tmp-profile" test_expect_success "Install dependent $package" " guix environment guix --pure -- ${SHARNESS_BUILD_DIRECTORY}/pre-inst-env \ guix install --profile=\"${profile}\" ${package} " done test_done
Edouard Klein writes: > Dear Guixers, > > I recently broke jupyter while updating python-prompt-toolkit (a mistake > I'm still trying to fix...) despite doing my best to follow the > instructions of the manual: > https://guix.gnu.org/manual/en/html_node/Packaging-Guidelines.html > https://guix.gnu.org/manual/en/html_node/Submitting-Patches.html#Submitting-Patches > > Because of the subtle consequences of editing a package are hard to keep > track of, I wrote the attached script (you need sharness to run it, but > with slight modification it can become a standalone script). > > This script goes beyond the instructions of the manual on two fronts: > - First, it not only tries to build the packages, but also to install > them, > - Secondly, it does not limit itself to the dependents (as listed by > guix refresh --list-dependents) of the packages one is meddling with, > but to the whole reverse bags (as listed by guix graph > --type=reverse-bag). > > Both these extensions are necessary to discover that my update broke the > jupyter package: > - jupyter builds, so if you don't try to install it you won't discover > it's broken > - the leafs of the dependency graph that depend on jupyter fail to build > for reasons unrelated to python-prompt-toolkit, so by just building the > leafs (which are what is being returned by guix refresh > --list-dependents) you can't discover jupyter's broken status. > > I think an update of the manual is in order (I've added it to my own > TODO queue, but I have no idea when I'll be able to get to it) but I > first wanted to share my script in case it may be useful to someone > else, and gather some feedback as to whether other developers have > encountered these kind of errors, and the way seasoned developers make > sure they don't push breaking changes. > > Cheers, > > Edouard.