diff --git a/.travis/gofmt.sh b/.testing/gofmt.sh similarity index 100% rename from .travis/gofmt.sh rename to .testing/gofmt.sh diff --git a/.testing/testing-server.cnf b/.testing/testing-server.cnf new file mode 100644 index 000000000..4387cb865 --- /dev/null +++ b/.testing/testing-server.cnf @@ -0,0 +1,5 @@ +[mysqld] +innodb_log_file_size=256MB +innodb_buffer_pool_size=512MB +max_allowed_packet=16MB +local-infile=1 diff --git a/.testing/wait_mysql.sh b/.testing/wait_mysql.sh new file mode 100755 index 000000000..a9692ac0a --- /dev/null +++ b/.testing/wait_mysql.sh @@ -0,0 +1,8 @@ +#!/bin/sh +while : +do + if mysql --user=gotest --password=secret --host=127.0.0.1 --port=3307 -e 'select version()' 2>&1 | grep 'version()\|ERROR 2059 (HY000):'; then + break + fi + sleep 3 +done diff --git a/.travis.yml b/.travis.yml index cc1268c36..17cab846f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,107 +1,72 @@ -sudo: false +dist: trusty +sudo: required language: go -go: - - 1.7.x - - 1.8.x - - 1.9.x - - 1.10.x - - master -before_install: - - go get golang.org/x/tools/cmd/cover - - go get github.com/mattn/goveralls +services: + - docker -before_script: - - echo -e "[server]\ninnodb_log_file_size=256MB\ninnodb_buffer_pool_size=512MB\nmax_allowed_packet=16MB" | sudo tee -a /etc/mysql/my.cnf - - sudo service mysql restart - - .travis/wait_mysql.sh - - mysql -e 'create database gotest;' +env: + global: + # See https://github.com/go-sql-driver/mysql/wiki/Testing + - MYSQL_TEST_USER=gotest + - MYSQL_TEST_PASS=secret + - MYSQL_TEST_PROT=tcp + - MYSQL_TEST_ADDR=127.0.0.1:3307 + - MYSQL_TEST_DBNAME=gotest + - MYSQL_TEST_CONCURRENT=1 matrix: include: - - env: DB=MYSQL8 - sudo: required - dist: trusty - go: 1.10.x - services: - - docker - before_install: - - go get golang.org/x/tools/cmd/cover - - go get github.com/mattn/goveralls - - docker pull mysql:8.0 - - docker run -d -p 127.0.0.1:3307:3306 --name mysqld -e MYSQL_DATABASE=gotest -e MYSQL_USER=gotest -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=verysecret - mysql:8.0 --innodb_log_file_size=256MB --innodb_buffer_pool_size=512MB --max_allowed_packet=16MB --local-infile=1 - - cp .travis/docker.cnf ~/.my.cnf - - .travis/wait_mysql.sh - before_script: - - export MYSQL_TEST_USER=gotest - - export MYSQL_TEST_PASS=secret - - export MYSQL_TEST_ADDR=127.0.0.1:3307 - - export MYSQL_TEST_CONCURRENT=1 + # test latest stable MySQL (currently 5.7) with 4 latest Go releases + master + - go: 1.7.x + env: MYSQL_IMAGE=mysql:5.7 + - go: 1.8.x + env: MYSQL_IMAGE=mysql:5.7 + - go: 1.9.x + env: MYSQL_IMAGE=mysql:5.7 + - go: 1.10.x + env: MYSQL_IMAGE=mysql:5.7 + - go: master + env: MYSQL_IMAGE=mysql:5.7 - - env: DB=MYSQL57 - sudo: required - dist: trusty - go: 1.10.x - services: - - docker - before_install: - - go get golang.org/x/tools/cmd/cover - - go get github.com/mattn/goveralls - - docker pull mysql:5.7 - - docker run -d -p 127.0.0.1:3307:3306 --name mysqld -e MYSQL_DATABASE=gotest -e MYSQL_USER=gotest -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=verysecret - mysql:5.7 --innodb_log_file_size=256MB --innodb_buffer_pool_size=512MB --max_allowed_packet=16MB --local-infile=1 - - cp .travis/docker.cnf ~/.my.cnf - - .travis/wait_mysql.sh - before_script: - - export MYSQL_TEST_USER=gotest - - export MYSQL_TEST_PASS=secret - - export MYSQL_TEST_ADDR=127.0.0.1:3307 - - export MYSQL_TEST_CONCURRENT=1 + # test latest stable Go (currently 1.10.x) with all other supported MySQL versions + not yet supported 8.0 + # https://www.mysql.com/support/supportedplatforms/database.html + - go: 1.10.x + env: MYSQL_IMAGE=mysql:5.5 + - go: 1.10.x + env: MYSQL_IMAGE=mysql:5.6 + - go: 1.10.x + env: MYSQL_IMAGE=mysql:8.0 - - env: DB=MARIA55 - sudo: required - dist: trusty - go: 1.10.x - services: - - docker - before_install: - - go get golang.org/x/tools/cmd/cover - - go get github.com/mattn/goveralls - - docker pull mariadb:5.5 - - docker run -d -p 127.0.0.1:3307:3306 --name mysqld -e MYSQL_DATABASE=gotest -e MYSQL_USER=gotest -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=verysecret - mariadb:5.5 --innodb_log_file_size=256MB --innodb_buffer_pool_size=512MB --max_allowed_packet=16MB --local-infile=1 - - cp .travis/docker.cnf ~/.my.cnf - - .travis/wait_mysql.sh - before_script: - - export MYSQL_TEST_USER=gotest - - export MYSQL_TEST_PASS=secret - - export MYSQL_TEST_ADDR=127.0.0.1:3307 - - export MYSQL_TEST_CONCURRENT=1 + # test latest stable Go (currently 1.10.x) with all supported MariaDB versions + not yet supported 10.3 + # https://mariadb.org/about/maintenance-policy/ + - go: 1.10.x + env: MYSQL_IMAGE=mariadb:5.5 + - go: 1.10.x + env: MYSQL_IMAGE=mariadb:10.0 + - go: 1.10.x + env: MYSQL_IMAGE=mariadb:10.1 + - go: 1.10.x + env: MYSQL_IMAGE=mariadb:10.2 + - go: 1.10.x + env: MYSQL_IMAGE=mariadb:10.3 - - env: DB=MARIA10_1 - sudo: required - dist: trusty - go: 1.10.x - services: - - docker - before_install: - - go get golang.org/x/tools/cmd/cover - - go get github.com/mattn/goveralls - - docker pull mariadb:10.1 - - docker run -d -p 127.0.0.1:3307:3306 --name mysqld -e MYSQL_DATABASE=gotest -e MYSQL_USER=gotest -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=verysecret - mariadb:10.1 --innodb_log_file_size=256MB --innodb_buffer_pool_size=512MB --max_allowed_packet=16MB --local-infile=1 - - cp .travis/docker.cnf ~/.my.cnf - - .travis/wait_mysql.sh - before_script: - - export MYSQL_TEST_USER=gotest - - export MYSQL_TEST_PASS=secret - - export MYSQL_TEST_ADDR=127.0.0.1:3307 - - export MYSQL_TEST_CONCURRENT=1 +go_import_path: github.com/go-sql-driver/mysql + +before_install: + - go get -u github.com/mattn/goveralls + +before_script: + - sudo service mysql stop + - docker --version + - docker-compose --version + - docker-compose up -d + - .testing/wait_mysql.sh script: - go test -v -covermode=count -coverprofile=coverage.out - go vet ./... - - .travis/gofmt.sh + - .testing/gofmt.sh + after_script: - $HOME/gopath/bin/goveralls -coverprofile=coverage.out -service=travis-ci diff --git a/.travis/docker.cnf b/.travis/docker.cnf deleted file mode 100644 index e57754e5a..000000000 --- a/.travis/docker.cnf +++ /dev/null @@ -1,5 +0,0 @@ -[client] -user = gotest -password = secret -host = 127.0.0.1 -port = 3307 diff --git a/.travis/wait_mysql.sh b/.travis/wait_mysql.sh deleted file mode 100755 index e87993e57..000000000 --- a/.travis/wait_mysql.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -while : -do - if mysql -e 'select version()' 2>&1 | grep 'version()\|ERROR 2059 (HY000):'; then - break - fi - sleep 3 -done diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..4ff5733a7 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +# see CONTRIBUTING.md +--- +version: '3' +services: + mysql: + image: ${MYSQL_IMAGE:-mysql:5.7} + environment: + - MYSQL_ROOT_PASSWORD=verysecret + - MYSQL_USER=gotest + - MYSQL_PASSWORD=secret + - MYSQL_DATABASE=gotest + ports: + - 127.0.0.1:3307:3306 + volumes: + - .testing/testing-server.cnf:/etc/mysql/conf.d/testing-server.cnf diff --git a/driver_test.go b/driver_test.go index 3cbd98c85..55003dea7 100644 --- a/driver_test.go +++ b/driver_test.go @@ -63,10 +63,10 @@ func init() { } return defaultValue } - user = env("MYSQL_TEST_USER", "root") - pass = env("MYSQL_TEST_PASS", "") + user = env("MYSQL_TEST_USER", "gotest") + pass = env("MYSQL_TEST_PASS", "secret") prot = env("MYSQL_TEST_PROT", "tcp") - addr = env("MYSQL_TEST_ADDR", "localhost:3306") + addr = env("MYSQL_TEST_ADDR", "127.0.0.1:3307") dbname = env("MYSQL_TEST_DBNAME", "gotest") netAddr = fmt.Sprintf("%s(%s)", prot, addr) dsn = fmt.Sprintf("%s:%s@%s/%s?timeout=30s", user, pass, netAddr, dbname)