This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
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 |