Skip to content

Development setup

Requirements: Go 1.27+, Task, golangci-lint v2, lefthook, goose and sqlc.

Terminal window
brew install go-task golangci-lint lefthook goose sqlc
git clone https://github.com/lukeskelhorn/ingle.git
cd ingle
task setup # download modules and install the git hooks
task run # build and start on http://localhost:8080

The database goes in ./data/ingle.db. To start again from the setup page, stop Ingle and delete ./data. Settings go in .env (copy .env.example), which task loads.

Or with Docker:

Terminal window
task docker:run # or: docker run -p 8080:8080 -v ingle-data:/data ingle:dev
Terminal window
task # list all tasks
task check # sqlc diff, go mod tidy diff, formatting, lint, race tests
task generate # regenerate sqlc code after editing queries or migrations
task check:all # check + amd64/arm64 Docker image build (run before merging)
task fmt # gofmt -s, gofumpt and goimports
task migrate:create -- add_people
task migrate:status
  1. task migrate:create -- short_name adds a new file in internal/store/migrations. Write the Up and Down SQL. Migrations run when Ingle starts, so never edit one that’s been released.
  2. Add or change queries in internal/store/queries.
  3. task generate regenerates internal/store/dbq. Don’t edit that by hand.

There’s no CI for now. The lefthook pre-commit hook:

  • formats the staged Go files and fails on any unformatted Go
  • runs golangci-lint
  • checks go mod tidy
  • runs sqlc diff when queries or migrations change

Run task check:all before merging, which also builds the Docker image for both architectures.