name: Build and Push Dev Containers on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker uses: docker/setup-buildx-action@v3 - name: Log in to Docker Hub uses: docker/login-action@v3 with: registry: ${{ secrets.CONTAINER_REGISTRY }} username: ${{ secrets.CONTAINER_REGISTRY_USERNAME }} password: ${{ secrets.CONTAINER_REGISTRY_PASSKEY }} - name: Build and push containers run: | # ...existing code... set -euo pipefail registry="${{ secrets.CONTAINER_REGISTRY }}" username="${{ secrets.CONTAINER_REGISTRY_USERNAME }}" # Build 'base' and 'lab' groups first (including subdirectories) for group in base lab; do if [ -d "$group" ]; then echo "Processing group: $group" find "$group" -type f -iname 'Dockerfile' -exec dirname {} \; | sed 's|^\./||' | sort -u | while read -r dir; do tag="$registry/$username/$dir:latest" echo "Building $dir -> $tag" docker build -t "$tag" "$dir" docker push "$tag" done else echo "Skipping missing group: $group" fi done # Then build everything else (exclude base and lab) echo "Processing remaining Dockerfiles" find . -type f -iname 'Dockerfile' -exec dirname {} \; | sed 's|^\./||' | sort -u | grep -Ev '^(base|lab)(/|$)' | while read -r dir; do tag="$registry/$username/$dir:latest" echo "Building $dir -> $tag" docker build -t "$tag" "$dir" docker push "$tag" done - name: Docker Prune run: docker system prune -f --all