Skip to content

Commit

Permalink
Update versions
Browse files Browse the repository at this point in the history
- update go library versions and reorganize go.mod
- update github action versions
- change how we set go version and use the same version everywhere
- replace golangci-lint config and fix or supress issues
  • Loading branch information
philoserf committed Sep 27, 2023
1 parent e1a874b commit a98313c
Show file tree
Hide file tree
Showing 9 changed files with 268 additions and 155 deletions.
20 changes: 11 additions & 9 deletions .github/workflows/golangci-lint.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,23 @@
name: golangci-lint
on:
push:
pull_request:

on: [push, pull_request]

permissions:
contents: read
# Optional: allow read access to pull request. Use with `only-new-issues` option.
# pull-requests: read

env:
GO_VERSION: 1.20

jobs:
golangci:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/setup-go@v3
- uses: actions/setup-go@v4
with:
go-version: 1.18
- uses: actions/checkout@v3
go-version: ${{ env.GO_VERSION }}
- uses: actions/checkout@v4
- name: golangci-lint
uses: golangci/golangci-lint-action@v3
with:
version: v1.48
version: v1.54.2
20 changes: 13 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
name: Prepare Release

on:
workflow_dispatch:
inputs:
release_id:
description: "Release id (tag name)"
required: true

env:
GO_VERSION: 1.20

jobs:
create_release:
name: Create release draft
Expand All @@ -14,9 +19,9 @@ jobs:
steps:
- name: Create release
id: create_release
uses: actions/create-release@v1 # https://github.com/actions/create-release
uses: actions/create-release@v1 # TODO: replace deprecated action
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Automatically provided
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.event.inputs.release_id }}
body: |
Expand All @@ -29,6 +34,7 @@ jobs:
release_name: ${{ github.event.inputs.release_id }}
prerelease: true
draft: true

build:
name: Build
needs: create_release
Expand All @@ -49,10 +55,10 @@ jobs:
binary_name: stoic
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "1.18"
go-version: ${{ env.GO_VERSION }}
- name: Build binary
env:
GOOS: ${{ matrix.go_os }}
Expand All @@ -66,9 +72,9 @@ jobs:
fi
zip -j stoic-${{ matrix.name }}.zip ./out/${{ matrix.binary_name }} ./LICENSE ./INSTALL.md ./CHANGELOG.md
- name: Upload binaries
uses: actions/upload-release-asset@v1 # https://github.com/actions/upload-release-asset
uses: actions/upload-release-asset@v1 # TODO: replace deprecated action
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Automatically provided
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create_release.outputs.upload_url }}
asset_path: ./stoic-${{ matrix.name }}.zip
Expand Down
33 changes: 15 additions & 18 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,41 +1,38 @@
on: [push, pull_request]
name: Test

on: [push, pull_request]

env:
GO_VERSION: 1.20

