Skip to content

Workflow file for this run

name: Build and Push Docker Image
on:
push:
branches: [ develop, main, docker ]
pull_request:
branches: [ develop ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
outputs:
image_digest: ${{ steps.image_digest.outputs.IMAGE_DIGEST }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata for Docker
id: meta
uses: docker/metadata-action@v4
with:
images: ghcr.io/${{ github.repository }}/cws
tags: |
type=ref,event=branch
type=ref,event=pr
type=sha,format=short
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'develop') }}
- name: Prepare Docker build context
run: |
cd ./install/docker/cws-image
# Download joda-time jar
curl -O https://repo1.maven.org/maven2/joda-time/joda-time/2.1/joda-time-2.1.jar
# Create a minimal cws_server.tar.gz
mkdir -p cws/server/apache-tomcat-9.0.75/logs
echo "placeholder" > cws/server/apache-tomcat-9.0.75/logs/placeholder.txt
mkdir -p cws/bin
echo "#!/bin/bash" > cws/configure.sh
echo "echo 'Mock configure script'" >> cws/configure.sh
echo "mkdir -p server/apache-tomcat-9.0.75/logs" >> cws/configure.sh
chmod +x cws/configure.sh
echo "#!/bin/bash" > cws/start_cws.sh
echo "echo 'Mock start script'" >> cws/start_cws.sh
echo "tail -f /dev/null" >> cws/start_cws.sh
chmod +x cws/start_cws.sh
tar -czf cws_server.tar.gz cws
rm -rf cws
# Make scripts executable
chmod +x wait_for_db_es_console.sh startup.sh
- name: Build and push Docker image
uses: docker/build-push-action@v4
id: docker_build
with:
context: ./install/docker/cws-image
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Get primary image tag
id: image_digest
run: |
PRIMARY_TAG=$(echo "${{ steps.meta.outputs.tags }}" | head -n 1)
echo "IMAGE_DIGEST=${PRIMARY_TAG}" >> $GITHUB_OUTPUT
test:
needs: build
runs-on: ubuntu-latest
if: github.event_name != 'pull_request'
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up test environment
run: |
mkdir -p test-output
- name: Pull Docker image
run: |
IMAGE_TAG="${{ needs.build.outputs.image_digest }}"
echo "Using image: ${IMAGE_TAG}"
docker pull ${IMAGE_TAG}
- name: Run tests in container
run: |
IMAGE_TAG="${{ needs.build.outputs.image_digest }}"
# Create a Docker volume for test results
docker volume create cws-test-results
# Run the container with test environment and mount the repository
docker run --name cws-test -d \
-e DB_HOST=mock-db \
-e DB_USER=mockuser \
-e DB_PW=mockpw \
-e ES_PROTOCOL=http \
-e ES_HOST=mock-es \
-e ES_PORT=9200 \
-e JAVA_HOME=/usr/lib/jvm/java-openjdk \
-v ${PWD}:/workspace \
-w /workspace \
--entrypoint /bin/bash \
${IMAGE_TAG} -c "tail -f /dev/null"
# Check if container is running
docker ps
# Verify Java setup in the container
docker exec cws-test java -version
docker exec cws-test echo "JAVA_HOME=$JAVA_HOME"
# Install Maven and ensure we have the correct Java version
docker exec cws-test yum install -y maven
# Verify Java version
docker exec cws-test java -version
# Create a custom test script with JDK settings
docker exec -w /workspace cws-test bash -c "cat > run_tests.sh << 'EOFMARKER'
#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk

Check failure on line 142 in .github/workflows/docker-build.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/docker-build.yml

Invalid workflow file

You have an error in your yaml syntax on line 142
export PATH=\$JAVA_HOME/bin:\$PATH
source ./utils.sh
echo \"Using Java version:\"
java -version
echo \"Maven version:\"
mvn --version
# Run unit tests only for now
echo \"Running unit tests...\"
mvn -Dmaven.compiler.release=17 -Dmaven.compiler.source=17 -Dmaven.compiler.target=17 clean test
EOFMARKER"
# Make script executable
docker exec -w /workspace cws-test chmod +x run_tests.sh
# Run our custom test script
docker exec -w /workspace cws-test ./run_tests.sh
# Copy test results if needed
mkdir -p ./test-results
docker cp cws-test:/workspace/target/site/jacoco-aggregate ./test-results/
- name: Clean up
run: |
docker stop cws-test || true
docker rm cws-test || true