forked from claude-did-this/claude-hub
fix: improve Docker workflow with better error handling
- Add has-test-stage flag to matrix configuration - Add debug output for build configuration - Improve test output with clear success/failure indicators - Only run production image test if build succeeded - Use consistent conditions based on has-test-stage flag
This commit is contained in:
33
.github/workflows/docker-build.yml
vendored
33
.github/workflows/docker-build.yml
vendored
@@ -62,10 +62,12 @@ jobs:
|
||||
dockerfile: Dockerfile
|
||||
platforms: linux/amd64,linux/arm64
|
||||
build-args: ""
|
||||
has-test-stage: true
|
||||
- image: claudecode
|
||||
dockerfile: Dockerfile.claudecode
|
||||
platforms: linux/amd64
|
||||
build-args: ""
|
||||
has-test-stage: false
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
@@ -107,10 +109,10 @@ jobs:
|
||||
# Add short SHA for all builds
|
||||
type=sha,prefix={{branch}}-,format=short
|
||||
|
||||
# Build test target first (only for claude-hub which has test stage)
|
||||
# Build test target first (only for images with test stage)
|
||||
- name: Build test stage
|
||||
id: build-test
|
||||
if: matrix.image == 'claude-hub'
|
||||
if: matrix.has-test-stage
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
@@ -129,7 +131,7 @@ jobs:
|
||||
|
||||
# Run tests in container if test stage was built
|
||||
- name: Run tests in container
|
||||
if: matrix.image == 'claude-hub' && steps.build-test.outcome == 'success'
|
||||
if: matrix.has-test-stage && steps.build-test.outcome == 'success'
|
||||
run: |
|
||||
docker run --rm \
|
||||
-e CI=true \
|
||||
@@ -140,7 +142,7 @@ jobs:
|
||||
|
||||
# Upload coverage if tests were run
|
||||
- name: Upload coverage reports
|
||||
if: matrix.image == 'claude-hub' && steps.build-test.outcome == 'success'
|
||||
if: matrix.has-test-stage && steps.build-test.outcome == 'success'
|
||||
uses: codecov/codecov-action@v4
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
@@ -148,6 +150,17 @@ jobs:
|
||||
flags: unittests
|
||||
name: codecov-umbrella
|
||||
|
||||
# Debug info
|
||||
- name: Debug build configuration
|
||||
run: |
|
||||
echo "Image: ${{ matrix.image }}"
|
||||
echo "Dockerfile: ${{ matrix.dockerfile }}"
|
||||
echo "Has test stage: ${{ matrix.has-test-stage }}"
|
||||
echo "Target: ${{ matrix.has-test-stage && 'production' || '' }}"
|
||||
echo "Event: ${{ github.event_name }}"
|
||||
echo "Should push: ${{ github.event_name != 'pull_request' }}"
|
||||
echo "Should load: ${{ github.event_name == 'pull_request' }}"
|
||||
|
||||
# Build final production image
|
||||
- name: Build production image
|
||||
id: build-prod
|
||||
@@ -155,6 +168,7 @@ jobs:
|
||||
with:
|
||||
context: .
|
||||
file: ${{ matrix.dockerfile }}
|
||||
target: ${{ matrix.has-test-stage && 'production' || '' }} # Use production target for multi-stage builds
|
||||
platforms: ${{ github.event_name == 'pull_request' && 'linux/amd64' || matrix.platforms }}
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
load: ${{ github.event_name == 'pull_request' }} # Load image locally for PR testing
|
||||
@@ -171,24 +185,27 @@ jobs:
|
||||
|
||||
# Test the production image
|
||||
- name: Test production image
|
||||
if: github.event_name == 'pull_request'
|
||||
if: github.event_name == 'pull_request' && steps.build-prod.outcome == 'success'
|
||||
run: |
|
||||
# Basic smoke test - verify image exists
|
||||
docker images | grep "${{ env.DOCKER_HUB_ORGANIZATION }}/${{ matrix.image }}"
|
||||
echo "Checking for image: ${{ env.DOCKER_HUB_ORGANIZATION }}/${{ matrix.image }}:pr-${{ github.event.number }}"
|
||||
docker images | grep "${{ env.DOCKER_HUB_ORGANIZATION }}/${{ matrix.image }}" || echo "Image not found in local registry"
|
||||
|
||||
# For claude-hub, test the startup script exists
|
||||
if [[ "${{ matrix.image }}" == "claude-hub" ]]; then
|
||||
echo "Testing claude-hub startup script..."
|
||||
docker run --rm \
|
||||
-e NODE_ENV=production \
|
||||
${{ env.DOCKER_HUB_ORGANIZATION }}/${{ matrix.image }}:pr-${{ github.event.number }} \
|
||||
test -f /app/scripts/runtime/startup.sh && echo "Startup script exists"
|
||||
test -f /app/scripts/runtime/startup.sh && echo "✓ Startup script exists" || echo "✗ Startup script missing"
|
||||
fi
|
||||
|
||||
# For claudecode, test claude command exists
|
||||
if [[ "${{ matrix.image }}" == "claudecode" ]]; then
|
||||
echo "Testing claudecode claude command..."
|
||||
docker run --rm \
|
||||
${{ env.DOCKER_HUB_ORGANIZATION }}/${{ matrix.image }}:pr-${{ github.event.number }} \
|
||||
which claude || echo "Claude command check"
|
||||
which claude && echo "✓ Claude command found" || echo "✗ Claude command not found"
|
||||
fi
|
||||
|
||||
# Scan for vulnerabilities
|
||||
|
||||
Reference in New Issue
Block a user