Skip to content

commit for ci tests #63

commit for ci tests

commit for ci tests #63

Workflow file for this run

---
name: CI/CD for Nix Dotfiles
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build-docker-image:
if: |
github.event_name == 'push' || github.event_name == 'pull_request'
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
outputs:
image_name: ${{ steps.build.outputs.image_name }}
build_ran: "true"
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check for file changes
id: check_files
run: |
MODIFIED_FILES=$(git diff --name-only HEAD^ HEAD | \
grep -E 'nix_test_env/Dockerfile|nix_test_env/docker_entrypoint.sh')
if [ -n "$MODIFIED_FILES" ]; then
echo "build_ran=true" >> $GITHUB_OUTPUT
else
echo "build_ran=false" >> $GITHUB_OUTPUT
fi
- name: Build docker image
if: steps.check_files.outputs.build_ran == 'true'
id: build
run: |
IMAGE_NAME="nix-test-env:$(git rev-parse --short HEAD)"
docker build -t ${IMAGE_NAME} -f ./nix_test_env/Dockerfile .
echo "image_name=${IMAGE_NAME}" >> $GITHUB_OUTPUT
- name: Log in and push Docker image to GHCR
if: steps.check_files.outputs.build_ran == 'true'
run: |
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u \
${{ github.actor }} --password-stdin
IMAGE_ID="ghcr.io/${{ github.repository }}/nix-test-env"
COMMIT_TAG="${IMAGE_ID}:$(git rev-parse --short HEAD)"
docker tag ${{ steps.build.outputs.image_name }} $COMMIT_TAG
LATEST_TAG="${IMAGE_ID}:latest"
docker tag ${{ steps.build.outputs.image_name }} $LATEST_TAG
docker push $COMMIT_TAG
docker push $LATEST_TAG
tests:
runs-on: ubuntu-latest
if: |
(github.event_name == 'push' || github.event_name == 'pull_request') &&
(needs.build-docker-image.outputs.build_ran == 'true' ||
needs.build-docker-image.outputs.build_ran == '')
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Pull image with fallback in GHCR
id: docker_pull
run: |
IMAGE_ID="ghcr.io/${{ github.repository }}/nix-test-env"
COMMIT_TAG="${IMAGE_ID}:$(git rev-parse --short HEAD)"
LATEST_TAG="${IMAGE_ID}:latest"
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u \
${{ github.actor }} --password-stdin
if docker pull $COMMIT_TAG; then
echo "Successfully pulled commit-specific image: $COMMIT_TAG"
echo "image_to_test=$COMMIT_TAG" >> $GITHUB_OUTPUT
else
echo "Commit-specific image not found. Falling back to latest."
docker pull $LATEST_TAG
echo "image_to_test=$LATEST_TAG" >> $GITHUB_OUTPUT
fi
- name: Run container
id: container
run: |
CONTAINER_NAME="nix-test-container"
IMAGE_TO_TEST="${{ steps.docker_pull.outputs.image_to_test }}"
echo "Running tests on image: $IMAGE_TO_TEST"
docker run --name $CONTAINER_NAME \
-v ./nix_tests:/app/tests -d \
$IMAGE_TO_TEST tail -f /dev/null
echo "container_name=$CONTAINER_NAME" >> $GITHUB_OUTPUT
- name: Run all tests in container
run: |
docker exec ${{ steps.container.outputs.container_name }} \
"home-manager switch && /app/tests/run_all.sh"
- name: Clean up container
if: always()
run: docker rm -f ${{ steps.container.outputs.container_name }}