Skip to content

Build seeded images

Build seeded images #6

name: Build seeded images
on:
schedule:
- cron: '0 2 * * *'
workflow_dispatch:
env:
SEED_IMAGE_PREFIX: partnersinhealth/lesotho-emr-seed
concurrency:
group: build-seeded-images-${{ github.ref }}
cancel-in-progress: true
jobs:
build-seed:
name: Build seed image (${{ matrix.site }})
if: github.repository_owner == 'PIH'
runs-on: ubuntu-latest
timeout-minutes: 80
strategy:
matrix:
site: [botsabelo-demo]
env:
SERVICE_NAME: ${{ matrix.site }}
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 8
cache: 'maven'
- name: Extract pom version
run: echo "VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: pihci
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Start stack
env:
OPENMRS_IMAGE_TAG: ${{ env.VERSION }}
run: ./docker.sh ${{ matrix.site }} start --fresh
- name: Wait for OpenMRS to be fully initialized
run: ./docker.sh ${{ matrix.site }} wait
- name: Stop OpenMRS
run: docker compose -f docker/compose.yaml stop openmrs
- name: Export database
run: |
DB_CONTAINER=$(docker compose -f docker/compose.yaml ps -q db)
docker exec "$DB_CONTAINER" \
sh -c 'mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" --databases openmrs' \
| gzip > dump.sql.gz
echo "dump.sql.gz size: $(du -sh dump.sql.gz | cut -f1)"
- name: Export openmrs-data volume
run: |
OPENMRS_CONTAINER=$(docker compose -f docker/compose.yaml ps -q --all openmrs)
DATA_VOLUME=$(docker inspect "$OPENMRS_CONTAINER" \
--format '{{range .Mounts}}{{if eq .Destination "/openmrs/data"}}{{.Name}}{{end}}{{end}}')
echo "Exporting volume: $DATA_VOLUME"
docker run --rm \
-v "${DATA_VOLUME}:/data" \
alpine sh -c 'cd /data && tar czf - .' > data.tar.gz
echo "data.tar.gz size: $(du -sh data.tar.gz | cut -f1)"
- name: Stop stack
if: always()
run: ./docker.sh ${{ matrix.site }} destroy
- name: Build seed image
run: |
mkdir -p .seed-build-context
cp dump.sql.gz data.tar.gz docker/seed-entrypoint.sh .seed-build-context/
docker build \
-f docker/Dockerfile.seed \
-t ${{ env.SEED_IMAGE_PREFIX }}-${{ matrix.site }}:${{ env.VERSION }} \
-t ${{ env.SEED_IMAGE_PREFIX }}-${{ matrix.site }}:latest \
.seed-build-context/
- name: Push seed image
run: |
docker push ${{ env.SEED_IMAGE_PREFIX }}-${{ matrix.site }}:${{ env.VERSION }}
docker push ${{ env.SEED_IMAGE_PREFIX }}-${{ matrix.site }}:latest
- name: Clean up
if: always()
run: rm -rf dump.sql.gz data.tar.gz .seed-build-context