mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-04 08:09:27 +00:00
### **User description**
We have recently observed that a lot of times the install protoc action
errors, so this instead removes the dependency on action and uses the
release url directly to download protoc. Technically it still goes
through the same github api, but now we have more precise control on
what is being called.
The next best thing would be vendoring the zip itself in the repo, which
I'm not particularly happy with, but can be tried.
___
### **PR Type**
Bug fix, Enhancement
___
### **Description**
- Add manual protoc installation script
- Replace setup-protoc action in workflows
- Support x86_64 and aarch64 detection
- Error handling for unsupported platforms
___
### Diagram Walkthrough
```mermaid
flowchart LR
CI["CI Workflow"] -- "execute protoc.sh" --> Script["protoc.sh"]
Script -- "download & unzip protoc" --> Setup["Protoc setup steps"]
Setup -- "copy binaries & headers" --> Done["Protoc installed"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>protoc.sh</strong><dd><code>Add manual protoc
installation script</code>
</dd></summary>
<hr>
.github/protoc.sh
<ul><li>Add shell script for manual protoc install<br> <li> Detect
platform (x86_64, aarch64)<br> <li> Download and unzip specified
release<br> <li> Copy binary and include files system-wide</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9725/files#diff-c91d907e5a707c73726a6c869b8391f8bed703cb1cbe9b54fc81fdef67a3e804">+19/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>api-testing.yml</strong><dd><code>Replace setup-protoc
in API testing CI</code>
</dd></summary>
<hr>
.github/workflows/api-testing.yml
<ul><li>Remove arduino/setup-protoc action<br> <li> Add run step
invoking protoc.sh</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9725/files#diff-bf87f46624aaa9c4f1d9faa033baf531a543f2d4ac188cd64e9ab3febfee8f9e">+2/-3</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>build-pr-image.yml</strong><dd><code>Replace
setup-protoc in build-pr-image CI</code>
</dd></summary>
<hr>
.github/workflows/build-pr-image.yml
- Replace setup-protoc action
- Invoke protoc.sh in build-pr-image CI
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9725/files#diff-ebeabab3ec6b3ad90cc66cb9c0d9f2ad72c7ec6116e30e9801241b46992742d6">+8/-6</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>db-testing.yml</strong><dd><code>Replace setup-protoc
in DB testing CI</code>
</dd></summary>
<hr>
.github/workflows/db-testing.yml
- Remove setup-protoc action
- Invoke protoc.sh in DB testing CI
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9725/files#diff-25d80f07432f01a3a288495d1d29a8457c2897d5ec819137dea15ad239b122f9">+3/-4</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>Replace setup-protoc
in Playwright CI</code>
</dd></summary>
<hr>
.github/workflows/playwright.yml
- Replace setup-protoc action
- Execute protoc.sh in Playwright CI
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9725/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+4/-3</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>unit-tests.yml</strong><dd><code>Replace setup-protoc
in unit tests CI</code>
</dd></summary>
<hr>
.github/workflows/unit-tests.yml
<ul><li>Remove setup-protoc action in unit tests<br> <li> Call protoc.sh
when changes detected</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9725/files#diff-cd0effce06f425599e96952f4d5f684641a683f46d9909e7c74a9f8b2f03ccd3">+3/-3</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
199 lines
5.5 KiB
YAML
199 lines
5.5 KiB
YAML
name: Database Validation Tests
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- "main"
|
|
pull_request:
|
|
branches:
|
|
- "*"
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
COLUMNS: 150
|
|
ZO_ROOT_USER_EMAIL: root@example.com
|
|
ZO_ROOT_USER_PASSWORD: Complexpass#123
|
|
ZO_BASE_URL: http://localhost:5080/
|
|
ZO_INTERNAL_GRPC_TOKEN: fake_token_for_testing
|
|
ZO_MEM_PERSIST_INTERVAL: 1
|
|
ZO_MAX_FILE_RETENTION_TIME: 1
|
|
ZO_FILE_PUSH_INTERVAL: 1
|
|
|
|
jobs:
|
|
db_validation_tests:
|
|
name: db_validation_tests
|
|
runs-on: ubicloud-standard-8
|
|
permissions:
|
|
contents: read
|
|
|
|
services:
|
|
postgres:
|
|
image: postgres:17.5-alpine3.22
|
|
env:
|
|
POSTGRES_PASSWORD: password
|
|
ports:
|
|
- 5432:5432
|
|
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
|
|
|
|
steps:
|
|
- name: Remove unused tools
|
|
run: |
|
|
sudo rm -rf /usr/share/dotnet
|
|
sudo rm -rf /opt/ghc
|
|
sudo rm -rf "/usr/local/share/boost"
|
|
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
|
|
|
|
- name: Checkout git repo
|
|
uses: actions/checkout@v5
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Setup Rust Toolchain
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
toolchain: nightly-2025-11-11
|
|
|
|
- name: Setup Rust Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
cache-on-failure: true
|
|
prefix-key: db-testing
|
|
|
|
- name: Install Protoc
|
|
run: |
|
|
bash ./.github/protoc.sh
|
|
|
|
- name: Build OpenObserve debug binary
|
|
run: cargo build --features mimalloc
|
|
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.11.6"
|
|
|
|
- name: Create db-testing directory structure
|
|
run: |
|
|
mkdir -p tests/db-testing/tests
|
|
if [ ! -f tests/db-testing/pyproject.toml ]; then
|
|
cat > tests/db-testing/pyproject.toml << 'EOF'
|
|
[project]
|
|
name = "db-testing"
|
|
version = "0.1.0"
|
|
description = "Database validation tests for OpenObserve"
|
|
dependencies = [
|
|
"pytest>=7.4.0",
|
|
"requests>=2.31.0",
|
|
"psycopg2-binary>=2.9.9",
|
|
"python-dotenv>=1.0.0",
|
|
]
|
|
requires-python = ">= 3.11"
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["tests"]
|
|
|
|
[tool.rye]
|
|
managed = true
|
|
dev-dependencies = []
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
python_files = ["test_*.py"]
|
|
python_classes = ["Test*"]
|
|
python_functions = ["test_*"]
|
|
EOF
|
|
fi
|
|
|
|
- name: Setup rye
|
|
uses: eifinger/setup-rye@v4
|
|
with:
|
|
enable-cache: false
|
|
working-directory: "tests/db-testing/"
|
|
version: "0.27.0"
|
|
|
|
- name: Pin cpython
|
|
run: rye pin cpython@3.11.6
|
|
working-directory: tests/db-testing/
|
|
|
|
- name: Rye sync
|
|
run: rye sync
|
|
working-directory: tests/db-testing/
|
|
|
|
- name: Start OpenObserve with Postgres
|
|
run: |
|
|
export ZO_META_STORE=postgres
|
|
export ZO_META_POSTGRES_DSN=postgres://postgres:password@localhost:5432/postgres
|
|
export ZO_TEXT_DATA_TYPE=text
|
|
export ZO_MEM_PERSIST_INTERVAL=1
|
|
export ZO_MAX_FILE_RETENTION_TIME=1
|
|
export ZO_FILE_PUSH_INTERVAL=1
|
|
target/debug/openobserve > o2_postgres.log 2>&1 &
|
|
SERVER_PID=$!
|
|
echo "SERVER_PID=$SERVER_PID" >> $GITHUB_ENV
|
|
echo "OpenObserve PID: $SERVER_PID"
|
|
|
|
- name: Wait for OpenObserve to start
|
|
run: |
|
|
echo "Waiting for OpenObserve to be ready..."
|
|
max_attempts=30
|
|
attempt=0
|
|
while [ $attempt -lt $max_attempts ]; do
|
|
if curl -s -f http://localhost:5080/healthz > /dev/null 2>&1; then
|
|
echo "OpenObserve is ready!"
|
|
break
|
|
fi
|
|
attempt=$((attempt + 1))
|
|
echo "Attempt $attempt/$max_attempts - waiting..."
|
|
sleep 2
|
|
done
|
|
if [ $attempt -eq $max_attempts ]; then
|
|
echo "OpenObserve failed to start"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Run DB validation tests
|
|
run: |
|
|
# Export database connection info for tests
|
|
export ZO_META_POSTGRES_DSN=postgres://postgres:password@localhost:5432/postgres
|
|
|
|
# Run pytest with verbose output
|
|
rye run pytest -v --tb=short
|
|
working-directory: tests/db-testing/
|
|
|
|
- name: Stop OpenObserve
|
|
if: always()
|
|
run: |
|
|
if [ ! -z "$SERVER_PID" ]; then
|
|
kill $SERVER_PID || true
|
|
fi
|
|
|
|
- name: Upload OpenObserve logs on failure
|
|
if: failure()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: openobserve-logs
|
|
path: o2_postgres.log
|
|
retention-days: 5
|
|
|
|
db_tests_summary:
|
|
runs-on: ubuntu-latest
|
|
permissions: {}
|
|
needs: [db_validation_tests]
|
|
if: always()
|
|
steps:
|
|
- name: Check test results
|
|
run: |
|
|
if [ "${{ needs.db_validation_tests.result }}" == "success" ] || [ "${{ needs.db_validation_tests.result }}" == "skipped" ]; then
|
|
echo "DB validation tests passed or skipped"
|
|
exit 0
|
|
else
|
|
echo "DB validation tests failed"
|
|
exit 1
|
|
fi
|