87 lines
2.7 KiB
YAML
87 lines
2.7 KiB
YAML
name: Docker Build and Test
|
|
|
|
on:
|
|
push:
|
|
branches: [ "main", "dev" ]
|
|
pull_request:
|
|
branches: [ "main", "dev" ]
|
|
|
|
#concurrency:
|
|
# group: rust-build-${{ github.ref }}
|
|
# cancel-in-progress: false
|
|
|
|
jobs:
|
|
build-and-test:
|
|
name: Build and Test Docker Image
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 45
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Extract metadata (tags, labels) for Docker
|
|
id: meta
|
|
uses: docker/metadata-action@v5
|
|
with:
|
|
images: test/oxicloud
|
|
tags: |
|
|
type=ref,event=branch
|
|
type=ref,event=pr
|
|
type=sha
|
|
|
|
- name: Build Docker image
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
push: false
|
|
load: true
|
|
tags: test/oxicloud:test
|
|
cache-from: type=gha
|
|
cache-to: type=gha,mode=max
|
|
# Pipe GitHub Actions env into the build container so build.rs
|
|
# can stamp GIT_HASH/GIT_BRANCH into the binary. Without this,
|
|
# `oxicloud --version` reports "unknown" because Docker builds
|
|
# have no .git/ in the context and the workflow's env isn't
|
|
# automatically visible to RUN steps.
|
|
build-args: |
|
|
GITHUB_SHA=${{ github.sha }}
|
|
GITHUB_REF_NAME=${{ github.ref_name }}
|
|
GITHUB_HEAD_REF=${{ github.head_ref }}
|
|
|
|
- name: Verify image starts correctly
|
|
run: |
|
|
# Start the container in background
|
|
docker run -d --name oxicloud-test \
|
|
-e DATABASE_URL="postgres://test:test@localhost/test" \
|
|
-p 8080:8080 \
|
|
test/oxicloud:test || true
|
|
|
|
# Give it a moment to start (or fail)
|
|
sleep 3
|
|
|
|
# Check that the container exists and show logs
|
|
echo "=== Container status ==="
|
|
docker ps -a --filter name=oxicloud-test
|
|
echo "=== Container logs ==="
|
|
docker logs oxicloud-test 2>&1 || true
|
|
|
|
# Cleanup
|
|
docker rm -f oxicloud-test || true
|
|
|
|
- name: Verify image structure
|
|
run: |
|
|
echo "=== Image size ==="
|
|
docker image ls test/oxicloud:test
|
|
|
|
echo "=== Binary exists and is executable ==="
|
|
docker run --rm --entrypoint sh test/oxicloud:test -c "test -x /usr/local/bin/oxicloud && echo 'OK: binary is executable'"
|
|
|
|
echo "=== Static files present ==="
|
|
docker run --rm --entrypoint sh test/oxicloud:test -c "ls /app/static/index.html && echo 'OK: static files present'"
|
|
|
|
echo "✅ Docker build and test completed successfully"
|