github.com/terraform-linters/tflint@v0.51.2-0.20240520175844-3750771571b6/plugin/stub-generator/main.go (about)

     1  package main
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"os"
     7  	"os/exec"
     8  	"path/filepath"
     9  	"runtime"
    10  
    11  	"github.com/mitchellh/go-homedir"
    12  )
    13  
    14  func main() {
    15  	_, file, _, _ := runtime.Caller(0)
    16  	dir := filepath.Dir(file)
    17  
    18  	if err := os.Chdir(dir); err != nil {
    19  		panic(err)
    20  	}
    21  
    22  	// Package "plugin" testing
    23  	execCommand("go", "build", "-o", "../test-fixtures/plugins/tflint-ruleset-foo"+fileExt(), "./sources/foo/main.go")
    24  	execCommand("cp", "../test-fixtures/plugins/tflint-ruleset-foo"+fileExt(), "../test-fixtures/locals/.tflint.d/plugins/tflint-ruleset-foo"+fileExt())
    25  	execCommand("go", "build", "-o", "../test-fixtures/plugins/github.com/terraform-linters/tflint-ruleset-bar/0.1.0/tflint-ruleset-bar"+fileExt(), "./sources/bar/main.go")
    26  	execCommand("cp", "../test-fixtures/plugins/github.com/terraform-linters/tflint-ruleset-bar/0.1.0/tflint-ruleset-bar"+fileExt(), "../test-fixtures/locals/.tflint.d/plugins/github.com/terraform-linters/tflint-ruleset-bar/0.1.0/tflint-ruleset-bar"+fileExt())
    27  	// Without .exe in Windows
    28  	execCommand("cp", "../test-fixtures/plugins/tflint-ruleset-foo"+fileExt(), "../test-fixtures/plugins/tflint-ruleset-baz")
    29  
    30  	pluginDir, err := homedir.Expand("~/.tflint.d/plugins")
    31  	if err != nil {
    32  		panic(err)
    33  	}
    34  
    35  	// E2E testing
    36  	execCommand("mkdir", "-p", pluginDir)
    37  	execCommand("go", "build", "-o", pluginDir+"/tflint-ruleset-testing"+fileExt(), "./sources/testing/main.go")
    38  	execCommand("go", "build", "-o", pluginDir+"/tflint-ruleset-customrulesettesting"+fileExt(), "./sources/customrulesettesting/main.go")
    39  	execCommand("go", "build", "-o", pluginDir+"/tflint-ruleset-incompatiblehost"+fileExt(), "./sources/incompatiblehost/main.go")
    40  	execCommand("go", "build", "-o", "../../integrationtest/inspection/plugin/.tflint.d/plugins/tflint-ruleset-example"+fileExt(), "./sources/example/main.go")
    41  }
    42  
    43  func fileExt() string {
    44  	if runtime.GOOS == "windows" {
    45  		return ".exe"
    46  	}
    47  	return ""
    48  }
    49  
    50  func execCommand(command string, args ...string) {
    51  	cmd := exec.Command(command, args...)
    52  	var stderr bytes.Buffer
    53  	cmd.Stderr = &stderr
    54  
    55  	if err := cmd.Run(); err != nil {
    56  		panic(fmt.Sprintf("Failed to exec command: %s", stderr.String()))
    57  	}
    58  }