From f9ba2cf61baa138e8db617cbdaac933245dabb0b Mon Sep 17 00:00:00 2001 From: Chao Sun Date: Tue, 13 Feb 2024 13:54:51 -0800 Subject: [PATCH] initial commit --- .github/actions/setup-builder/actions.yaml | 50 ++++++++++ .github/workflows/pr.yml | 106 +++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 .github/actions/setup-builder/actions.yaml create mode 100644 .github/workflows/pr.yml diff --git a/.github/actions/setup-builder/actions.yaml b/.github/actions/setup-builder/actions.yaml new file mode 100644 index 0000000000..2475cd65be --- /dev/null +++ b/.github/actions/setup-builder/actions.yaml @@ -0,0 +1,50 @@ +# 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: Prepare Builder +description: 'Prepare Build Environment' +inputs: + rust-version: + description: 'version of rust to install (e.g. nightly)' + required: true + default: 'nightly' + jdk-version: + description: 'jdk version to install (e.g., 17)' + required: true + default: '17' +runs: + using: "composite" + steps: + - name: Install Build Dependencies + shell: bash + run: | + apt-get update + apt-get install -y openjdk-${{input.jdk-version}}-jdk protobuf-compiler + - name: Setup Rust toolchain + shell: bash + # rustfmt is needed for the substrait build script + run: | + echo "Installing ${{inputs.rust-version}}" + rustup toolchain install ${{ inputs.rust-version}} + rustup default ${{inputs.rust-version }} + rustup component add rustfmt + - name: Configure rust runtime env + uses: ./.github/actions/setup-rust-runtime + - name: Fixup git permissions + # https://github.com/actions/checkout/issues/766 + shell: bash + run: git config --global --add safe.directory "$GITHUB_WORKSPACE" diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000000..92913d251c --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,106 @@ +# 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: PR Build + +concurrency: + group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }} + cancel-in-progress: true + +on: + push: + paths-ignore: + - "doc/**" + - "**.md" + pull_request: + paths-ignore: + - "doc/**" + - "**.md" + # manual trigger + # https://docs.github.com/en/actions/managing-workflow-runs/manually-running-a-workflow + workflow_dispatch: + +env: + JAVA_VERSION: 17 + +jobs: + linux-rust-test: + name: Rust tests (amd64) + runs-on: ubuntu-latest + container: + image: amd64/rust + steps: + - uses: actions/checkout@v4 + - name: Setup Rust & Java toolchain + uses: ./.github/actions/setup-builder + with: + rust-version: nightly + jdk-version: ${{env.JAVA_VERSION}} + + - name: Check cargo fmt + run: | + cd core + cargo fmt --all -- --check --color=never + + - name: Check cargo clippy + run: | + cd core + cargo clippy --color=never -- -D warnings + + - name: Check compilation + run: | + cd core + cargo check --benches + + - name: Build common module (pre-requisite for Rust tests) + env: + JAVA_HOME: /usr/lib/jvm/java-${{env.JAVA_VERSION}}-openjdk-amd64 + run: | + echo "LIBRARY_PATH=$JAVA_HOME/lib:$JAVA_HOME/lib/server:$LD_LIBRARY_PATH" >> $GITHUB_ENV + cd common + ./mvnw clean compile -DskipTests + + - name: Run cargo test + run: | + cd core + cargo test --release + + linux-java-test: + name: Java tests (amd64) + runs-on: ubuntu-latest + container: + image: amd64/rust + steps: + - uses: actions/checkout@v4 + - name: Setup Rust & Java toolchain + uses: ./.github/actions/setup-builder + with: + rust-version: nightly + jdk-version: ${{env.JAVA_VERSION}} + + - name: Run cargo build + run: | + cd core + cargo build + + - name: Run Maven compile + run: | + ./mvnw compile test-compile scalafix:scalafix -Psemanticdb -Dscalafix.mode=Check + + - name: Run Maven install + run: | + SPARK_HOME=`pwd` ./mvnw clean install