From e7df0322d72bb7cca31c30e3e460a3c1e522fd89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Dubas?= Date: Sat, 23 Apr 2022 17:15:16 +0000 Subject: [PATCH] Improve project usage (#6) 1. Ignore unnecessary files, such as `pgcli` log/history, and extra `docker-compose` definitions. 2. Add `Makefile` with common tasks. 3. Add git pre-commit hook to ensure project is always properly formatted. 4. Add [`btree_gist`][0] extension to `postgres`. Reviewed-on: https://gitea.dubas.dev/joao.dubas/ex_trainer/pulls/6 [0]: https://www.postgresql.org/docs/14/btree-gist.html --- .drone.yml | 4 +- .gitignore | 3 + Makefile | 41 ++++++++ README.md | 11 ++ docker-compose.yml | 3 + priv/docker/pgcli/config | 188 ++++++++++++++++++++++++++++++++++ priv/docker/postgres/init.sql | 3 + priv/githooks/pre-commit | 2 + 8 files changed, 253 insertions(+), 2 deletions(-) create mode 100644 Makefile create mode 100644 README.md create mode 100644 priv/docker/pgcli/config create mode 100755 priv/githooks/pre-commit diff --git a/.drone.yml b/.drone.yml index 8d5a3fa..68c2ec9 100644 --- a/.drone.yml +++ b/.drone.yml @@ -5,8 +5,8 @@ name: test trigger: event: - include: - - pull_request + - push + - pull_request steps: - name: database healthcheck diff --git a/.gitignore b/.gitignore index 662e67b..92ca450 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,6 @@ erl_crash.dump *.ez wabanex-*.tar +docker-compose.*.yml +priv/docker/pgcli/history +priv/docker/pgcli/log diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..fde3e64 --- /dev/null +++ b/Makefile @@ -0,0 +1,41 @@ +.DEFAULT_GOAL := help + +COMPOSE = docker-compose -f docker-compose.yml -f docker-compose.override.yml + +.PHONY: setup +setup: ## setup project + @mkdir -p priv/plts + @mix do local.rebar --force, local.hex --force + @mix do deps.get, deps.compile + @mix dialyzer --plt + +.PHONY: check_format +check_format: ## run format checker + @mix format --check-formatted + +.PHONY: credo +credo: ## run credo + @mix credo suggest --strict --format=flycheck + +.PHONY: dialyzer +dialyzer: ## run dialyzer + @mix dialyzer --no-check --quiet --ignore-exit-status --format short + +.PHONY: static_code_analysis +static_code_analysis: check_format credo dialyzer ## run static code analysis + +.PHONY: test +test: ## run tests + @mix test --cover --trace --slowest 10 + +.PHONY: compose_up +compose_up: ## start containers for this service + @$(COMPOSE) up -d + +.PHONY: compose_test +compose_test: ## run tests in containers + @$(COMPOSE) run -e MIX_ENV=test --entrypoint make app test + +.PHONY: help +help: + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' diff --git a/README.md b/README.md new file mode 100644 index 0000000..128dd77 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# Training Log (TRAILOG) + +[![Build Status](https://drone.dubas.dev/api/badges/joao.dubas/ex_trainer/status.svg?ref=refs/heads/main)](https://drone.dubas.dev/joao.dubas/ex_trainer) + +## Setup + +## Execute + +## Tests + +## Next steps \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 41443d7..cf54ca6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,11 @@ --- version: '3.7' + services: db: image: 'postgres:14.2-alpine' hostname: &db_host db + init: true environment: POSTGRES_USER: &db_user postgres POSTGRES_PASSWORD: &db_pass postgres @@ -45,6 +47,7 @@ services: restart: unless-stopped entrypoint: sleep command: 3650d + volumes: db_data: {} app_build: {} diff --git a/priv/docker/pgcli/config b/priv/docker/pgcli/config new file mode 100644 index 0000000..5edc608 --- /dev/null +++ b/priv/docker/pgcli/config @@ -0,0 +1,188 @@ +# vi: ft=dosini +[main] + +# Enables context sensitive auto-completion. If this is disabled the all +# possible completions will be listed. +smart_completion = True + +# Display the completions in several columns. (More completions will be +# visible.) +wider_completion_menu = False + +# Multi-line mode allows breaking up the sql statements into multiple lines. If +# this is set to True, then the end of the statements must have a semi-colon. +# If this is set to False then sql statements can't be split into multiple +# lines. End of line (return) is considered as the end of the statement. +multi_line = True + +# If multi_line_mode is set to "psql", in multi-line mode, [Enter] will execute +# the current input if the input ends in a semicolon. +# If multi_line_mode is set to "safe", in multi-line mode, [Enter] will always +# insert a newline, and [Esc] [Enter] or [Alt]-[Enter] must be used to execute +# a command. +multi_line_mode = psql + +# Destructive warning mode will alert you before executing a sql statement +# that may cause harm to the database such as "drop table", "drop database" +# or "shutdown". +destructive_warning = True + +# Enables expand mode, which is similar to `\x` in psql. +expand = False + +# Enables auto expand mode, which is similar to `\x auto` in psql. +auto_expand = True + +# If set to True, table suggestions will include a table alias +generate_aliases = False + +# log_file location. +# In Unix/Linux: ~/.config/pgcli/log +# In Windows: %USERPROFILE%\AppData\Local\dbcli\pgcli\log +# %USERPROFILE% is typically C:\Users\{username} +log_file = default + +# keyword casing preference. Possible values "lower", "upper", "auto" +keyword_casing = auto + +# casing_file location. +# In Unix/Linux: ~/.config/pgcli/casing +# In Windows: %USERPROFILE%\AppData\Local\dbcli\pgcli\casing +# %USERPROFILE% is typically C:\Users\{username} +casing_file = default + +# If generate_casing_file is set to True and there is no file in the above +# location, one will be generated based on usage in SQL/PLPGSQL functions. +generate_casing_file = False + +# Casing of column headers based on the casing_file described above +case_column_headers = True + +# history_file location. +# In Unix/Linux: ~/.config/pgcli/history +# In Windows: %USERPROFILE%\AppData\Local\dbcli\pgcli\history +# %USERPROFILE% is typically C:\Users\{username} +history_file = default + +# Default log level. Possible values: "CRITICAL", "ERROR", "WARNING", "INFO" +# and "DEBUG". "NONE" disables logging. +log_level = INFO + +# Order of columns when expanding * to column list +# Possible values: "table_order" and "alphabetic" +asterisk_column_order = table_order + +# Whether to qualify with table alias/name when suggesting columns +# Possible values: "always", never" and "if_more_than_one_table" +qualify_columns = if_more_than_one_table + +# When no schema is entered, only suggest objects in search_path +search_path_filter = False + +# Default pager. +# By default 'PAGER' environment variable is used +# pager = less -SRXF + +# Timing of sql statments and table rendering. +timing = True + +# Table format. Possible values: psql, plain, simple, grid, fancy_grid, pipe, +# ascii, double, github, orgtbl, rst, mediawiki, html, latex, latex_booktabs, +# textile, moinmoin, jira, vertical, tsv, csv. +# Recommended: psql, fancy_grid and grid. +table_format = psql + +# Syntax Style. Possible values: manni, igor, xcode, vim, autumn, vs, rrt, +# native, perldoc, borland, tango, emacs, friendly, monokai, paraiso-dark, +# colorful, murphy, bw, pastie, paraiso-light, trac, default, fruity +syntax_style = default + +# Keybindings: +# When Vi mode is enabled you can use modal editing features offered by Vi in the REPL. +# When Vi mode is disabled emacs keybindings such as Ctrl-A for home and Ctrl-E +# for end are available in the REPL. +vi = False + +# Error handling +# When one of multiple SQL statements causes an error, choose to either +# continue executing the remaining statements, or stopping +# Possible values "STOP" or "RESUME" +on_error = STOP + +# Set threshold for row limit. Use 0 to disable limiting. +row_limit = 1000 + +# Skip intro on startup and goodbye on exit +less_chatty = False + +# Postgres prompt +# \t - Current date and time +# \u - Username +# \h - Short hostname of the server (up to first '.') +# \H - Hostname of the server +# \d - Database name +# \p - Database port +# \i - Postgres PID +# \# - "@" sign if logged in as superuser, '>' in other case +# \n - Newline +# \dsn_alias - name of dsn alias if -D option is used (empty otherwise) +# \x1b[...m - insert ANSI escape sequence +# eg: prompt = '\x1b[35m\u@\x1b[32m\h:\x1b[36m\d>' +prompt = '\u@\h:\d> ' + +# Number of lines to reserve for the suggestion menu +min_num_menu_lines = 4 + +# Character used to left pad multi-line queries to match the prompt size. +multiline_continuation_char = '' + +# The string used in place of a null value. +null_string = '' + +# manage pager on startup +enable_pager = True + +# Use keyring to automatically save and load password in a secure manner +keyring = True + +# Custom colors for the completion menu, toolbar, etc. +[colors] +completion-menu.completion.current = 'bg:#ffffff #000000' +completion-menu.completion = 'bg:#008888 #ffffff' +completion-menu.meta.completion.current = 'bg:#44aaaa #000000' +completion-menu.meta.completion = 'bg:#448888 #ffffff' +completion-menu.multi-column-meta = 'bg:#aaffff #000000' +scrollbar.arrow = 'bg:#003333' +scrollbar = 'bg:#00aaaa' +selected = '#ffffff bg:#6666aa' +search = '#ffffff bg:#4444aa' +search.current = '#ffffff bg:#44aa44' +bottom-toolbar = 'bg:#222222 #aaaaaa' +bottom-toolbar.off = 'bg:#222222 #888888' +bottom-toolbar.on = 'bg:#222222 #ffffff' +search-toolbar = 'noinherit bold' +search-toolbar.text = 'nobold' +system-toolbar = 'noinherit bold' +arg-toolbar = 'noinherit bold' +arg-toolbar.text = 'nobold' +bottom-toolbar.transaction.valid = 'bg:#222222 #00ff5f bold' +bottom-toolbar.transaction.failed = 'bg:#222222 #ff005f bold' + +# style classes for colored table output +output.header = "#00ff5f bold" +output.odd-row = "" +output.even-row = "" + +# Named queries are queries you can execute by name. +[named queries] + +# DSN to call by -D option +[alias_dsn] +# example_dsn = postgresql://[user[:password]@][netloc][:port][/dbname] + +# Format for number representation +# for decimal "d" - 12345678, ",d" - 12,345,678 +# for float "g" - 123456.78, ",g" - 123,456.78 +[data_formats] +decimal = "" +float = "" diff --git a/priv/docker/postgres/init.sql b/priv/docker/postgres/init.sql index 492b253..d898068 100644 --- a/priv/docker/postgres/init.sql +++ b/priv/docker/postgres/init.sql @@ -1,2 +1,5 @@ CREATE EXTENSION "uuid-ossp"; CREATE EXTENSION "pg_stat_statements"; +CREATE EXTENSION "btree_gist"; +CREATE DATABASE wabanex_dev TEMPLATE postgres; +CREATE DATABASE wabanex_test TEMPLATE wabanex_dev; diff --git a/priv/githooks/pre-commit b/priv/githooks/pre-commit new file mode 100755 index 0000000..ba6b0e4 --- /dev/null +++ b/priv/githooks/pre-commit @@ -0,0 +1,2 @@ +#!/bin/sh +make static_code_analysis