-
Notifications
You must be signed in to change notification settings - Fork 0
162 lines (143 loc) · 5.94 KB
/
Copy pathintegration.yml
File metadata and controls
162 lines (143 loc) · 5.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# Copyright 2026 Query Farm LLC - https://query.farm
#
# Runs the canonical vgi integration sqllogictest suite against the Java
# example worker on every push / PR. Rather than building the C++ extension
# from source, it drives a prebuilt standalone `haybarn-unittest` (the
# DuckDB/Haybarn sqllogictest runner) and installs the SIGNED vgi extension
# from the Haybarn community channel + its deps from core. The .test files
# come from Query-farm/vgi main; ci/preprocess-require.awk turns
# each `require <ext>` gate into an explicit INSTALL+LOAD so the standalone
# runner (which links none of these extensions) can run them.
#
# See ci/README.md for the full design.
name: Integration suite
on:
push:
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: integration-${{ github.ref }}
cancel-in-progress: true
env:
# Track the shared implementation directly. There is deliberately no VGI
# commit pin or fallback: CI should expose any lag in the published artifact.
VGI_REF: main
# The Haybarn release providing the prebuilt haybarn-unittest binary is
# resolved to the latest release at run time (see the "Resolve latest haybarn
# release" step) so the unittest host stays ABI-compatible with the rebuilt
# community-published vgi extension, mirroring the vgi-typescript CI.
# The vgi-rpc-java revision built from source (composite include) for the
# worker's HTTP features. The composite substitutes the `farm.query:vgirpc`
# coordinate declared in vgi/build.gradle.kts, so this ref, not the declared
# version, is what the worker actually compiles against. An untagged SHA
# rather than a tag: see the pin's full comment in ci.yml, and keep the two
# in step.
VGI_RPC_JAVA_REF: 920dc42cb7d7e652d582de7fbb5b0b7ee3836a34
jobs:
build-worker:
name: Build worker once
runs-on: ubuntu-latest
steps:
- name: Checkout vgi-java
uses: actions/checkout@v4
- name: Checkout pinned vgi-rpc-java
uses: actions/checkout@v4
with:
repository: Query-farm/vgi-rpc-java
ref: ${{ env.VGI_RPC_JAVA_REF }}
path: vgi-rpc-java
- name: Set up JDK 25
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '25'
- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: gradle-${{ runner.os }}-
- name: Build example worker
run: ./gradlew --no-daemon :vgi-example-worker:installDist
env:
VGI_RPC_JAVA_DIR: ${{ github.workspace }}/vgi-rpc-java
# Archive before upload because upload-artifact does not preserve the
# executable bit on the generated launcher script.
- name: Package worker
run: tar -czf vgi-java-worker.tar.gz vgi-example-worker/build/install/vgi-example-worker
- name: Upload worker
uses: actions/upload-artifact@v4
with:
name: vgi-java-worker-${{ github.sha }}
path: vgi-java-worker.tar.gz
if-no-files-found: error
retention-days: 1
integration:
needs: build-worker
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
# launch: the AF_UNIX worker pool. shm: same, plus the POSIX
# shared-memory side channel (VGI_RPC_SHM_SIZE_BYTES). http: the whole
# suite over the stateless HTTP transport (state-token continuations),
# mirroring vgi's `make test_http`.
- { lane: launch }
- { lane: shm, shm_bytes: '67108864' }
- { lane: http, transport: http }
name: integration (${{ matrix.lane }})
steps:
- name: Checkout vgi-java
uses: actions/checkout@v4
- name: Checkout current vgi test suite
uses: actions/checkout@v4
with:
repository: Query-farm/vgi
ref: ${{ env.VGI_REF }}
path: vgi-upstream
- name: Set up JDK 25
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '25'
- name: Download worker
uses: actions/download-artifact@v4
with:
name: vgi-java-worker-${{ github.sha }}
- name: Extract worker
run: tar -xzf vgi-java-worker.tar.gz
- name: Resolve latest haybarn release
run: |
REL=$(gh release view --repo Query-farm-haybarn/haybarn --json tagName --jq .tagName)
echo "HAYBARN_RELEASE=$REL" >> "$GITHUB_ENV"
echo "Latest haybarn release: $REL"
env:
GH_TOKEN: ${{ github.token }}
- name: Download haybarn-unittest
run: |
gh release download "$HAYBARN_RELEASE" \
--repo Query-farm-haybarn/haybarn \
--pattern 'haybarn_unittest-linux-amd64.zip' \
--output /tmp/haybarn-unittest.zip --clobber
unzip -o -q /tmp/haybarn-unittest.zip -d /tmp/haybarn-unittest
UNITTEST=$(find /tmp/haybarn-unittest -name 'haybarn-unittest' -type f | head -1)
chmod +x "$UNITTEST"
echo "HAYBARN_UNITTEST=$UNITTEST" >> "$GITHUB_ENV"
env:
GH_TOKEN: ${{ github.token }}
- name: Run integration suite (${{ matrix.lane }})
run: ci/run-integration.sh
env:
VGI_SRC: ${{ github.workspace }}/vgi-upstream
VGI_WORKER_BIN: ${{ github.workspace }}/vgi-example-worker/build/install/vgi-example-worker/bin/vgi-example-worker
# Empty for the launch lane; run-integration.sh drops an empty value.
VGI_RPC_SHM_SIZE_BYTES: ${{ matrix.shm_bytes || '' }}
# launch (default) unless the lane selects the http transport.
TRANSPORT: ${{ matrix.transport || 'launch' }}
# JDK 25 + native access for the worker JVM (FFM shm, haybarn_jdbc).
JAVA_TOOL_OPTIONS: --enable-native-access=ALL-UNNAMED