Files
openobserve/.github/workflows/db-testing.yml
T
Yashodhan JoshiandYashodhan Joshi 8f4cdbb6b5 fix: remove arduino protoc action (#9725)
### **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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>build-pr-image.yml</strong><dd><code>Replace
setup-protoc in build-pr-image CI</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>db-testing.yml</strong><dd><code>Replace setup-protoc
in DB testing CI</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>playwright.yml</strong><dd><code>Replace setup-protoc
in Playwright CI</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>unit-tests.yml</strong><dd><code>Replace setup-protoc
in unit tests CI</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>
2025-12-24 14:16:51 +05:30

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