go-arch-lint

command module
v1.7.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 27, 2023 License: MIT Imports: 2 Imported by: 0

README

Logo image

Linter used to enforce some good project structure and validate top level architecture (code layers)

Go Report Card Docker Cloud Build Status

Quick start

What exactly is project architecture

You can imagine some good simple architecture, for example classic onion part:

Logo image

And describe/declare as semantic yaml linter config:

version: 3
workdir: internal
components:
  handler:    { in: handlers/* }           # wildcard one level
  service:    { in: services/** }          # wildcard many levels
  repository: { in: domain/*/repository }  # wildcard DDD repositories
  model:      { in: models }               # match exactly one package

commonComponents:
  - models

deps:
  handler:
    canDependOn:
      - service
  service:
    canDependOn:
      - repository

And now linter will check all project code inside internal workdir and show warnings, when code violate this rules.

For best experience you can add linter to you CI workflow

Install/Run

Wia Docker
docker run --rm -v ${PWD}:/app fe3dback/go-arch-lint:latest-stable-release check --project-path /app

other docker tags and versions

From sources

It require go 1.20+

go install github.com/fe3dback/go-arch-lint@latest
go-arch-lint check --project-path ~/code/my-project
# or
cd ~/code/my-project
go-arch-lint check
Precompiled binaries

see on releases page

IDE plugin for autocompletion and other help

jetbrains goland logo

https://plugins.jetbrains.com/plugin/15423-goarchlint-file-support

Usage

Usage:
  go-arch-lint check [flags]

Flags:
      --arch-file string      arch file path (default ".go-arch-lint.yml")
  -h, --help                  help for check
      --max-warnings int      max number of warnings to output (default 512)
      --project-path string   absolute path to project directory (where '.go-arch-lint.yml' is located) (default "./")

Global Flags:
      --json                   (alias for --output-type=json)
      --output-color           use ANSI colors in terminal output (default true)
      --output-json-one-line   format JSON as single line payload (without line breaks), only for json output type
      --output-type string     type of command output, variants: [ascii, json] (default "default")

This linter will return:

Status Code Description
0 Project has correct architecture
1 Found warnings

What`s new in V3 (1.7.0+)

version: 3
allow:
  deepScan: true

Biggest change in V3 config (linter 1.7.0+), is deepScan option.

In v1/v2, linter check only file imports, but not analyse code itself. deepScan is new advanced code linter, it will analyse all project AST and provide more strict and better arch linting

--

Linter now is not require go mod vendor (vendor directory) for checking vendor deps.

--

Better plugin for IDEA goland.

Archfile example

Read archfile syntax:

Example for this project .go-arch-lint.yml

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL