Skip to content

Commit

Permalink
refactor: prepare for 10.7.0 release (#1097)
Browse files Browse the repository at this point in the history
* refactor: prepare for 10.7.0 release

* fix(compute/metadata): only display SUCCESS message when updating config

* fix: allow disabling of script_info
  • Loading branch information
Integralist authored Nov 30, 2023
1 parent 4fe9186 commit 4f952c8
Show file tree
Hide file tree
Showing 11 changed files with 123 additions and 103 deletions.
3 changes: 2 additions & 1 deletion .fastly/config.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
config_version = 5
config_version = 6

[fastly]
account_endpoint = "https://accounts.fastly.com"
Expand All @@ -8,6 +8,7 @@ api_endpoint = "https://api.fastly.com"
build_info = "enable"
machine_info = "disable" # users have to opt-in for this (everything else they'll have to opt-out)
package_info = "enable"
script_info = "enable"

[language]
[language.go]
Expand Down
20 changes: 20 additions & 0 deletions pkg/app/metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -1220,6 +1220,26 @@
}
}
},
"metadata": {
"examples": [
{
"cmd": "fastly compute metadata --enable",
"title": "Enable all metadata collection information"
},
{
"cmd": "fastly compute metadata --disable",
"title": "Disable all metadata collection information"
},
{
"cmd": "fastly compute metadata --enable-build --enable-machine --enable-package",
"title": "Enable specific metadata collection information"
},
{
"cmd": "fastly compute metadata --disable-build --disable-machine --disable-package",
"title": "Disable specific metadata collection information"
}
]
},
"pops": {
"apis": [
"https://developer.fastly.com/reference/api/utils/pops/#list-pops"
Expand Down
6 changes: 2 additions & 4 deletions pkg/app/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,11 +186,9 @@ func Exec(data *global.Data) error {
return nil
}

// FIXME: Tweak messaging before for 10.7.0
// To learn more about what data is being collected, why, and how to disable it: https://developer.fastly.com/reference/cli/
metadataDisable, _ := strconv.ParseBool(data.Env.WasmMetadataDisable)
if slices.Contains(data.Args, "--metadata-enable") && !metadataDisable && !data.Config.CLI.MetadataNoticeDisplayed && commandCollectsData(commandName) {
text.Important(data.Output, "The Fastly CLI is configured to collect data related to Wasm builds (e.g. compilation times, resource usage, and other non-identifying data). To learn more about our data & privacy policies visit https://www.fastly.com/trust. Join the conversation https://bit.ly/wasm-metadata")
if !slices.Contains(data.Args, "--metadata-disable") && !metadataDisable && !data.Config.CLI.MetadataNoticeDisplayed && commandCollectsData(commandName) {
text.Important(data.Output, "The Fastly CLI is configured to collect data related to Wasm builds (e.g. compilation times, resource usage, and other non-identifying data). To learn more about what data is being collected, why, and how to disable it: https://developer.fastly.com/reference/cli/")
text.Break(data.Output)
data.Config.CLI.MetadataNoticeDisplayed = true
err := data.Config.Write(data.ConfigPath)
Expand Down
73 changes: 23 additions & 50 deletions pkg/commands/compute/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ type BuildCommand struct {
// e.g. serve, publish, hashsum, hash-files
// This is so they can set values appropriately before calling Build.Exec().
Flags Flags
MetadataEnable bool
MetadataDisable bool
MetadataFilterEnvVars string
MetadataShow bool
}
Expand All @@ -79,14 +79,12 @@ func NewBuildCommand(parent cmd.Registerer, g *global.Data) *BuildCommand {
c.CmdClause.Flag("env", "The manifest environment config to use (e.g. 'stage' will attempt to read 'fastly.stage.toml')").StringVar(&c.Flags.Env)
c.CmdClause.Flag("include-source", "Include source code in built package").BoolVar(&c.Flags.IncludeSrc)
c.CmdClause.Flag("language", "Language type").StringVar(&c.Flags.Lang)
c.CmdClause.Flag("metadata-disable", "Disable Wasm binary metadata annotations").BoolVar(&c.MetadataDisable)
c.CmdClause.Flag("metadata-filter-envvars", "Redact specified environment variables from [scripts.env_vars] using comma-separated list").StringVar(&c.MetadataFilterEnvVars)
c.CmdClause.Flag("metadata-show", "Inspect the Wasm binary metadata").BoolVar(&c.MetadataShow)
c.CmdClause.Flag("package-name", "Package name").StringVar(&c.Flags.PackageName)
c.CmdClause.Flag("timeout", "Timeout, in seconds, for the build compilation step").IntVar(&c.Flags.Timeout)

// Hidden
c.CmdClause.Flag("metadata-enable", "Feature flag to trial the Wasm binary metadata annotations").Hidden().BoolVar(&c.MetadataEnable)
c.CmdClause.Flag("metadata-filter-envvars", "Redact specified environment variables from [scripts.env_vars] using comma-separated list").Hidden().StringVar(&c.MetadataFilterEnvVars)

return &c
}

Expand Down Expand Up @@ -209,36 +207,8 @@ func (c *BuildCommand) Exec(in io.Reader, out io.Writer) (err error) {
"metadata", "add", "bin/main.wasm", metadataProcessedBy,
}

// FIXME: For feature launch replace enable flag with disable equivalent.
// e.g. define --metadata-disable and check for that first with env var.
// Also make sure hidden flags (across all composite commands) aren't hidden.
// Also update the run.go app to remove the message which displays a warning.
// Also one final release un-hide the metadata command and add metadata.json examples
// e.g.
/*
"metadata": {
"examples": [
{
"cmd": "fastly compute metadata --enable",
"title": "Enable all metadata collection information"
},
{
"cmd": "fastly compute metadata --disable",
"title": "Disable all metadata collection information"
},
{
"cmd": "fastly compute metadata --enable-build --enable-machine --enable-package",
"title": "Enable specific metadata collection information"
},
{
"cmd": "fastly compute metadata --disable-build --disable-machine --disable-package",
"title": "Disable specific metadata collection information"
}
]
},
*/
metadataDisable, _ := strconv.ParseBool(c.Globals.Env.WasmMetadataDisable)
if c.MetadataEnable && !metadataDisable {
if !c.MetadataDisable && !metadataDisable {
if err := c.AnnotateWasmBinaryLong(wasmtools, metadataArgs, language); err != nil {
return err
}
Expand Down Expand Up @@ -336,11 +306,6 @@ func (c *BuildCommand) Exec(in io.Reader, out io.Writer) (err error) {

out = originalOut
text.Success(out, "\nBuilt package (%s)", dest)

// FIXME: Remove this notice in the CLI version 10.7.0
if !c.Globals.Flags.Quiet {
text.Important(out, "\nIn the next release (10.7.0), the Fastly CLI will collect data related to Wasm builds. If you have questions, comments or feedback, join the discussion at https://bit.ly/wasm-metadata")
}
return nil
}

Expand All @@ -357,22 +322,21 @@ func (c *BuildCommand) AnnotateWasmBinaryLong(wasmtools string, args []string, l
// Allow customer to specify their own env variables to be filtered.
ExtendStaticSecretEnvVars(c.MetadataFilterEnvVars)

dc := DataCollection{
ScriptInfo: DataCollectionScriptInfo{
DefaultBuildUsed: language.DefaultBuildScript(),
BuildScript: FilterSecretsFromString(c.Globals.Manifest.File.Scripts.Build),
EnvVars: FilterSecretsFromSlice(c.Globals.Manifest.File.Scripts.EnvVars),
PostInitScript: FilterSecretsFromString(c.Globals.Manifest.File.Scripts.PostInit),
PostBuildScript: FilterSecretsFromString(c.Globals.Manifest.File.Scripts.PostBuild),
},
dc := DataCollection{}

metadata := c.Globals.Config.WasmMetadata

// Only record basic data if user has disabled all other metadata collection.
if metadata.BuildInfo == "disable" && metadata.MachineInfo == "disable" && metadata.PackageInfo == "disable" && metadata.ScriptInfo == "disable" {
return c.AnnotateWasmBinaryShort(wasmtools, args)
}

if c.Globals.Config.WasmMetadata.BuildInfo == "enable" {
if metadata.BuildInfo == "enable" {
dc.BuildInfo = DataCollectionBuildInfo{
MemoryHeapAlloc: ms.HeapAlloc,
}
}
if c.Globals.Config.WasmMetadata.MachineInfo == "enable" {
if metadata.MachineInfo == "enable" {
dc.MachineInfo = DataCollectionMachineInfo{
Arch: runtime.GOARCH,
CPUs: runtime.NumCPU(),
Expand All @@ -381,12 +345,21 @@ func (c *BuildCommand) AnnotateWasmBinaryLong(wasmtools string, args []string, l
OS: runtime.GOOS,
}
}
if c.Globals.Config.WasmMetadata.PackageInfo == "enable" {
if metadata.PackageInfo == "enable" {
dc.PackageInfo = DataCollectionPackageInfo{
ClonedFrom: c.Globals.Manifest.File.ClonedFrom,
Packages: language.Dependencies(),
}
}
if metadata.ScriptInfo == "enable" {
dc.ScriptInfo = DataCollectionScriptInfo{
DefaultBuildUsed: language.DefaultBuildScript(),
BuildScript: FilterSecretsFromString(c.Globals.Manifest.File.Scripts.Build),
EnvVars: FilterSecretsFromSlice(c.Globals.Manifest.File.Scripts.EnvVars),
PostInitScript: FilterSecretsFromString(c.Globals.Manifest.File.Scripts.PostInit),
PostBuildScript: FilterSecretsFromString(c.Globals.Manifest.File.Scripts.PostBuild),
}
}

data, err := json.Marshal(dc)
if err != nil {
Expand Down
12 changes: 5 additions & 7 deletions pkg/commands/compute/hashfiles.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ type HashFilesCommand struct {
env cmd.OptionalString
includeSrc cmd.OptionalBool
lang cmd.OptionalString
metadataEnable cmd.OptionalBool
metadataDisable cmd.OptionalBool
metadataFilterEnvVars cmd.OptionalString
metadataShow cmd.OptionalBool
packageName cmd.OptionalString
Expand All @@ -58,16 +58,14 @@ func NewHashFilesCommand(parent cmd.Registerer, g *global.Data, build *BuildComm
c.CmdClause.Flag("env", "The manifest environment config to use (e.g. 'stage' will attempt to read 'fastly.stage.toml')").Action(c.env.Set).StringVar(&c.env.Value)
c.CmdClause.Flag("include-source", "Include source code in built package").Action(c.includeSrc.Set).BoolVar(&c.includeSrc.Value)
c.CmdClause.Flag("language", "Language type").Action(c.lang.Set).StringVar(&c.lang.Value)
c.CmdClause.Flag("metadata-disable", "Disable Wasm binary metadata annotations").Action(c.metadataDisable.Set).BoolVar(&c.metadataDisable.Value)
c.CmdClause.Flag("metadata-filter-envvars", "Redact specified environment variables from [scripts.env_vars] using comma-separated list").Action(c.metadataFilterEnvVars.Set).StringVar(&c.metadataFilterEnvVars.Value)
c.CmdClause.Flag("metadata-show", "Inspect the Wasm binary metadata").Action(c.metadataShow.Set).BoolVar(&c.metadataShow.Value)
c.CmdClause.Flag("package", "Path to a package tar.gz").Short('p').StringVar(&c.Package)
c.CmdClause.Flag("package-name", "Package name").Action(c.packageName.Set).StringVar(&c.packageName.Value)
c.CmdClause.Flag("skip-build", "Skip the build step").BoolVar(&c.SkipBuild)
c.CmdClause.Flag("timeout", "Timeout, in seconds, for the build compilation step").Action(c.timeout.Set).IntVar(&c.timeout.Value)

// Hidden
c.CmdClause.Flag("metadata-enable", "Feature flag to trial the Wasm binary metadata annotations").Hidden().Action(c.metadataEnable.Set).BoolVar(&c.metadataEnable.Value)
c.CmdClause.Flag("metadata-filter-envvars", "Redact specified environment variables from [scripts.env_vars] using comma-separated list").Hidden().Action(c.metadataFilterEnvVars.Set).StringVar(&c.metadataFilterEnvVars.Value)

return &c
}

Expand Down Expand Up @@ -165,8 +163,8 @@ func (c *HashFilesCommand) Build(in io.Reader, out io.Writer) error {
if c.timeout.WasSet {
c.buildCmd.Flags.Timeout = c.timeout.Value
}
if c.metadataEnable.WasSet {
c.buildCmd.MetadataEnable = c.metadataEnable.Value
if c.metadataDisable.WasSet {
c.buildCmd.MetadataDisable = c.metadataDisable.Value
}
if c.metadataFilterEnvVars.WasSet {
c.buildCmd.MetadataFilterEnvVars = c.metadataFilterEnvVars.Value
Expand Down
12 changes: 5 additions & 7 deletions pkg/commands/compute/hashsum.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ type HashsumCommand struct {
env cmd.OptionalString
includeSrc cmd.OptionalBool
lang cmd.OptionalString
metadataEnable cmd.OptionalBool
metadataDisable cmd.OptionalBool
metadataFilterEnvVars cmd.OptionalString
metadataShow cmd.OptionalBool
packageName cmd.OptionalString
Expand All @@ -48,16 +48,14 @@ func NewHashsumCommand(parent cmd.Registerer, g *global.Data, build *BuildComman
c.CmdClause.Flag("env", "The manifest environment config to use (e.g. 'stage' will attempt to read 'fastly.stage.toml')").Action(c.env.Set).StringVar(&c.env.Value)
c.CmdClause.Flag("include-source", "Include source code in built package").Action(c.includeSrc.Set).BoolVar(&c.includeSrc.Value)
c.CmdClause.Flag("language", "Language type").Action(c.lang.Set).StringVar(&c.lang.Value)
c.CmdClause.Flag("metadata-disable", "Disable Wasm binary metadata annotations").Action(c.metadataDisable.Set).BoolVar(&c.metadataDisable.Value)
c.CmdClause.Flag("metadata-filter-envvars", "Redact specified environment variables from [scripts.env_vars] using comma-separated list").Action(c.metadataFilterEnvVars.Set).StringVar(&c.metadataFilterEnvVars.Value)
c.CmdClause.Flag("metadata-show", "Inspect the Wasm binary metadata").Action(c.metadataShow.Set).BoolVar(&c.metadataShow.Value)
c.CmdClause.Flag("package", "Path to a package tar.gz").Short('p').StringVar(&c.PackagePath)
c.CmdClause.Flag("package-name", "Package name").Action(c.packageName.Set).StringVar(&c.packageName.Value)
c.CmdClause.Flag("skip-build", "Skip the build step").BoolVar(&c.SkipBuild)
c.CmdClause.Flag("timeout", "Timeout, in seconds, for the build compilation step").Action(c.timeout.Set).IntVar(&c.timeout.Value)

// Hidden
c.CmdClause.Flag("metadata-enable", "Feature flag to trial the Wasm binary metadata annotations").Hidden().Action(c.metadataEnable.Set).BoolVar(&c.metadataEnable.Value)
c.CmdClause.Flag("metadata-filter-envvars", "Redact specified environment variables from [scripts.env_vars] using comma-separated list").Hidden().Action(c.metadataFilterEnvVars.Set).StringVar(&c.metadataFilterEnvVars.Value)

return &c
}

Expand Down Expand Up @@ -169,8 +167,8 @@ func (c *HashsumCommand) Build(in io.Reader, out io.Writer) error {
if c.timeout.WasSet {
c.buildCmd.Flags.Timeout = c.timeout.Value
}
if c.metadataEnable.WasSet {
c.buildCmd.MetadataEnable = c.metadataEnable.Value
if c.metadataDisable.WasSet {
c.buildCmd.MetadataDisable = c.metadataDisable.Value
}
if c.metadataFilterEnvVars.WasSet {
c.buildCmd.MetadataFilterEnvVars = c.metadataFilterEnvVars.Value
Expand Down
66 changes: 50 additions & 16 deletions pkg/commands/compute/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,25 +19,29 @@ type MetadataCommand struct {
disableBuild bool
disableMachine bool
disablePackage bool
disableScript bool
enable bool
enableBuild bool
enableMachine bool
enablePackage bool
enableScript bool
}

// NewMetadataCommand returns a new command registered in the parent.
func NewMetadataCommand(parent cmd.Registerer, g *global.Data) *MetadataCommand {
var c MetadataCommand
c.Globals = g
c.CmdClause = parent.Command("metadata", "Control what metadata is collected").Hidden()
c.CmdClause = parent.Command("metadata", "Control what metadata is collected")
c.CmdClause.Flag("disable", "Disable all metadata").BoolVar(&c.disable)
c.CmdClause.Flag("disable-build", "Disable metadata for information regarding the time taken for builds and compilation processes").BoolVar(&c.disableBuild)
c.CmdClause.Flag("disable-machine", "Disable metadata for general, non-identifying system specifications (CPU, RAM, operating system)").BoolVar(&c.disableMachine)
c.CmdClause.Flag("disable-package", "Disable metadata for packages and libraries utilized in your source code").BoolVar(&c.disablePackage)
c.CmdClause.Flag("disable-script", "Disable metadata for script info from the fastly.toml manifest (i.e. [scripts] section).").BoolVar(&c.disableScript)
c.CmdClause.Flag("enable", "Enable all metadata").BoolVar(&c.enable)
c.CmdClause.Flag("enable-build", "Enable metadata for information regarding the time taken for builds and compilation processes").BoolVar(&c.enableBuild)
c.CmdClause.Flag("enable-machine", "Enable metadata for general, non-identifying system specifications (CPU, RAM, operating system)").BoolVar(&c.enableMachine)
c.CmdClause.Flag("enable-package", "Enable metadata for packages and libraries utilized in your source code").BoolVar(&c.enablePackage)
c.CmdClause.Flag("enable-script", "Enable metadata for script info from the fastly.toml manifest (i.e. [scripts] section).").BoolVar(&c.enableScript)
return &c
}

Expand All @@ -46,47 +50,76 @@ func (c *MetadataCommand) Exec(_ io.Reader, out io.Writer) error {
if c.disable && c.enable {
return fsterr.ErrInvalidEnableDisableFlagCombo
}
if c.disable {
c.Globals.Config.WasmMetadata = toggleAll("disable")
}

var modified bool

// Global enable/disable
if c.enable {
c.Globals.Config.WasmMetadata = toggleAll("enable")
modified = true
}
if c.disable && (c.enableBuild || c.enableMachine || c.enablePackage) {
text.Info(out, "We will disable all metadata except for the specified `--enable-*` flags")
text.Break(out)
}
if c.enable && (c.disableBuild || c.disableMachine || c.disablePackage) {
text.Info(out, "We will enable all metadata except for the specified `--disable-*` flags")
text.Break(out)
if c.disable {
c.Globals.Config.WasmMetadata = toggleAll("disable")
modified = true
}

// Specific enablement
if c.enableBuild {
c.Globals.Config.WasmMetadata.BuildInfo = "enable"
modified = true
}
if c.enableMachine {
c.Globals.Config.WasmMetadata.MachineInfo = "enable"
modified = true
}
if c.enablePackage {
c.Globals.Config.WasmMetadata.PackageInfo = "enable"
modified = true
}
if c.enableScript {
c.Globals.Config.WasmMetadata.ScriptInfo = "enable"
modified = true
}

// Specific disablement
if c.disableBuild {
c.Globals.Config.WasmMetadata.BuildInfo = "disable"
modified = true
}
if c.disableMachine {
c.Globals.Config.WasmMetadata.MachineInfo = "disable"
modified = true
}
if c.disablePackage {
c.Globals.Config.WasmMetadata.PackageInfo = "disable"
modified = true
}
err := c.Globals.Config.Write(c.Globals.ConfigPath)
if err != nil {
return fmt.Errorf("failed to persist metadata choices to disk: %w", err)
if c.disableScript {
c.Globals.Config.WasmMetadata.ScriptInfo = "disable"
modified = true
}
text.Success(out, "configuration updated (see: `fastly config`)")
text.Break(out)

if modified {
if c.disable && (c.enableBuild || c.enableMachine || c.enablePackage || c.enableScript) {
text.Info(out, "We will disable all metadata except for the specified `--enable-*` flags")
text.Break(out)
}
if c.enable && (c.disableBuild || c.disableMachine || c.disablePackage || c.disableScript) {
text.Info(out, "We will enable all metadata except for the specified `--disable-*` flags")
text.Break(out)
}
err := c.Globals.Config.Write(c.Globals.ConfigPath)
if err != nil {
return fmt.Errorf("failed to persist metadata choices to disk: %w", err)
}
text.Success(out, "configuration updated")
text.Break(out)
}

text.Output(out, "Build Information: %s", c.Globals.Config.WasmMetadata.BuildInfo)
text.Output(out, "Machine Information: %s", c.Globals.Config.WasmMetadata.MachineInfo)
text.Output(out, "Package Information: %s", c.Globals.Config.WasmMetadata.PackageInfo)
text.Output(out, "Script Information: %s", c.Globals.Config.WasmMetadata.ScriptInfo)
return nil
}

Expand All @@ -95,5 +128,6 @@ func toggleAll(state string) config.WasmMetadata {
t.BuildInfo = state
t.MachineInfo = state
t.PackageInfo = state
t.ScriptInfo = state
return t
}
Loading

0 comments on commit 4f952c8

Please sign in to comment.