id = "fly" name = "flyctl" homepage = "https://fly.io/docs/flyctl/" description = "Command line tools for fly.io services." icon = "SimpleIcons:flydotio" executables = ["fly", "flyctl"] [dotfiles] # helpers/config.go GetConfigDirectory(): "$FLY_CONFIG_DIR or defaulting to the # user's home directory at ~/.fly", on every platform. flyctl/flyctl.go # ConfigFilePath() joins internal/config/config.go's FileName = "config.yml" # onto it. paths = ["~/.fly/config.yml"] # agent/start.go setupLogDirectory() is ConfigDir()/agent-logs, and # internal/build/imgsrc/nixpacks_builder.go downloads the nixpacks binary into # ConfigDir()/bin. Both are local state beside the config file. exclude = ["~/.fly/agent-logs/", "~/.fly/bin/"] # Not a whole-file secret: internal/config/config.go also keeps send_metrics, # synthetics_agent and auto_update here, which are settings. secret = [] # Read and rewritten per command; the background agent has its own state files. side_effect = false # internal/config/config.go names the keys: AccessTokenFileKey = "access_token" # and MetricsTokenFileKey = "metrics_token" are API credentials, and # WireGuardStateFileKey = "wire_guard_state" is a wg.States map whose every # entry (wg/state.go WireGuardState) carries the private key of a peer flyctl # created for this account. The whole subtree is taken rather than the private # key field alone: the struct has no yaml tags, so the on-disk spelling of the # field is the marshaller's business and a narrower rule would be a guess. [[dotfiles.secret_paths]] file = "~/.fly/config.yml" match = { key_path = ["access_token", "metrics_token", "wire_guard_state"] } [commands] format = 1 label = "flyctl" description = "Deploy and inspect Fly.io apps: deploy, logs and status. Machines, orgs, secrets and the rest of flyctl are left out." quality = "ai-draft" base = "fig:fly" parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false } [[commands.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/fly.ts" license = "MIT" [[commands.field]] id = "json" label = "JSON output" type = "boolean" option = ["--json", "-j"] sources = ["fig"] [[commands.group]] id = "basic" label = "Basic" fields = ["json"] [[commands.subcommand]] path = ["deploy"] label = "Deploy an app" [[commands.subcommand.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/fly.ts" license = "MIT" [[commands.subcommand.field]] id = "app" label = "App name" type = "string" option = ["--app", "-a"] sources = ["fig"] [[commands.subcommand.field]] id = "config" label = "Config file" type = "path" option = ["--config", "-c"] path = { kind = "file", role = "input" } sources = ["fig"] [[commands.subcommand.field]] id = "region" label = "Region" type = "string" option = ["--region", "-r"] sources = ["fig"] [[commands.subcommand.field]] id = "image" label = "Image" type = "string" option = ["--image", "-i"] sources = ["fig"] [[commands.subcommand.field]] id = "dockerfile" label = "Dockerfile" type = "path" option = ["--dockerfile"] path = { kind = "file", role = "input" } sources = ["fig"] [[commands.subcommand.field]] id = "strategy" label = "Strategy" type = "string" option = ["--strategy"] suggestions = [{ value = "canary", label = "canary" }, { value = "rolling", label = "rolling" }, { value = "bluegreen", label = "bluegreen" }, { value = "immediate", label = "immediate" }] sources = ["fig"] [[commands.subcommand.field]] id = "remote_only" label = "Build on remote builder" type = "boolean" option = ["--remote-only"] sources = ["fig"] [[commands.subcommand.field]] id = "local_only" label = "Build locally" type = "boolean" option = ["--local-only"] sources = ["fig"] [[commands.subcommand.field]] id = "build_only" label = "Build without deploying" type = "boolean" option = ["--build-only"] sources = ["fig"] [[commands.subcommand.field]] id = "no_cache" label = "No build cache" type = "boolean" option = ["--no-cache"] sources = ["fig"] [[commands.subcommand.field]] id = "detach" label = "Do not watch progress" type = "boolean" option = ["--detach"] sources = ["fig"] [[commands.subcommand.field]] id = "env" label = "Environment (NAME=VALUE)" type = "string" option = ["--env", "-e"] multiple = true sources = ["fig"] [[commands.subcommand.task]] id = "deploy" label = "Deploy" fields = ["app", "config", "region", "remote_only"] required = [] [[commands.subcommand.task]] id = "build-only" label = "Build only" set = { build_only = [true] } fields = ["app", "config", "build_only"] required = [] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["app", "config", "region", "image"] [[commands.subcommand.group]] id = "advanced" label = "Advanced" fields = ["dockerfile", "strategy", "remote_only", "local_only", "build_only", "no_cache", "detach", "env"] [[commands.subcommand]] path = ["logs"] label = "View app logs" [[commands.subcommand.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/fly.ts" license = "MIT" [[commands.subcommand.field]] id = "app" label = "App name" type = "string" option = ["--app", "-a"] sources = ["fig"] [[commands.subcommand.field]] id = "region" label = "Region" type = "string" option = ["--region", "-r"] sources = ["fig"] [[commands.subcommand.field]] id = "instance" label = "Instance ID" type = "string" option = ["--instance", "-i"] sources = ["fig"] [[commands.subcommand.field]] id = "config" label = "Config file" type = "path" option = ["--config", "-c"] path = { kind = "file", role = "input" } sources = ["fig"] [[commands.subcommand.task]] id = "logs" label = "Tail logs" fields = ["app", "region", "instance"] required = [] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["app", "region", "instance", "config"] [[commands.subcommand]] path = ["status"] label = "Show app status" [[commands.subcommand.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/fly.ts" license = "MIT" [[commands.subcommand.field]] id = "app" label = "App name" type = "string" option = ["--app", "-a"] sources = ["fig"] [[commands.subcommand.field]] id = "all" label = "Include completed instances" type = "boolean" option = ["--all"] sources = ["fig"] [[commands.subcommand.field]] id = "watch" label = "Refresh continuously" type = "boolean" option = ["--watch"] sources = ["fig"] [[commands.subcommand.field]] id = "deployment" label = "Show deployment status" type = "boolean" option = ["--deployment"] sources = ["fig"] [[commands.subcommand.task]] id = "status" label = "Status" fields = ["app", "all", "deployment"] required = [] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["app", "all", "watch", "deployment"]