Repository navigation
184 lines (174 loc) · 5.56 KB
/
Copy pathci_bindings_java.yml
File metadata and controls
184 lines (174 loc) · 5.56 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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
name: Bindings Java CI
on:
push:
branches:
- main
tags:
- '*'
paths: &paths
- "core/**"
- "bindings/java/**"
- ".github/actions/setup/**"
- ".github/workflows/ci_bindings_java.yml"
pull_request:
branches:
- main
paths: *paths
schedule:
- cron: '30 1 * * 1'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: true
permissions:
contents: read
jobs:
# Prevent parallel cache building in `test` job by building cache in a separate job
java-cache:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
# ubuntu-24.04-arm shares the same platform as ubuntu-latest, so we don't need to build cache for it
- macos-latest
- windows-latest
steps:
- uses: actions/checkout@v7
- name: Set up JDK 25
uses: actions/setup-java@v5
with:
# The cache key is `setup-java-${{ platform }}-${{ packageManager }}-${{ fileHash }}`. Relevant params are:
# - cache
# - cache-dependency-path
java-version: 25
distribution: zulu
cache: 'maven'
cache-dependency-path: |
bindings/java/pom.xml
lint:
runs-on: ubuntu-latest
needs: java-cache
steps:
- uses: actions/checkout@v7
- name: Set up Rust toolchain
uses: ./.github/actions/setup
with:
need-protoc: true
need-rocksdb: true
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up JDK 25
uses: actions/setup-java@v5
with:
# params must be in sync with `test` job:
# - cache
# - cache-dependency-path
distribution: zulu
java-version: 25
cache: 'maven'
cache-dependency-path: |
bindings/java/pom.xml
- name: Build and check
working-directory: bindings/java
run: |
./mvnw clean compile spotless:check
# Useful for debugging
- name: Print Clippy version
working-directory: bindings/java
run: cargo clippy --version
- name: Check Clippy
working-directory: bindings/java
run: cargo clippy -- -D warnings
test:
runs-on: ${{ matrix.os }}
needs: java-cache
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- ubuntu-24.04-arm
- macos-latest
- windows-latest
java-version:
- 8
- 11
- 17
- 21
- 25
steps:
- uses: actions/checkout@v7
- name: Set up Rust toolchain
uses: ./.github/actions/setup
with:
need-protoc: true
need-rocksdb: true
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up JDK ${{ matrix.java-version }}
uses: actions/setup-java@v5
with:
# params must be in sync with `test` job:
# - cache
# - cache-dependency-path
distribution: zulu
java-version: ${{ matrix.java-version }}
cache: 'maven'
cache-dependency-path: |
bindings/java/pom.xml
- name: Build and test
working-directory: bindings/java
# `mvn install` and `mvn artifact:compare` are required to verify reproducible builds:
# https://maven.apache.org/guides/mini/guide-reproducible-builds.html#how-to-test-my-maven-build-reproducibility
shell: bash
run: |
./mvnw clean install -DskipTests
./mvnw verify artifact:compare
run_examples:
runs-on: ubuntu-latest
needs: java-cache
steps:
- uses: actions/checkout@v7
- name: Set up Rust toolchain
uses: ./.github/actions/setup
with:
need-protoc: true
need-rocksdb: true
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up JDK 25
uses: actions/setup-java@v5
with:
# params must be in sync with `test` job:
# - cache
# - cache-dependency-path
distribution: zulu
java-version: 25
cache: 'maven'
cache-dependency-path: |
bindings/java/pom.xml
# The example backs the snippet shown in the website guide. Running it keeps
# the docs honest: a broken example fails CI instead of shipping bad docs.
# `test-compile` builds the native library and the example, then `exec:java`
# runs it against the in-memory service with the test classpath.
- name: Run guide example
working-directory: bindings/java
run: |
./mvnw test-compile exec:java \
-Dexec.mainClass=org.apache.opendal.examples.Main \
-Dexec.classpathScope=test