Files
alire-index-community/scripts/gh-build-crate.sh
T
Alejandro R Mosteo 59ba4b0335 Fix spurious detection of alire.toml during build test (#201)
The detection is correct in the sense that the file is at ./alire/alire.toml,
but it is not an old manifest but the proper manifest of the alire repo. This
is an unexpected and unwanted interaction that should go away once the check
for old manifests is removed. For now, it's simpler to just do the tests in a
clean folder.
2020-11-09 13:43:28 +01:00

131 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
trap 'echo "ERROR at line ${LINENO} (code: $?)" >&2' ERR
trap 'echo "Interrupted" >&2 ; exit 1' INT
set -o errexit
set -o nounset
# See whats happening
git log --graph --decorate --pretty=oneline --abbrev-commit --all | head -30
# Detect changes
CHANGES=$(git diff --name-only HEAD~1)
# Bulk changes for the record
echo Changed files: $CHANGES
# Import the out-of-docker built alr
export PATH+=:${PWD}/alire/bin
# Change to a new testing folder to avoid spurious detection of ./alire/alire.toml
mkdir testdir
cd testdir
# Show alr metadata
alr version
# Configure index
alr index --name local --add ./index
# Test crate
for file in $CHANGES; do
if [[ $file == index.toml ]]; then
echo Skipping index metadata file: $file
continue
fi
if [[ $file != *.toml ]]; then
echo Skipping non-crate file: $file
continue
fi
if ! [ -f ./$file ]; then
echo Skipping deleted file: $file
continue
fi
# Checks passed, this is a crate we must test
is_system=false
crate=$(basename $file .toml | cut -f1 -d-)
echo Testing crate: $crate
# Show info for the record
echo PLATFORM-INDEPENDENT CRATE INFO $crate
alr show $crate
alr show --external $crate
alr show --external-detect $crate
echo PLATFORM-DEPENDENT CRATE INFO $crate
alr show --system $crate
alr show --external --system $crate
alr show --external-detect --system $crate
crateinfo=$(alr show --external-detect --system $crate)
echo CRATE DEPENDENCIES $crate
alr show --solve --detail --external-detect $crate
solution=$(alr show --solve --detail --external-detect $crate)
# Skip on explicit unavailability
if alr show --system $crate | grep -q 'Available when: False'; then
echo SKIPPING crate build: $crate UNAVAILABLE on system
continue
fi
# In unsupported platforms, externals are properly reported as missing. We
# can skip testing of such a crate since it will likely fail.
if grep -q 'Dependencies (external):' <<< $solution ; then
echo SKIPPING build for crate $crate with MISSING external dependencies
continue
fi
# Update system repositories whenever a detected system package is involved,
# either as dependency or as the crate being tested.
if grep -iq 'origin: system' <<< $solution; then
echo UPDATING system repositories...
type apt-get 2>/dev/null && apt-get update || true
type pacman 2>/dev/null && pacman -Syy || true
else
echo No need to update system repositories
fi
# Alternatives for when the crate itself comes from an external. Only system
# externals should be tested.
if grep -q 'Origin: external path' <<< $crateinfo ; then
echo SKIPPING detected external crate $crate
continue
elif grep -q 'Origin: system package' <<< $crateinfo ; then
echo INSTALLING detected system crate $crate
is_system=true
elif grep -q 'Not found:' <<< $crateinfo && \
grep -q 'There are external definitions' <<< $crateinfo
then
echo SKIPPING undetected external crate $crate
continue
fi
# Detect missing dependencies for clearer error
if grep -q 'Dependencies cannot be met' <<< $solution ; then
echo FAIL: crate $crate dependencies cannot be met
exit 1
fi
# Actual checks
echo DEPLOYING CRATE $crate
alr get -d --build -n $crate
if $is_system; then
echo DETECTING INSTALLED PACKAGE via crate $crate
alr show -d --external-detect $crate
else
echo LISTING EXECUTABLES of crate $crate
cd ${crate}_*
alr run -d --list
cd ..
fi
echo CRATE $crate TEST ENDED SUCCESSFULLY
done