env
API
env
packageAPI reference for the env
package.
Imports
(8)
S
struct
plugin
cmd/rfw/plugins/env/env.go:17-19
type plugin struct
Methods
PreBuild
Method
PreBuild collects environment variables prefixed with RFW_ and generates a temporary rfwenv package exposing them through Get.
Parameters
Returns
error
func (*plugin) PreBuild(_ json.RawMessage) error
{
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, 0o750); 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" + strconv.Quote(k) + ": " + strconv.Quote(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()), 0o600)
}
PostBuild
Method
PostBuild removes the temporary rfwenv package.
Parameters
Returns
error
func (*plugin) PostBuild(json.RawMessage) error
{
if p.dir != "" {
if err := os.RemoveAll(p.dir); err != nil {
return err
}
p.dir = ""
}
return nil
}
ShouldRebuild
Method
Parameters
string
Returns
bool
func (*plugin) ShouldRebuild(string) bool
{ return false }
Fields
| Name | Type | Description |
|---|---|---|
| dir | string |
F
function
init
cmd/rfw/plugins/env/env.go:21-21
func init()
{ plugins.Register(&plugin{}) }
F
function
TestPreAndPostBuild
TestPreAndPostBuild verifies that the env plugin generates a temporary
package exposing RFW_ environment variables and cleans it up afterwards.
Parameters
t
cmd/rfw/plugins/env/env_test.go:14-51
func TestPreAndPostBuild(t *testing.T)
{
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")
}
}