Skip to content
/ tenv Public

tenv detects environment variable not using t.Setenv

License

Notifications You must be signed in to change notification settings

sivchari/tenv

Repository files navigation

tenv

tenv Gopher

test_and_lint

tenv is analyzer that detects using os.Setenv instead of t.Setenv since Go1.17

Instruction

go install github.com/sivchari/tenv/cmd/tenv@latest

Usage

package main

import (
	"fmt"
	"os"
	"testing"
)

func TestMain(t *testing.T) {
	fmt.Println(os.Getenv("GO"))
	os.Setenv("GO", "HACKING GOPHER")
}

func TestMain2(t *testing.T) {
	fmt.Println(os.Getenv("GO"))
}

func helper() {
	os.Setenv("GO", "HACKING GOPHER")
}
go vet -vettool=$(which tenv) ./...

# a
./main_test.go:11:2: os.Setenv() can be replaced by `t.Setenv()` in TestMain

option

The option all will run against whole test files (_test.go) regardless of method/function signatures.

By default, only methods that take *testing.T, *testing.B, and testing.TB as arguments are checked.

package main

import (
	"fmt"
	"os"
	"testing"
)

func TestMain(t *testing.T) {
	fmt.Println(os.Getenv("GO"))
	os.Setenv("GO", "HACKING GOPHER")
}

func TestMain2(t *testing.T) {
	fmt.Println(os.Getenv("GO"))
}

func helper() {
	os.Setenv("GO", "HACKING GOPHER")
}
go vet -vettool=$(which tenv) -tenv.all ./...

# a
./main_test.go:11:2: os.Setenv() can be replaced by `t.Setenv()` in TestMain
./main_test.go:19:2: os.Setenv() can be replaced by `testing.Setenv()` in helper

CI

CircleCI

- run:
    name: install tenv
    command: go install github.com/sivchari/tenv@latest

- run:
    name: run tenv
    command: go vet -vettool=`which tenv` ./...

GitHub Actions

- name: install tenv
  run: go install github.com/sivchari/tenv@latest

- name: run tenv
  run: go vet -vettool=`which tenv` ./...