Skip to content

Commit 6785d45

Browse files
authored
ci: run compatibility tests against native image (#76)
Runs compatibility tests against the native image on the ARM runner, using native-architecture test containers so client tools do not run through emulation. The gcloud tests use the official multi-arch Google CLI image, and Eventarc protobuf messages are registered for native JSON handling.
1 parent 2fd3f38 commit 6785d45

4 files changed

Lines changed: 124 additions & 76 deletions

File tree

.github/workflows/compatibility.yml

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ on:
55
paths:
66
- 'src/**'
77
- 'pom.xml'
8-
- 'docker/Dockerfile.jvm-package'
8+
- 'docker/Dockerfile.native-package'
9+
- 'docker/entrypoint.sh'
910
- 'compatibility-tests/**'
1011
- '.github/workflows/compatibility.yml'
1112

@@ -17,48 +18,55 @@ concurrency:
1718
cancel-in-progress: true
1819

1920
jobs:
20-
build:
21-
name: Build floci-gcp image
22-
runs-on: ubuntu-latest
23-
timeout-minutes: 20
21+
build-native:
22+
name: Build native floci-gcp image
23+
runs-on: ubuntu-24.04-arm
24+
timeout-minutes: 30
2425
steps:
2526
- uses: actions/checkout@v6
2627

27-
- uses: actions/setup-java@v5
28+
- uses: graalvm/setup-graalvm@bef4b0e916c7dd079bf60fb95d49139f67e32c5f # v1
2829
with:
2930
java-version: '25'
30-
distribution: 'temurin'
31+
distribution: 'mandrel'
3132
cache: maven
33+
github-token: ${{ secrets.GITHUB_TOKEN }}
3234

33-
- name: Build JVM artifact
34-
run: mvn clean package -DskipTests -q
35+
- name: Build native executable (quick build)
36+
run: mvn clean package -Dnative -DskipTests -B -Dquarkus.native.additional-build-args-append="-Ob"
37+
38+
- name: Stage native binary for packaging
39+
run: |
40+
mkdir -p native/arm64
41+
cp target/*-runner native/arm64/
42+
cp target/*.so native/arm64/ 2>/dev/null || true
3543
3644
- uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0
3745

38-
- name: Build Docker image
46+
- name: Build native Docker image
3947
uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf # v7.2.0
4048
with:
4149
context: .
42-
file: docker/Dockerfile.jvm-package
43-
tags: floci-gcp:test
44-
outputs: type=docker,dest=/tmp/floci-gcp-image.tar
45-
cache-from: type=gha,scope=floci-gcp
46-
cache-to: type=gha,scope=floci-gcp,mode=max
50+
file: docker/Dockerfile.native-package
51+
tags: floci-gcp:test-native
52+
outputs: type=docker,dest=/tmp/floci-gcp-native-image.tar
53+
cache-from: type=gha,scope=floci-gcp-native
54+
cache-to: type=gha,scope=floci-gcp-native,mode=max
4755

48-
- name: Compress image
49-
run: gzip /tmp/floci-gcp-image.tar
56+
- name: Compress native image
57+
run: gzip /tmp/floci-gcp-native-image.tar
5058

51-
- name: Upload floci-gcp image
59+
- name: Upload native floci-gcp image
5260
uses: actions/upload-artifact@v7
5361
with:
54-
name: floci-gcp-image
55-
path: /tmp/floci-gcp-image.tar.gz
62+
name: floci-gcp-native-image
63+
path: /tmp/floci-gcp-native-image.tar.gz
5664
retention-days: 1
5765

58-
compat-test:
59-
name: ${{ matrix.test }}
60-
needs: build
61-
runs-on: ubuntu-latest
66+
native-compat-test:
67+
name: native / ${{ matrix.test }}
68+
needs: build-native
69+
runs-on: ubuntu-24.04-arm
6270
timeout-minutes: 35
6371
strategy:
6472
fail-fast: false
@@ -73,14 +81,14 @@ jobs:
7381
- compat-opentofu
7482

7583
steps:
76-
- name: Download floci-gcp image
84+
- name: Download native floci-gcp image
7785
uses: actions/download-artifact@v8
7886
with:
79-
name: floci-gcp-image
87+
name: floci-gcp-native-image
8088
path: /tmp
8189

82-
- name: Load floci-gcp image
83-
run: gunzip -c /tmp/floci-gcp-image.tar.gz | docker load
90+
- name: Load native floci-gcp image
91+
run: gunzip -c /tmp/floci-gcp-native-image.tar.gz | docker load
8492

8593
- name: Create Docker network
8694
run: docker network create compat-net
@@ -102,7 +110,7 @@ jobs:
102110
-e FLOCI_GCP_SERVICES_DOCKER_NETWORK=compat-net \
103111
-e FLOCI_GCP_SERVICES_KAFKA_MOCK="$KAFKA_MOCK" \
104112
-e FLOCI_GCP_SERVICES_CLOUDRUN_MOCK=false \
105-
floci-gcp:test
113+
floci-gcp:test-native
106114
107115
- name: Wait for floci-gcp to be ready
108116
run: timeout 60 bash -c 'until curl -sf http://localhost:4588/health >/dev/null 2>&1; do sleep 1; done'
@@ -120,8 +128,8 @@ jobs:
120128
context: compatibility-tests/${{ matrix.test }}
121129
load: true
122130
tags: compat-${{ matrix.test }}
123-
cache-from: type=gha,scope=${{ matrix.test }}
124-
cache-to: type=gha,scope=${{ matrix.test }},mode=max
131+
cache-from: type=gha,scope=${{ runner.os }}-${{ runner.arch }}-${{ matrix.test }}
132+
cache-to: type=gha,scope=${{ runner.os }}-${{ runner.arch }}-${{ matrix.test }},mode=max
125133

126134
- name: Run tests
127135
id: tests

compatibility-tests/sdk-test-gcloud/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM google/cloud-sdk:slim
1+
FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:slim
22

33
RUN apt-get update \
44
&& apt-get install -y --no-install-recommends git jq \

docker/Dockerfile.jvm-package

Lines changed: 0 additions & 44 deletions
This file was deleted.

src/main/java/io/floci/gcp/core/common/ProtoReflectionConfig.java

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,90 @@
718718
"com.google.cloud.audit.ViolationInfo$PolicyType",
719719
"com.google.cloud.audit.ViolationInfo$PolicyType$1",
720720
"com.google.cloud.audit.ViolationInfoOrBuilder",
721+
"com.google.cloud.eventarc.v1.Channel",
722+
"com.google.cloud.eventarc.v1.Channel$1",
723+
"com.google.cloud.eventarc.v1.Channel$2",
724+
"com.google.cloud.eventarc.v1.Channel$Builder",
725+
"com.google.cloud.eventarc.v1.Channel$LabelsDefaultEntryHolder",
726+
"com.google.cloud.eventarc.v1.Channel$State",
727+
"com.google.cloud.eventarc.v1.Channel$State$1",
728+
"com.google.cloud.eventarc.v1.Channel$TransportCase",
729+
"com.google.cloud.eventarc.v1.ChannelOrBuilder",
730+
"com.google.cloud.eventarc.v1.CloudRun",
731+
"com.google.cloud.eventarc.v1.CloudRun$1",
732+
"com.google.cloud.eventarc.v1.CloudRun$Builder",
733+
"com.google.cloud.eventarc.v1.CloudRunOrBuilder",
734+
"com.google.cloud.eventarc.v1.Destination",
735+
"com.google.cloud.eventarc.v1.Destination$1",
736+
"com.google.cloud.eventarc.v1.Destination$2",
737+
"com.google.cloud.eventarc.v1.Destination$Builder",
738+
"com.google.cloud.eventarc.v1.Destination$DescriptorCase",
739+
"com.google.cloud.eventarc.v1.DestinationOrBuilder",
740+
"com.google.cloud.eventarc.v1.EventFilter",
741+
"com.google.cloud.eventarc.v1.EventFilter$1",
742+
"com.google.cloud.eventarc.v1.EventFilter$Builder",
743+
"com.google.cloud.eventarc.v1.EventFilterOrBuilder",
744+
"com.google.cloud.eventarc.v1.EventType",
745+
"com.google.cloud.eventarc.v1.EventType$1",
746+
"com.google.cloud.eventarc.v1.EventType$Builder",
747+
"com.google.cloud.eventarc.v1.EventTypeOrBuilder",
748+
"com.google.cloud.eventarc.v1.GKE",
749+
"com.google.cloud.eventarc.v1.GKE$1",
750+
"com.google.cloud.eventarc.v1.GKE$Builder",
751+
"com.google.cloud.eventarc.v1.GKEOrBuilder",
752+
"com.google.cloud.eventarc.v1.HttpEndpoint",
753+
"com.google.cloud.eventarc.v1.HttpEndpoint$1",
754+
"com.google.cloud.eventarc.v1.HttpEndpoint$Builder",
755+
"com.google.cloud.eventarc.v1.HttpEndpointOrBuilder",
756+
"com.google.cloud.eventarc.v1.ListChannelsResponse",
757+
"com.google.cloud.eventarc.v1.ListChannelsResponse$1",
758+
"com.google.cloud.eventarc.v1.ListChannelsResponse$Builder",
759+
"com.google.cloud.eventarc.v1.ListChannelsResponseOrBuilder",
760+
"com.google.cloud.eventarc.v1.ListProvidersResponse",
761+
"com.google.cloud.eventarc.v1.ListProvidersResponse$1",
762+
"com.google.cloud.eventarc.v1.ListProvidersResponse$Builder",
763+
"com.google.cloud.eventarc.v1.ListProvidersResponseOrBuilder",
764+
"com.google.cloud.eventarc.v1.ListTriggersResponse",
765+
"com.google.cloud.eventarc.v1.ListTriggersResponse$1",
766+
"com.google.cloud.eventarc.v1.ListTriggersResponse$Builder",
767+
"com.google.cloud.eventarc.v1.ListTriggersResponseOrBuilder",
768+
"com.google.cloud.eventarc.v1.NetworkConfig",
769+
"com.google.cloud.eventarc.v1.NetworkConfig$1",
770+
"com.google.cloud.eventarc.v1.NetworkConfig$Builder",
771+
"com.google.cloud.eventarc.v1.NetworkConfigOrBuilder",
772+
"com.google.cloud.eventarc.v1.OperationMetadata",
773+
"com.google.cloud.eventarc.v1.OperationMetadata$1",
774+
"com.google.cloud.eventarc.v1.OperationMetadata$Builder",
775+
"com.google.cloud.eventarc.v1.OperationMetadataOrBuilder",
776+
"com.google.cloud.eventarc.v1.Provider",
777+
"com.google.cloud.eventarc.v1.Provider$1",
778+
"com.google.cloud.eventarc.v1.Provider$Builder",
779+
"com.google.cloud.eventarc.v1.ProviderOrBuilder",
780+
"com.google.cloud.eventarc.v1.Pubsub",
781+
"com.google.cloud.eventarc.v1.Pubsub$1",
782+
"com.google.cloud.eventarc.v1.Pubsub$Builder",
783+
"com.google.cloud.eventarc.v1.PubsubOrBuilder",
784+
"com.google.cloud.eventarc.v1.StateCondition",
785+
"com.google.cloud.eventarc.v1.StateCondition$1",
786+
"com.google.cloud.eventarc.v1.StateCondition$Builder",
787+
"com.google.cloud.eventarc.v1.StateConditionOrBuilder",
788+
"com.google.cloud.eventarc.v1.Transport",
789+
"com.google.cloud.eventarc.v1.Transport$1",
790+
"com.google.cloud.eventarc.v1.Transport$2",
791+
"com.google.cloud.eventarc.v1.Transport$Builder",
792+
"com.google.cloud.eventarc.v1.Transport$IntermediaryCase",
793+
"com.google.cloud.eventarc.v1.TransportOrBuilder",
794+
"com.google.cloud.eventarc.v1.Trigger",
795+
"com.google.cloud.eventarc.v1.Trigger$1",
796+
"com.google.cloud.eventarc.v1.Trigger$Builder",
797+
"com.google.cloud.eventarc.v1.Trigger$Builder$ConditionsConverter",
798+
"com.google.cloud.eventarc.v1.Trigger$ConditionsDefaultEntryHolder",
799+
"com.google.cloud.eventarc.v1.Trigger$LabelsDefaultEntryHolder",
800+
"com.google.cloud.eventarc.v1.Trigger$RetryPolicy",
801+
"com.google.cloud.eventarc.v1.Trigger$RetryPolicy$1",
802+
"com.google.cloud.eventarc.v1.Trigger$RetryPolicy$Builder",
803+
"com.google.cloud.eventarc.v1.Trigger$RetryPolicyOrBuilder",
804+
"com.google.cloud.eventarc.v1.TriggerOrBuilder",
721805
"com.google.cloud.functions.v2.AutomaticUpdatePolicy",
722806
"com.google.cloud.functions.v2.AutomaticUpdatePolicy$1",
723807
"com.google.cloud.functions.v2.AutomaticUpdatePolicy$Builder",

0 commit comments

Comments
 (0)