Skip to content

Test Nginx Upload

Test Nginx Upload #96

name: Test Nginx Upload
on:
pull_request:
branches: [ master ]
workflow_run:
workflows: ["Docker Build (Nginx)"]
types:
- completed
workflow_dispatch: # Allow manual triggering
jobs:
Test-Nginx-Uploads:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' || github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
env:
COMPOSE_FILE: ./docker-compose-nginx.yml
REGISTRY_PREFIX: docker.io/library
SERVER_NAME: localhost
BRAINLIFE_USE_NGINX: "true"
steps:
- uses: actions/checkout@v4
with:
submodules: true # Ensure we get the submodule info
- name: Set repository name
run: echo "REPO_NAME=$(basename $GITHUB_WORKSPACE)" >> $GITHUB_ENV
- name: Cache test data
uses: actions/cache@v4
id: test-data-cache
with:
path: test/test_data
key: test-data-${{ hashFiles('.gitmodules') }}
restore-keys: |
test-data-
- name: Get test data if not cached
if: steps.test-data-cache.outputs.cache-hit != 'true'
run: |
make get-test-data
- name: Cache Docker images
uses: actions/cache@v4
id: docker-cache
with:
path: |
mongo.tar
api.tar
handler.tar
key: docker-local-images-${{ github.event.workflow_run.head_sha || github.sha }}
restore-keys: |
docker-local-images-
- name: Cache Nginx images
uses: actions/cache@v4
id: nginx-cache
with:
path: |
ui-nginx.tar
nginx.tar
key: docker-nginx-images-${{ github.event.workflow_run.head_sha || github.sha }}
restore-keys: |
docker-nginx-images-
- name: Setup environment
run: |
# copy the example.env to .env
cp example.env .env
# Update .env to use the hostname
sed -i "s/SERVER_NAME=.*/SERVER_NAME=localhost/" .env
sed -i "s/BRAINLIFE_USE_NGINX=.*/BRAINLIFE_USE_NGINX=true/" .env
- name: Build or load base images
run: |
if [ -f mongo.tar ] && [ -f api.tar ] && [ -f handler.tar ]; then
echo "Loading cached base images..."
if ! docker load < mongo.tar || ! docker load < api.tar || ! docker load < handler.tar; then
echo "Failed to load cached images, building instead..."
docker compose -f ${{ env.COMPOSE_FILE }} build
else
rm mongo.tar api.tar handler.tar
fi
else
echo "Building base images..."
docker compose -f ${{ env.COMPOSE_FILE }} build
fi
# Tag the images to match docker-compose
docker tag ${REGISTRY_PREFIX}/${REPO_NAME}-api:latest api:latest
docker tag ${REGISTRY_PREFIX}/${REPO_NAME}-handler:latest handler:latest
- name: Build or load nginx images
run: |
if [ -f ui-nginx.tar ] && [ -f nginx.tar ]; then
echo "Loading cached nginx images..."
if ! docker load < ui-nginx.tar || ! docker load < nginx.tar; then
echo "Failed to load cached nginx images, building instead..."
docker compose -f ${{ env.COMPOSE_FILE }} build
else
rm ui-nginx.tar nginx.tar
fi
else
echo "Building nginx images..."
docker compose -f ${{ env.COMPOSE_FILE }} build
fi
# Tag the UI image to match docker-compose
docker tag ${REGISTRY_PREFIX}/${REPO_NAME}-ui:latest ui:latest
- name: Do additional Nginx setup
run: |
# create self signed certs using the hostname
./create_self_signed_certs.sh localhost
- name: Start services
run: |
# Create and set permissions for temp directory
mkdir -p /tmp/ezbids-workdir
chmod 770 /tmp/ezbids-workdir
# Start services using our tagged images
./launch.sh --daemon
sleep 30
- name: Install uv
run: |
curl -LsSf https://astral.sh/uv/install.sh | sh
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
- name: Verify uv installation
run: uv --version
- name: Run upload test
run: |
make test-upload