Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions .github/workflows/compat-gen-upload.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Compat Fixture Upload

on:
push:
tags: ["[0-9]+.[0-9]+.[0-9]+"]
workflow_dispatch:
inputs:
tag:
description: "Git tag to generate fixtures for (e.g. 0.62.0)"
required: true

env:
S3_BUCKET: vortex-compat-fixtures

jobs:
upload-fixtures:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.tag || github.ref_name }}

- uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@v2
with:
workspaces: vortex-test/compat-gen

- name: Generate fixtures
run: |
VERSION=${{ github.event.inputs.tag || github.ref_name }}
cargo run --manifest-path vortex-test/compat-gen/Cargo.toml \
--release --bin compat-gen -- \
--version "$VERSION" --output /tmp/fixtures/

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.COMPAT_FIXTURES_ROLE_ARN }}
aws-region: us-east-1

- name: Upload to S3
run: |
VERSION=${{ github.event.inputs.tag || github.ref_name }}
aws s3 cp /tmp/fixtures/ \
"s3://${S3_BUCKET}/v${VERSION}/" --recursive

- name: Update versions.json
run: |
VERSION=${{ github.event.inputs.tag || github.ref_name }}
# Fetch existing versions.json or start with empty array
aws s3 cp "s3://${S3_BUCKET}/versions.json" /tmp/versions.json 2>/dev/null \
|| echo '[]' > /tmp/versions.json
# Append new version if not already present, sort
python3 -c "
import json, sys
with open('/tmp/versions.json') as f:
versions = json.load(f)
v = sys.argv[1]
if v not in versions:
versions.append(v)
versions.sort(key=lambda x: list(map(int, x.split('.'))))
with open('/tmp/versions.json', 'w') as f:
json.dump(versions, f, indent=2)
" "$VERSION"
aws s3 cp /tmp/versions.json "s3://${S3_BUCKET}/versions.json"
27 changes: 27 additions & 0 deletions .github/workflows/compat-test-weekly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Compat Test

on:
schedule:
- cron: "0 6 * * 1" # Monday 6am UTC
workflow_dispatch: {}

Check failure on line 6 in .github/workflows/compat-test-weekly.yml

View workflow job for this annotation

GitHub Actions / validate-workflow-yaml

6:23 [braces] too few spaces inside empty braces

env:
FIXTURES_URL: https://vortex-compat-fixtures.s3.amazonaws.com

jobs:
compat-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@v2
with:
workspaces: vortex-test/compat-gen

- name: Run compat tests
run: |
cargo run --manifest-path vortex-test/compat-gen/Cargo.toml \
--release --bin compat-test -- \
--fixtures-url "$FIXTURES_URL"
40 changes: 40 additions & 0 deletions vortex-test/compat-gen/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[package]
name = "vortex-compat"
version = "0.1.0"
edition = "2021"

[[bin]]
name = "compat-gen"
path = "src/main.rs"

[[bin]]
name = "compat-test"
path = "src/test_main.rs"

[dependencies]
# Vortex crates (path deps — resolve to whatever version is checked out)
vortex = { path = "../../vortex", features = ["files", "tokio"] }
vortex-array = { path = "../../vortex-array" }
vortex-buffer = { path = "../../vortex-buffer" }
vortex-error = { path = "../../vortex-error" }

# TPC-H generation
tpchgen = "2"
tpchgen-arrow = "2"
arrow-array = "57"

# ClickBench parquet reading
parquet = "57"

# Async runtime
tokio = { version = "1", features = ["full"] }
futures = "0.3"

# HTTP fetching (for ClickBench fixture + compat-test S3 downloads)
reqwest = { version = "0.12", features = ["blocking"] }

# CLI + serialization
clap = { version = "4", features = ["derive"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
chrono = { version = "0.4", features = ["serde"] }
Loading
Loading