-
Notifications
You must be signed in to change notification settings - Fork 1.4k
reduce ci performance time #599
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,389 @@ | ||||||
name: build | ||||||
|
||||||
on: | ||||||
push: | ||||||
branches: [ "main" ] | ||||||
pull_request: | ||||||
branches: [ "main" ] | ||||||
|
||||||
env: | ||||||
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) | ||||||
BUILD_TYPE: Release | ||||||
|
||||||
permissions: | ||||||
contents: read | ||||||
actions: write | ||||||
|
||||||
jobs: | ||||||
init-ubuntu: | ||||||
runs-on: ubuntu-latest | ||||||
name: init-ubuntu | ||||||
outputs: | ||||||
cache-key: ${{ steps.build-cache.outputs.cache-key }} | ||||||
steps: | ||||||
- name: Checkout repository and submodules | ||||||
uses: actions/checkout@v4 | ||||||
|
||||||
- name: Setup build cache | ||||||
id: build-cache | ||||||
run: | | ||||||
echo "cache-key=build-${{ runner.os }}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**', 'deps/3rd/**', 'build.sh') }}" >> $GITHUB_OUTPUT | ||||||
- name: Cache build dependencies | ||||||
uses: actions/cache@v4 | ||||||
with: | ||||||
path: | | ||||||
deps/3rd/usr/local | ||||||
build_debug | ||||||
build_release | ||||||
key: ${{ steps.build-cache.outputs.cache-key }} | ||||||
restore-keys: | | ||||||
build-${{ runner.os }}- | ||||||
build- | ||||||
- name: Init | ||||||
shell: bash | ||||||
run: sudo bash build.sh init | ||||||
- name: Upload deps artifact (fallback for fork PR) | ||||||
uses: actions/upload-artifact@v4 | ||||||
with: | ||||||
name: deps-${{ runner.os }} | ||||||
path: deps/3rd/usr/local | ||||||
retention-days: 7 | ||||||
|
||||||
build-and-test-on-ubuntu: | ||||||
runs-on: ubuntu-latest | ||||||
name: build-and-test-on-ubuntu | ||||||
needs: init-ubuntu | ||||||
|
||||||
steps: | ||||||
- name: Checkout repository and submodules | ||||||
uses: actions/checkout@v4 | ||||||
|
||||||
- name: Cache build dependencies | ||||||
id: cache | ||||||
uses: actions/cache@v4 | ||||||
with: | ||||||
path: | | ||||||
deps/3rd/usr/local | ||||||
build_debug | ||||||
key: ${{ needs.init-ubuntu.outputs.cache-key }} | ||||||
restore-keys: | | ||||||
build-${{ runner.os }}- | ||||||
build- | ||||||
- name: Download deps artifact if cache missed | ||||||
if: steps.cache.outputs.cache-hit != 'true' | ||||||
uses: actions/download-artifact@v4 | ||||||
with: | ||||||
name: deps-${{ runner.os }} | ||||||
path: deps/3rd/usr/local | ||||||
- name: BuildDebug | ||||||
shell: bash | ||||||
run: bash build.sh debug -DCONCURRENCY=ON -DENABLE_COVERAGE=ON -DWITH_BENCHMARK=ON -DWITH_MEMTRACER=ON -DWITH_UNIT_TESTS=ON --make -j4 | ||||||
|
||||||
- name: Test | ||||||
shell: bash | ||||||
run: | | ||||||
cd build_debug | ||||||
ctest -E memtracer_test --verbose | ||||||
- name: lcov | ||||||
shell: bash | ||||||
run: | | ||||||
export DEBIAN_FRONTEND=noninteractive | ||||||
sudo apt-get update && sudo apt-get install -y lcov | ||||||
cd build_debug | ||||||
rm -rf unittest | ||||||
lcov -c -d ./ -o coverage.info --ignore-errors source | ||||||
- uses: codecov/codecov-action@v3 | ||||||
with: | ||||||
file: build_debug/coverage.info | ||||||
token: ${{ secrets.CODECOV_TOKEN }} | ||||||
|
||||||
build-release: | ||||||
runs-on: ubuntu-latest | ||||||
name: build-release-ubuntu | ||||||
needs: init-ubuntu | ||||||
|
||||||
steps: | ||||||
- name: Checkout repository and submodules | ||||||
uses: actions/checkout@v4 | ||||||
|
||||||
- name: Cache build dependencies | ||||||
id: cache | ||||||
uses: actions/cache@v4 | ||||||
with: | ||||||
path: | | ||||||
deps/3rd/usr/local | ||||||
build_release | ||||||
key: ${{ needs.init-ubuntu.outputs.cache-key }} | ||||||
restore-keys: | | ||||||
build-${{ runner.os }}- | ||||||
build- | ||||||
- name: Download deps artifact if cache missed | ||||||
if: steps.cache.outputs.cache-hit != 'true' | ||||||
uses: actions/download-artifact@v4 | ||||||
with: | ||||||
name: deps-${{ runner.os }} | ||||||
path: deps/3rd/usr/local | ||||||
- name: BuildRelease | ||||||
shell: bash | ||||||
run: bash build.sh release -DCONCURRENCY=ON -DWITH_UNIT_TESTS=ON -DWITH_BENCHMARK=ON -DENABLE_ASAN=OFF -DWITH_MEMTRACER=ON --make -j4 | ||||||
|
||||||
- name: Upload release artifacts | ||||||
uses: actions/upload-artifact@v4 | ||||||
with: | ||||||
name: build-release-artifacts | ||||||
path: | | ||||||
build_release/ | ||||||
deps/3rd/usr/local/ | ||||||
retention-days: 7 | ||||||
|
||||||
basic-test: | ||||||
runs-on: ubuntu-latest | ||||||
needs: build-release | ||||||
steps: | ||||||
- name: Checkout repository and submodules | ||||||
uses: actions/checkout@v4 | ||||||
|
||||||
- name: Download build artifacts | ||||||
uses: actions/download-artifact@v4 | ||||||
with: | ||||||
name: build-release-artifacts | ||||||
path: ./ | ||||||
|
||||||
- name: Fix permissions | ||||||
shell: bash | ||||||
run: | | ||||||
chmod +x build_release/bin/* || true | ||||||
chmod +x build_release/benchmark/* || true | ||||||
chmod +x build_release/unittest/* || true | ||||||
find build_release -name "*.so" -exec chmod +x {} \; || true | ||||||
find build_release -name "*.a" -exec chmod +x {} \; || true | ||||||
- name: run basic test | ||||||
shell: bash | ||||||
run: | | ||||||
echo "begin test..." | ||||||
python3 test/case/miniob_test.py --test-cases=basic | tail -1 | grep "basic is success" | ||||||
sysbench-test: | ||||||
needs: [build-release] | ||||||
strategy: | ||||||
matrix: | ||||||
include: | ||||||
# 基础sysbench测试 | ||||||
- thread_model: 'one-thread-per-connection' | ||||||
test_case: 'miniob_insert' | ||||||
build_type: 'release' | ||||||
memtracer: '' | ||||||
- thread_model: 'one-thread-per-connection' | ||||||
test_case: 'miniob_delete' | ||||||
build_type: 'release' | ||||||
memtracer: '' | ||||||
- thread_model: 'one-thread-per-connection' | ||||||
test_case: 'miniob_select' | ||||||
build_type: 'release' | ||||||
memtracer: '' | ||||||
- thread_model: 'java-thread-pool' | ||||||
test_case: 'miniob_insert' | ||||||
build_type: 'release' | ||||||
memtracer: '' | ||||||
- thread_model: 'java-thread-pool' | ||||||
test_case: 'miniob_delete' | ||||||
build_type: 'release' | ||||||
memtracer: '' | ||||||
- thread_model: 'java-thread-pool' | ||||||
test_case: 'miniob_select' | ||||||
build_type: 'release' | ||||||
memtracer: '' | ||||||
# memtracer sysbench测试 | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [nitpick] The comment is in Chinese. Consider using English comments for better international collaboration and consistency with the rest of the codebase.
Suggested change
Copilot uses AI. Check for mistakes. Positive FeedbackNegative Feedback |
||||||
- thread_model: 'one-thread-per-connection' | ||||||
test_case: 'miniob_insert' | ||||||
build_type: 'release' | ||||||
memtracer: 'LD_PRELOAD=./lib/libmemtracer.so' | ||||||
|
||||||
runs-on: ubuntu-latest | ||||||
name: sysbench-test-${{ matrix.build_type }}-${{ matrix.thread_model }}-${{ matrix.test_case }}-${{ matrix.memtracer == '' && 'normal' || 'memtracer' }} | ||||||
steps: | ||||||
- name: Checkout repository and submodules | ||||||
uses: actions/checkout@v4 | ||||||
|
||||||
- name: Download build artifacts | ||||||
uses: actions/download-artifact@v4 | ||||||
with: | ||||||
name: ${{ matrix.build_type == 'debug' && 'build-debug-artifacts' || 'build-release-artifacts' }} | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The workflow references 'build-debug-artifacts' but no job creates this artifact. Only 'build-release-artifacts' is uploaded by the build-release job, which could cause the sysbench-test job to fail when matrix.build_type is 'debug'. Copilot uses AI. Check for mistakes. Positive FeedbackNegative Feedback There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. At present, the system bench does not conduct testing based on debug mode, so no debug artifacts have been uploaded. |
||||||
path: ./ | ||||||
|
||||||
- name: Fix permissions | ||||||
shell: bash | ||||||
run: | | ||||||
chmod +x build_${{ matrix.build_type }}/bin/* || true | ||||||
chmod +x build_${{ matrix.build_type }}/benchmark/* || true | ||||||
chmod +x build_${{ matrix.build_type }}/unittest/* || true | ||||||
find build_${{ matrix.build_type }} -name "*.so" -exec chmod +x {} \; || true | ||||||
find build_${{ matrix.build_type }} -name "*.a" -exec chmod +x {} \; || true | ||||||
- name: install sysbench and mariadb-client | ||||||
shell: bash | ||||||
run: | | ||||||
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh -o script.deb.sh | ||||||
sudo bash script.deb.sh | ||||||
sudo apt -y install sysbench mariadb-client | ||||||
- name: start server | ||||||
shell: bash | ||||||
run: | | ||||||
nohup sh -c '${{ matrix.memtracer }} ./build_${{ matrix.build_type }}/bin/observer -T ${{ matrix.thread_model }} -s /tmp/miniob.sock -f etc/observer.ini -P mysql -t mvcc -d disk' & | ||||||
sleep 10 && echo "wake up" | ||||||
mysql --version | ||||||
mysql -S /tmp/miniob.sock -e "show tables" | ||||||
- name: sysbench test | ||||||
shell: bash | ||||||
run: | | ||||||
cd test/sysbench | ||||||
sysbench --mysql-socket=/tmp/miniob.sock --mysql-ignore-errors=41 --threads=10 ${{ matrix.test_case }} prepare | ||||||
sysbench --mysql-socket=/tmp/miniob.sock --mysql-ignore-errors=41 --threads=10 ${{ matrix.test_case }} run || { cat ../../nohup.txt*; exit 1; } | ||||||
- name: stop server | ||||||
shell: bash | ||||||
run: | | ||||||
mysql -S /tmp/miniob.sock -e "create table t(id int)" | ||||||
mysql -S /tmp/miniob.sock -e "show tables" | ||||||
killall observer | ||||||
- name: restart server | ||||||
shell: bash | ||||||
run: | | ||||||
nohup sh -c '${{ matrix.memtracer }} ./build_${{ matrix.build_type }}/bin/observer -T ${{ matrix.thread_model }} -s /tmp/miniob.sock -f etc/observer.ini -P mysql -t mvcc -d disk' & | ||||||
sleep 10 && echo "wake up" | ||||||
mysql -S /tmp/miniob.sock -e "show tables" | ||||||
- name: sysbench test again | ||||||
shell: bash | ||||||
run: | | ||||||
cd test/sysbench | ||||||
sysbench --mysql-socket=/tmp/miniob.sock --mysql-ignore-errors=41 --threads=10 ${{ matrix.test_case }} run || { cat ../../nohup.txt*; exit 1; } | ||||||
benchmark-test: | ||||||
runs-on: ubuntu-latest | ||||||
needs: build-release | ||||||
steps: | ||||||
- name: Checkout repository and submodules | ||||||
uses: actions/checkout@v4 | ||||||
|
||||||
- name: Download build artifacts | ||||||
uses: actions/download-artifact@v4 | ||||||
with: | ||||||
name: build-release-artifacts | ||||||
path: ./ | ||||||
|
||||||
- name: Fix permissions | ||||||
shell: bash | ||||||
run: | | ||||||
chmod +x build_release/bin/* || true | ||||||
chmod +x build_release/benchmark/* || true | ||||||
chmod +x build_release/unittest/* || true | ||||||
find build_release -name "*.so" -exec chmod +x {} \; || true | ||||||
find build_release -name "*.a" -exec chmod +x {} \; || true | ||||||
- name: concurrency-test | ||||||
shell: bash | ||||||
run: | | ||||||
cd build_release/bin/ | ||||||
for file in `find ./ -name "*_concurrency_test" -executable`; do $file; if [ $? -ne 0 ]; then exit 1; fi; done | ||||||
memtracer-test: | ||||||
needs: build-release | ||||||
strategy: | ||||||
matrix: | ||||||
memtracer: ['LD_PRELOAD=./lib/libmemtracer.so', ''] | ||||||
runs-on: ubuntu-latest | ||||||
steps: | ||||||
- name: Checkout repository and submodules | ||||||
uses: actions/checkout@v4 | ||||||
|
||||||
- name: Download build artifacts | ||||||
uses: actions/download-artifact@v4 | ||||||
with: | ||||||
name: build-release-artifacts | ||||||
path: ./ | ||||||
|
||||||
- name: Fix permissions | ||||||
shell: bash | ||||||
run: | | ||||||
chmod +x build_release/bin/* || true | ||||||
chmod +x build_release/benchmark/* || true | ||||||
chmod +x build_release/unittest/* || true | ||||||
find build_release -name "*.so" -exec chmod +x {} \; || true | ||||||
find build_release -name "*.a" -exec chmod +x {} \; || true | ||||||
- name: memtracer-performance-test | ||||||
shell: bash | ||||||
run: | | ||||||
cd build_release | ||||||
${{matrix.memtracer}} ./benchmark/memtracer_performance_test | ||||||
- name: memtracer-unittest | ||||||
shell: bash | ||||||
run: | | ||||||
cd build_release | ||||||
LD_PRELOAD=./lib/libmemtracer.so ./unittest/memtracer_test | ||||||
integration-test: | ||||||
needs: build-release | ||||||
runs-on: ubuntu-latest | ||||||
steps: | ||||||
- name: Checkout repository and submodules | ||||||
uses: actions/checkout@v4 | ||||||
|
||||||
- name: Download build artifacts | ||||||
uses: actions/download-artifact@v4 | ||||||
with: | ||||||
name: build-release-artifacts | ||||||
path: ./ | ||||||
|
||||||
- name: Fix permissions | ||||||
shell: bash | ||||||
run: | | ||||||
chmod +x build_release/bin/* || true | ||||||
chmod +x build_release/benchmark/* || true | ||||||
chmod +x build_release/unittest/* || true | ||||||
find build_release -name "*.so" -exec chmod +x {} \; || true | ||||||
find build_release -name "*.a" -exec chmod +x {} \; || true | ||||||
|
||||||
- name: init mysql | ||||||
uses: shogo82148/actions-setup-mysql@v1 | ||||||
with: | ||||||
mysql-version: "8.0" | ||||||
- name: init | ||||||
shell: bash | ||||||
run: | | ||||||
sudo apt -y install pip python3-pymysql python3-psutil | ||||||
- name: integration test | ||||||
shell: bash | ||||||
run: | | ||||||
cd test/integration_test/ | ||||||
bash ./miniob_test_docker_entry.sh | ||||||
python3 ./libminiob_test.py -c conf.ini | ||||||
build-on-mac: | ||||||
runs-on: macos-latest | ||||||
name: build-macos | ||||||
|
||||||
steps: | ||||||
- name: Init environment | ||||||
shell: bash | ||||||
run: | | ||||||
brew install bison | ||||||
- name: Checkout repository and submodules | ||||||
uses: actions/checkout@v4 | ||||||
|
||||||
- name: Setup build cache | ||||||
id: build-cache | ||||||
run: | | ||||||
echo "cache-key=build-${{ runner.os }}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**', 'deps/3rd/**', 'build.sh') }}" >> $GITHUB_OUTPUT | ||||||
- name: Cache build dependencies | ||||||
id: cache | ||||||
uses: actions/cache@v4 | ||||||
with: | ||||||
path: | | ||||||
deps/3rd/usr/local | ||||||
build_release | ||||||
build_debug | ||||||
key: ${{ steps.build-cache.outputs.cache-key }} | ||||||
restore-keys: | | ||||||
build-${{ runner.os }}- | ||||||
build- | ||||||
|
||||||
- name: Build | ||||||
shell: bash | ||||||
run: | | ||||||
export ASAN_OPTIONS=detect_container_overflow=0 | ||||||
export PATH="/opt/homebrew/opt/bison/bin:$PATH" | ||||||
sudo bash build.sh init | ||||||
bash build.sh debug -DWITH_MEMTRACER=ON --make -j4 | ||||||
bash build.sh release -DCONCURRENCY=ON -DWITH_UNIT_TESTS=OFF -DWITH_BENCHMARK=ON -DWITH_MEMTRACER=ON --make -j4 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[nitpick] The comment is in Chinese. Consider using English comments for better international collaboration and consistency with the rest of the codebase.
Copilot uses AI. Check for mistakes.