Skip to content
Closed
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
96 changes: 96 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,102 @@ env:

jobs:

# ============================================
# PLATFORM COMPATIBILITY
# ============================================

platform-compatibility:
name: "Compatibility: ${{ matrix.distro }}"
runs-on: ubuntu-latest
needs: validation-env
strategy:
fail-fast: false
matrix:
include:
- distro: debian
image: debian:bookworm-slim
- distro: ubuntu
image: ubuntu:24.04
- distro: fedora
image: fedora:41
- distro: alpine
image: alpine:latest
- distro: archlinux
image: archlinux:latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup test helpers
run: |
cat > /tmp/test_helpers.sh << 'HELPERS'
GREEN='\033[32m'
RED='\033[31m'
RESET='\033[0m'
STEP_FAILED=0

run_valid() {
local name="$1"
shift
if output=$("$@" 2>&1); then
echo -e "${GREEN}✓ Passed${RESET}: $name"
echo "pass:$name" >> "$RESULTS_FILE"
else
echo -e "${RED}✗ Failed${RESET}: $name"
echo "$output" | head -5
echo "fail:$name" >> "$RESULTS_FILE"
STEP_FAILED=1
fi
}

check_step_result() {
exit $STEP_FAILED
}
HELPERS
touch "$RESULTS_FILE"

- name: Build test image
run: docker build -t diskmark:test .

- name: "Test: Run on ${{ matrix.distro }}"
run: |
source /tmp/test_helpers.sh

CONTAINER_ID=$(docker create \
--privileged \
-v /var/run/docker.sock:/var/run/docker.sock \
${{ matrix.image }} \
sleep infinity)
docker start "$CONTAINER_ID"

case "${{ matrix.distro }}" in
debian|ubuntu)
docker exec "$CONTAINER_ID" sh -c "apt-get update -qq && apt-get install -y -qq docker.io > /dev/null 2>&1"
;;
fedora)
docker exec "$CONTAINER_ID" sh -c "dnf install -y -q docker > /dev/null 2>&1"
;;
alpine)
docker exec "$CONTAINER_ID" sh -c "apk add --no-cache docker-cli > /dev/null 2>&1"
;;
archlinux)
docker exec "$CONTAINER_ID" sh -c "pacman -Sy --noconfirm docker > /dev/null 2>&1"
;;
esac

run_valid "DRY_RUN on ${{ matrix.distro }}" \
docker exec "$CONTAINER_ID" docker run --rm -e DRY_RUN=1 diskmark:test

run_valid "No 'command not found' errors on ${{ matrix.distro }}" \
docker exec "$CONTAINER_ID" sh -c "! docker run --rm -e DRY_RUN=1 diskmark:test 2>&1 | grep -i 'command not found'"

run_valid "No 'not found' errors on ${{ matrix.distro }}" \
docker exec "$CONTAINER_ID" sh -c "! docker run --rm -e DRY_RUN=1 diskmark:test 2>&1 | grep -i 'not found'"

docker stop "$CONTAINER_ID" > /dev/null
docker rm "$CONTAINER_ID" > /dev/null
check_step_result

# ============================================
# INPUT VALIDATION - ENV VARIABLES (dry-run)
# ============================================
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
FROM alpine:latest AS builder
RUN apk add --no-cache bash coreutils fio findmnt grep ncurses ncurses-terminfo-base perl procps sed util-linux
RUN mkdir -p /diskmark/usr/bin /diskmark/lib /diskmark/usr/lib /diskmark/etc /diskmark/disk && \
for bin in bash cat cut dd df grep ls mkdir rm sed awk basename dirname env expr fio findmnt free head lsblk numfmt perl printf rev ssl_client tail tput tr wc wget; do cp $(which $bin) /diskmark/usr/bin/; done && \
for bin in bash cat cut dd df grep ls mkdir rm sed awk basename dirname env expr fio findmnt free head lsblk numfmt perl printf ssl_client tail tput tr wc wget; do cp $(which $bin) /diskmark/usr/bin/; done && \
cp /lib/ld-musl-*.so.1 /diskmark/lib/ && cp -a /lib/*.so* /diskmark/usr/lib/ 2>/dev/null || true && \
cp -a /usr/lib/*.so* /diskmark/usr/lib/ 2>/dev/null || true && \
cp /usr/lib/perl5/core_perl/CORE/libperl.so /diskmark/usr/lib/ && \
Expand Down
Loading