Skip to content

Commit 6d548c6

Browse files
authored
Merge pull request #69 from joshbeard/update-pkg-tests
fix: CI package tests
2 parents 0fad1c4 + f2da3c8 commit 6d548c6

File tree

8 files changed

+214
-28
lines changed

8 files changed

+214
-28
lines changed

.github/workflows/ci.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,12 @@ jobs:
5858
NFPM_PASSPHRASE: ${{ secrets.GPG_PASSWORD }}
5959
NFPM_TESTPKG_PASSPHRASE: ${{ secrets.GPG_PASSWORD }}
6060

61+
- name: Extract version from tag
62+
id: get_version
63+
run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
64+
6165
- name: Test packages
62-
run: ./tests/packages/run-tests.sh
66+
run: ./tests/packages/run-tests.sh --version ${{ steps.get_version.outputs.VERSION }}
6367

6468
docker-hub-doc:
6569
name: Publish DockerHub Readme

tests/packages/common.sh

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,65 @@ if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
88
fi
99

1010
export PACKAGE_NAME="web-indexer"
11-
export SOURCE_VERSION=$(git describe --tags --always --dirty)
12-
export EXPECTED_VERSION=$(echo "$SOURCE_VERSION" | sed -E 's/([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
11+
12+
# Allow overriding the version via environment variable
13+
if [ -n "$TARGET_VERSION" ]; then
14+
export EXPECTED_VERSION="$TARGET_VERSION"
15+
echo "Using specified target version: $EXPECTED_VERSION"
16+
else
17+
# Get the version with potential -dirty suffix
18+
export SOURCE_VERSION=$(git describe --tags --always --dirty)
19+
# Extract the clean version number
20+
export EXPECTED_VERSION=$(echo "$SOURCE_VERSION" | sed -E 's/([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
21+
echo "Using git-derived version: $EXPECTED_VERSION (from $SOURCE_VERSION)"
22+
fi
1323

1424
export OS="linux"
15-
export FILENAME_BASE="${PACKAGE_NAME}_${SOURCE_VERSION}_${OS}_amd64"
25+
# Use the clean version for filename to match what GoReleaser produces
26+
export FILENAME_BASE="${PACKAGE_NAME}_${EXPECTED_VERSION}_${OS}_amd64"
1627
export DIST_DIR="${script_dir}/../../dist"
1728
export TERM=xterm-256color
1829

30+
# For debugging
31+
echo "Looking for packages with base filename: ${FILENAME_BASE}"
32+
ls -la ${DIST_DIR} || echo "Dist directory not found or empty"
33+
34+
# Function to find the actual package file if the exact name doesn't match
35+
find_package_file() {
36+
local extension=$1
37+
local exact_match="${DIST_DIR}/${FILENAME_BASE}.${extension}"
38+
39+
# First try the exact match
40+
if [ -f "$exact_match" ]; then
41+
echo "$exact_match"
42+
return 0
43+
fi
44+
45+
# If exact match not found, try to find a file with similar name
46+
# First try with the exact version
47+
local similar_file=$(find ${DIST_DIR} -name "${PACKAGE_NAME}_${EXPECTED_VERSION}_${OS}_amd64.${extension}" | head -n 1)
48+
49+
if [ -n "$similar_file" ]; then
50+
echo "$similar_file"
51+
return 0
52+
fi
53+
54+
# If still not found, try with any version
55+
similar_file=$(find ${DIST_DIR} -name "${PACKAGE_NAME}_*_${OS}_amd64.${extension}" | head -n 1)
56+
57+
if [ -n "$similar_file" ]; then
58+
# Extract the actual version from the filename for verification
59+
local actual_version=$(basename "$similar_file" | sed -E "s/${PACKAGE_NAME}_([^_]+)_${OS}_amd64.${extension}/\1/")
60+
echo "Found package with version $actual_version instead of $EXPECTED_VERSION" >&2
61+
echo "$similar_file"
62+
return 0
63+
fi
64+
65+
# Return the original name if nothing found (will fail gracefully later)
66+
echo "${FILENAME_BASE}.${extension}"
67+
return 1
68+
}
69+
70+
# Export the function so it's available to the test scripts
71+
export -f find_package_file
72+

tests/packages/run-tests.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
#!/bin/bash
22
script_dir=$(cd $(dirname $0) && pwd)
3+
4+
# Check if a version is specified
5+
if [ "$1" == "--version" ] || [ "$1" == "-v" ]; then
6+
export TARGET_VERSION="$2"
7+
shift 2
8+
fi
9+
310
source $script_dir/common.sh
411

512
FAILED=0

tests/packages/test-apk.sh

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,30 @@
22
script_dir=$(cd $(dirname $0) && pwd)
33
source $script_dir/common.sh
44

5+
# Find the actual APK file
6+
APK_FILE=$(basename $(find_package_file "apk"))
7+
echo "Using APK file: $APK_FILE"
8+
9+
# Extract the actual version from the filename
10+
ACTUAL_VERSION=$(echo "$APK_FILE" | sed -E "s/${PACKAGE_NAME}_([^_]+)_${OS}_amd64.apk/\1/")
11+
if [ "$ACTUAL_VERSION" != "$EXPECTED_VERSION" ]; then
12+
echo "Warning: Testing with version $ACTUAL_VERSION instead of $EXPECTED_VERSION"
13+
# Use the actual version for verification
14+
VERIFY_VERSION="$ACTUAL_VERSION"
15+
else
16+
VERIFY_VERSION="$EXPECTED_VERSION"
17+
fi
18+
519
docker run -v ${DIST_DIR}:/tmp/dist \
620
--rm alpine /bin/ash -c "
7-
cp /tmp/dist/${FILENAME_BASE}.apk /tmp;
21+
# List available files for debugging
22+
echo 'Available files in /tmp/dist:';
23+
ls -la /tmp/dist;
24+
25+
# Copy the package file
26+
cp /tmp/dist/${APK_FILE} /tmp;
827
cd /tmp;
9-
apk add --no-cache --allow-untrusted ${FILENAME_BASE}.apk;
28+
apk add --no-cache --allow-untrusted ${APK_FILE};
1029
1130
# Verify installation
1231
echo '=== Verifying installation ===';
@@ -19,8 +38,14 @@ docker run -v ${DIST_DIR}:/tmp/dist \
1938
# Check the version
2039
echo '=== Checking executed version ===';
2140
INSTALLED_VERSION=\$($PACKAGE_NAME --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+');
22-
if [ \"\$INSTALLED_VERSION\" != \"$EXPECTED_VERSION\" ]; then
23-
echo 'Version mismatch: expected $EXPECTED_VERSION, got '\"\$INSTALLED_VERSION\"'.' >&2;
41+
echo \"Installed version: \$INSTALLED_VERSION, Expected: $VERIFY_VERSION\";
42+
43+
# Extract just the major.minor.patch part for comparison
44+
INSTALLED_VERSION_CLEAN=\$(echo \"\$INSTALLED_VERSION\" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+');
45+
EXPECTED_VERSION_CLEAN=\"$(echo "$VERIFY_VERSION" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || echo "$VERIFY_VERSION")\";
46+
47+
if [ \"\$INSTALLED_VERSION_CLEAN\" != \"\$EXPECTED_VERSION_CLEAN\" ]; then
48+
echo 'Version mismatch: expected '\"\$EXPECTED_VERSION_CLEAN\"', got '\"\$INSTALLED_VERSION_CLEAN\"'.' >&2;
2449
exit 1;
2550
fi;
2651
echo 'ok';

tests/packages/test-arch-zst.sh

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,30 @@
22
script_dir=$(cd $(dirname $0) && pwd)
33
source $script_dir/common.sh
44

5+
# Find the actual package file
6+
PKG_FILE=$(basename $(find_package_file "pkg.tar.zst"))
7+
echo "Using package file: $PKG_FILE"
8+
9+
# Extract the actual version from the filename
10+
ACTUAL_VERSION=$(echo "$PKG_FILE" | sed -E "s/${PACKAGE_NAME}_([^_]+)_${OS}_amd64.pkg.tar.zst/\1/")
11+
if [ "$ACTUAL_VERSION" != "$EXPECTED_VERSION" ]; then
12+
echo "Warning: Testing with version $ACTUAL_VERSION instead of $EXPECTED_VERSION"
13+
# Use the actual version for verification
14+
VERIFY_VERSION="$ACTUAL_VERSION"
15+
else
16+
VERIFY_VERSION="$EXPECTED_VERSION"
17+
fi
18+
519
docker run -v ${DIST_DIR}:/tmp/dist \
620
--rm archlinux /bin/bash -c "
7-
cp /tmp/dist/${FILENAME_BASE}.pkg.tar.zst /tmp;
21+
# List available files for debugging
22+
echo 'Available files in /tmp/dist:';
23+
ls -la /tmp/dist;
24+
25+
# Copy the package file
26+
cp /tmp/dist/${PKG_FILE} /tmp;
827
cd /tmp;
9-
pacman -U ${FILENAME_BASE}.pkg.tar.zst --noconfirm;
28+
pacman -U ${PKG_FILE} --noconfirm;
1029
1130
# Verify installation
1231
echo '=== Verifying installation ===';
@@ -17,11 +36,16 @@ docker run -v ${DIST_DIR}:/tmp/dist \
1736
echo 'ok';
1837
1938
# Check the version
20-
2139
echo '=== Checking executed version ===';
2240
INSTALLED_VERSION=\$($PACKAGE_NAME --version | grep -oP '\d+\.\d+\.\d+');
23-
if [ \"\$INSTALLED_VERSION\" != \"$EXPECTED_VERSION\" ]; then
24-
echo 'Version mismatch: expected $EXPECTED_VERSION, got '\"\$INSTALLED_VERSION\"'.' >&2;
41+
echo \"Installed version: \$INSTALLED_VERSION, Expected: $VERIFY_VERSION\";
42+
43+
# Extract just the major.minor.patch part for comparison
44+
INSTALLED_VERSION_CLEAN=\$(echo \"\$INSTALLED_VERSION\" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+');
45+
EXPECTED_VERSION_CLEAN=\"$(echo "$VERIFY_VERSION" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || echo "$VERIFY_VERSION")\";
46+
47+
if [ \"\$INSTALLED_VERSION_CLEAN\" != \"\$EXPECTED_VERSION_CLEAN\" ]; then
48+
echo 'Version mismatch: expected '\"\$EXPECTED_VERSION_CLEAN\"', got '\"\$INSTALLED_VERSION_CLEAN\"'.' >&2;
2549
exit 1;
2650
fi;
2751
echo 'ok';

tests/packages/test-deb.sh

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,30 @@
22
script_dir=$(cd $(dirname $0) && pwd)
33
source $script_dir/common.sh
44

5+
# Find the actual package file
6+
DEB_FILE=$(basename $(find_package_file "deb"))
7+
echo "Using DEB file: $DEB_FILE"
8+
9+
# Extract the actual version from the filename
10+
ACTUAL_VERSION=$(echo "$DEB_FILE" | sed -E "s/${PACKAGE_NAME}_([^_]+)_${OS}_amd64.deb/\1/")
11+
if [ "$ACTUAL_VERSION" != "$EXPECTED_VERSION" ]; then
12+
echo "Warning: Testing with version $ACTUAL_VERSION instead of $EXPECTED_VERSION"
13+
# Use the actual version for verification
14+
VERIFY_VERSION="$ACTUAL_VERSION"
15+
else
16+
VERIFY_VERSION="$EXPECTED_VERSION"
17+
fi
18+
519
docker run -v ${DIST_DIR}:/tmp/dist \
620
--rm debian /bin/bash -c "
7-
cp /tmp/dist/${FILENAME_BASE}.deb /tmp;
21+
# List available files for debugging
22+
echo 'Available files in /tmp/dist:';
23+
ls -la /tmp/dist;
24+
25+
# Copy the package file
26+
cp /tmp/dist/${DEB_FILE} /tmp;
827
cd /tmp;
9-
dpkg -i ${FILENAME_BASE}.deb;
28+
dpkg -i ${DEB_FILE};
1029
1130
# Verify installation
1231
echo '=== Verifying installation ===';
@@ -17,11 +36,16 @@ docker run -v ${DIST_DIR}:/tmp/dist \
1736
echo 'ok';
1837
1938
# Check the version
20-
2139
echo '=== Checking executed version ===';
2240
INSTALLED_VERSION=\$($PACKAGE_NAME --version | grep -oP '\d+\.\d+\.\d+');
23-
if [ \"\$INSTALLED_VERSION\" != \"$EXPECTED_VERSION\" ]; then
24-
echo 'Version mismatch: expected $EXPECTED_VERSION, got '\"\$INSTALLED_VERSION\"'.' >&2;
41+
echo \"Installed version: \$INSTALLED_VERSION, Expected: $VERIFY_VERSION\";
42+
43+
# Extract just the major.minor.patch part for comparison
44+
INSTALLED_VERSION_CLEAN=\$(echo \"\$INSTALLED_VERSION\" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+');
45+
EXPECTED_VERSION_CLEAN=\"$(echo "$VERIFY_VERSION" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || echo "$VERIFY_VERSION")\";
46+
47+
if [ \"\$INSTALLED_VERSION_CLEAN\" != \"\$EXPECTED_VERSION_CLEAN\" ]; then
48+
echo 'Version mismatch: expected '\"\$EXPECTED_VERSION_CLEAN\"', got '\"\$INSTALLED_VERSION_CLEAN\"'.' >&2;
2549
exit 1;
2650
fi;
2751
echo 'ok';

tests/packages/test-pkg.sh

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,29 @@
22
script_dir=$(cd $(dirname $0) && pwd)
33
source $script_dir/common.sh
44

5+
# Find the actual package file
6+
TAR_FILE=$(basename $(find_package_file "tar.gz"))
7+
echo "Using tarball: $TAR_FILE"
8+
9+
# Extract the actual version from the filename
10+
ACTUAL_VERSION=$(echo "$TAR_FILE" | sed -E "s/${PACKAGE_NAME}_([^_]+)_${OS}_amd64.tar.gz/\1/")
11+
if [ "$ACTUAL_VERSION" != "$EXPECTED_VERSION" ]; then
12+
echo "Warning: Testing with version $ACTUAL_VERSION instead of $EXPECTED_VERSION"
13+
# Use the actual version for verification
14+
VERIFY_VERSION="$ACTUAL_VERSION"
15+
else
16+
VERIFY_VERSION="$EXPECTED_VERSION"
17+
fi
18+
519
docker run -v ${DIST_DIR}:/tmp/dist \
620
--rm rockylinux:9 /bin/bash -c "
7-
cp /tmp/dist/${FILENAME_BASE}.tar.gz /tmp;
8-
tar -xzf /tmp/${FILENAME_BASE}.tar.gz -C /tmp;
21+
# List available files for debugging
22+
echo 'Available files in /tmp/dist:';
23+
ls -la /tmp/dist;
24+
25+
# Copy the package file
26+
cp /tmp/dist/${TAR_FILE} /tmp;
27+
tar -xzf /tmp/${TAR_FILE} -C /tmp;
928
mv /tmp/${PACKAGE_NAME} /usr/local/bin/${PACKAGE_NAME};
1029
chmod +x /usr/local/bin/${PACKAGE_NAME};
1130
@@ -18,11 +37,16 @@ docker run -v ${DIST_DIR}:/tmp/dist \
1837
echo 'ok';
1938
2039
# Check the version
21-
2240
echo '=== Checking executed version ===';
2341
INSTALLED_VERSION=\$($PACKAGE_NAME --version | grep -oP '\d+\.\d+\.\d+');
24-
if [ \"\$INSTALLED_VERSION\" != \"$EXPECTED_VERSION\" ]; then
25-
echo 'Version mismatch: expected $EXPECTED_VERSION, got '\"\$INSTALLED_VERSION\"'.' >&2;
42+
echo \"Installed version: \$INSTALLED_VERSION, Expected: $VERIFY_VERSION\";
43+
44+
# Extract just the major.minor.patch part for comparison
45+
INSTALLED_VERSION_CLEAN=\$(echo \"\$INSTALLED_VERSION\" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+');
46+
EXPECTED_VERSION_CLEAN=\"$(echo "$VERIFY_VERSION" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || echo "$VERIFY_VERSION")\";
47+
48+
if [ \"\$INSTALLED_VERSION_CLEAN\" != \"\$EXPECTED_VERSION_CLEAN\" ]; then
49+
echo 'Version mismatch: expected '\"\$EXPECTED_VERSION_CLEAN\"', got '\"\$INSTALLED_VERSION_CLEAN\"'.' >&2;
2650
exit 1;
2751
fi;
2852
echo 'ok';

tests/packages/test-rpm.sh

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,30 @@
22
script_dir=$(cd $(dirname $0) && pwd)
33
source $script_dir/common.sh
44

5+
# Find the actual package file
6+
RPM_FILE=$(basename $(find_package_file "rpm"))
7+
echo "Using RPM file: $RPM_FILE"
8+
9+
# Extract the actual version from the filename
10+
ACTUAL_VERSION=$(echo "$RPM_FILE" | sed -E "s/${PACKAGE_NAME}_([^_]+)_${OS}_amd64.rpm/\1/")
11+
if [ "$ACTUAL_VERSION" != "$EXPECTED_VERSION" ]; then
12+
echo "Warning: Testing with version $ACTUAL_VERSION instead of $EXPECTED_VERSION"
13+
# Use the actual version for verification
14+
VERIFY_VERSION="$ACTUAL_VERSION"
15+
else
16+
VERIFY_VERSION="$EXPECTED_VERSION"
17+
fi
18+
519
docker run -v ${DIST_DIR}:/tmp/dist \
620
--rm rockylinux:9 /bin/bash -c "
7-
cp /tmp/dist/${FILENAME_BASE}.rpm /tmp;
21+
# List available files for debugging
22+
echo 'Available files in /tmp/dist:';
23+
ls -la /tmp/dist;
24+
25+
# Copy the package file
26+
cp /tmp/dist/${RPM_FILE} /tmp;
827
cd /tmp;
9-
rpm -i ${FILENAME_BASE}.rpm;
28+
rpm -i ${RPM_FILE};
1029
1130
# Verify installation
1231
echo '=== Verifying installation ===';
@@ -17,11 +36,16 @@ docker run -v ${DIST_DIR}:/tmp/dist \
1736
echo 'ok';
1837
1938
# Check the version
20-
2139
echo '=== Checking executed version ===';
2240
INSTALLED_VERSION=\$($PACKAGE_NAME --version | grep -oP '\d+\.\d+\.\d+');
23-
if [ \"\$INSTALLED_VERSION\" != \"$EXPECTED_VERSION\" ]; then
24-
echo 'Version mismatch: expected $EXPECTED_VERSION, got '\"\$INSTALLED_VERSION\"'.' >&2;
41+
echo \"Installed version: \$INSTALLED_VERSION, Expected: $VERIFY_VERSION\";
42+
43+
# Extract just the major.minor.patch part for comparison
44+
INSTALLED_VERSION_CLEAN=\$(echo \"\$INSTALLED_VERSION\" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+');
45+
EXPECTED_VERSION_CLEAN=\"$(echo "$VERIFY_VERSION" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || echo "$VERIFY_VERSION")\";
46+
47+
if [ \"\$INSTALLED_VERSION_CLEAN\" != \"\$EXPECTED_VERSION_CLEAN\" ]; then
48+
echo 'Version mismatch: expected '\"\$EXPECTED_VERSION_CLEAN\"', got '\"\$INSTALLED_VERSION_CLEAN\"'.' >&2;
2549
exit 1;
2650
fi;
2751
echo 'ok';

0 commit comments

Comments
 (0)