Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,12 @@ jobs:
NFPM_PASSPHRASE: ${{ secrets.GPG_PASSWORD }}
NFPM_TESTPKG_PASSPHRASE: ${{ secrets.GPG_PASSWORD }}

- name: Extract version from tag
id: get_version
run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT

- name: Test packages
run: ./tests/packages/run-tests.sh
run: ./tests/packages/run-tests.sh --version ${{ steps.get_version.outputs.VERSION }}

docker-hub-doc:
name: Publish DockerHub Readme
Expand Down
60 changes: 57 additions & 3 deletions tests/packages/common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,65 @@ if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
fi

export PACKAGE_NAME="web-indexer"
export SOURCE_VERSION=$(git describe --tags --always --dirty)
export EXPECTED_VERSION=$(echo "$SOURCE_VERSION" | sed -E 's/([0-9]+\.[0-9]+\.[0-9]+).*/\1/')

# Allow overriding the version via environment variable
if [ -n "$TARGET_VERSION" ]; then
export EXPECTED_VERSION="$TARGET_VERSION"
echo "Using specified target version: $EXPECTED_VERSION"
else
# Get the version with potential -dirty suffix
export SOURCE_VERSION=$(git describe --tags --always --dirty)
# Extract the clean version number
export EXPECTED_VERSION=$(echo "$SOURCE_VERSION" | sed -E 's/([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
echo "Using git-derived version: $EXPECTED_VERSION (from $SOURCE_VERSION)"
fi

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

# For debugging
echo "Looking for packages with base filename: ${FILENAME_BASE}"
ls -la ${DIST_DIR} || echo "Dist directory not found or empty"

# Function to find the actual package file if the exact name doesn't match
find_package_file() {
local extension=$1
local exact_match="${DIST_DIR}/${FILENAME_BASE}.${extension}"

# First try the exact match
if [ -f "$exact_match" ]; then
echo "$exact_match"
return 0
fi

# If exact match not found, try to find a file with similar name
# First try with the exact version
local similar_file=$(find ${DIST_DIR} -name "${PACKAGE_NAME}_${EXPECTED_VERSION}_${OS}_amd64.${extension}" | head -n 1)

if [ -n "$similar_file" ]; then
echo "$similar_file"
return 0
fi

# If still not found, try with any version
similar_file=$(find ${DIST_DIR} -name "${PACKAGE_NAME}_*_${OS}_amd64.${extension}" | head -n 1)

if [ -n "$similar_file" ]; then
# Extract the actual version from the filename for verification
local actual_version=$(basename "$similar_file" | sed -E "s/${PACKAGE_NAME}_([^_]+)_${OS}_amd64.${extension}/\1/")
echo "Found package with version $actual_version instead of $EXPECTED_VERSION" >&2
echo "$similar_file"
return 0
fi

# Return the original name if nothing found (will fail gracefully later)
echo "${FILENAME_BASE}.${extension}"
return 1
}

# Export the function so it's available to the test scripts
export -f find_package_file

7 changes: 7 additions & 0 deletions tests/packages/run-tests.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
#!/bin/bash
script_dir=$(cd $(dirname $0) && pwd)

# Check if a version is specified
if [ "$1" == "--version" ] || [ "$1" == "-v" ]; then
export TARGET_VERSION="$2"
shift 2
fi

source $script_dir/common.sh

FAILED=0
Expand Down
33 changes: 29 additions & 4 deletions tests/packages/test-apk.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,30 @@
script_dir=$(cd $(dirname $0) && pwd)
source $script_dir/common.sh

# Find the actual APK file
APK_FILE=$(basename $(find_package_file "apk"))
echo "Using APK file: $APK_FILE"

# Extract the actual version from the filename
ACTUAL_VERSION=$(echo "$APK_FILE" | sed -E "s/${PACKAGE_NAME}_([^_]+)_${OS}_amd64.apk/\1/")
if [ "$ACTUAL_VERSION" != "$EXPECTED_VERSION" ]; then
echo "Warning: Testing with version $ACTUAL_VERSION instead of $EXPECTED_VERSION"
# Use the actual version for verification
VERIFY_VERSION="$ACTUAL_VERSION"
else
VERIFY_VERSION="$EXPECTED_VERSION"
fi

docker run -v ${DIST_DIR}:/tmp/dist \
--rm alpine /bin/ash -c "
cp /tmp/dist/${FILENAME_BASE}.apk /tmp;
# List available files for debugging
echo 'Available files in /tmp/dist:';
ls -la /tmp/dist;

# Copy the package file
cp /tmp/dist/${APK_FILE} /tmp;
cd /tmp;
apk add --no-cache --allow-untrusted ${FILENAME_BASE}.apk;
apk add --no-cache --allow-untrusted ${APK_FILE};

# Verify installation
echo '=== Verifying installation ===';
Expand All @@ -19,8 +38,14 @@ docker run -v ${DIST_DIR}:/tmp/dist \
# Check the version
echo '=== Checking executed version ===';
INSTALLED_VERSION=\$($PACKAGE_NAME --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+');
if [ \"\$INSTALLED_VERSION\" != \"$EXPECTED_VERSION\" ]; then
echo 'Version mismatch: expected $EXPECTED_VERSION, got '\"\$INSTALLED_VERSION\"'.' >&2;
echo \"Installed version: \$INSTALLED_VERSION, Expected: $VERIFY_VERSION\";

# Extract just the major.minor.patch part for comparison
INSTALLED_VERSION_CLEAN=\$(echo \"\$INSTALLED_VERSION\" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+');
EXPECTED_VERSION_CLEAN=\"$(echo "$VERIFY_VERSION" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || echo "$VERIFY_VERSION")\";

if [ \"\$INSTALLED_VERSION_CLEAN\" != \"\$EXPECTED_VERSION_CLEAN\" ]; then
echo 'Version mismatch: expected '\"\$EXPECTED_VERSION_CLEAN\"', got '\"\$INSTALLED_VERSION_CLEAN\"'.' >&2;
exit 1;
fi;
echo 'ok';
Expand Down
34 changes: 29 additions & 5 deletions tests/packages/test-arch-zst.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,30 @@
script_dir=$(cd $(dirname $0) && pwd)
source $script_dir/common.sh

# Find the actual package file
PKG_FILE=$(basename $(find_package_file "pkg.tar.zst"))
echo "Using package file: $PKG_FILE"

# Extract the actual version from the filename
ACTUAL_VERSION=$(echo "$PKG_FILE" | sed -E "s/${PACKAGE_NAME}_([^_]+)_${OS}_amd64.pkg.tar.zst/\1/")
if [ "$ACTUAL_VERSION" != "$EXPECTED_VERSION" ]; then
echo "Warning: Testing with version $ACTUAL_VERSION instead of $EXPECTED_VERSION"
# Use the actual version for verification
VERIFY_VERSION="$ACTUAL_VERSION"
else
VERIFY_VERSION="$EXPECTED_VERSION"
fi

docker run -v ${DIST_DIR}:/tmp/dist \
--rm archlinux /bin/bash -c "
cp /tmp/dist/${FILENAME_BASE}.pkg.tar.zst /tmp;
# List available files for debugging
echo 'Available files in /tmp/dist:';
ls -la /tmp/dist;

# Copy the package file
cp /tmp/dist/${PKG_FILE} /tmp;
cd /tmp;
pacman -U ${FILENAME_BASE}.pkg.tar.zst --noconfirm;
pacman -U ${PKG_FILE} --noconfirm;

# Verify installation
echo '=== Verifying installation ===';
Expand All @@ -17,11 +36,16 @@ docker run -v ${DIST_DIR}:/tmp/dist \
echo 'ok';

# Check the version

echo '=== Checking executed version ===';
INSTALLED_VERSION=\$($PACKAGE_NAME --version | grep -oP '\d+\.\d+\.\d+');
if [ \"\$INSTALLED_VERSION\" != \"$EXPECTED_VERSION\" ]; then
echo 'Version mismatch: expected $EXPECTED_VERSION, got '\"\$INSTALLED_VERSION\"'.' >&2;
echo \"Installed version: \$INSTALLED_VERSION, Expected: $VERIFY_VERSION\";

# Extract just the major.minor.patch part for comparison
INSTALLED_VERSION_CLEAN=\$(echo \"\$INSTALLED_VERSION\" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+');
EXPECTED_VERSION_CLEAN=\"$(echo "$VERIFY_VERSION" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || echo "$VERIFY_VERSION")\";

if [ \"\$INSTALLED_VERSION_CLEAN\" != \"\$EXPECTED_VERSION_CLEAN\" ]; then
echo 'Version mismatch: expected '\"\$EXPECTED_VERSION_CLEAN\"', got '\"\$INSTALLED_VERSION_CLEAN\"'.' >&2;
exit 1;
fi;
echo 'ok';
Expand Down
34 changes: 29 additions & 5 deletions tests/packages/test-deb.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,30 @@
script_dir=$(cd $(dirname $0) && pwd)
source $script_dir/common.sh

# Find the actual package file
DEB_FILE=$(basename $(find_package_file "deb"))
echo "Using DEB file: $DEB_FILE"

# Extract the actual version from the filename
ACTUAL_VERSION=$(echo "$DEB_FILE" | sed -E "s/${PACKAGE_NAME}_([^_]+)_${OS}_amd64.deb/\1/")
if [ "$ACTUAL_VERSION" != "$EXPECTED_VERSION" ]; then
echo "Warning: Testing with version $ACTUAL_VERSION instead of $EXPECTED_VERSION"
# Use the actual version for verification
VERIFY_VERSION="$ACTUAL_VERSION"
else
VERIFY_VERSION="$EXPECTED_VERSION"
fi

docker run -v ${DIST_DIR}:/tmp/dist \
--rm debian /bin/bash -c "
cp /tmp/dist/${FILENAME_BASE}.deb /tmp;
# List available files for debugging
echo 'Available files in /tmp/dist:';
ls -la /tmp/dist;

# Copy the package file
cp /tmp/dist/${DEB_FILE} /tmp;
cd /tmp;
dpkg -i ${FILENAME_BASE}.deb;
dpkg -i ${DEB_FILE};

# Verify installation
echo '=== Verifying installation ===';
Expand All @@ -17,11 +36,16 @@ docker run -v ${DIST_DIR}:/tmp/dist \
echo 'ok';

# Check the version

echo '=== Checking executed version ===';
INSTALLED_VERSION=\$($PACKAGE_NAME --version | grep -oP '\d+\.\d+\.\d+');
if [ \"\$INSTALLED_VERSION\" != \"$EXPECTED_VERSION\" ]; then
echo 'Version mismatch: expected $EXPECTED_VERSION, got '\"\$INSTALLED_VERSION\"'.' >&2;
echo \"Installed version: \$INSTALLED_VERSION, Expected: $VERIFY_VERSION\";

# Extract just the major.minor.patch part for comparison
INSTALLED_VERSION_CLEAN=\$(echo \"\$INSTALLED_VERSION\" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+');
EXPECTED_VERSION_CLEAN=\"$(echo "$VERIFY_VERSION" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || echo "$VERIFY_VERSION")\";

if [ \"\$INSTALLED_VERSION_CLEAN\" != \"\$EXPECTED_VERSION_CLEAN\" ]; then
echo 'Version mismatch: expected '\"\$EXPECTED_VERSION_CLEAN\"', got '\"\$INSTALLED_VERSION_CLEAN\"'.' >&2;
exit 1;
fi;
echo 'ok';
Expand Down
34 changes: 29 additions & 5 deletions tests/packages/test-pkg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,29 @@
script_dir=$(cd $(dirname $0) && pwd)
source $script_dir/common.sh

# Find the actual package file
TAR_FILE=$(basename $(find_package_file "tar.gz"))
echo "Using tarball: $TAR_FILE"

# Extract the actual version from the filename
ACTUAL_VERSION=$(echo "$TAR_FILE" | sed -E "s/${PACKAGE_NAME}_([^_]+)_${OS}_amd64.tar.gz/\1/")
if [ "$ACTUAL_VERSION" != "$EXPECTED_VERSION" ]; then
echo "Warning: Testing with version $ACTUAL_VERSION instead of $EXPECTED_VERSION"
# Use the actual version for verification
VERIFY_VERSION="$ACTUAL_VERSION"
else
VERIFY_VERSION="$EXPECTED_VERSION"
fi

docker run -v ${DIST_DIR}:/tmp/dist \
--rm rockylinux:9 /bin/bash -c "
cp /tmp/dist/${FILENAME_BASE}.tar.gz /tmp;
tar -xzf /tmp/${FILENAME_BASE}.tar.gz -C /tmp;
# List available files for debugging
echo 'Available files in /tmp/dist:';
ls -la /tmp/dist;

# Copy the package file
cp /tmp/dist/${TAR_FILE} /tmp;
tar -xzf /tmp/${TAR_FILE} -C /tmp;
mv /tmp/${PACKAGE_NAME} /usr/local/bin/${PACKAGE_NAME};
chmod +x /usr/local/bin/${PACKAGE_NAME};

Expand All @@ -18,11 +37,16 @@ docker run -v ${DIST_DIR}:/tmp/dist \
echo 'ok';

# Check the version

echo '=== Checking executed version ===';
INSTALLED_VERSION=\$($PACKAGE_NAME --version | grep -oP '\d+\.\d+\.\d+');
if [ \"\$INSTALLED_VERSION\" != \"$EXPECTED_VERSION\" ]; then
echo 'Version mismatch: expected $EXPECTED_VERSION, got '\"\$INSTALLED_VERSION\"'.' >&2;
echo \"Installed version: \$INSTALLED_VERSION, Expected: $VERIFY_VERSION\";

# Extract just the major.minor.patch part for comparison
INSTALLED_VERSION_CLEAN=\$(echo \"\$INSTALLED_VERSION\" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+');
EXPECTED_VERSION_CLEAN=\"$(echo "$VERIFY_VERSION" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || echo "$VERIFY_VERSION")\";

if [ \"\$INSTALLED_VERSION_CLEAN\" != \"\$EXPECTED_VERSION_CLEAN\" ]; then
echo 'Version mismatch: expected '\"\$EXPECTED_VERSION_CLEAN\"', got '\"\$INSTALLED_VERSION_CLEAN\"'.' >&2;
exit 1;
fi;
echo 'ok';
Expand Down
34 changes: 29 additions & 5 deletions tests/packages/test-rpm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,30 @@
script_dir=$(cd $(dirname $0) && pwd)
source $script_dir/common.sh

# Find the actual package file
RPM_FILE=$(basename $(find_package_file "rpm"))
echo "Using RPM file: $RPM_FILE"

# Extract the actual version from the filename
ACTUAL_VERSION=$(echo "$RPM_FILE" | sed -E "s/${PACKAGE_NAME}_([^_]+)_${OS}_amd64.rpm/\1/")
if [ "$ACTUAL_VERSION" != "$EXPECTED_VERSION" ]; then
echo "Warning: Testing with version $ACTUAL_VERSION instead of $EXPECTED_VERSION"
# Use the actual version for verification
VERIFY_VERSION="$ACTUAL_VERSION"
else
VERIFY_VERSION="$EXPECTED_VERSION"
fi

docker run -v ${DIST_DIR}:/tmp/dist \
--rm rockylinux:9 /bin/bash -c "
cp /tmp/dist/${FILENAME_BASE}.rpm /tmp;
# List available files for debugging
echo 'Available files in /tmp/dist:';
ls -la /tmp/dist;

# Copy the package file
cp /tmp/dist/${RPM_FILE} /tmp;
cd /tmp;
rpm -i ${FILENAME_BASE}.rpm;
rpm -i ${RPM_FILE};

# Verify installation
echo '=== Verifying installation ===';
Expand All @@ -17,11 +36,16 @@ docker run -v ${DIST_DIR}:/tmp/dist \
echo 'ok';

# Check the version

echo '=== Checking executed version ===';
INSTALLED_VERSION=\$($PACKAGE_NAME --version | grep -oP '\d+\.\d+\.\d+');
if [ \"\$INSTALLED_VERSION\" != \"$EXPECTED_VERSION\" ]; then
echo 'Version mismatch: expected $EXPECTED_VERSION, got '\"\$INSTALLED_VERSION\"'.' >&2;
echo \"Installed version: \$INSTALLED_VERSION, Expected: $VERIFY_VERSION\";

# Extract just the major.minor.patch part for comparison
INSTALLED_VERSION_CLEAN=\$(echo \"\$INSTALLED_VERSION\" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+');
EXPECTED_VERSION_CLEAN=\"$(echo "$VERIFY_VERSION" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || echo "$VERIFY_VERSION")\";

if [ \"\$INSTALLED_VERSION_CLEAN\" != \"\$EXPECTED_VERSION_CLEAN\" ]; then
echo 'Version mismatch: expected '\"\$EXPECTED_VERSION_CLEAN\"', got '\"\$INSTALLED_VERSION_CLEAN\"'.' >&2;
exit 1;
fi;
echo 'ok';
Expand Down
Loading