/ .github / workflows / native-build.yml
native-build.yml
  1  # SPDX-FileCopyrightText: 2023 LakeSoul Contributors
  2  #
  3  # SPDX-License-Identifier: Apache-2.0
  4  
  5  name: Cross build
  6  
  7  on:
  8    push:
  9      paths-ignore:
 10        - "javadoc/**"
 11        - "website/**"
 12        - "**.md"
 13      branches:
 14        - 'main'
 15    pull_request:
 16      paths-ignore:
 17        - "javadoc/**"
 18        - "website/**"
 19        - "**.md"
 20      branches:
 21        - 'main'
 22        - 'release/**'
 23    workflow_dispatch:
 24  
 25  jobs:
 26    build-linux-x86_64:
 27      runs-on: ubuntu-24.04
 28      steps:
 29        - name: Free Disk Space (Ubuntu)
 30          uses: jlumbroso/free-disk-space@main
 31          with:
 32            tool-cache: false
 33            android: true
 34            dotnet: true
 35            haskell: true
 36            large-packages: false
 37            docker-images: true
 38            swap-storage: true
 39        - uses: actions/checkout@v4
 40        - name: Set up JDK 11
 41          uses: actions/setup-java@v4
 42          with:
 43            java-version: '11'
 44            distribution: 'temurin'
 45            cache: maven
 46        - uses: actions-rs/toolchain@v1
 47          with:
 48            profile: minimal
 49            toolchain: stable
 50            default: true
 51        - uses: Swatinem/rust-cache@v2
 52          with:
 53            workspaces: ". -> rust/target"
 54            env-vars: "JAVA_HOME"
 55        - uses: actions-rs/cargo@v1
 56          with:
 57            use-cross: true
 58            command: build
 59            args: '--target x86_64-unknown-linux-gnu --package lakesoul-io-c --package lakesoul-metadata-c --release --all-features'
 60        - uses: actions/upload-artifact@v4
 61          with:
 62            name: lakesoul-nativeio-x86_64-unknown-linux-gnu
 63            path: ./rust/target/x86_64-unknown-linux-gnu/release/liblakesoul_io_c.so
 64        - uses: actions/upload-artifact@v4
 65          with:
 66            name: lakesoul-nativemetadata-x86_64-unknown-linux-gnu
 67            path: ./rust/target/x86_64-unknown-linux-gnu/release/liblakesoul_metadata_c.so
 68  
 69    build-windows-x86_64:
 70      runs-on: windows-latest
 71      steps:
 72        - uses: actions/checkout@v4
 73        - name: Set up JDK 11
 74          uses: actions/setup-java@v4
 75          with:
 76            java-version: '11'
 77            distribution: 'temurin'
 78            cache: maven
 79        - name: Install Protoc
 80          uses: arduino/setup-protoc@v2
 81          with:
 82            version: "23.x"
 83            repo-token: ${{ secrets.GITHUB_TOKEN }}
 84        - uses: actions-rs/toolchain@v1
 85          with:
 86            profile: minimal
 87            toolchain: stable
 88            default: true
 89        - uses: Swatinem/rust-cache@v2
 90          with:
 91            workspaces: ". -> rust/target"
 92            env-vars: "JAVA_HOME"
 93        - uses: actions-rs/cargo@v1
 94          with:
 95            command: build
 96            args: '--release --package lakesoul-io-c --package lakesoul-metadata-c --all-features'
 97        - uses: actions/upload-artifact@v4
 98          with:
 99            name: lakesoul-nativeio-x86_64-pc-windows-msvc
100            path: ./rust/target/release/lakesoul_io_c.dll
101        - uses: actions/upload-artifact@v4
102          with:
103            name: lakesoul-nativemetadata-x86_64-pc-windows-msvc
104            path: ./rust/target/release/lakesoul_metadata_c.dll
105  
106    build-macos-x86_64:
107      runs-on: macos-latest
108      steps:
109        - name: Install automake
110          run: brew install automake
111        - uses: actions/checkout@v4
112        - name: Set up JDK 11
113          uses: actions/setup-java@v4
114          with:
115            java-version: '11'
116            distribution: 'temurin'
117            cache: maven
118        - name: Install Protoc
119          uses: arduino/setup-protoc@v2
120          with:
121            version: "23.x"
122            repo-token: ${{ secrets.GITHUB_TOKEN }}
123        - uses: actions-rs/toolchain@v1
124          with:
125            profile: minimal
126            toolchain: stable
127            default: true
128        - uses: Swatinem/rust-cache@v2
129          with:
130            workspaces: ". -> rust/target"
131            env-vars: "JAVA_HOME"
132        - uses: actions-rs/cargo@v1
133          with:
134            command: build
135            args: '--release --package lakesoul-io-c --package lakesoul-metadata-c --all-features'
136        - uses: actions/upload-artifact@v4
137          with:
138            name: lakesoul-nativeio-x86_64-apple-darwin
139            path: ./rust/target/release/liblakesoul_io_c.dylib
140        - uses: actions/upload-artifact@v4
141          with:
142            name: lakesoul-nativemetadata-x86_64-apple-darwin
143            path: ./rust/target/release/liblakesoul_metadata_c.dylib
144  
145    build-maven-package:
146      runs-on: ubuntu-24.04
147      needs: [ build-linux-x86_64, build-windows-x86_64, build-macos-x86_64 ]
148      steps:
149        - uses: actions/checkout@v4
150        - uses: actions/download-artifact@v4
151          with:
152            name: lakesoul-nativeio-x86_64-unknown-linux-gnu
153            path: ./rust/target/release/
154        - uses: actions/download-artifact@v4
155          with:
156            name: lakesoul-nativeio-x86_64-apple-darwin
157            path: ./rust/target/release/
158        - uses: actions/download-artifact@v4
159          with:
160            name: lakesoul-nativeio-x86_64-pc-windows-msvc
161            path: ./rust/target/release/
162        - uses: actions/download-artifact@v4
163          with:
164            name: lakesoul-nativemetadata-x86_64-unknown-linux-gnu
165            path: ./rust/target/release/
166        - uses: actions/download-artifact@v4
167          with:
168            name: lakesoul-nativemetadata-x86_64-apple-darwin
169            path: ./rust/target/release/
170        - uses: actions/download-artifact@v4
171          with:
172            name: lakesoul-nativemetadata-x86_64-pc-windows-msvc
173            path: ./rust/target/release/
174        - name: Set up JDK 11
175          uses: actions/setup-java@v4
176          with:
177            java-version: '11'
178            distribution: 'temurin'
179            cache: maven
180        - name: Install Protoc
181          uses: arduino/setup-protoc@v2
182          with:
183            version: "23.x"
184            repo-token: ${{ secrets.GITHUB_TOKEN }}
185        - name: Build with Maven
186          run: |
187            MAVEN_OPTS="-Xmx4000m" mvn -q -B package --file pom.xml -Pcross-build -DskipTests -Dmaven.test.skip=true
188        - name: Upload Package
189          uses: actions/upload-artifact@v4
190          with:
191            name: maven-package-upload
192            path: |
193              lakesoul-spark/target/lakesoul-spark-*.jar
194              lakesoul-flink/target/lakesoul-flink-*.jar
195              lakesoul-presto/target/lakesoul-presto-*.jar
196            retention-days: 3
197            if-no-files-found: error