Files
nextcloud-mcp-server/.github/workflows/test.yml
T
2025-08-01 09:11:14 +02:00

109 lines
4.0 KiB
YAML

name: Docker Compose Action
on:
pull_request:
branches:
- master
jobs:
linting:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install the latest version of uv
uses: astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc # v6
- name: Check format
run: |
uv run --frozen ruff format --diff
- name: Linting
run: |
uv run --frozen ruff check
integration-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Run docker compose
uses: hoverkraft-tech/compose-action@40041ff1b97dbf152cd2361138c2b03fa29139df # v2.3.0
with:
compose-file: "./docker-compose.yml"
- name: Install the latest version of uv
uses: astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc # v6
- name: Wait for service to be ready
run: |
echo "Waiting for service at http://localhost:8080/ocs/v2.php/apps/serverinfo/api/v1/info to return 401..."
max_attempts=60
attempt=0
until curl -o /dev/null -s -w "%{http_code}\n" http://localhost:8080/ocs/v2.php/apps/serverinfo/api/v1/info | grep -q "401"; do
attempt=$((attempt + 1))
if [ $attempt -ge $max_attempts ]; then
echo "Service did not become ready in time."
exit 1
fi
echo "Attempt $attempt/$max_attempts: Service not ready, sleeping for 5 seconds..."
sleep 5
done
echo "Service is ready (returned 401)."
- name: Verify required apps are installed and ready
run: |
echo "Checking if required Nextcloud apps are installed and ready..."
# Check Notes app
echo "Checking Notes app..."
max_attempts=30
attempt=0
until curl -u admin:admin -s -w "%{http_code}\n" -o /dev/null http://localhost:8080/apps/notes/api/v1/settings | grep -q "200"; do
attempt=$((attempt + 1))
if [ $attempt -ge $max_attempts ]; then
echo "Notes app not ready after $max_attempts attempts."
exit 1
fi
echo "Notes app attempt $attempt/$max_attempts: Not ready, sleeping for 3 seconds..."
sleep 3
done
echo "Notes app is ready."
# Check Tables app
echo "Checking Tables app..."
attempt=0
until curl -u admin:admin -H 'OCS-APIRequest: true' -s -w "%{http_code}\n" -o /dev/null http://localhost:8080/ocs/v2.php/apps/tables/api/2/tables | grep -q "200"; do
attempt=$((attempt + 1))
if [ $attempt -ge $max_attempts ]; then
echo "Tables app not ready after $max_attempts attempts."
exit 1
fi
echo "Tables app attempt $attempt/$max_attempts: Not ready, sleeping for 3 seconds..."
sleep 3
done
echo "Tables app is ready."
# Check Calendar app (CalDAV endpoint)
echo "Checking Calendar app..."
attempt=0
until curl -u admin:admin -s -w "%{http_code}\n" -o /dev/null -X PROPFIND http://localhost:8080/remote.php/dav/calendars/admin | grep -E "20[0-9]"; do
attempt=$((attempt + 1))
if [ $attempt -ge $max_attempts ]; then
echo "Calendar app not ready after $max_attempts attempts."
exit 1
fi
echo "Calendar app attempt $attempt/$max_attempts: Not ready, sleeping for 3 seconds..."
sleep 3
done
echo "Calendar app is ready."
echo "All required apps are installed and ready!"
# Add subsequent steps here, e.g., running tests
- name: Run tests
env:
NEXTCLOUD_HOST: "http://localhost:8080"
NEXTCLOUD_USERNAME: "admin"
NEXTCLOUD_PASSWORD: "admin"
run: |
uv run --frozen python -m pytest