Initial project setup
parent
3f1f2a5df7
commit
ffce70ad3e
@ -0,0 +1,15 @@
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: CI Test Pipeline
|
||||
|
||||
steps:
|
||||
- name: Unit Tests
|
||||
image: golang:1.24
|
||||
privileged: true
|
||||
commands:
|
||||
- go test -v ./...
|
||||
|
||||
trigger:
|
||||
event:
|
||||
- pull_request
|
||||
- push
|
@ -0,0 +1,69 @@
|
||||
SQL_DATABASE?=./pulley.db
|
||||
COVER_PROFILE?=./tmp/profile.out
|
||||
|
||||
# TODO maybe only use -race in an ARG for CI
|
||||
FLAGS := -race -v
|
||||
|
||||
# `make <target> ARGS=no-cache` will avoid using cached results in go test.
|
||||
ifeq ($(ARGS), no-cache)
|
||||
FLAGS += -count=1
|
||||
endif
|
||||
|
||||
# make test ARGS=no-cache
|
||||
test:
|
||||
go test $(FLAGS) ./...
|
||||
.PHONY: test
|
||||
|
||||
test-short:
|
||||
go test -short $(FLAGS) ./...
|
||||
.PHONY: test-short
|
||||
|
||||
# make test-int ARGS=no-cache
|
||||
test-int:
|
||||
go test $(FLAGS) ./cmd/...
|
||||
.PHONY: test-int
|
||||
|
||||
|
||||
## Coverage See also -covermode=count and -covermode=atomic
|
||||
cover-html: test-cover
|
||||
go tool cover -html=$(COVER_PROFILE)
|
||||
.PHONY:cover-html
|
||||
|
||||
coverage: test-cover
|
||||
go tool cover -func=$(COVER_PROFILE)
|
||||
.PHONY: coverage
|
||||
|
||||
test-cover:
|
||||
go test -coverprofile=$(COVER_PROFILE) $(FLAGS) ./...
|
||||
.PHONY: test-cover
|
||||
|
||||
serve:
|
||||
go run ./cmd/api/main.go
|
||||
.PHONY: serve
|
||||
|
||||
# SQLite Commands
|
||||
sql-cli:
|
||||
sqlite3 $(SQL_DATABASE) -cmd ".headers on" -cmd ".mode box" -cmd ".tables"
|
||||
.PHONY: sql-cli
|
||||
|
||||
init-db: run-migrate
|
||||
sqlite3 $(SQL_DATABASE) "PRAGMA journal_mode = WAL; PRAGMA synchronous = NORMAL;"
|
||||
.PHONY: init-db
|
||||
|
||||
run-migrate:
|
||||
migrate -database sqlite3://$(SQL_DATABASE) -path ./migrations up
|
||||
.PHONY: run-migrate
|
||||
|
||||
# Checks system dependencies needed to run the local dev environment
|
||||
check-system-deps:
|
||||
@echo "Checking system dependencies..."
|
||||
@command -v air > /dev/null || (echo "Missing air command. go install github.com/air-verse/air@latest"; exit 1)
|
||||
@command -v sqlite3 > /dev/null || (echo "Missing sqlite3 command. brew install sqlite"; exit 1)
|
||||
@command -v migrate > /dev/null || (echo "Missing migrate command. go install -tags 'sqlite3' github.com/golang-migrate/migrate/v4/cmd/migrate@latest"; exit 1)
|
||||
@echo "System dependencies fulfilled 👍"
|
||||
.PHONY: check-system-deps
|
||||
# Certs
|
||||
|
||||
local-certs:
|
||||
cd ./tls && go run /usr/local/go/src/crypto/tls/generate_cert.go --rsa-bits=2048 --host=localhost
|
||||
.PHONY: local-certs
|
@ -0,0 +1,52 @@
|
||||
root = "."
|
||||
testdata_dir = "testdata"
|
||||
tmp_dir = "tmp"
|
||||
|
||||
[build]
|
||||
args_bin = ["-logging=DEBUG"]
|
||||
bin = "./tmp/main"
|
||||
cmd = "go build -o ./tmp/main cmd/api/main.go"
|
||||
delay = 1000
|
||||
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
|
||||
exclude_file = []
|
||||
exclude_regex = ["_test.go"]
|
||||
exclude_unchanged = false
|
||||
follow_symlink = false
|
||||
full_bin = ""
|
||||
include_dir = []
|
||||
include_ext = ["go", "tpl", "tmpl", "html", "go.tmpl"]
|
||||
include_file = []
|
||||
kill_delay = "1s"
|
||||
log = "build-errors.log"
|
||||
poll = false
|
||||
poll_interval = 0
|
||||
post_cmd = []
|
||||
pre_cmd = []
|
||||
rerun = false
|
||||
rerun_delay = 500
|
||||
send_interrupt = true
|
||||
stop_on_error = false
|
||||
|
||||
[color]
|
||||
app = ""
|
||||
build = "yellow"
|
||||
main = "magenta"
|
||||
runner = "green"
|
||||
watcher = "cyan"
|
||||
|
||||
[log]
|
||||
main_only = false
|
||||
silent = false
|
||||
time = false
|
||||
|
||||
[misc]
|
||||
clean_on_exit = false
|
||||
|
||||
[proxy]
|
||||
app_port = 0
|
||||
enabled = false
|
||||
proxy_port = 0
|
||||
|
||||
[screen]
|
||||
clear_on_rebuild = false
|
||||
keep_scroll = true
|
@ -0,0 +1,15 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
)
|
||||
|
||||
func Run(w io.Writer) {
|
||||
fmt.Fprint(w, "Hello API\n")
|
||||
}
|
||||
|
||||
func main() {
|
||||
Run(os.Stdout)
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRun(t *testing.T) {
|
||||
buffer := bytes.Buffer{}
|
||||
Run(&buffer)
|
||||
got := buffer.String()
|
||||
want := "Hello API\n"
|
||||
if got != want {
|
||||
t.Errorf("got %q, want %q", got, want)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue