-
Notifications
You must be signed in to change notification settings - Fork 5.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[native] Convert CircleCI jobs for PrestoC++ to Github actions
This pull request converts the CircleCI workflows to GitHub actions workflows. The workflows use the standard runners with Ubuntu 22.04. Some modifications were made to allow a build with the limited resources available: |name|build type|comments|expected runtime (no cache)|unit tests|E2E tests| |----|----------|--------|----------------|----------|---------| | prestocpp-linux-build | debug | All adapters enabled | 45m | N | N | | prestocpp-linux-build-and-unit-test | release | JWT, remote function, Parquet enabled | 90m | Y | Y | | prestocpp-macos-build | debug | Setup script plus build | 120m | N | N | | prestocpp-linux-adapters-build | release | Adapters only build | 20m | N | N | Caching is currently enabled for the prestocpp-linux-build-and-unit-test. If the cache can be used, the time to run tests drops to 50m. Additional workflows are prestocpp-format-check and prestocpp-header-check That run in a few seconds. For the original conversion see: #21545 Co-authored-by: Rob Anderson <robandpdx@github.com>
- Loading branch information
Showing
5 changed files
with
483 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
name: prestocpp-format-and-header-check | ||
|
||
on: | ||
workflow_dispatch: | ||
pull_request: | ||
paths: | ||
- 'presto-native-execution/**' | ||
|
||
jobs: | ||
prestocpp-format-check: | ||
runs-on: ubuntu-latest | ||
container: | ||
image: public.ecr.aws/oss-presto/velox-dev:check | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Fix git permissions | ||
# Usually actions/checkout does this but as we run in a container | ||
# it doesn't work | ||
run: git config --global --add safe.directory ${GITHUB_WORKSPACE} | ||
- name: Check formatting | ||
run: | | ||
git fetch origin master | ||
cd presto-native-execution | ||
make format-check | ||
- name: Check license headers | ||
run: | | ||
git fetch origin master | ||
cd presto-native-execution | ||
make header-check |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
name: prestocpp-linux-adapters-build | ||
|
||
on: | ||
workflow_dispatch: | ||
pull_request: | ||
paths: | ||
- 'presto-native-execution/scripts/setup-adapters.sh' | ||
- 'presto-native-execution/velox' | ||
|
||
jobs: | ||
prestocpp-linux-build-adapters: | ||
runs-on: ubuntu-22.04 | ||
container: | ||
image: prestodb/presto-native-dependency:0.290-20241014120930-e1fc090 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Fix git permissions | ||
# Usually actions/checkout does this but as we run in a container | ||
# it doesn't work | ||
run: git config --global --add safe.directory ${GITHUB_WORKSPACE} | ||
- name: Update submodules | ||
run: | | ||
cd presto-native-execution | ||
make submodules | ||
- name: Build all adapter dependencies | ||
run: | | ||
mkdir -p ${GITHUB_WORKSPACE}/adapter-deps/install | ||
source /opt/rh/gcc-toolset-12/enable | ||
set -xu | ||
cd presto-native-execution | ||
DEPENDENCY_DIR=${GITHUB_WORKSPACE}/adapter-deps PROMPT_ALWAYS_RESPOND=n ./velox/scripts/setup-adapters.sh | ||
DEPENDENCY_DIR=${GITHUB_WORKSPACE}/adapter-deps PROMPT_ALWAYS_RESPOND=n ./scripts/setup-adapters.sh |
333 changes: 333 additions & 0 deletions
333
.github/workflows/prestocpp-linux-build-and-unit-test.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,333 @@ | ||
name: prestocpp-linux-build-and-unit-test | ||
|
||
on: | ||
workflow_dispatch: | ||
pull_request: | ||
|
||
jobs: | ||
prestocpp-linux-build-for-test: | ||
runs-on: ubuntu-22.04 | ||
container: | ||
image: prestodb/presto-native-dependency:0.290-20241014120930-e1fc090 | ||
env: | ||
CCACHE_DIR: "${{ github.workspace }}/ccache" | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Fix git permissions | ||
# Usually actions/checkout does this but as we run in a container | ||
# it doesn't work | ||
run: git config --global --add safe.directory ${GITHUB_WORKSPACE} | ||
|
||
- name: Update velox | ||
run: | | ||
cd presto-native-execution | ||
make velox-submodule | ||
- name: Install prestocpp adapter dependencies | ||
run: | | ||
mkdir -p ${HOME}/adapter-deps/install | ||
source /opt/rh/gcc-toolset-12/enable | ||
set -xu | ||
cd presto-native-execution | ||
DEPENDENCY_DIR=${HOME}/adapter-deps PROMPT_ALWAYS_RESPOND=n ./scripts/setup-adapters.sh | ||
- name: Calculate merge-base date for ccache | ||
run: | | ||
git fetch origin master | ||
git show -s --format=%cd --date="format:%Y%m%d" $(git merge-base origin/master HEAD) | tee merge-base-date | ||
- name: Install Github CLI for using apache/infrastructure-actions/stash | ||
run: | | ||
curl -L https://github.com/cli/cli/releases/download/v2.63.2/gh_2.63.2_linux_amd64.rpm > gh_2.63.2_linux_amd64.rpm | ||
rpm -iv gh_2.63.2_linux_amd64.rpm | ||
- uses: apache/infrastructure-actions/stash/restore@4ab8682fbd4623d2b4fc1c98db38aba5091924c3 | ||
with: | ||
path: '${{ env.CCACHE_DIR }}' | ||
key: ccache-linux-prestocpp-${{ runner.os }}-${{ hashFiles('merge-base-date') }} | ||
|
||
- name: Zero ccache statistics | ||
run: ccache -sz | ||
|
||
- name: Build engine | ||
run: | | ||
source /opt/rh/gcc-toolset-12/enable | ||
cd presto-native-execution | ||
cmake \ | ||
-B _build/release \ | ||
-GNinja \ | ||
-DTREAT_WARNINGS_AS_ERRORS=1 \ | ||
-DENABLE_ALL_WARNINGS=1 \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DPRESTO_ENABLE_PARQUET=ON \ | ||
-DPRESTO_ENABLE_REMOTE_FUNCTIONS=ON \ | ||
-DPRESTO_ENABLE_JWT=ON \ | ||
-DPRESTO_STATS_REPORTER_TYPE=PROMETHEUS \ | ||
-DPRESTO_MEMORY_CHECKER_TYPE=LINUX_MEMORY_CHECKER \ | ||
-DCMAKE_PREFIX_PATH=/usr/local \ | ||
-DThrift_ROOT=/usr/local \ | ||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ | ||
-DMAX_LINK_JOBS=4 | ||
ninja -C _build/release -j 4 | ||
- name: Ccache after | ||
run: ccache -s | ||
|
||
- uses: apache/infrastructure-actions/stash/save@4ab8682fbd4623d2b4fc1c98db38aba5091924c3 | ||
with: | ||
path: '${{ env.CCACHE_DIR }}' | ||
key: ccache-linux-prestocpp-${{ runner.os }}-${{ hashFiles('merge-base-date') }} | ||
|
||
- name: Run Unit Tests | ||
run: | | ||
# Ensure transitive dependency libboost-iostreams is found. | ||
ldconfig /usr/local/lib | ||
cd presto-native-execution/_build/release | ||
ctest -j 4 -VV --output-on-failure --exclude-regex velox.* | ||
- name: Upload artifacts | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: presto-native-build | ||
path: | | ||
presto-native-execution/_build/release/presto_cpp/main/presto_server | ||
presto-native-execution/_build/release/velox/velox/functions/remote/server/velox_functions_remote_server_main | ||
prestocpp-linux-presto-e2e-tests: | ||
needs: prestocpp-linux-build-for-test | ||
runs-on: ubuntu-22.04 | ||
container: | ||
image: prestodb/presto-native-dependency:0.290-20241014120930-e1fc090 | ||
env: | ||
MAVEN_OPTS: "-Xmx4G -XX:+ExitOnOutOfMemoryError" | ||
MAVEN_FAST_INSTALL: "-B -V --quiet -T 1C -DskipTests -Dair.check.skip-all -Dmaven.javadoc.skip=true" | ||
MAVEN_TEST: "-B -Dair.check.skip-all -Dmaven.javadoc.skip=true -DLogTestDurationListener.enabled=true --fail-at-end" | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Fix git permissions | ||
# Usually actions/checkout does this but as we run in a container | ||
# it doesn't work | ||
run: git config --global --add safe.directory ${GITHUB_WORKSPACE} | ||
|
||
- name: Download artifacts | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: presto-native-build | ||
path: presto-native-execution/_build/release | ||
|
||
# Permissions are lost when uploading. Details here: https://github.com/actions/upload-artifact/issues/38 | ||
- name: Restore execute permissions and library path | ||
run: | | ||
chmod +x ${GITHUB_WORKSPACE}/presto-native-execution/_build/release/presto_cpp/main/presto_server | ||
chmod +x ${GITHUB_WORKSPACE}/presto-native-execution/_build/release/velox/velox/functions/remote/server/velox_functions_remote_server_main | ||
# Ensure transitive dependency libboost-iostreams is found. | ||
ldconfig /usr/local/lib | ||
- name: Install OpenJDK8 | ||
uses: actions/setup-java@v4 | ||
with: | ||
distribution: 'temurin' | ||
java-version: '8' | ||
|
||
- name: Cache local Maven repository | ||
id: cache-maven | ||
uses: actions/cache@v4 | ||
with: | ||
path: ~/.m2/repository | ||
key: ${{ runner.os }}-maven-2-${{ hashFiles('**/pom.xml') }} | ||
restore-keys: | | ||
${{ runner.os }}-maven-2- | ||
- name: Populate maven cache | ||
if: steps.cache-maven.outputs.cache-hit != 'true' | ||
run: ./mvnw de.qaware.maven:go-offline-maven-plugin:resolve-dependencies | ||
|
||
- name: Maven install | ||
env: | ||
# Use different Maven options to install. | ||
MAVEN_OPTS: "-Xmx2G -XX:+ExitOnOutOfMemoryError" | ||
run: | | ||
for i in $(seq 1 3); do ./mvnw clean install $MAVEN_FAST_INSTALL -pl 'presto-native-execution' -am && s=0 && break || s=$? && sleep 10; done; (exit $s) | ||
- name: Run presto-native e2e tests | ||
run: | | ||
export PRESTO_SERVER_PATH="${GITHUB_WORKSPACE}/presto-native-execution/_build/release/presto_cpp/main/presto_server" | ||
export TESTFILES=`find ./presto-native-execution/src/test -type f -name 'TestPrestoNative*.java'` | ||
# Convert file paths to comma separated class names | ||
export TESTCLASSES= | ||
for test_file in $TESTFILES | ||
do | ||
tmp=${test_file##*/} | ||
test_class=${tmp%%\.*} | ||
export TESTCLASSES="${TESTCLASSES},$test_class" | ||
done | ||
export TESTCLASSES=${TESTCLASSES#,} | ||
echo "TESTCLASSES = $TESTCLASSES" | ||
# TODO: neeed to enable remote function tests with | ||
# "-Ppresto-native-execution-remote-functions" once | ||
# > https://github.com/facebookincubator/velox/discussions/6163 | ||
# is fixed. | ||
mvn test \ | ||
${MAVEN_TEST} \ | ||
-pl 'presto-native-execution' \ | ||
-Dtest="${TESTCLASSES}" \ | ||
-DPRESTO_SERVER=${PRESTO_SERVER_PATH} \ | ||
-DDATA_DIR=${RUNNER_TEMP} \ | ||
-Duser.timezone=America/Bahia_Banderas \ | ||
-T1C | ||
prestocpp-linux-spark-e2e-tests: | ||
needs: prestocpp-linux-build-for-test | ||
runs-on: ubuntu-22.04 | ||
container: | ||
image: prestodb/presto-native-dependency:0.290-20241014120930-e1fc090 | ||
env: | ||
MAVEN_OPTS: "-Xmx4G -XX:+ExitOnOutOfMemoryError" | ||
MAVEN_FAST_INSTALL: "-B -V --quiet -T 1C -DskipTests -Dair.check.skip-all -Dmaven.javadoc.skip=true" | ||
MAVEN_TEST: "-B -Dair.check.skip-all -Dmaven.javadoc.skip=true -DLogTestDurationListener.enabled=true --fail-at-end" | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Fix git permissions | ||
# Usually actions/checkout does this but as we run in a container | ||
# it doesn't work | ||
run: git config --global --add safe.directory ${GITHUB_WORKSPACE} | ||
|
||
- name: Download artifacts | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: presto-native-build | ||
path: presto-native-execution/_build/release | ||
|
||
# Permissions are lost when uploading. Details here: https://github.com/actions/upload-artifact/issues/38 | ||
- name: Restore execute permissions and library path | ||
run: | | ||
chmod +x ${GITHUB_WORKSPACE}/presto-native-execution/_build/release/presto_cpp/main/presto_server | ||
chmod +x ${GITHUB_WORKSPACE}/presto-native-execution/_build/release/velox/velox/functions/remote/server/velox_functions_remote_server_main | ||
# Ensure transitive dependency libboost-iostreams is found. | ||
ldconfig /usr/local/lib | ||
- name: Check Java | ||
run: java --version | ||
|
||
- name: Cache local Maven repository | ||
id: cache-maven | ||
uses: actions/cache@v4 | ||
with: | ||
path: ~/.m2/repository | ||
key: ${{ runner.os }}-maven-2-${{ hashFiles('**/pom.xml') }} | ||
restore-keys: | | ||
${{ runner.os }}-maven-2- | ||
- name: Populate maven cache | ||
if: steps.cache-maven.outputs.cache-hit != 'true' | ||
run: ./mvnw de.qaware.maven:go-offline-maven-plugin:resolve-dependencies | ||
|
||
- name: Maven install | ||
env: | ||
# Use different Maven options to install. | ||
MAVEN_OPTS: "-Xmx2G -XX:+ExitOnOutOfMemoryError" | ||
run: | | ||
for i in $(seq 1 3); do ./mvnw clean install $MAVEN_FAST_INSTALL -pl 'presto-native-execution' -am && s=0 && break || s=$? && sleep 10; done; (exit $s) | ||
- name: Run spark e2e tests | ||
run: | | ||
export PRESTO_SERVER_PATH="${GITHUB_WORKSPACE}/presto-native-execution/_build/release/presto_cpp/main/presto_server" | ||
export TESTFILES=`find ./presto-native-execution/src/test -type f -name 'TestPrestoSpark*.java'` | ||
# Convert file paths to comma separated class names | ||
export TESTCLASSES= | ||
for test_file in $TESTFILES | ||
do | ||
tmp=${test_file##*/} | ||
test_class=${tmp%%\.*} | ||
export TESTCLASSES="${TESTCLASSES},$test_class" | ||
done | ||
export TESTCLASSES=${TESTCLASSES#,} | ||
echo "TESTCLASSES = $TESTCLASSES" | ||
mvn test \ | ||
${MAVEN_TEST} \ | ||
-pl 'presto-native-execution' \ | ||
-Dtest="${TESTCLASSES}" \ | ||
-DPRESTO_SERVER=${PRESTO_SERVER_PATH} \ | ||
-DDATA_DIR=${RUNNER_TEMP} \ | ||
-Duser.timezone=America/Bahia_Banderas \ | ||
-T1C | ||
prestocpp-linux-presto-sidecar-tests: | ||
needs: prestocpp-linux-build-for-test | ||
runs-on: ubuntu-22.04 | ||
container: | ||
image: prestodb/presto-native-dependency:0.290-20241014120930-e1fc090 | ||
env: | ||
MAVEN_OPTS: "-Xmx4G -XX:+ExitOnOutOfMemoryError" | ||
MAVEN_FAST_INSTALL: "-B -V --quiet -T 1C -DskipTests -Dair.check.skip-all -Dmaven.javadoc.skip=true" | ||
MAVEN_TEST: "-B -Dair.check.skip-all -Dmaven.javadoc.skip=true -DLogTestDurationListener.enabled=true --fail-at-end" | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Fix git permissions | ||
# Usually actions/checkout does this but as we run in a container | ||
# it doesn't work | ||
run: git config --global --add safe.directory ${GITHUB_WORKSPACE} | ||
|
||
- name: Download artifacts | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: presto-native-build | ||
path: presto-native-execution/_build/release | ||
|
||
# Permissions are lost when uploading. Details here: https://github.com/actions/upload-artifact/issues/38 | ||
- name: Restore execute permissions and library path | ||
run: | | ||
chmod +x ${GITHUB_WORKSPACE}/presto-native-execution/_build/release/presto_cpp/main/presto_server | ||
chmod +x ${GITHUB_WORKSPACE}/presto-native-execution/_build/release/velox/velox/functions/remote/server/velox_functions_remote_server_main | ||
# Ensure transitive dependency libboost-iostreams is found. | ||
ldconfig /usr/local/lib | ||
- name: Install OpenJDK8 | ||
uses: actions/setup-java@v4 | ||
with: | ||
distribution: 'temurin' | ||
java-version: '8' | ||
|
||
- name: Cache local Maven repository | ||
id: cache-maven | ||
uses: actions/cache@v4 | ||
with: | ||
path: ~/.m2/repository | ||
key: ${{ runner.os }}-maven-2-${{ hashFiles('**/pom.xml') }} | ||
restore-keys: | | ||
${{ runner.os }}-maven-2- | ||
- name: Populate maven cache | ||
if: steps.cache-maven.outputs.cache-hit != 'true' | ||
run: ./mvnw de.qaware.maven:go-offline-maven-plugin:resolve-dependencies | ||
|
||
- name: Maven install | ||
env: | ||
# Use different Maven options to install. | ||
MAVEN_OPTS: "-Xmx2G -XX:+ExitOnOutOfMemoryError" | ||
run: | | ||
for i in $(seq 1 3); do ./mvnw clean install $MAVEN_FAST_INSTALL -pl 'presto-native-execution' -am && s=0 && break || s=$? && sleep 10; done; (exit $s) | ||
- name: Run presto-native sidecar tests | ||
run: | | ||
export PRESTO_SERVER_PATH="${GITHUB_WORKSPACE}/presto-native-execution/_build/release/presto_cpp/main/presto_server" | ||
export TESTFILES=`find ./presto-native-sidecar-plugin/src/test -type f -name 'Test*.java'` | ||
# Convert file paths to comma separated class names | ||
export TESTCLASSES= | ||
for test_file in $TESTFILES | ||
do | ||
tmp=${test_file##*/} | ||
test_class=${tmp%%\.*} | ||
export TESTCLASSES="${TESTCLASSES},$test_class" | ||
done | ||
export TESTCLASSES=${TESTCLASSES#,} | ||
echo "TESTCLASSES = $TESTCLASSES" | ||
mvn test \ | ||
${MAVEN_TEST} \ | ||
-pl 'presto-native-sidecar-plugin' \ | ||
-Dtest="${TESTCLASSES}" \ | ||
-DPRESTO_SERVER=${PRESTO_SERVER_PATH} \ | ||
-DDATA_DIR=${RUNNER_TEMP} \ | ||
-Duser.timezone=America/Bahia_Banderas \ | ||
-T1C |
Oops, something went wrong.