diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 53c2464..f384ea9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,9 +5,15 @@ jobs: tests: name: Run test suite runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + dockerfile: [Dockerfile, Dockerfile.arch] steps: - uses: actions/checkout@v4.2.2 # Run the tests - - name: 'Run tests' + - name: Run tests (${{ matrix.dockerfile }}) + env: + DOCKERFILE: ${{ matrix.dockerfile }} run: ./script/test diff --git a/Dockerfile.arch b/Dockerfile.arch new file mode 100644 index 0000000..73eada9 --- /dev/null +++ b/Dockerfile.arch @@ -0,0 +1,55 @@ +# +# arch-base: Base Arch image with sudo user +# +FROM archlinux:base AS base + +# Install required packages +RUN pacman -Sy --noconfirm && \ + pacman -S --noconfirm --needed \ + base-devel \ + sudo \ + curl \ + gnupg \ + openssh \ + wget && \ + pacman -Scc --noconfirm + +# Create user with sudo privilege +RUN useradd -r -u 1001 --create-home -m "test-user" && \ + echo "test-user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers + +# +# source: Base image with source copied over +# +FROM base AS source + +ARG DOTFILES_DIR="/workdir/.dotfiles" +RUN mkdir -p "$DOTFILES_DIR" && \ + chown -R "test-user" "$DOTFILES_DIR" + +ADD --chown="test-user" files "$DOTFILES_DIR/files" +ADD --chown="test-user" script "$DOTFILES_DIR/script" +WORKDIR "$DOTFILES_DIR" + +# +# install: Installation steps +# +FROM source AS install + +ENV USER=test-user +ENV SKIP_SUDO_CHECK=true +ENV SKIP_SSH_CONFIG=true +ENV SKIP_DOCKER_CONFIG=true + +USER test-user +ARG UUID="docker" +RUN ./script/install + +# +# test: Test entrypoint +# +FROM install AS test + +ADD --chown="test-user" tests "$DOTFILES_DIR/tests" +WORKDIR "$DOTFILES_DIR/tests" +ENTRYPOINT [ "./run.sh" ] diff --git a/script/test b/script/test index d31b3e0..787bee0 100755 --- a/script/test +++ b/script/test @@ -7,6 +7,7 @@ set -euo pipefail # IMAGE=${IMAGE:-"andrejusk/dotfiles"} +DOCKERFILE=${DOCKERFILE:-Dockerfile} uuid=$( uuidgen 2> /dev/null \ || cat /proc/sys/kernel/random/uuid 2> /dev/null \ @@ -14,13 +15,14 @@ uuid=$( ) tag=${TAG:-"$uuid"} -echo "Building $IMAGE:$tag" +echo "Building $IMAGE:$tag using $DOCKERFILE" docker build . \ --build-arg UUID=$uuid \ --cache-from $IMAGE \ --tag $IMAGE:$tag \ - --target test + --target test \ + -f "$DOCKERFILE" docker run \ -v "$(pwd)"/logs:/home/test-user/.dotfiles/logs \