integrationtests #5259
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
name: "integrationtests" | |
on: | |
push: | |
branches: | |
- 'main' | |
- 'release-*' | |
paths: | |
- '**.c' | |
- '**.go' | |
- 'Makefile' | |
- '**/integrationtests.yml' | |
pull_request: | |
branches: | |
- 'main' | |
- 'release-*' | |
paths: | |
- '**.c' | |
- '**.go' | |
- 'Makefile' | |
- '**/integrationtests.yml' | |
schedule: | |
- cron: '0 19 * * *' | |
workflow_dispatch: | |
inputs: | |
debug: | |
type: boolean | |
description: "Run the build with tmate debugging enabled" | |
required: false | |
default: false | |
jobs: | |
build-matrix: | |
runs-on: ubuntu-20.04 | |
steps: | |
- id: set-matrix | |
run: | | |
echo "github.event_name is ${{github.event_name}}" | |
echo "GITHUB_REF_NAME is ${GITHUB_REF_NAME}" | |
if [[ "${{github.event_name}}" == "schedule" || "${{github.event_name}}" == "workflow_dispatch" ]]; then | |
echo 'meta_matrix=["sqlite3", "redis", "mysql", "tikv", "tidb", "postgres", "badger", "mariadb", "fdb"]' >> $GITHUB_OUTPUT | |
elif [[ "${{github.event_name}}" == "pull_request" || "${{github.event_name}}" == "push" ]]; then | |
echo 'meta_matrix=["redis", "mysql", "tikv"]' >> $GITHUB_OUTPUT | |
else | |
echo "event_name is not supported" && exit 1 | |
fi | |
outputs: | |
meta_matrix: ${{ steps.set-matrix.outputs.meta_matrix }} | |
integrationtests: | |
timeout-minutes: 120 | |
runs-on: ubuntu-20.04 | |
needs: build-matrix | |
strategy: | |
fail-fast: false | |
matrix: | |
meta: ${{ fromJson(needs.build-matrix.outputs.meta_matrix) }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
- name: Set Variable | |
id: vars | |
run: | | |
if [ "${{matrix.meta}}" == "fdb" ]; then | |
echo "target=juicefs.fdb" >> $GITHUB_OUTPUT | |
else | |
echo "target=juicefs" >> $GITHUB_OUTPUT | |
fi | |
- name: Build | |
uses: ./.github/actions/build | |
with: | |
target: ${{steps.vars.outputs.target}} | |
- name: Prepare meta db | |
run: | | |
chmod +x .github/scripts/start_meta_engine.sh | |
source .github/scripts/start_meta_engine.sh | |
start_meta_engine ${{matrix.meta}} | |
meta_url=$(get_meta_url ${{matrix.meta}}) | |
create_database $meta_url | |
- name: Juicefs Format | |
run: | | |
source .github/scripts/start_meta_engine.sh | |
meta_url=$(get_meta_url ${{matrix.meta}}) | |
sudo ./juicefs format $meta_url --trash-days 0 pics | |
- name: Juicefs Mount | |
run: | | |
source .github/scripts/start_meta_engine.sh | |
meta_url=$(get_meta_url ${{matrix.meta}}) | |
sudo ./juicefs mount -d $meta_url /jfs --no-usage-report --enable-xattr | |
stat /jfs/.accesslog | |
- name: Fslock Test | |
timeout-minutes: 5 | |
run: | | |
cd /jfs/ | |
git clone https://github.com/danjacques/gofslock.git | |
cd gofslock && git checkout cc7f001fe0e7df1710adc8f0cd9e9d6d21fdb3a9 | |
go test -v ./fslock/... | |
stat /jfs/ | |
- name: flock test | |
timeout-minutes: 5 | |
run: | | |
git clone https://github.com/gofrs/flock.git | |
mkdir /jfs/tmp | |
cd flock && go mod tidy && TMPDIR=/jfs/tmp go test . | |
- name: make secfs.test | |
run: | | |
sudo .github/scripts/apt_install.sh libacl1-dev | |
git clone https://github.com/billziss-gh/secfs.test.git | |
make -C secfs.test | |
- name: Fsx Test | |
timeout-minutes: 16 | |
run: | | |
if [[ "${{github.event_name}}" == "schedule" || "${{github.event_name}}" == "workflow_dispatch" ]] ; then | |
duration=900 | |
else | |
duration=300 | |
fi | |
sudo touch /jfs/fsx.out | |
sudo rm -f /tmp/fsx.out | |
sudo ln -s /jfs/fsx.out /tmp/fsx.out | |
sudo secfs.test/tools/bin/fsx -d $duration -p 10000 -F 10000000 /tmp/fsx.out | |
- name: Fsracer Test | |
timeout-minutes: 16 | |
shell: 'script -q -e -c "bash {0}"' | |
run: | | |
if [[ "${{github.event_name}}" == "schedule" || "${{github.event_name}}" == "workflow_dispatch" ]] ; then | |
duration=900 | |
else | |
duration=300 | |
fi | |
sudo secfs.test/tools/bin/fsracer $duration /jfs | |
- name: log | |
if: always() | |
run: | | |
tail -300 /var/log/juicefs.log | |
grep "<FATAL>:" /var/log/juicefs.log && exit 1 || true | |
- name: Setup upterm session | |
if: failure() && (github.event.inputs.debug == 'true' || github.run_attempt != 1) | |
timeout-minutes: 60 | |
uses: lhotari/action-upterm@v1 | |
success-all-test: | |
runs-on: ubuntu-latest | |
needs: [integrationtests] | |
if: always() | |
steps: | |
- uses: technote-space/workflow-conclusion-action@v3 | |
- uses: actions/checkout@v3 | |
- name: Check Failure | |
if: env.WORKFLOW_CONCLUSION == 'failure' | |
run: exit 1 | |
- name: Send Slack Notification | |
if: failure() && github.event_name != 'workflow_dispatch' | |
uses: juicedata/slack-notify-action@main | |
with: | |
channel-id: "${{ secrets.SLACK_CHANNEL_ID_FOR_PR_CHECK_NOTIFY }}" | |
slack_bot_token: "${{ secrets.SLACK_BOT_TOKEN }}" | |
- name: Success | |
if: success() | |
run: echo "All Done" |