plugin struct

Fields:

  • dir (string)

Methods:

Name


Returns:
  • string

Show/Hide Method Body
{ return "env" }

Priority


Returns:
  • int

Show/Hide Method Body
{ return 0 }

PreBuild

PreBuild collects environment variables prefixed with RFW_ and generates a

temporary rfwenv package exposing them through Get.


Parameters:
  • raw json.RawMessage

Returns:
  • error

Show/Hide Method Body
{
	vars := map[string]string{}
	for _, e := range os.Environ() {
		if !strings.HasPrefix(e, "RFW_") {
			continue
		}
		parts := strings.SplitN(e, "=", 2)
		if len(parts) != 2 {
			continue
		}
		key := strings.TrimPrefix(parts[0], "RFW_")
		vars[key] = parts[1]
	}

	p.dir = "rfwenv"
	if err := os.MkdirAll(p.dir, 0o755); err != nil {
		return err
	}

	keys := make([]string, 0, len(vars))
	for k := range vars {
		keys = append(keys, k)
	}
	sort.Strings(keys)

	var b strings.Builder
	b.WriteString("// Code generated by env plugin. DO NOT EDIT.\n")
	b.WriteString("package rfwenv\n\n")
	b.WriteString("var vars = map[string]string{\n")
	for _, k := range keys {
		b.WriteString("\t\"" + k + "\": \"" + vars[k] + "\",\n")
	}
	b.WriteString("}\n\n")
	b.WriteString("func Get(key string) string {\n\treturn vars[key]\n}\n")

	return os.WriteFile(filepath.Join(p.dir, "rfw_env.go"), []byte(b.String()), 0o644)
}

Build


Parameters:
  • raw json.RawMessage

Returns:
  • error

Show/Hide Method Body
{ return nil }

PostBuild

PostBuild removes the temporary rfwenv package.


Parameters:
  • raw json.RawMessage

Returns:
  • error

Show/Hide Method Body
{
	if p.dir != "" {
		_ = os.RemoveAll(p.dir)
		p.dir = ""
	}
	return nil
}

ShouldRebuild


Parameters:
  • path string

Returns:
  • bool

Show/Hide Method Body
{ return false }

init function

Show/Hide Function Body
{ plugins.Register(&plugin{}) }

TestPreAndPostBuild function

TestPreAndPostBuild verifies that the env plugin generates a temporary

package exposing RFW_ environment variables and cleans it up afterwards.

Parameters:

  • t *testing.T
Show/Hide Function Body
{
	p := &plugin{}

	// Prepare environment variables.
	t.Setenv("RFW_FOO", "bar")
	t.Setenv("RFW_BAR", "baz")

	dir := t.TempDir()
	origWD, _ := os.Getwd()
	if err := os.Chdir(dir); err != nil {
		t.Fatalf("chdir: %v", err)
	}
	t.Cleanup(func() { _ = os.Chdir(origWD) })

	if err := p.PreBuild(nil); err != nil {
		t.Fatalf("PreBuild: %v", err)
	}

	data, err := os.ReadFile(filepath.Join("rfwenv", "rfw_env.go"))
	if err != nil {
		t.Fatalf("read generated file: %v", err)
	}
	content := string(data)
	if !strings.Contains(content, `"BAR": "baz"`) || !strings.Contains(content, `"FOO": "bar"`) {
		t.Fatalf("generated file missing variables: %s", content)
	}

	if err := p.PostBuild(nil); err != nil {
		t.Fatalf("PostBuild: %v", err)
	}
	if _, err := os.Stat("rfwenv"); !os.IsNotExist(err) {
		t.Fatalf("rfwenv directory should be removed")
	}

	if p.ShouldRebuild("anything") {
		t.Fatalf("env plugin should never trigger rebuilds")
	}
}

encoding/json import

Import example:

import "encoding/json"

os import

Import example:

import "os"

path/filepath import

Import example:

import "path/filepath"

sort import

Import example:

import "sort"

strings import

Import example:

import "strings"

github.com/rfwlab/rfw/cmd/rfw/plugins import

Import example:

import "github.com/rfwlab/rfw/cmd/rfw/plugins"

os import

Import example:

import "os"

path/filepath import

Import example:

import "path/filepath"

strings import

Import example:

import "strings"

testing import

Import example:

import "testing"