diff --git a/.github/workflows/compatibility-test.yml b/.github/workflows/compatibility-test.yml new file mode 100644 index 0000000..375f65b --- /dev/null +++ b/.github/workflows/compatibility-test.yml @@ -0,0 +1,476 @@ +name: Serverless Driver Compatibility Test + +on: + schedule: + - cron: "0 22 * * *" # every day at 22:00 + workflow_dispatch: + +jobs: + setup: + runs-on: ubuntu-22.04 + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up ticloud + uses: tidbcloud/setup-tidbcloud-cli@v0 + with: + api_public_key: ${{ secrets.TLS_PUBLIC_KEY }} + api_private_key: ${{ secrets.TLS_PRIVATE_KEY }} + + - name: Get Connection Info + run: | + # delete cluster if exists + ticloud cluster list 1372813089206721319 -o json > cluster + total=$(jq '.total' cluster); + for i in $(seq 1 $total); + do + id=`echo $(jq ".items[$i-1].id" cluster) | sed 's/"//g'` + ticloud cluster delete -p 1372813089206721319 -c $id --force; + done + + # create cluster + ticloud cluster create --project-id 1372813089206721319 --cluster-name tls-test --cloud-provider AWS -r us-east-1 --root-password ${{ secrets.TIDB_CLOUD_PASSWORD }} --cluster-type SERVERLESS; + ticloud cluster list 1372813089206721319 -o json > cluster + cat cluster + echo "TIDB_CLOUD_USER=$(jq '.items[0].status.connection_strings.default_user' cluster)" >> $GITHUB_ENV + echo "TIDB_CLOUD_HOST=$(jq '.items[0].status.connection_strings.standard.host' cluster)" >> $GITHUB_ENV + outputs: + TiDB_CLOUD_USER: ${{ env.TIDB_CLOUD_USER }} + TiDB_CLOUD_HOST: ${{ env.TIDB_CLOUD_HOST }} + + mysql: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, windows-2022, macos-12 ] + include: + - os: ubuntu-22.04 + cert: /etc/ssl/certs/ca-certificates.crt + - os: macos-12 + cert: /etc/ssl/cert.pem + - os: windows-2022 + cert: ./example_code/x1.pem + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Get mysql + uses: shogo82148/actions-setup-mysql@v1 + + - name: Run test on ${{ matrix.os }} + run: mysql -u ${{needs.setup.outputs.TIDB_CLOUD_USER}} -h ${{needs.setup.outputs.TIDB_CLOUD_HOST}} -P 4000 -D test --ssl-mode=VERIFY_IDENTITY --ssl-ca=${{ matrix.cert }} -p${{ secrets.TIDB_CLOUD_PASSWORD }} + + no_tls: + needs: setup + runs-on: ubuntu-22.04 + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Get mysql + uses: shogo82148/actions-setup-mysql@v1 + + - name: Run test + run: "! mysql -u ${{needs.setup.outputs.TIDB_CLOUD_USER}} -h ${{needs.setup.outputs.TIDB_CLOUD_HOST}} -P 4000 -D test --ssl-mode=DISABLED -p${{ secrets.TIDB_CLOUD_PASSWORD }}" + + invalid_tls_version: + needs: setup + runs-on: ubuntu-22.04 + timeout-minutes: 10 + strategy: + matrix: + tls: [ TLSv1, TLSv1.1 ] + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Run test on ${{ matrix.tls }} + run: | + # Starting from 8.0.26, TLSv1 & TLSv1.1 are deprecated. From 8.0.28, they are completely removed. + pip3 install mysql-connector-python==8.0.25 + cd example_code/python + ! python3 tls_version.py ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{secrets.TIDB_CLOUD_PASSWORD}} /etc/ssl/certs/ca-certificates.crt ${{ matrix.tls }} + + valid_tls_version: + needs: setup + runs-on: ubuntu-22.04 + timeout-minutes: 10 + strategy: + matrix: + tls: [ TLSv1.2, TLSv1.3 ] + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Run test on ${{ matrix.tls }} + run: | + pip3 install mysql-connector-python + cd example_code/python + python3 tls_version.py ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{secrets.TIDB_CLOUD_PASSWORD}} /etc/ssl/certs/ca-certificates.crt ${{ matrix.tls }} + + mycli: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, windows-2022, macos-12 ] + include: + - os: ubuntu-22.04 + cert: /etc/ssl/certs/ca-certificates.crt + - os: macos-12 + cert: /etc/ssl/cert.pem + - os: windows-2022 + cert: ./example_code/x1.pem + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install python + uses: actions/setup-python@v3 + + - name: Install mycli + run: pip3 install mycli + + - name: Run test on ${{ matrix.os }} + run: + mycli -u ${{needs.setup.outputs.TIDB_CLOUD_USER}} -h ${{needs.setup.outputs.TIDB_CLOUD_HOST}} -P 4000 -D test --ssl-ca=${{ matrix.cert }} --ssl-verify-server-cert -p${{ secrets.TIDB_CLOUD_PASSWORD}} + + java_jdbc: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, windows-2022, macos-12 ] + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 + with: + distribution: 'adopt' + java-version: '8' + - name: Run test on ubuntu or macos + if: ${{ matrix.os != 'windows-2022' }} + run: | + cd example_code/java + javac ConnectTest.java + java -cp mysql-connector-j-8.0.31.jar: ConnectTest ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{ secrets.TIDB_CLOUD_PASSWORD }} + + - name: Run test on windows + if: ${{ matrix.os == 'windows-2022' }} + # Need to use Chinese semicolon and an extra space before ConnectTest (don't know why) + run: | + cd example_code/java + javac ConnectTest.java + java -cp mysql-connector-j-8.0.31.jar; ConnectTest ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{ secrets.TIDB_CLOUD_PASSWORD }} + + # https://jira.mariadb.org/browse/CONJ-1023 + java_jdbc_mariadb_CONJ-1023: + needs: setup + runs-on: ubuntu-22.04 + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 + with: + distribution: 'adopt' + java-version: '8' + - name: Run test + run: | + cd example_code/java + javac ConnectTestMariaDB.java + java -cp mariadb-java-client-3.0.9.jar: ConnectTestMariaDB ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{ secrets.TIDB_CLOUD_PASSWORD }} + + python_mysqlclient: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, windows-2022, macos-12 ] + include: + - os: ubuntu-22.04 + cert: /etc/ssl/certs/ca-certificates.crt + - os: macos-12 + cert: /etc/ssl/cert.pem + - os: windows-2022 + cert: ../x1.pem + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + - name: Install mysql in macos + if: ${{ matrix.os == 'macos-12' }} + run: | + # https://github.com/Homebrew/homebrew-core/issues/130258 + ln -sv $(brew --prefix zlib)/lib/libz.dylib $(brew --prefix)/lib/libzlib.dylib + brew install mysql + export PATH=$PATH:/usr/local/mysql/bin + - name: Run test on ${{ matrix.os }} + run: | + pip3 install mysqlclient + cd example_code/python + python3 ConnectTest_mysqlclient.py ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{ matrix.cert }} + + python_mysql_connector: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, windows-2022, macos-12 ] + include: + - os: ubuntu-22.04 + cert: /etc/ssl/certs/ca-certificates.crt + - os: macos-12 + cert: /etc/ssl/cert.pem + - os: windows-2022 + cert: ../x1.pem + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + - name: Run test on ${{ matrix.os }} + run: | + pip3 install mysql-connector-python + cd example_code/python + python3 ConnectTest_mysql-connector-python.py ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{ matrix.cert }} + + python_pymysql: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, windows-2022, macos-12 ] + include: + - os: ubuntu-22.04 + cert: /etc/ssl/certs/ca-certificates.crt + - os: macos-12 + cert: /etc/ssl/cert.pem + - os: windows-2022 + cert: ../x1.pem + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + - name: Run test on ${{ matrix.os }} + run: | + pip3 install pymysql + cd example_code/python + python3 ConnectTest_pymysql.py ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{ matrix.cert }} + + python_sqlalchemy: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, windows-2022, macos-12 ] + include: + - os: ubuntu-22.04 + cert: /etc/ssl/certs/ca-certificates.crt + - os: macos-12 + cert: /etc/ssl/cert.pem + - os: windows-2022 + cert: ../x1.pem + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + - name: Install mysql in macos + if: ${{ matrix.os == 'macos-12' }} + run: | + # https://github.com/Homebrew/homebrew-core/issues/130258 + ln -sv $(brew --prefix zlib)/lib/libz.dylib $(brew --prefix)/lib/libzlib.dylib + brew install mysql + - name: Run test on ${{ matrix.os }} + run: | + pip3 install mysqlclient + pip3 install sqlalchemy + cd example_code/sqlalchemy + python3 ConnectTest.py ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{ matrix.cert }} + + go_godriver: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, windows-2022, macos-12 ] + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v4 + with: + go-version: '1.20.0' + - name: Run test on ${{ matrix.os }} + run: | + cd example_code/go + go mod tidy + go run ConnectTest.go ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} + + go_gorm: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, windows-2022, macos-12 ] + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v4 + with: + go-version: '1.20.0' + - name: Run test on ${{ matrix.os }} + run: | + cd example_code/gorm + go mod tidy + go run ConnectTest.go ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} + + node_mysql2: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, windows-2022, macos-12 ] + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 16 + - name: Run test on ${{ matrix.os }} + run: | + cd example_code/node + npm install --save mysql2 + node ConnectTest.js ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} + + node_sequelize: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, windows-2022, macos-12 ] + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 16 + - name: Run test on ${{ matrix.os }} + run: | + cd example_code/sequelize + npm install --save mysql2 + npm install --save sequelize + node ConnectTest.js ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} + + rust_mysql: + needs: setup + strategy: + matrix: + os: [ windows-2022, macos-12 ] # skip ubuntu-22.04 as it get stuck for unknown reasons + runs-on: ${{ matrix.os }} + timeout-minutes: 15 + steps: + - uses: actions/checkout@v3 + - uses: moonrepo/setup-rust@v0 + - name: Run test on ${{ matrix.os }} + run: | + cd example_code/rust + cargo run ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} + + ruby_mysql2: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, macos-12 ] # install mysql2 in windows is a little difficult, dismiss it for now + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.0' # Not needed with a .ruby-version file + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + - name: Install mysql on macos + if: ${{ matrix.os == 'macos-12' }} + run: | + brew install mysql + cd example_code/ruby + # https://github.com/Homebrew/homebrew-core/issues/130258 + gem install mysql2 -- --with-mysql-dir=$(brew --prefix mysql) + ruby ConnectTest.rb ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} + - name: Run test on ubuntu + if: ${{ matrix.os == 'ubuntu-22.04' }} + run: | + cd example_code/ruby + gem install mysql2 + ruby ConnectTest.rb ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} + + php_mysqli: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, windows-2022, macos-12 ] + include: + - os: ubuntu-22.04 + cert: /etc/ssl/certs/ca-certificates.crt + - os: macos-12 + cert: /etc/ssl/cert.pem + - os: windows-2022 + cert: ../x1.pem + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: shivammathur/setup-php@v2 + with: + php-version: '8.1' + ini-values: extension=php_mysqli.dll + - name: Run test on ${{ matrix.os }} + run: | + cd example_code/php + php ConnectTest.php ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{matrix.cert}} + + cpp_libmysqlclient: + needs: setup + strategy: + matrix: + os: [ ubuntu-22.04, macos-12 ] + include: + - os: ubuntu-22.04 + cert: /etc/ssl/certs/ca-certificates.crt + - os: macos-12 + cert: /etc/ssl/cert.pem + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: rlalik/setup-cpp-compiler@v1.2 + - name: Run test on macos + if: ${{ matrix.os == 'macos-12' }} + run: | + brew install mysql + cd example_code/cpp + g++ ConnectTest.cpp -o test -I/usr/local/include/mysql -lmysqlclient + ./test ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{matrix.cert}} + - name: Run test on ubuntu + if: ${{ matrix.os == 'ubuntu-22.04' }} + run: | + sudo apt install -y libmysqlclient-dev + cd example_code/cpp + g++ ConnectTest.cpp -o test -I/usr/include/mysql -lmysqlclient + ./test ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{matrix.cert}} diff --git a/.github/workflows/connect-notify.yml b/.github/workflows/connect-notify.yml index a57bfff..92a7219 100644 --- a/.github/workflows/connect-notify.yml +++ b/.github/workflows/connect-notify.yml @@ -1,8 +1,11 @@ -name: Serverless Connect Notify +name: Serverless Test Notify on: workflow_run: - workflows: ["Serverless Connect Test"] + workflows: + - "Serverless Connect Test" + - "Serverless Driver Compatibility Test" + - "Serverless Create Test" types: - completed @@ -23,7 +26,7 @@ jobs: "elements": [{ "tag": "div", "text": { - "content": "**Message** \nServerless connection test #${{ github.event.workflow_run.run_number }} failed", + "content": "**Message** \n${{ github.event.workflow_run.name}} #${{ github.event.workflow_run.run_number }} failed", "tag": "lark_md" } }, { diff --git a/.github/workflows/connect-test.yml b/.github/workflows/connect-test.yml index ba7e38a..9fe5986 100644 --- a/.github/workflows/connect-test.yml +++ b/.github/workflows/connect-test.yml @@ -2,474 +2,32 @@ name: Serverless Connect Test on: schedule: - - cron: "0/30 * * * *" # every 30 minutes + - cron: "0/5 * * * *" # every 5 minutes workflow_dispatch: jobs: - setup: - runs-on: ubuntu-22.04 - timeout-minutes: 10 + connect-test: + runs-on: ubuntu-latest + timeout-minutes: 3 steps: - name: Checkout uses: actions/checkout@v3 - - name: Set up ticloud - uses: tidbcloud/setup-tidbcloud-cli@v0 - with: - api_public_key: ${{ secrets.TLS_PUBLIC_KEY }} - api_private_key: ${{ secrets.TLS_PRIVATE_KEY }} - - - name: Get Connection Info - run: | - # delete cluster if exists - ticloud cluster list 1372813089206721319 -o json > cluster - if [ $(jq '.total' cluster) == 1 ]; - then - id=`echo $(jq '.items[0].id' cluster) | sed 's/"//g'` - ticloud cluster delete -p 1372813089206721319 -c $id --force; - fi - - # create cluster - ticloud cluster create --project-id 1372813089206721319 --cluster-name tls-test --cloud-provider AWS -r us-east-1 --root-password ${{ secrets.TIDB_CLOUD_PASSWORD }} --cluster-type SERVERLESS; - ticloud cluster list 1372813089206721319 -o json > cluster - cat cluster - echo "TIDB_CLOUD_USER=$(jq '.items[0].status.connection_strings.default_user' cluster)" >> $GITHUB_ENV - echo "TIDB_CLOUD_HOST=$(jq '.items[0].status.connection_strings.standard.host' cluster)" >> $GITHUB_ENV - outputs: - TiDB_CLOUD_USER: ${{ env.TIDB_CLOUD_USER }} - TiDB_CLOUD_HOST: ${{ env.TIDB_CLOUD_HOST }} - - mysql: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, windows-2022, macos-12 ] - include: - - os: ubuntu-22.04 - cert: /etc/ssl/certs/ca-certificates.crt - - os: macos-12 - cert: /etc/ssl/cert.pem - - os: windows-2022 - cert: ./example_code/x1.pem - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Get mysql + - name: Setup mysql uses: shogo82148/actions-setup-mysql@v1 - - name: Run test on ${{ matrix.os }} - run: mysql -u ${{needs.setup.outputs.TIDB_CLOUD_USER}} -h ${{needs.setup.outputs.TIDB_CLOUD_HOST}} -P 4000 -D test --ssl-mode=VERIFY_IDENTITY --ssl-ca=${{ matrix.cert }} -p${{ secrets.TIDB_CLOUD_PASSWORD }} - - no_tls: - needs: setup - runs-on: ubuntu-22.04 - timeout-minutes: 10 - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Get mysql - uses: shogo82148/actions-setup-mysql@v1 - - - name: Run test - run: "! mysql -u ${{needs.setup.outputs.TIDB_CLOUD_USER}} -h ${{needs.setup.outputs.TIDB_CLOUD_HOST}} -P 4000 -D test --ssl-mode=DISABLED -p${{ secrets.TIDB_CLOUD_PASSWORD }}" - - invalid_tls_version: - needs: setup - runs-on: ubuntu-22.04 - timeout-minutes: 10 - strategy: - matrix: - tls: [ TLSv1, TLSv1.1 ] - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - - name: Run test on ${{ matrix.tls }} - run: | - # Starting from 8.0.26, TLSv1 & TLSv1.1 are deprecated. From 8.0.28, they are completely removed. - pip3 install mysql-connector-python==8.0.25 - cd example_code/python - ! python3 tls_version.py ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{secrets.TIDB_CLOUD_PASSWORD}} /etc/ssl/certs/ca-certificates.crt ${{ matrix.tls }} - - valid_tls_version: - needs: setup - runs-on: ubuntu-22.04 - timeout-minutes: 10 - strategy: - matrix: - tls: [ TLSv1.2, TLSv1.3 ] - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - - name: Run test on ${{ matrix.tls }} + - name: connect cluster run: | - pip3 install mysql-connector-python - cd example_code/python - python3 tls_version.py ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{secrets.TIDB_CLOUD_PASSWORD}} /etc/ssl/certs/ca-certificates.crt ${{ matrix.tls }} - - mycli: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, windows-2022, macos-12 ] - include: - - os: ubuntu-22.04 - cert: /etc/ssl/certs/ca-certificates.crt - - os: macos-12 - cert: /etc/ssl/cert.pem - - os: windows-2022 - cert: ./example_code/x1.pem - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Install python - uses: actions/setup-python@v3 - - - name: Install mycli - run: pip3 install mycli - - - name: Run test on ${{ matrix.os }} - run: - mycli -u ${{needs.setup.outputs.TIDB_CLOUD_USER}} -h ${{needs.setup.outputs.TIDB_CLOUD_HOST}} -P 4000 -D test --ssl-ca=${{ matrix.cert }} --ssl-verify-server-cert -p${{ secrets.TIDB_CLOUD_PASSWORD}} + mysql --connect-timeout 15 -u '2MLQsKRhdXQCjHb.root' -h gateway01.eu-central-1.prod.aws.tidbcloud.com -P 4000 -D test --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt -p${{ secrets.TIDB_CLOUD_PASSWORD }} + mysql --connect-timeout 15 -u 'eQsaVQSBNukNp7k.root' -h gateway01.ap-southeast-1.prod.aws.tidbcloud.com -P 4000 -D test --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt -p${{ secrets.TIDB_CLOUD_PASSWORD }} + mysql --connect-timeout 15 -u 'nADWvyBQFXhgZxw.root' -h gateway01.us-east-1.prod.aws.tidbcloud.com -P 4000 -D test --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt -p${{ secrets.TIDB_CLOUD_PASSWORD }} + mysql --connect-timeout 15 -u 'Nv7fzTqtB8V698S.root' -h gateway01.ap-northeast-1.prod.aws.tidbcloud.com -P 4000 -D test --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt -p${{ secrets.TIDB_CLOUD_PASSWORD }} + mysql --connect-timeout 15 -u 'j24i5KNxRJpvEj7.root' -h gateway01.us-west-2.prod.aws.tidbcloud.com -P 4000 -D test --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt -p${{ secrets.TIDB_CLOUD_PASSWORD }} - java_jdbc: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, windows-2022, macos-12 ] - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 - with: - distribution: 'adopt' - java-version: '8' - - name: Run test on ubuntu or macos - if: ${{ matrix.os != 'windows-2022' }} - run: | - cd example_code/java - javac ConnectTest.java - java -cp mysql-connector-j-8.0.31.jar: ConnectTest ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{ secrets.TIDB_CLOUD_PASSWORD }} - - - name: Run test on windows - if: ${{ matrix.os == 'windows-2022' }} - # Need to use Chinese semicolon and an extra space before ConnectTest (don't know why) - run: | - cd example_code/java - javac ConnectTest.java - java -cp mysql-connector-j-8.0.31.jar; ConnectTest ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{ secrets.TIDB_CLOUD_PASSWORD }} - - # https://jira.mariadb.org/browse/CONJ-1023 - java_jdbc_mariadb_CONJ-1023: - needs: setup - runs-on: ubuntu-22.04 - timeout-minutes: 10 - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 - with: - distribution: 'adopt' - java-version: '8' - - name: Run test - run: | - cd example_code/java - javac ConnectTestMariaDB.java - java -cp mariadb-java-client-3.0.9.jar: ConnectTestMariaDB ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{ secrets.TIDB_CLOUD_PASSWORD }} - - python_mysqlclient: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, windows-2022, macos-12 ] - include: - - os: ubuntu-22.04 - cert: /etc/ssl/certs/ca-certificates.crt - - os: macos-12 - cert: /etc/ssl/cert.pem - - os: windows-2022 - cert: ../x1.pem - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - name: Install mysql in macos - if: ${{ matrix.os == 'macos-12' }} - run: | - # https://github.com/Homebrew/homebrew-core/issues/130258 - ln -sv $(brew --prefix zlib)/lib/libz.dylib $(brew --prefix)/lib/libzlib.dylib - brew install mysql - export PATH=$PATH:/usr/local/mysql/bin - - name: Run test on ${{ matrix.os }} - run: | - pip3 install mysqlclient - cd example_code/python - python3 ConnectTest_mysqlclient.py ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{ matrix.cert }} - - python_mysql_connector: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, windows-2022, macos-12 ] - include: - - os: ubuntu-22.04 - cert: /etc/ssl/certs/ca-certificates.crt - - os: macos-12 - cert: /etc/ssl/cert.pem - - os: windows-2022 - cert: ../x1.pem - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - name: Run test on ${{ matrix.os }} - run: | - pip3 install mysql-connector-python - cd example_code/python - python3 ConnectTest_mysql-connector-python.py ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{ matrix.cert }} - - python_pymysql: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, windows-2022, macos-12 ] - include: - - os: ubuntu-22.04 - cert: /etc/ssl/certs/ca-certificates.crt - - os: macos-12 - cert: /etc/ssl/cert.pem - - os: windows-2022 - cert: ../x1.pem - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - name: Run test on ${{ matrix.os }} - run: | - pip3 install pymysql - cd example_code/python - python3 ConnectTest_pymysql.py ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{ matrix.cert }} - - python_sqlalchemy: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, windows-2022, macos-12 ] - include: - - os: ubuntu-22.04 - cert: /etc/ssl/certs/ca-certificates.crt - - os: macos-12 - cert: /etc/ssl/cert.pem - - os: windows-2022 - cert: ../x1.pem - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - name: Install mysql in macos - if: ${{ matrix.os == 'macos-12' }} - run: | - # https://github.com/Homebrew/homebrew-core/issues/130258 - ln -sv $(brew --prefix zlib)/lib/libz.dylib $(brew --prefix)/lib/libzlib.dylib - brew install mysql - - name: Run test on ${{ matrix.os }} - run: | - pip3 install mysqlclient - pip3 install sqlalchemy - cd example_code/sqlalchemy - python3 ConnectTest.py ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{ matrix.cert }} - - go_godriver: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, windows-2022, macos-12 ] - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 - with: - go-version: '1.20.0' - - name: Run test on ${{ matrix.os }} - run: | - cd example_code/go - go mod tidy - go run ConnectTest.go ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} - - go_gorm: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, windows-2022, macos-12 ] - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 - with: - go-version: '1.20.0' - - name: Run test on ${{ matrix.os }} - run: | - cd example_code/gorm - go mod tidy - go run ConnectTest.go ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} - - node_mysql2: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, windows-2022, macos-12 ] - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: 16 - - name: Run test on ${{ matrix.os }} - run: | - cd example_code/node - npm install --save mysql2 - node ConnectTest.js ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} - - node_sequelize: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, windows-2022, macos-12 ] - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: 16 - - name: Run test on ${{ matrix.os }} - run: | - cd example_code/sequelize - npm install --save mysql2 - npm install --save sequelize - node ConnectTest.js ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} - - rust_mysql: - needs: setup - strategy: - matrix: - os: [ windows-2022, macos-12 ] # skip ubuntu-22.04 as it get stuck for unknown reasons - runs-on: ${{ matrix.os }} - timeout-minutes: 15 - steps: - - uses: actions/checkout@v3 - - uses: moonrepo/setup-rust@v0 - - name: Run test on ${{ matrix.os }} - run: | - cd example_code/rust - cargo run ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} - - ruby_mysql2: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, macos-12 ] # install mysql2 in windows is a little difficult, dismiss it for now - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - uses: actions/checkout@v3 - - uses: ruby/setup-ruby@v1 - with: - ruby-version: '3.0' # Not needed with a .ruby-version file - bundler-cache: true # runs 'bundle install' and caches installed gems automatically - - name: Install mysql on macos - if: ${{ matrix.os == 'macos-12' }} - run: | - brew install mysql - cd example_code/ruby - # https://github.com/Homebrew/homebrew-core/issues/130258 - gem install mysql2 -- --with-mysql-dir=$(brew --prefix mysql) - ruby ConnectTest.rb ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} - - name: Run test on ubuntu - if: ${{ matrix.os == 'ubuntu-22.04' }} - run: | - cd example_code/ruby - gem install mysql2 - ruby ConnectTest.rb ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} - - php_mysqli: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, windows-2022, macos-12 ] - include: - - os: ubuntu-22.04 - cert: /etc/ssl/certs/ca-certificates.crt - - os: macos-12 - cert: /etc/ssl/cert.pem - - os: windows-2022 - cert: ../x1.pem - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - uses: actions/checkout@v3 - - uses: shivammathur/setup-php@v2 - with: - php-version: '8.1' - ini-values: extension=php_mysqli.dll - - name: Run test on ${{ matrix.os }} - run: | - cd example_code/php - php ConnectTest.php ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{matrix.cert}} - - cpp_libmysqlclient: - needs: setup - strategy: - matrix: - os: [ ubuntu-22.04, macos-12 ] - include: - - os: ubuntu-22.04 - cert: /etc/ssl/certs/ca-certificates.crt - - os: macos-12 - cert: /etc/ssl/cert.pem - runs-on: ${{ matrix.os }} - timeout-minutes: 10 - steps: - - uses: actions/checkout@v3 - - uses: rlalik/setup-cpp-compiler@v1.2 - - name: Run test on macos - if: ${{ matrix.os == 'macos-12' }} - run: | - brew install mysql - cd example_code/cpp - g++ ConnectTest.cpp -o test -I/usr/local/include/mysql -lmysqlclient - ./test ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{matrix.cert}} - - name: Run test on ubuntu - if: ${{ matrix.os == 'ubuntu-22.04' }} + - name: connect branch run: | - sudo apt install -y libmysqlclient-dev - cd example_code/cpp - g++ ConnectTest.cpp -o test -I/usr/include/mysql -lmysqlclient - ./test ${{needs.setup.outputs.TIDB_CLOUD_HOST}} ${{needs.setup.outputs.TIDB_CLOUD_USER}} ${{ secrets.TIDB_CLOUD_PASSWORD }} ${{matrix.cert}} + mysql --connect-timeout 15 -u '3PPnE7BsLfHX5qW.root' -h gateway01.eu-central-1.prod.aws.tidbcloud.com -P 4000 -D test --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt -p${{ secrets.BRANCH_PSWD_EU_CENTRAL_1 }} + mysql --connect-timeout 15 -u 'pSs1wenmQSbzevk.root' -h gateway01.ap-southeast-1.prod.aws.tidbcloud.com -P 4000 -D test --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt -p${{ secrets.BRANCH_PSWD_AP_SOUTHEAST_1 }} + mysql --connect-timeout 15 -u '2NZSvbxdPaNdeNq.root' -h gateway01.us-east-1.prod.aws.tidbcloud.com -P 4000 -D test --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt -p${{ secrets.BRANCH_PSWD_US_EAST_1 }} + mysql --connect-timeout 15 -u '3JwPQ7c8B1Bva6f.root' -h gateway01.ap-northeast-1.prod.aws.tidbcloud.com -P 4000 -D test --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt -p${{ secrets.BRANCH_PSWD_AP_NORTHEAST_1 }} + mysql --connect-timeout 15 -u '23MRMbs1xyFmALz.root' -h gateway01.us-west-2.prod.aws.tidbcloud.com -P 4000 -D test --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt -p${{ secrets.BRANCH_PSWD_US_WEST_2 }} diff --git a/.github/workflows/create-test.yml b/.github/workflows/create-test.yml new file mode 100644 index 0000000..95dc16b --- /dev/null +++ b/.github/workflows/create-test.yml @@ -0,0 +1,83 @@ +name: Serverless Create Test + +on: + schedule: + - cron: "0/30 * * * *" # every 30 minutes + workflow_dispatch: + +jobs: + setup: + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up ticloud + uses: tidbcloud/setup-tidbcloud-cli@v0 + with: + api_public_key: ${{ secrets.CREATE_TEST_PUBLIC_KEY }} + api_private_key: ${{ secrets.CREATE_TEST_PRIVATE_KEY }} + + - name: Delete all serverless + run: | + # delete all serverless + ticloud cluster list 1372813089447741295 -o json > cluster + total=$(jq '.total' cluster); + for i in $(seq 1 $total); + do + id=`echo $(jq ".items[$i-1].id" cluster) | sed 's/"//g'` + ticloud cluster delete -p 1372813089447741295 -c $id --force; + done + + create-test: + needs: setup + strategy: + matrix: + region: [ us-east-1, us-west-2, ap-northeast-1, ap-southeast-1, eu-central-1 ] + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up ticloud + uses: tidbcloud/setup-tidbcloud-cli@v0 + with: + api_public_key: ${{ secrets.CREATE_TEST_PUBLIC_KEY}} + api_private_key: ${{ secrets.CREATE_TEST_PRIVATE_KEY }} + + - name: Create cluster + run: | + PROJECT_ID=1372813089447741295 + ticloud cluster create -p $PROJECT_ID --cluster-name ${{ matrix.region }} --cloud-provider AWS -r ${{ matrix.region }} --root-password ${{ secrets.TIDB_CLOUD_PASSWORD }} --cluster-type SERVERLESS > ${{ matrix.region }} + cat ${{ matrix.region }} + ticloud cluster get -p $PROJECT_ID -c `cat ${{ matrix.region }} | sed 's/[^0-9]//g'` > ${{ matrix.region }} + cat ${{ matrix.region }} + echo "PROJECT_ID=$PROJECT_ID" >> $GITHUB_ENV + echo "CLUSTER_ID=`echo $(jq '.id' ${{ matrix.region }}) | sed 's/"//g'`" >> $GITHUB_ENV + echo "CLUSTER_USER=$(jq '.status.connection_strings.default_user' ${{ matrix.region }})" >> $GITHUB_ENV + echo "CLUSTER_HOST=$(jq '.status.connection_strings.standard.host' ${{ matrix.region }})" >> $GITHUB_ENV + + - name: Create branch + run: | + ticloud branch create -c ${{ env.CLUSTER_ID }} --branch-name ${{ matrix.region }} > ${{ matrix.region }} + cat ${{ matrix.region }} + ticloud branch get -c ${{ env.CLUSTER_ID }} -b `cat ${{ matrix.region }} | grep -o 'bran-[a-zA-Z0-9]*'` > ${{ matrix.region }} + cat ${{ matrix.region }} + + echo "BRANCH_ID=`echo $(jq '.id' ${{ matrix.region }}) | sed 's/"//g'`" >> $GITHUB_ENV + echo "BRANCH_USER=$(jq '.user_prefix' ${{ matrix.region }})".root"" >> $GITHUB_ENV + echo "BRANCH_HOST=$(jq '.endpoints.public_endpoint.host' ${{ matrix.region }})" >> $GITHUB_ENV + + - name: Setup mysql + uses: shogo82148/actions-setup-mysql@v1 + + - name: Run test + run: | + mysql -u ${{ env.CLUSTER_USER }} -h ${{ env.CLUSTER_HOST }} -P 4000 -D test --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt -p${{ secrets.TIDB_CLOUD_PASSWORD }} + + - name: Delete cluster & branch + run: | + ticloud branch delete -c ${{ env.CLUSTER_ID }} -b ${{ env.BRANCH_ID }} --force + ticloud cluster delete -p ${{ env.PROJECT_ID }} -c ${{ env.CLUSTER_ID }} --force