tests: add some tests for makepkg

This adds some git source related regression tests for #142 and #143.
Creates temporary git repos and PKGBUILDs and builds packages.

This requires git to be available and since makepkg refuses to be
run as root, the tests fail if run as root.
This commit is contained in:
Christoph Reiter 2024-05-19 20:06:16 +02:00
parent 0f2417f919
commit 64cb213213
4 changed files with 115 additions and 0 deletions

View file

@ -458,6 +458,7 @@ TEST_ENV.set('PMTEST_SCRIPT_DIR', join_paths(meson.project_build_root(), 'script
subdir('test/pacman') subdir('test/pacman')
subdir('test/scripts') subdir('test/scripts')
subdir('test/util') subdir('test/util')
subdir('test/makepkg')
message('\n '.join([ message('\n '.join([
'@0@ @1@'.format(meson.project_name(), meson.project_version()), '@0@ @1@'.format(meson.project_name(), meson.project_version()),

View file

@ -0,0 +1,48 @@
#!/usr/bin/bash
set -e
tempdir=$(mktemp -d)
cleanup() { rm -rf "$tempdir"; }
trap cleanup EXIT
export MAKEPKG_LIBRARY="${PMTEST_LIBMAKEPKG_DIR}"
export MAKEPKG_CONF="${PMTEST_UTIL_DIR}/makepkg.conf"
export PACMAN="${PMTEST_UTIL_DIR}/pacman"
MAKEPKG="${PMTEST_SCRIPT_DIR}/makepkg"
# https://gitlab.archlinux.org/pacman/pacman/-/issues/142
# Running makepkg twice if the source is git without a fragment
# should not fail.
test() {
# Dummy git repo
export GIT_COMMITTER_NAME="Test User"
export GIT_COMMITTER_EMAIL="test@example.com"
export GIT_AUTHOR_NAME="$GIT_COMMITTER_NAME"
export GIT_AUTHOR_EMAIL="$GIT_COMMITTER_EMAIL"
local gitrepo="$tempdir/gitrepo"
mkdir -p $gitrepo && cd $gitrepo
git init .
git checkout -b main
git commit --allow-empty -m "test"
# Dummy PKGBUILD
local pkgbuild_content=$(cat <<EOF
pkgname=test
pkgver=1
pkgrel=1
arch=('any')
source=(git+file://$gitrepo)
sha256sums=('SKIP')
EOF
)
local pkgdir="$tempdir/pkgdir"
mkdir -p "$pkgdir" && cd "$pkgdir"
echo "$pkgbuild_content" > "PKGBUILD"
"$MAKEPKG"
"$MAKEPKG" -f
}
test;

View file

@ -0,0 +1,57 @@
#!/usr/bin/bash
set -e
tempdir=$(mktemp -d)
cleanup() { rm -rf "$tempdir"; }
trap cleanup EXIT
export MAKEPKG_LIBRARY="${PMTEST_LIBMAKEPKG_DIR}"
export MAKEPKG_CONF="${PMTEST_UTIL_DIR}/makepkg.conf"
export PACMAN="${PMTEST_UTIL_DIR}/pacman"
MAKEPKG="${PMTEST_SCRIPT_DIR}/makepkg"
# https://gitlab.archlinux.org/pacman/pacman/-/issues/143
# Always check out the default branch, and not a branch matching
# the directory name.
test() {
# Dummy git repo
export GIT_COMMITTER_NAME="Test User"
export GIT_COMMITTER_EMAIL="test@example.com"
export GIT_AUTHOR_NAME="$GIT_COMMITTER_NAME"
export GIT_AUTHOR_EMAIL="$GIT_COMMITTER_EMAIL"
local gitrepo="$tempdir/gitrepo"
mkdir -p $gitrepo && cd $gitrepo
git init --initial-branch=main
git checkout -b main
touch good
git add good
git commit -m "good"
git checkout -b somebranch
git rm good
git commit -m "bad"
git checkout main
# Dummy PKGBUILD
local pkgbuild_content=$(cat <<EOF
pkgname=test
pkgver=1
pkgrel=1
arch=('any')
source=(somebranch::git+file://$gitrepo)
sha256sums=('SKIP')
package() {
[[ -e somebranch/good ]]
}
EOF
)
local pkgdir="$tempdir/pkgdir"
mkdir -p "$pkgdir" && cd "$pkgdir"
echo "$pkgbuild_content" > "PKGBUILD"
"$MAKEPKG"
}
test;

9
test/makepkg/meson.build Normal file
View file

@ -0,0 +1,9 @@
find_program('git', required: true)
test('makepkg-build-git-head-twice',
find_program('makepkg-build-git-head-twice.sh'),
env: TEST_ENV)
test('makepkg-checkout-dir-matches-branch',
find_program('makepkg-checkout-dir-matches-branch.sh'),
env: TEST_ENV)