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