jobs:
test:
strategy:
matrix:
go-version: [1.18.x]
os: [ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/setup-go@v3
- uses: actions/setup-go@v4
with:
go-version: ${{ matrix.go-version }}
- uses: actions/checkout@v3
go-version: ${{ env.GO_VERSION }}
- uses: actions/checkout@v4
- run: go test ./...

test-cache:
strategy:
matrix:
go-version: [1.18.x]
runs-on: ubuntu-latest
steps:
- uses: actions/setup-go@v3
- uses: actions/setup-go@v4
with:
go-version: 1.18.x
- uses: actions/checkout@v3
- uses: actions/cache@v2
go-version: ${{ env.GO_VERSION }}
- uses: actions/checkout@v4
- uses: actions/cache@v3
with:
# In order:
# * Module download cache
# * Build cache (Linux)
# * Build cache (Mac)
path: |
~/go/pkg/mod
~/.cache/go-build
~/Library/Caches/go-build
~\AppData\Local\go-build
key: ${{ runner.os }}-go-${{ matrix.go-version }}-${{ hashFiles('**/go.sum') }}
key: ${{ runner.os }}-go-${{ env.GO_VERSION }}-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-${{ matrix.go-version }}-
${{ runner.os }}-go-${{ env.GO_VERSION }}-
- run: go test ./...
186 changes: 164 additions & 22 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -1,23 +1,165 @@
linters:
disable-all: true
enable:
- deadcode # Finds unused code
- errcheck # Errcheck is a program for checking for unchecked errors in go programs. These unchecked errors can be critical bugs in some cases
- gosimple # Linter for Go source code that specializes in simplifying a code
- govet # Vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string
- ineffassign # Detects when assignments to existing variables are not used
- staticcheck # Staticcheck is a go vet on steroids, applying a ton of static analysis checks
# - structcheck # Finds unused struct fields
- typecheck # Like the front-end of a Go compiler, parses and type-checks Go code
- unused # Checks Go code for unused constants, variables, functions and types
- varcheck # Finds unused global variables and constants
## disabled by default
- errname # Checks that sentinel errors are prefixed with the Err and error types are suffixed with the Error.
- errorlint # errorlint is a linter for that can be used to find code that will cause problems with the error wrapping scheme introduced in Go 1.13.
- goconst # Finds repeated strings that could be replaced by a constant
- gocritic # Provides diagnostics that check for bugs, performance and style issues.
# - gosec # Inspects source code for security problems
- unconvert # Remove unnecessary type conversions
- unparam # Reports unused function parameters
- usestdlibvars # detect the possibility to use variables/constants from the Go standard library
# - wastedassign # wastedassign finds wasted assignment statements.
presets:
- bugs
- comment
- complexity
- error
- format
- import
- metalinter
- module
- performance
- sql
- style
- test
- unused

# Linters presets:
# bugs: asciicheck, bodyclose, durationcheck, errcheck, errorlint, exhaustive, exportloopref, gosec, govet, makezero, nilerr, noctx, rowserrcheck, scopelint, sqlclosecheck, staticcheck, typecheck
# comment: godot, godox, misspell
# complexity: cyclop, funlen, gocognit, gocyclo, nestif
# error: errcheck, errorlint, goerr113, wrapcheck
# format: gci, gofmt, gofumpt, goimports
# import: depguard, gci, goimports, gomodguard
# metalinter: gocritic, govet, revive, staticcheck
# module: depguard, gomoddirectives, gomodguard
# performance: bodyclose, maligned, noctx, prealloc
# sql: rowserrcheck, sqlclosecheck
# style: asciicheck, depguard, dogsled, dupl, exhaustivestruct, forbidigo, forcetypeassert, gochecknoglobals, gochecknoinits, goconst, gocritic, godot, godox, goerr113, goheader, golint, gomnd, gomoddirectives, gomodguard, goprintffuncname, gosimple, ifshort, importas, interfacer, lll, makezero, misspell, nakedret, nlreturn, nolintlint, paralleltest, predeclared, promlinter, revive, stylecheck, tagliatelle, testpackage, thelper, tparallel, unconvert, wastedassign, whitespace, wrapcheck, wsl
# test: exhaustivestruct, paralleltest, testpackage, tparallel
# unused: deadcode, ineffassign, structcheck, unparam, unused, varcheck

enable: []
# Enabled by default linters:
# deadcode: Finds unused code [fast: false, auto-fix: false]
# errcheck: Errcheck is a program for checking for unchecked errors in go programs. These unchecked errors can be critical bugs in some cases [fast: false, auto-fix: false]
# gosimple (megacheck): Linter for Go source code that specializes in simplifying a code [fast: false, auto-fix: false]
# govet (vet, vetshadow): Vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string [fast: false, auto-fix: false]
# ineffassign: Detects when assignments to existing variables are not used [fast: true, auto-fix: false]
# staticcheck (megacheck): Staticcheck is a go vet on steroids, applying a ton of static analysis checks [fast: false, auto-fix: false]
# structcheck: Finds unused struct fields [fast: false, auto-fix: false]
# typecheck: Like the front-end of a Go compiler, parses and type-checks Go code [fast: false, auto-fix: false]
# unused (megacheck): Checks Go code for unused constants, variables, functions and types [fast: false, auto-fix: false]
# varcheck: Finds unused global variables and constants [fast: false, auto-fix: false]

disable:
- deadcode # deprecated
- exhaustivestruct # deprecated
- golint # deprecated
- ifshort #deprecated
- interfacer # deprecated
- maligned # deprecated
- nosnakecase # depreceated
- scopelint # deprecated
- structcheck # deprecated
- varcheck # deprecated
# TODO: handle the issue with the following linters
- gochecknoglobals # flags our globals
- depguard # flags our modules
- forbidigo # flags our fmt.Println
- wrapcheck # flags our unchecked errors
- varnamelen # flags our short variable names
- testpackage # flags our test package for not using _test
- staticcheck # flags our use of depreccated functions
- paralleltest # flags our failure to use t.Parallel()
- ireturn # flags our use of returned interfaces
- gomnd # flags our use of magic numbers
- revive # flags our use of underscores in variable names
- stylecheck # flags our use of underscores in variable names
- prealloc # flags our failure to preallocated slices
- lll # flags our long lines
- gosec # flags our use of exec.Command and math/rand
# - bodyclose # toggle on when desired
# - dupl # toggle on when desired
# - errcheck # toggle on when desired
# - errorlint # toggle on when desired
# - forbidigo # not useful for cli with default config
# - forcetypeassert # toggle on when desired
# - gci # toggle on when desired
# - gochecknoglobals # toggle on when desired
# - gocritic # toggle on when desired
# - godox # toggle on when desired
# - goerr113 # toggle on when desired
# - gomnd # toggle on when desired
# - gosec # toggle on when desired
# - ifshort # toggle on when desired
# - lll # toggle on when desired
# - nlreturn # toggle on when desired
# - noctx # toggle on when desired
# - paralleltest # toggle on when desired
# - revive # toggle on when desired
# - staticcheck # toggle on when desired
# - tagliatelle # toggle on when desired
# - testpackage # toggle on when desired
# - unconvert # toggle on when desired
# - unparam # toggle on when desired
# - wrapcheck # toggle on when desired
# - wsl # toggle on when desired

# Disabled by default linters:
# asciicheck: Simple linter to check that your code does not contain non-ASCII identifiers [fast: true, auto-fix: false]
# bodyclose: checks whether HTTP response body is closed successfully [fast: false, auto-fix: false]
# cyclop: checks function and package cyclomatic complexity [fast: false, auto-fix: false]
# depguard: Go linter that checks if package imports are in a list of acceptable packages [fast: false, auto-fix: false]
# dogsled: Checks assignments with too many blank identifiers (e.g. x, _, _, _, := f()) [fast: true, auto-fix: false]
# dupl: Tool for code clone detection [fast: true, auto-fix: false]
# durationcheck: check for two durations multiplied together [fast: false, auto-fix: false]
# errorlint: errorlint is a linter for that can be used to find code that will cause problems with the error wrapping scheme introduced in Go 1.13. [fast: false, auto-fix: false]
# exhaustive: check exhaustiveness of enum switch statements [fast: false, auto-fix: false]
# exhaustivestruct: Checks if all struct's fields are initialized [fast: false, auto-fix: false]
# exportloopref: checks for pointers to enclosing loop variables [fast: false, auto-fix: false]
# forbidigo: Forbids identifiers [fast: true, auto-fix: false]
# forcetypeassert: finds forced type assertions [fast: true, auto-fix: false]
# funlen: Tool for detection of long functions [fast: true, auto-fix: false]
# gci: Gci control golang package import order and make it always deterministic. [fast: true, auto-fix: true]
# gochecknoglobals: check that no global variables exist [fast: true, auto-fix: false]
# gochecknoinits: Checks that no init functions are present in Go code [fast: true, auto-fix: false]
# gocognit: Computes and checks the cognitive complexity of functions [fast: true, auto-fix: false]
# goconst: Finds repeated strings that could be replaced by a constant [fast: true, auto-fix: false]
# gocritic: Provides many diagnostics that check for bugs, performance and style issues. [fast: false, auto-fix: false]
# gocyclo: Computes and checks the cyclomatic complexity of functions [fast: true, auto-fix: false]
# godot: Check if comments end in a period [fast: true, auto-fix: true]
# godox: Tool for detection of FIXME, TODO and other comment keywords [fast: true, auto-fix: false]
# goerr113: Golang linter to check the errors handling expressions [fast: false, auto-fix: false]
# gofmt: Gofmt checks whether code was gofmt-ed. By default this tool runs with -s option to check for code simplification [fast: true, auto-fix: true]
# gofumpt: Gofumpt checks whether code was gofumpt-ed. [fast: true, auto-fix: true]
# goheader: Checks is file header matches to pattern [fast: true, auto-fix: false]
# goimports: Goimports does everything that gofmt does. Additionally it checks unused imports [fast: true, auto-fix: true]
# golint: Golint differs from gofmt. Gofmt reformats Go source code, whereas golint prints out style mistakes [fast: false, auto-fix: false]
# gomnd: An analyzer to detect magic numbers. [fast: true, auto-fix: false]
# gomoddirectives: Manage the use of 'replace', 'retract', and 'excludes' directives in go.mod. [fast: true, auto-fix: false]
# gomodguard: Allow and block list linter for direct Go module dependencies. This is different from depguard where there are different block types for example version constraints and module recommendations. [fast: true, auto-fix: false]
# goprintffuncname: Checks that printf-like functions are named with `f` at the end [fast: true, auto-fix: false]
# gosec (gas): Inspects source code for security problems [fast: false, auto-fix: false]
# ifshort: Checks that your code uses short syntax for if-statements whenever possible [fast: true, auto-fix: false]
# importas: Enforces consistent import aliases [fast: false, auto-fix: false]
# interfacer: Linter that suggests narrower interface types [fast: false, auto-fix: false]
# lll: Reports long lines [fast: true, auto-fix: false]
# makezero: Finds slice declarations with non-zero initial length [fast: false, auto-fix: false]
# maligned: Tool to detect Go structs that would take less memory if their fields were sorted [fast: false, auto-fix: false]
# misspell: Finds commonly misspelled English words in comments [fast: true, auto-fix: true]
# nakedret: Finds naked returns in functions greater than a specified function length [fast: true, auto-fix: false]
# nestif: Reports deeply nested if statements [fast: true, auto-fix: false]
# nilerr: Finds the code that returns nil even if it checks that the error is not nil. [fast: false, auto-fix: false]
# nlreturn: nlreturn checks for a new line before return and branch statements to increase code clarity [fast: true, auto-fix: false]
# noctx: noctx finds sending http request without context.Context [fast: false, auto-fix: false]
# nolintlint: Reports ill-formed or insufficient nolint directives [fast: true, auto-fix: false]
# paralleltest: paralleltest detects missing usage of t.Parallel() method in your Go test [fast: true, auto-fix: false]
# prealloc: Finds slice declarations that could potentially be preallocated [fast: true, auto-fix: false]
# predeclared: find code that shadows one of Go's predeclared identifiers [fast: true, auto-fix: false]
# promlinter: Check Prometheus metrics naming via promlint [fast: true, auto-fix: false]
# revive: Fast, configurable, extensible, flexible, and beautiful linter for Go. Drop-in replacement of golint. [fast: false, auto-fix: false]
# rowserrcheck: checks whether Err of rows is checked successfully [fast: false, auto-fix: false]
# scopelint: Scopelint checks for unpinned variables in go programs [fast: true, auto-fix: false]
# sqlclosecheck: Checks that sql.Rows and sql.Stmt are closed. [fast: false, auto-fix: false]
# stylecheck: Stylecheck is a replacement for golint [fast: false, auto-fix: false]
# tagliatelle: Checks the struct tags. [fast: true, auto-fix: false]
# testpackage: linter that makes you use a separate _test package [fast: true, auto-fix: false]
# thelper: thelper detects golang test helpers without t.Helper() call and checks the consistency of test helpers [fast: false, auto-fix: false]
# tparallel: tparallel detects inappropriate usage of t.Parallel() method in your Go test codes [fast: false, auto-fix: false]
# unconvert: Remove unnecessary type conversions [fast: false, auto-fix: false]
# unparam: Reports unused function parameters [fast: false, auto-fix: false]
# wastedassign: wastedassign finds wasted assignment statements. [fast: false, auto-fix: false]
# whitespace: Tool for detection of leading and trailing whitespace [fast: true, auto-fix: true]
# wrapcheck: Checks that errors returned from external packages are wrapped [fast: false, auto-fix: false]
# wsl: Whitespace Linter - Forces you to use empty lines! [fast: true, auto-fix: false]
1 change: 1 addition & 0 deletions cmd/edit.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ func (e *editCommand) Date() time.Time {

func (e *editCommand) Run() {
entry := stoic.NewEntry(e.ctx, e.date)

err := e.ctx.OpenInEditor(entry)
if err != nil {
fmt.Println("Error running program:", err)
Expand Down
7 changes: 7 additions & 0 deletions cmd/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ func NewListCommand(ctx stoic.Context) ListCommand {

func (lc listCommand) Run() {
var items []list.Item

files := lc.ctx.Files()

for _, file := range files {
Expand Down Expand Up @@ -85,11 +86,14 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
selectedItem, _ := m.list.SelectedItem().(item)

_ = OpenFileInEditor(selectedItem.title, m.context)

os.Exit(0)

case msg.String() == " ":
selectedItem, _ := m.list.SelectedItem().(item)

_ = OpenFileInEditor(selectedItem.title, m.context)

os.Exit(0)
}
case tea.WindowSizeMsg:
Expand All @@ -99,6 +103,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {

var cmd tea.Cmd
m.list, cmd = m.list.Update(msg)

return m, cmd
}

Expand All @@ -111,6 +116,7 @@ func OpenFileInEditor(filepath string, ctx stoic.Context) error {
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

return cmd.Run()
}

Expand Down Expand Up @@ -144,6 +150,7 @@ func ConvertBytesToSizeString(size int64) string {
} else if curr < thousand {
return fmt.Sprintf("%d%s", int(curr), s)
}

curr /= thousand
}

Expand Down
Loading

0 comments on commit a98313c

Please sign in to comment.