Skip to content

#292 Add sequential stopping rule for benchmark iterations #120

#292 Add sequential stopping rule for benchmark iterations

#292 Add sequential stopping rule for benchmark iterations #120

name: Build & Push Benchmarking Containers to ACR
on:
pull_request:
types: [closed]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
id-token: write
contents: read
jobs:
detect-changes:
name: Detect changed paths
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' || github.event.pull_request.merged == true
permissions:
contents: read
pull-requests: read
outputs:
orchestrator: ${{ steps.filter.outputs.orchestrator || (github.event_name == 'workflow_dispatch' && 'true') }}
benchmarks: ${{ steps.filter.outputs.benchmarks || (github.event_name == 'workflow_dispatch' && 'true') }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
if: github.event_name == 'pull_request'
with:
filters: |
orchestrator:
- 'main.py'
- 'benchmarks.yml'
- 'src/__init__.py'
- 'src/config.py'
- 'src/application/common/**'
- 'src/domain/enums/storage_container.py'
- '.docker/Orchestrator.Dockerfile'
- 'requirements.txt'
- 'docker-compose.yml'
benchmarks:
- 'src/**'
- 'benchmark_runner.py'
- '.docker/Query.Dockerfile'
- '.docker/Setup.Dockerfile'
- 'requirements.txt'
- 'docker-compose.yml'
build-and-push-queries:
name: Build & Push ${{ matrix.display_name }}
needs: detect-changes
if: ${{ needs.detect-changes.outputs.benchmarks == 'true' }}
runs-on: ubuntu-latest
strategy:
matrix:
include:
# ---- RQ1 query benchmarks ----
- service: point-in-polygon-lookup-duckdb
image: point-in-polygon-lookup-duckdb
display_name: DuckDB Point-in-Polygon Lookup
- service: point-in-polygon-lookup-postgis
image: point-in-polygon-lookup-postgis
display_name: PostGIS Point-in-Polygon Lookup
- service: point-in-polygon-lookup-local
image: point-in-polygon-lookup-local
display_name: Shapefile Point-in-Polygon Lookup
- service: knn-search-duckdb
image: knn-search-duckdb
display_name: DuckDB KNN Search
- service: knn-search-postgis
image: knn-search-postgis
display_name: PostGIS KNN Search
- service: knn-search-local
image: knn-search-local
display_name: Shapefile KNN Search
- service: bbox-filtering-duckdb
image: bbox-filtering-duckdb
display_name: DuckDB Bounding Box Filtering
- service: bbox-filtering-postgis
image: bbox-filtering-postgis
display_name: PostGIS Bounding Box Filtering
- service: bbox-filtering-local
image: bbox-filtering-local
display_name: Shapefile Bounding Box Filtering
# ---- RQ2 national-scale spatial join ----
- service: national-scale-spatial-join-duckdb
image: national-scale-spatial-join-duckdb
display_name: DuckDB National Scale Spatial Join
- service: national-scale-spatial-join-postgis
image: national-scale-spatial-join-postgis
display_name: PostGIS National Scale Spatial Join
- service: national-scale-spatial-join-databricks-broadcast-2-nodes
image: national-scale-spatial-join-databricks-broadcast-2-nodes
display_name: Sedona National Scale Spatial Join - Broadcast - 2 Nodes
- service: national-scale-spatial-join-databricks-broadcast-4-nodes
image: national-scale-spatial-join-databricks-broadcast-4-nodes
display_name: Sedona National Scale Spatial Join - Broadcast - 4 Nodes
- service: national-scale-spatial-join-databricks-broadcast-8-nodes
image: national-scale-spatial-join-databricks-broadcast-8-nodes
display_name: Sedona National Scale Spatial Join - Broadcast - 8 Nodes
- service: national-scale-spatial-join-databricks-partitioned-2-nodes
image: national-scale-spatial-join-databricks-partitioned-2-nodes
display_name: Sedona National Scale Spatial Join - Partitioned - 2 Nodes
- service: national-scale-spatial-join-databricks-partitioned-4-nodes
image: national-scale-spatial-join-databricks-partitioned-4-nodes
display_name: Sedona National Scale Spatial Join - Partitioned - 4 Nodes
- service: national-scale-spatial-join-databricks-partitioned-8-nodes
image: national-scale-spatial-join-databricks-partitioned-8-nodes
display_name: Sedona National Scale Spatial Join - Partitioned - 8 Nodes
- service: national-scale-spatial-join-databricks-broadcast-12-nodes
image: national-scale-spatial-join-databricks-broadcast-12-nodes
display_name: Sedona National Scale Spatial Join - Broadcast - 12 Nodes
- service: national-scale-spatial-join-databricks-broadcast-16-nodes
image: national-scale-spatial-join-databricks-broadcast-16-nodes
display_name: Sedona National Scale Spatial Join - Broadcast - 16 Nodes
- service: national-scale-spatial-join-databricks-partitioned-12-nodes
image: national-scale-spatial-join-databricks-partitioned-12-nodes
display_name: Sedona National Scale Spatial Join - Partitioned - 12 Nodes
- service: national-scale-spatial-join-databricks-partitioned-16-nodes
image: national-scale-spatial-join-databricks-partitioned-16-nodes
display_name: Sedona National Scale Spatial Join - Partitioned - 16 Nodes
- service: national-scale-spatial-join-databricks-default-2-nodes
image: national-scale-spatial-join-databricks-default-2-nodes
display_name: Sedona National Scale Spatial Join - Default - 2 Nodes
- service: national-scale-spatial-join-databricks-default-4-nodes
image: national-scale-spatial-join-databricks-default-4-nodes
display_name: Sedona National Scale Spatial Join - Default - 4 Nodes
- service: national-scale-spatial-join-databricks-default-8-nodes
image: national-scale-spatial-join-databricks-default-8-nodes
display_name: Sedona National Scale Spatial Join - Default - 8 Nodes
- service: national-scale-spatial-join-databricks-default-12-nodes
image: national-scale-spatial-join-databricks-default-12-nodes
display_name: Sedona National Scale Spatial Join - Default - 12 Nodes
- service: national-scale-spatial-join-databricks-default-16-nodes
image: national-scale-spatial-join-databricks-default-16-nodes
display_name: Sedona National Scale Spatial Join - Default - 16 Nodes
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Azure Login
uses: azure/login@v2
with:
client-id: ${{ vars.AZURE_CLIENT_ID }}
tenant-id: ${{ vars.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- name: Log in to ACR
run: az acr login --name ${{ vars.ACR_NAME }}
- name: Build ${{ matrix.display_name }} from docker-compose
run: docker compose build ${{ matrix.service }}
- name: Tag ${{ matrix.display_name }} as latest
run: docker tag ${{ matrix.service }}:latest ${{ vars.ACR_LOGIN_SERVER }}/${{ matrix.image }}:latest
- name: Tag ${{ matrix.display_name }} with commit SHA
run: docker tag ${{ matrix.service }}:latest ${{ vars.ACR_LOGIN_SERVER }}/${{ matrix.image }}:${{ github.sha }}
- name: Push ${{ matrix.display_name }} (latest)
run: docker push ${{ vars.ACR_LOGIN_SERVER }}/${{ matrix.image }}:latest
- name: Push ${{ matrix.display_name }} (commit SHA)
run: docker push ${{ vars.ACR_LOGIN_SERVER }}/${{ matrix.image }}:${{ github.sha }}
build-and-push-container-orchestrator:
name: Build & Push Container Orchestrator
needs:
- detect-changes
- build-and-push-queries
if: |
always()
&& !cancelled()
&& needs.detect-changes.result == 'success'
&& needs.detect-changes.outputs.orchestrator == 'true'
&& (needs.build-and-push-queries.result == 'success' || needs.build-and-push-queries.result == 'skipped')
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Azure Login
uses: azure/login@v2
with:
client-id: ${{ vars.AZURE_CLIENT_ID }}
tenant-id: ${{ vars.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- name: Log in to ACR
run: az acr login --name ${{ vars.ACR_NAME }}
- name: Build Container Orchestrator from docker-compose
run: docker compose build container-orchestrator
- name: Tag Container Orchestrator as latest
run: docker tag container-orchestrator:latest ${{ vars.ACR_LOGIN_SERVER }}/container-orchestrator:latest
- name: Tag Container Orchestrator with commit SHA
run: docker tag container-orchestrator:latest ${{ vars.ACR_LOGIN_SERVER }}/container-orchestrator:${{ github.sha }}
- name: Push Container Orchestrator (latest)
run: docker push ${{ vars.ACR_LOGIN_SERVER }}/container-orchestrator:latest
- name: Push Container Orchestrator (commit SHA)
run: docker push ${{ vars.ACR_LOGIN_SERVER }}/container-orchestrator:${{ github.sha }}
build-and-push-setup-framework:
name: Build & Push Setup Framework
needs:
- detect-changes
- build-and-push-queries
if: |
always()
&& !cancelled()
&& needs.detect-changes.result == 'success'
&& needs.detect-changes.outputs.benchmarks == 'true'
&& (needs.build-and-push-queries.result == 'success' || needs.build-and-push-queries.result == 'skipped')
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Azure Login
uses: azure/login@v2
with:
client-id: ${{ vars.AZURE_CLIENT_ID }}
tenant-id: ${{ vars.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- name: Log in to ACR
run: az acr login --name ${{ vars.ACR_NAME }}
- name: Build Setup Framework from docker-compose
run: docker compose build setup-framework
- name: Tag Setup Framework as latest
run: docker tag setup-framework:latest ${{ vars.ACR_LOGIN_SERVER }}/setup-framework:latest
- name: Tag Setup Framework with commit SHA
run: docker tag setup-framework:latest ${{ vars.ACR_LOGIN_SERVER }}/setup-framework:${{ github.sha }}
- name: Push Setup Framework (latest)
run: docker push ${{ vars.ACR_LOGIN_SERVER }}/setup-framework:latest
- name: Push Setup Framework (commit SHA)
run: docker push ${{ vars.ACR_LOGIN_SERVER }}/setup-framework:${{ github.sha }}