name: s3 Storage Tests on: push: branches: - '**' paths: - 'tests/integration/withServerInstance/storage.tests.js' - 'Common/sources/storage/**' - 'DocService/sources/routes/static.js' - '.github/workflows/s3storageTests.yml' jobs: storage-tests: name: Storage Tests runs-on: ubuntu-latest env: MINIO_CONTAINER: minio-${{ github.run_id }}-${{ github.run_attempt }} steps: - name: Pre-run cleanup run: | docker rm -f "$MINIO_CONTAINER" 2>/dev/null || true # Remove legacy container name if it exists (for self-hosted runners or retries) docker rm -f minio 2>/dev/null || true - name: Setup and start MinIO run: | # Detect network and set network arguments JOB_NET=$(docker inspect -f '{{range $k,$v := .NetworkSettings.Networks}}{{printf "%s\n" $k}}{{end}}' "$(hostname)" 2>/dev/null | head -n1 || true) if [ -n "$JOB_NET" ]; then NETWORK_ARGS="--network $JOB_NET" else NETWORK_ARGS="" fi # Start MinIO container docker run --name "$MINIO_CONTAINER" \ $NETWORK_ARGS \ -p 9000:9000 \ -p 9001:9001 \ -e "MINIO_ROOT_USER=minioadmin" \ -e "MINIO_ROOT_PASSWORD=minioadmin" \ -d minio/minio server /data --console-address ":9001" # Set host based on network configuration if [ -n "$JOB_NET" ]; then HOST=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$MINIO_CONTAINER") else HOST=127.0.0.1 fi # Wait for MinIO to be ready echo "Waiting for MinIO at $HOST:9000..." for i in $(seq 1 15); do if curl -sS "http://$HOST:9000/minio/health/ready" >/dev/null 2>&1; then echo "MinIO ready" break fi sleep 1 done # Verify MinIO is running if ! curl -sS "http://$HOST:9000/minio/health/ready" >/dev/null 2>&1; then echo "MinIO failed to start" docker logs "$MINIO_CONTAINER" || true exit 1 fi # Export host for subsequent steps echo "MINIO_HOST=$HOST" >> "$GITHUB_ENV" - name: Check out repository code uses: actions/checkout@v3 - name: Caching dependencies uses: actions/setup-node@v3 with: node-version: '20' cache: 'npm' cache-dependency-path: | ./npm-shrinkwrap.json ./Common/npm-shrinkwrap.json ./DocService/npm-shrinkwrap.json - name: Install modules run: | npm ci npm --prefix Common ci npm --prefix DocService ci - name: Creating storage configuration run: | cat > Common/config/local.json << EOF { "storage": { "name": "storage-s3", "region": "us-east-1", "endpoint": "http://${MINIO_HOST:-127.0.0.1}:9000", "bucketName": "cache", "storageFolderName": "files", "commandOptions": { "putObject": { "ServerSideEncryption": "AES256" }, "copyObject": { "ServerSideEncryption": "AES256" } }, "accessKeyId": "minioadmin", "secretAccessKey": "minioadmin", "forcePathStyle": true }, "persistentStorage": { "storageFolderName": "files/persistent" } } EOF - name: Create MinIO buckets run: | docker exec "$MINIO_CONTAINER" mc alias set myminio http://localhost:9000 minioadmin minioadmin docker exec "$MINIO_CONTAINER" mc mb myminio/cache - name: Run storage tests run: npm run storage-tests - name: Final cleanup if: always() run: docker rm -f "$MINIO_CONTAINER" || true