PKG = github.com/k1LoW/tbls COMMIT = $$(git describe --tags --always) OSNAME=${shell uname -s} DATE = $$(date '+%Y-%m-%d_%H:%M:%S%z') export GO111MODULE=on export AWS_ACCESS_KEY_ID=dummy export AWS_SECRET_ACCESS_KEY=dummy export AWS_DEFAULT_REGION=ap-northeast-1 BUILD_LDFLAGS = -X $(PKG).commit=$(COMMIT) -X $(PKG).date=$(DATE) TMPDIR ?= /tmp TBLS ?= ./tbls default: test ci: depsdev build db test testdoc testdoc_hide_auto_increment test_too_many_tables test_json test_ext_subcommand test_ext_driver test_jsonschema doc ci_windows: depsdev build db_sqlite testdoc_sqlite db: db_sqlite # MySQL8 use ./testdata/ddl/mysql:/docker-entrypoint-initdb.d usql pg://postgres:pgpass@localhost:55432/testdb?sslmode=disable -f testdata/ddl/postgres95.sql usql pg://postgres:pgpass@localhost:55413/testdb?sslmode=disable -f testdata/ddl/postgres.sql usql my://root:mypass@localhost:33306/testdb -f testdata/ddl/mysql56.sql usql my://root:mypass@localhost:33308/testdb -c "CREATE DATABASE IF NOT EXISTS relations;" usql my://root:mypass@localhost:33308/relations -f testdata/ddl/detect_relations.sql usql my://root:mypass@localhost:33308/testdb -c "CREATE DATABASE IF NOT EXISTS relations_singular;" usql my://root:mypass@localhost:33308/relations_singular -f testdata/ddl/detect_relations_singular.sql usql maria://root:mypass@localhost:33309/testdb -f testdata/ddl/maria.sql usql ms://SA:MSSQLServer-Passw0rd@localhost:11433/master -c "IF NOT EXISTS (SELECT * FROM sys.databases WHERE NAME = 'testdb') CREATE DATABASE testdb;" usql ms://SA:MSSQLServer-Passw0rd@localhost:11433/testdb -f testdata/ddl/mssql.sql || true ./testdata/ddl/dynamodb.sh > /dev/null 2>&1 db_sqlite: sqlite3 $(PWD)/testdata/testdb.sqlite3 < testdata/ddl/sqlite.sql test: go test ./... -tags 'bq clickhouse dynamo mariadb mongodb mssql mysql postgres redshift snowflake spanner sqlite' -coverprofile=coverage.out -covermode=count test-no-db: go test ./... -coverprofile=coverage.out -covermode=count doc: build doc_sqlite $(TBLS) doc pg://postgres:pgpass@localhost:55432/testdb?sslmode=disable -c testdata/test_tbls_postgres.yml -f sample/postgres95 $(TBLS) doc pg://postgres:pgpass@localhost:55413/testdb?sslmode=disable -c testdata/test_tbls_postgres.yml -f sample/postgres $(TBLS) doc my://root:mypass@localhost:33306/testdb -c testdata/test_tbls.yml -f sample/mysql56 $(TBLS) doc my://root:mypass@localhost:33308/testdb -c testdata/test_tbls.yml -f sample/mysql $(TBLS) doc my://root:mypass@localhost:33308/relations -c testdata/test_tbls_detect_relations.yml -f sample/detect_relations $(TBLS) doc my://root:mypass@localhost:33308/relations_singular -c testdata/test_tbls_detect_relations_singular.yml -f sample/detect_relations_singular $(TBLS) doc maria://root:mypass@localhost:33309/testdb -c testdata/test_tbls.yml -f sample/mariadb $(TBLS) doc ms://SA:MSSQLServer-Passw0rd@localhost:11433/testdb -c testdata/test_tbls_mssql.yml -f sample/mssql $(TBLS) doc mongodb://mongoadmin:secret@localhost:27017/test?authSource=admin -f sample/mongo env AWS_ENDPOINT_URL=http://localhost:18000 $(TBLS) doc dynamodb://ap-northeast-1 -c testdata/test_tbls_dynamodb.yml -f sample/dynamodb $(TBLS) doc clickhouse://default@localhost:9000/testdb -f sample/clickhouse $(TBLS) doc pg://postgres:pgpass@localhost:55413/testdb?sslmode=disable -c testdata/test_tbls_postgres.yml -j -f sample/adjust $(TBLS) doc my://root:mypass@localhost:33308/testdb -c testdata/test_tbls.yml -t png -f sample/png $(TBLS) doc my://root:mypass@localhost:33308/testdb -c testdata/test_tbls.yml -t mermaid -f sample/mermaid $(TBLS) doc my://root:mypass@localhost:33308/testdb -c testdata/exclude_test_tbls.yml -f sample/exclude $(TBLS) doc my://root:mypass@localhost:33308/testdb -c testdata/dict_test_tbls.yml -f sample/dict $(TBLS) doc my://root:mypass@localhost:33308/testdb -c testdata/font_test_tbls.yml -f sample/font $(TBLS) doc my://root:mypass@localhost:33308/testdb -c testdata/number_test_tbls.yml -f sample/number $(TBLS) doc my://root:mypass@localhost:33308/testdb -c testdata/hide_test_tbls.yml -f sample/hide $(TBLS) doc my://root:mypass@localhost:33308/testdb -c testdata/test_tbls_hide_not_related_column.yml -f sample/hide_not_related_column $(TBLS) doc my://root:mypass@localhost:33308/testdb -c testdata/test_tbls_viewpoints.yml -f sample/viewpoints doc_sqlite: build $(TBLS) doc sq://$(PWD)/testdata/testdb.sqlite3 -c testdata/test_tbls.yml -f sample/sqlite testdoc: build testdoc_sqlite $(TBLS) diff pg://postgres:pgpass@localhost:55432/testdb?sslmode=disable -c testdata/test_tbls_postgres.yml sample/postgres95 $(TBLS) diff pg://postgres:pgpass@localhost:55413/testdb?sslmode=disable -c testdata/test_tbls_postgres.yml sample/postgres $(TBLS) diff my://root:mypass@localhost:33306/testdb -c testdata/test_tbls.yml sample/mysql56 $(TBLS) diff my://root:mypass@localhost:33308/testdb -c testdata/test_tbls.yml sample/mysql $(TBLS) diff my://root:mypass@localhost:33308/relations -c testdata/test_tbls_detect_relations.yml sample/detect_relations $(TBLS) diff my://root:mypass@localhost:33308/relations_singular -c testdata/test_tbls_detect_relations_singular.yml sample/detect_relations_singular $(TBLS) diff maria://root:mypass@localhost:33309/testdb -c testdata/test_tbls.yml sample/mariadb $(TBLS) diff ms://SA:MSSQLServer-Passw0rd@localhost:11433/testdb -c testdata/test_tbls_mssql.yml sample/mssql $(TBLS) diff mongodb://mongoadmin:secret@localhost:27017/test?authSource=admin sample/mongo env AWS_ENDPOINT_URL=http://localhost:18000 $(TBLS) diff dynamodb://ap-northeast-1 -c testdata/test_tbls_dynamodb.yml sample/dynamodb $(TBLS) diff clickhouse://default@localhost:9000/testdb sample/clickhouse $(TBLS) diff pg://postgres:pgpass@localhost:55413/testdb?sslmode=disable -c testdata/test_tbls_postgres.yml -j sample/adjust $(TBLS) diff my://root:mypass@localhost:33308/testdb -c testdata/test_tbls.yml -t png sample/png $(TBLS) diff my://root:mypass@localhost:33308/testdb -c testdata/exclude_test_tbls.yml sample/exclude $(TBLS) diff my://root:mypass@localhost:33308/testdb -c testdata/dict_test_tbls.yml sample/dict $(TBLS) diff my://root:mypass@localhost:33308/testdb -c testdata/font_test_tbls.yml sample/font $(TBLS) diff my://root:mypass@localhost:33308/testdb -c testdata/number_test_tbls.yml sample/number $(TBLS) diff my://root:mypass@localhost:33308/testdb -c testdata/hide_test_tbls.yml sample/hide $(TBLS) diff my://root:mypass@localhost:33308/testdb -c testdata/test_tbls_hide_not_related_column.yml sample/hide_not_related_column $(TBLS) diff my://root:mypass@localhost:33308/testdb -c testdata/test_tbls_viewpoints.yml sample/viewpoints testdoc_sqlite: build $(TBLS) diff sq://$(PWD)/testdata/testdb.sqlite3 -c testdata/test_tbls.yml sample/sqlite testdoc_hide_auto_increment: build usql my://root:mypass@localhost:33308/testdb -c "CREATE DATABASE IF NOT EXISTS auto_increment;" usql my://root:mypass@localhost:33308/auto_increment -f testdata/ddl/auto_increment.sql $(TBLS) doc my://root:mypass@localhost:33308/auto_increment?hide_auto_increment -f $(TMPDIR)/auto_increment usql my://root:mypass@localhost:33308/auto_increment -c "INSERT INTO users (username, password, email, created) VALUES ('alice', 'PASS', 'alice@example.com', now());" $(TBLS) diff my://root:mypass@localhost:33308/auto_increment?hide_auto_increment $(TMPDIR)/auto_increment test_too_many_tables: build usql pg://postgres:pgpass@localhost:55432/testdb?sslmode=disable -c "DROP DATABASE IF EXISTS too_many;CREATE DATABASE too_many;" usql pg://postgres:pgpass@localhost:55432/too_many?sslmode=disable -f testdata/ddl/createtable_too_many.sql ulimit -n 256 && $(TBLS) doc pg://postgres:pgpass@localhost:55432/too_many?sslmode=disable -f /tmp ulimit -n 256 && $(TBLS) diff pg://postgres:pgpass@localhost:55432/too_many?sslmode=disable /tmp test_json: build $(TBLS) out my://root:mypass@localhost:33308/testdb -c testdata/test_tbls.yml -t json > /tmp/tbls.json $(TBLS) diff json:///tmp/tbls.json sample/mysql $(TBLS) out pg://postgres:pgpass@localhost:55413/testdb?sslmode=disable -c testdata/test_tbls_postgres.yml -t json > /tmp/tbls.json $(TBLS) diff json:///tmp/tbls.json sample/postgres $(TBLS) out sq://$(PWD)/testdata/testdb.sqlite3 -c testdata/test_tbls.yml -t json > /tmp/tbls.json $(TBLS) diff json:///tmp/tbls.json sample/sqlite test_env: build env TBLS_DSN=my://root:mypass@localhost:33306/testdb TBLS_DOC_PATH=sample/mysql $(TBLS) doc -c testdata/test_tbls.yml -f env TBLS_DSN=my://root:mypass@localhost:33306/testdb TBLS_DOC_PATH=sample/mysql $(TBLS) diff -c testdata/test_tbls.yml test_config: build $(TBLS) doc -c testdata/mysql_testdb_config.yml -f $(TBLS) diff -c testdata/mysql_testdb_config.yml cp testdata/mysql_testdb_config.yml .tbls.yml $(TBLS) diff rm .tbls.yml doc_bigquery: build $(TBLS) doc bq://bigquery-public-data/crypto_bitcoin?creds=client_secrets.json -c testdata/crypto_bitcoin_tbls.yml -f sample/bigquery_crypto_bitcoin $(TBLS) doc bq://bigquery-public-data/census_bureau_international?creds=client_secrets.json -f sample/bigquery_census_bureau_international test_bigquery: build $(TBLS) diff bq://bigquery-public-data/crypto_bitcoin?creds=client_secrets.json -c testdata/crypto_bitcoin_tbls.yml sample/bigquery_crypto_bitcoin $(TBLS) diff bq://bigquery-public-data/census_bureau_international?creds=client_secrets.json sample/bigquery_census_bureau_international doc_spanner: build $(TBLS) doc spanner://$(GCLOUD_PROJECT)/test-instance/testdb?creds=spanner_client_secrets.json -c testdata/spanner_tbls.yml -f sample/spanner test_spanner: build $(TBLS) diff spanner://$(GCLOUD_PROJECT)/test-instance/testdb?creds=spanner_client_secrets.json -c testdata/spanner_tbls.yml sample/spanner test_ext_subcommand: build echo hello | env PATH="${PWD}/testdata/bin:${PATH}" $(TBLS) echo | grep 'STDIN=hello' > /dev/null env PATH="${PWD}/testdata/bin:${PATH}" $(TBLS) echo -c ./testdata/ext_subcommand_tbls.yml | grep 'TBLS_DSN=pg://postgres:pgpass@localhost:55432/testdb?sslmode=disable' > /dev/null env PATH="${PWD}/testdata/bin:${PATH}" $(TBLS) echo -c ./testdata/ext_subcommand_tbls.yml | grep 'TBLS_SCHEMA=/' > /dev/null env PATH="${PWD}/testdata/bin:${PATH}" $(TBLS) echo -c ./testdata/ext_subcommand_tbls.yml | grep 'TBLS_CONFIG_PATH=' | grep 'testdata/ext_subcommand_tbls.yml' > /dev/null env PATH="${PWD}/testdata/bin:${PATH}" TBLS_DSN=pg://postgres:pgpass@localhost:55432/testdb?sslmode=disable $(TBLS) echo | grep 'TBLS_DSN=pg://postgres:pgpass@localhost:55432/testdb?sslmode=disable' > /dev/null echo hello | env PATH="${PWD}/testdata/bin:${PATH}" $(TBLS) echo -c ./testdata/ext_subcommand_tbls.yml | grep 'STDIN=hello' > /dev/null test_ext_driver: build env PATH="${PWD}/testdata/bin:${PATH}" $(TBLS) ls --dsn foodb://bar | grep 'users' > /dev/null test_jsonschema: cd scripts/jsonschema && go run main.go | diff -u ../../spec/tbls.schema.json_schema.json - jv spec/tbls.schema.json_schema.json --assert-content sample/mysql/schema.json jv spec/tbls.schema.json_schema.json --assert-content sample/postgres/schema.json generate_jsonschema: cd scripts/jsonschema && go run main.go > ../../spec/tbls.schema.json_schema.json generate_test_json: build sqlite3 $(PWD)/filter_tables.sqlite3 < testdata/ddl/filter_tables.sql $(TBLS) out sq://$(PWD)/filter_tables.sqlite3 -t json > testdata/filter_tables.json lint: golangci-lint run ./... build: go build -tags timetzdata -ldflags="$(BUILD_LDFLAGS)" depsdev: go install github.com/linyows/git-semv/cmd/git-semv@latest go install github.com/Songmu/ghch/cmd/ghch@latest go install github.com/xo/usql@latest go install github.com/Songmu/gocredits/cmd/gocredits@latest go install github.com/securego/gosec/v2/cmd/gosec@latest go install github.com/santhosh-tekuri/jsonschema/cmd/jv@latest prerelease: git pull origin --tag ghch -w -N ${VER} gocredits -w . git add CHANGELOG.md CREDITS git commit -m'Bump up version number' git tag ${VER} prerelease_for_tagpr: depsdev gocredits -w . git add CHANGELOG.md CREDITS go.mod go.sum .PHONY: default test