github astronomer/astro-cli v2.0.0-nightly.20261008

pre-release6 hours ago

Changelog

  • d5b75ab: A connection with no conn_type is not a connection (@schnie)
  • bb03fc8: Add --build-secret to astro local start, restart and package (@jlaneve)
  • 420a174: Add --output json to astro deployment variable list, create and update (@schnie)
  • 7ed43c8: Add --output json to the v2 deploy path (@jlaneve)
  • 9444557: Add --wait to deployment hibernate and wake-up, and drop the logs epoch (@jlaneve)
  • d666af6: Add --with-workspace to local run and shell (@jlaneve)
  • ebe6ddb: Add [tool.astro] packages: OS packages for v2 projects (@jlaneve)
  • 938fef4: Add astro local check: DAG parse, import errors, integrity (@jlaneve)
  • 6dd6353: Add astro local env for local env values (@jlaneve)
  • 02b5d26: Add astro package for v2 projects (@jlaneve)
  • 17b8a10: Add a deadcode gate and delete what it found (@schnie)
  • 4bd69c3: Add a shared text helper to cliout, and render three families with it (@schnie)
  • 3262827: Add an example project and a manifest reference (@jlaneve)
  • 4c7e363: Add an opt-in release channel for the next major version (#2266) (@jlaneve)
  • bc6bff8: Add astro login --signup (@jlaneve)
  • 51ed9d5: Add astro organization cluster list (@jroachgolf84)
  • af6bef3: Add delete to deployment pool, airflow-variable and connection (@jlaneve)
  • 511d20e: Add pkg/airflowapi, a client for the Airflow REST API (@jlaneve)
  • 00c8ee7: Add project discovery and per-user local state (local/38) (@jlaneve)
  • 4622a1b: Add target-aware pre-flight checks to astro local check (@jlaneve)
  • 2a4ac4c: Add the query commands: dags, runs, tasks, assets, connections, variables, pools (@jlaneve)
  • ff9d5d5: Add the v2 documentation (@schnie)
  • fcf39ce: Add v2 image deploys (@jlaneve)
  • 3172674: Add, remove and annotate project env declarations through one shared writer (@schnie)
  • 4a63ee7: Add, remove and mark default deployment links through one shared writer (@schnie)
  • 7fc42af: Align Python fallback, target config checks and the package env checklist with Astro Desktop (@schnie)
  • 94e9154: Align the astro env and astro local env help, and cut it down (@schnie)
  • 61c7d9b: Ask Airflow 2 for a task log as text, so it reads as lines (@jlaneve)
  • cccdd9c: Ask Airflow 3 for every DAG's stats by leaving dag_ids off (@jlaneve)
  • d922428: Ask a running Airflow the four questions, on one start (@schnie)
  • c9851ef: Ask deploy's and astro local's deployment questions through pkg/picker (@schnie)
  • f1e48f1: Ask every numbered-table picker through one helper, pkg/picker (@schnie)
  • 1e0dfe5: Ask the container engines once per listing, not once per record (@schnie)
  • 8b7b700: Ask the container whether the manifest happened (@schnie)
  • d5c2d7c: Ask the filesystem which directory it is (@schnie)
  • 70aaaf7: Assert a failed start leaves nothing behind (@schnie)
  • dcce385: Assert what Ctrl-C does to a start (@schnie)
  • b2349b1: Bracket the expiry the login test asserts, instead of racing the clock (@jlaneve)
  • 4003fff: Bring astro local api up to af api, and log in on Airflow 3 with --url and a username (@schnie)
  • 8e8a695: Bring the deployment family's help up to the style guide (@schnie)
  • e1d6a45: Bring the remaining commands' help up to the style guide (@schnie)
  • c7c05f3: Build a generated image on the Python requires-python asks for (@jlaneve)
  • 9f49624: Build deploy and package images from one shared manifest rule, and resolve a patch Airflow pin to its series (@schnie)
  • 68b5b7b: Build every tree-wide test's trees from one table, and lint help across all of them (@schnie)
  • 126eccc: Build the interpreter a check needs, instead of asking for it (@schnie)
  • 62c08d9: Build the mwaa and composer package targets (@jlaneve)
  • cbf1e32: CLI Release: update godownloader to v1.46.0 (#2267) (@octo-sts[bot])
  • d21f18a: Carry a v1 project's connections and Variables into the manifest and the vault when it converts (@schnie)
  • 24bb6bf: Carry a v1 project's dependencies, packages and Airflow version into the manifest (@schnie)
  • b83297b: Carry a v1 project's env schema into the manifest when it converts (@schnie)
  • 1d725ca: Change a project's Airflow version in pyproject.toml without disturbing the rest of the file (@schnie)
  • afd5a48: Check a Docker-mode project's DAGs without starting Airflow (@schnie)
  • 38c3af7: Check a declared value's type when the value is empty (@schnie)
  • 4ac6097: Check a real Airflow: e2e tier 1, and packaging moved down to tier 0 (@schnie)
  • 273ffd9: Check a value against the type it was declared with, and say so at start (@schnie)
  • 9fcb568: Check every command's --output json stdout end to end, and fail bare groups as usage under json (@schnie)
  • f6714ce: Check the two builds agree about the same Dockerfile (@schnie)
  • d35cbf4: Clean the record whose project is gone, which is the one --clean is for (@schnie)
  • 52941dc: Clear a stale record when reserving, not when claiming (@schnie)
  • 09ea1d9: Collapse astro env create and update into one set (@schnie)
  • 465cd52: Collect the check environments, because nothing was collecting them (@schnie)
  • 943bf19: Connections and variables that reach a project are available in it without declaring them (@schnie)
  • 4759df8: Content-address the build context, and stop two paths disagreeing about a declared Dockerfile (@schnie)
  • 0f0f0a8: Copy a Deployment with astro deployment create --clone (@schnie)
  • fd2b7cb: Count every element before appending, so a conversion cannot delete one (@schnie)
  • 3410647: Count the runs instead of the rows in the health report (@schnie)
  • 4f6a01d: Cover the command surfaces tier 0 still listed (@schnie)
  • e3cd21f: Cover the conversion that rewrites somebody's repository (@schnie)
  • aa8d27e: Create local DAGs unpaused (@schnie)
  • 20e30a4: Cross-PR cleanup and localrt contract completions from the merged-tree review (@jlaneve)
  • 669d4a4: Decide the proxy is unnecessary and stop it under one lock (@schnie)
  • 2ec2afe: Declarations say secret, and conversion stops reading the old desktop env schema (@schnie)
  • b035415: Declare Airflow pools in the manifest and create them at local start (@jlaneve)
  • 96b9826: Declare, annotate and undeclare project env names with astro local env (@schnie)
  • 93bdc6e: Default astro login to the sign-up screen (@jlaneve)
  • 8a4583e: Define the local Airflow 2 admin account once (@schnie)
  • 580a083: Delete the astro dev code nothing in v2 reaches (@schnie)
  • 54cff6e: Delete the constraints fetcher, which nothing can call (@schnie)
  • 1b1d336: Delete the pytest suite the e2e suite replaced (@schnie)
  • d7ba35b: Delete the v1 dev command tree, which nothing has mounted since v2 (@jlaneve)
  • 93c8a92: Delete the v1 standalone engine, which nothing has called since v2 (@jlaneve)
  • 0dc3c7f: Deleting a declared value says what's left, and --undeclare removes the declaration too (@schnie)
  • 5b5ca18: Deploy a v2 project with the login for its manifest domain (@jlaneve)
  • b579dee: Deploy always asks, and astro api airflow adopts deployment resolution (local/82) (@jlaneve)
  • 78268a6: Deploy guard, a strict manifest parse, and the targets rename (@jlaneve)
  • 37046cc: Detect changed paths with git diff instead of the PR files API (@jlaneve)
  • 52477d8: Do not let the ambient environment pick the interpreter or skip TLS (@schnie)
  • 96c8a91: Docker mode: run local Airflow via compose (local/43) (@jlaneve)
  • 12ab4ec: Document and test how local Airflow keeps its secrets (@schnie)
  • b21ae0d: Don't let astro env ... delete remove an object outside the scope you named (@schnie)
  • 610ceaa: Don't let an environment token replace your saved Astro login (@schnie)
  • 4eaaad7: Draw every help page through one renderer, and lint what goes into them (@schnie)
  • fb758eb: Drop podman machine management; docker mode honors container.binary (@schnie)
  • 3756396: Drop the flags v1 marked deprecated (@schnie)
  • 30582e8: Env schema: bindings, validator, codecs, and local resolution (local/45 part 2) (@jlaneve)
  • 412182e: Exit non-zero when a 1.x deploy is refused for uncommitted changes (@schnie)
  • 4650f6f: Explain a failed start on a database a newer Airflow upgraded, and point at reset (@schnie)
  • 55b222d: Export the record-aware prune predicate for a consumer with its own store (@schnie)
  • 18254c8: Fail an MWAA target check on a constraints conflict (@jlaneve)
  • f6d8cd0: Fix a cmd/api test flake, and refuse a --scheduler-size that is not a size (@schnie)
  • 2d15797: Fix astro local check on Airflow 3 by reading the parse result from a file (@jlaneve)
  • 53f3534: Fix flaky dev-image tag and proxy stale-PID false positive (@jlaneve)
  • 3ac19d1: Fix help text for the workspace, organization, team and user commands (@schnie)
  • a946b61: Fix local Airflow start/stop lifecycle bugs in astro local v2 (@jlaneve)
  • 1f01c52: Fix logout and ^C gaps in the login reuse flow (@jlaneve)
  • 4859a1c: Fix output-consistency and correctness bugs in astro local (@jlaneve)
  • aa95755: Fix residual review findings in astro local v2 (@jlaneve)
  • 2ee7498: Fix six bugs and test gaps from the v2 polish round (@schnie)
  • 62953f0: Fix the URL-removal commit: failing test and stray worktree gitlinks (@jlaneve)
  • b836387: Fix the dev stub integration test after the doc field removal (@jlaneve)
  • 4dc5193: Fix the object-export panics and pool export, delete UpgradeTest, and keep unit tests off the network (@schnie)
  • cb2cf71: Fix the text quirks pr/450 pinned in the workspace and organization token families (@schnie)
  • b81a5b2: Fix the text quirks pr/455 pinned in the workspace and organization user and team commands (@schnie)
  • 2e9e44b: Fix the three deployment token quirks pr/434 pinned (@schnie)
  • 413be1d: Fix three commands that could not see a v2 project, and group the root help (@jlaneve)
  • 6b695a3: Free -o on audit-logs export, and give it --output text|json (@schnie)
  • ba148be: Free runner disk before the nightly's Docker tier (@schnie)
  • c90779b: Gate the integration tests on the event, not on a branch name (@schnie)
  • 8a5a4f1: Give APC deploy and the deployment family --output json (@schnie)
  • 8ca440f: Give astro env the cross-kind list astro local env already has (@schnie)
  • cc9abaa: Give astro local env the nouns astro env already uses (@schnie)
  • 5d25545: Give a declaration's refusal a code, so the sentence can stay a sentence (@schnie)
  • 0d4a5a1: Give a manifest's refusals codes too, and tell shape from rule (@schnie)
  • e3e53d6: Give a new project a DAG to start from (@schnie)
  • f45122e: Give astro api ls and describe -o, tombstone 1.x's --json, and refuse a bad -o before any pre-run (@schnie)
  • 26690ec: Give astro dbt deploy, delete, cleanup and remote deploy --output json (@schnie)
  • e4bf484: Give astro ide project list, import and export -o json (@schnie)
  • bd05dc2: Give cmd/apc a schema golden tree before its commands gain -o json (@schnie)
  • 8567a46: Give context, config, telemetry and auth token -o json (@schnie)
  • 4d6bb71: Give deployment create, update, delete, hibernate and wake-up -o json (@schnie)
  • 5600e42: Give deployment worker-queue and logs -o json (@schnie)
  • eb2fc3c: Give the APC user, team and service-account commands --output json (@schnie)
  • 4c73eb9: Give the APC workspace commands --output json (@schnie)
  • 5e93e94: Give the atomic write one retry policy, tested, and use it everywhere (@schnie)
  • dba7f44: Give the core tree's help examples, and spell its arguments in capitals (@schnie)
  • 510ef51: Give the deployment token commands --output json (@schnie)
  • 2133bc4: Give the deployment user and team commands -o json (@schnie)
  • 671e617: Give the rest of astro env -o json (@schnie)
  • 52b410f: Give the second project of the same name a name of its own (@schnie)
  • 4c137e6: Give the shared vault a key grammar both tools can address (@schnie)
  • 962f42e: Give the shared vault one location, and refuse to re-key it over live values (@schnie)
  • c927b1a: Give the workspace and organization token families -o json (@schnie)
  • d6c68c5: Give the workspace and organization user and team commands -o json (@schnie)
  • f883517: Give unusable directory names a working hostname (@jlaneve)
  • 2503775: Give workspace create, update, delete and switch, organization switch and role list -o json (@schnie)
  • ce2cff8: Hand out the project environment, and provision one without starting it (@schnie)
  • 8e588d9: Harden docker mode in astro local v2 (@jlaneve)
  • 86a01f7: Have the concurrent-renewal test's IdP issue a JWT, as the real one does (@schnie)
  • 6202c03: Have the suite check what it left on the machine (@schnie)
  • ad0d8fb: Hide the local aliases, and catch a command left out of a group (@jlaneve)
  • 1a868d4: Hold standalone Airflow to Astronomer's build through [tool.uv] (@jlaneve)
  • 0fe2c30: Hold the new cosmosboost code to v2's lint bar (@schnie)
  • 3206116: Honor the project's .env in local check and in the dev defaults (@jlaneve)
  • 46b95fa: Import a plain-Airflow repo with astro init --from (@jlaneve)
  • e2f6944: Insert [project] and [tool.astro] at the top when adopting (@jlaneve)
  • 7c6936f: Install dependencies into a running environment without restarting it (@schnie)
  • 4a51fd8: Install private git packages into a generated image with the netrc secret (@jlaneve)
  • 75e4d10: Keep CI/CD enforcement on a Workspace update, and ask before a delete (@schnie)
  • a06aa8c: Keep Python's bytecode out of a bucket artifact (@schnie)
  • 869dba5: Keep a project's local Airflow database when it moves off astro dev (@schnie)
  • c11ae83: Keep new projects and check environments off SQLAlchemy 2.1 (@schnie)
  • 9ced935: Keep packages added to a running project within its declared constraints (@schnie)
  • 259c610: Keep per-machine files out of images built from a project's own Dockerfile (@jlaneve)
  • 1fa9521: Keep pull-request e2e runs off live PyPI, and fix an order-dependent emenv test (@schnie)
  • 057f908: Keep registry tokens out of debug logs and off the docker login command line (@jlaneve)
  • f33a5b3: Keep remote execution on a file update, and echo a deployment file's result through the one encoder (@schnie)
  • 2c798b5: Keep secret values off the docker command line when checking Dags (@schnie)
  • 3d1b569: Keep the browser's Host when proxying to a project (@schnie)
  • db876b7: Keep the name a v1 project calls itself (@schnie)
  • 2fb22c1: Keep the suite's records out of the developer's cache (@schnie)
  • 49dccfd: Land --yes, --deployment and --workspace (pr/426) and their messages (pr/428) on v2 (@schnie)
  • e7826b0: Let Ctrl-C cancel a command instead of killing the process (@schnie)
  • 0f0b719: Let a caller say how long a start waits (@schnie)
  • afc1e02: Let a caller say what environment the DAGs are imported under (@schnie)
  • 1f411f9: Let a consumer deliver environment without persisting it (@schnie)
  • 6164c91: Let a consumer leave the AWS and Google auth doors out (@schnie)
  • 687f61d: Let a project be opened without moving the credentials it committed (@schnie)
  • ef9ade8: Let a project bring its own Dockerfile to docker mode (@schnie)
  • b045ca4: Let a project declare its build secrets in pyproject.toml (@jlaneve)
  • 2dda697: Let a project declare its own Dockerfile (@schnie)
  • f72cb9d: Let a project describe the environment it expects, not just name it (@schnie)
  • cd82386: Let a second host supply the proxy's transport, error page, and generated pages (@schnie)
  • ce50c58: Let a tool that supervises Airflow itself publish a runtime record (@schnie)
  • 256ff0d: Let an embedder point uv at its own binary, cache and config policy (@schnie)
  • 3f31ef3: Let astro deploy take a Deployment id as its argument in a v2 project (@jlaneve)
  • e62e4d8: Let astro local reset work on a project that is already stopped (@schnie)
  • 4581fe7: Let consumers speak the contract without linking the runtime (@schnie)
  • 2e4e01d: Let help wrap every Long's prose instead of wrapping it by hand (@schnie)
  • 7055e96: Let other tools word the missing build secret advice (@schnie)
  • b7b132a: Let the resolution order speak for itself in astro local env help (@schnie)
  • d3b9da1: Lift the image builder into internal/imagebuild (@jlaneve)
  • cc0e8af: Limit a global secret to specific projects with astro local env … link (@schnie)
  • 9fe3745: Link deployments and a workspace from the command line with astro link (@schnie)
  • 6d1b05c: Lint pkg/manifest in CI, which it never was (@schnie)
  • e792083: Lint that every help example names a real command, flags and arguments (@schnie)
  • 3d0d3f1: Lint the ten pkg modules nothing was linting (@schnie)
  • d4cc1f0: List every [tool.astro.env] problem, and say where one pass ends (@schnie)
  • 00241f5: Make -o/--output the format for astro env, as everywhere else (@schnie)
  • fd385b6: Make Emit the single output path it says it is (@schnie)
  • a9ac0f3: Make a version-gated APC command fail, and say what it needs (@jlaneve)
  • dfda3eb: Make astro env and astro deployment follow the project's workspace and links (@jlaneve)
  • 7f5a88f: Make astro init work in the repo you already have (@jlaneve)
  • a3067d9: Make pkg/localrt run local Airflow, so Astro Desktop can use it (@schnie)
  • d7a3cbd: Make the apache-airflow requirement a project's only Airflow version (@schnie)
  • 69ecff0: Make the proxy's published record a shared contract (@schnie)
  • 75b5845: Make the shared uv client safe for an embedder to drive (@schnie)
  • b10ce51: Make the test suite order-independent and drop a live network call (@jlaneve)
  • fe6984f: Manifest links for MWAA, Composer, and plain URLs, with an auth table (@jlaneve)
  • d22b051: Map a manifest to its image fields in one place (@schnie)
  • a8e4bb1: Mark global env values a project doesn't declare, and add a post-init checklist (@jlaneve)
  • 607f389: Mark the pre-v2 vault reader and upgrade sweep for retirement (@schnie)
  • 9b7947d: Merge docker-compose.override.yml in Docker mode, as v1 did (@jlaneve)
  • c6cb176: Merge main into v2 (@schnie)
  • 7c012ba: Merge main into v2 (@schnie)
  • d57f1ae: Merge main into v2 (#2270) (@schnie)
  • 2bfc347: Merge pull request #2272 from astronomer/sync/record-main-merge (@schnie)
  • 28999a8: Merge pull request #2273 from astronomer/sync/main-into-v2-2 (@schnie)
  • 4d8ea9f: Merge pull request #2274 from astronomer/sync/main-into-v2-3 (@schnie)
  • ef2317a: Merge remote-tracking branch 'origin/main' into v2 (@jlaneve)
  • d83f278: Merge upstream main: multiple build secrets (@jlaneve)
  • d330f1c: Merge upstream main: rename software to APC (@schnie)
  • 3ad363a: Move airflow_settings.yaml variable values to the vault, and remove the file when nothing is left in it (@jlaneve)
  • fbe3d54: Move the APC platform and its transport under internal/platform (@jlaneve)
  • 2aba7db: Move the AWS and Google auth doors into a package a consumer can decline (@schnie)
  • af241a6: Move the Astro platform under internal/platform (@jlaneve)
  • c0878b9: Move the build-secret checks into pkg/imagebuild (@schnie)
  • d21e06e: Move the environment grammar's rules onto the type that has to obey them (@schnie)
  • a44c899: Move the generated API clients under the Astro platform (@jlaneve)
  • 4a8fb5e: Name a command that works when the check has no interpreter (@schnie)
  • daf783a: Name an unsupplied build secret again when the Dockerfile build fails (@jlaneve)
  • 5baa57f: Name the failure, not just describe it (@schnie)
  • a2e8158: Name the fpath line in the completion help for Apple Silicon Macs (@schnie)
  • 141581d: Name the group when an ExceptionGroup carries more than one failure (@schnie)
  • 1d7b2c1: Name the manifest a refused init tells you to edit (@schnie)
  • a2d24d1: Never write a config this process could not read (@schnie)
  • 12fb7b9: New projects keep per-machine Astro files out of git (@schnie)
  • d2d6ba5: New projects start on Airflow 3.3 (@schnie)
  • fc27cd1: New projects start on the newest supported Airflow release (@schnie)
  • 9058b40: One directory reached two ways is one project (@schnie)
  • 6776adb: One safe write path for pyproject.toml edits (@schnie)
  • 7831506: Only mention .astro/config.yaml when it names a Deployment (@schnie)
  • 7b0b9e4: Order the interrupt against the wait instead of against the clock (@schnie)
  • b60315f: Otto launched with astro otto can query your warehouses (@schnie)
  • 244ed12: Page af listings past Airflow's page cap, and fix two init and env list hints (@jlaneve)
  • a0cbe64: Parse -o in one place, with extras a command declares (@schnie)
  • c7d5f1a: Pass shell-only env values through to docker-mode Airflow (@jlaneve)
  • b799360: Pick a Deployment from a menu with astro use, and trim its report (@schnie)
  • 3cb625b: Pick a context from a table when astro context switch names none (@schnie)
  • 89fdce0: Pin a project's image to one Astro Runtime build, and refuse a Dockerfile that runs a different Airflow (@schnie)
  • 286c7b3: Pin an interpreter the project's Airflow can actually run under (@schnie)
  • 9586e16: Pin cmd/astro's json shapes with schema goldens, and assert meaning in its tests (@schnie)
  • 59d6dde: Pin requires-python to a kept Dockerfile's Python, and write lists one per line (@jlaneve)
  • 97aff24: Pin the JSON payloads, which nothing was holding (@schnie)
  • ca4cd54: Pin the astro env json shapes, and assert meaning in the token tests (@schnie)
  • 6504d9e: Point af connections and variables at values set as environment variables (@jlaneve)
  • f375069: Point removed 1.x commands at their replacements (@schnie)
  • b677b67: Point the removed deployments-as-code flags at what replaced them (@schnie)
  • 3ae5a9a: Point v1 commands and init notes at what a converted project needs (@jlaneve)
  • 08c0c00: Point v1 projects and bare directories at astro init (@schnie)
  • 925baa8: Preview runtime fixes, carry values the project already holds, and one Variable key rule (@schnie)
  • 5894538: Print a chained traceback the way Python prints it (@jlaneve)
  • 9d7b308: Print an empty astro env list as [] in json, not null (@schnie)
  • b0f5840: Print json results pretty on a terminal and compact when piped (@schnie)
  • c995efc: Promote instances to pkg, with the two auth doors as their own modules (@schnie)
  • 1cdd087: Promote scaffold out of internal/ so other tools can call it (@schnie)
  • 556f300: Promote the Composer environment lookup to a shared module (@schnie)
  • b7c2982: Promote the manifest env parser out of internal/, so a second consumer can read it (@schnie)
  • d630151: Promote the offline DAG check to a shared module (@schnie)
  • d3bc77a: Publish a hidden astro env secret value as null, not "" (@schnie)
  • 682475b: Publish astro af dags stats and config in the standalone af's shapes (@schnie)
  • 9202ec0: Publish astro env lists under a named key, not as a bare array (@schnie)
  • 70d9e0e: Publish astro local and astro api JSON in snake_case, lists under named keys (@schnie)
  • 814874d: Publish every local and af list as one object under a named key (@schnie)
  • 73a897b: Publish snake_case keys from astro env's json (@schnie)
  • 91740ed: Publish snake_case keys from the cloud list commands (@schnie)
  • dfd998d: Publish the config file whole, so a process starting during a save cannot read it empty (@schnie)
  • 55f0119: Pull Otto from a release channel, default next (@jlaneve)
  • e4c3203: Put a dev build on your PATH with make install (@schnie)
  • 47b99a0: Put the Airflow commands under astro af (@jlaneve)
  • e859217: Re-parse each DAG file every 3s in local dev, not in a tight loop (@jlaneve)
  • 34ebc9c: Reach MWAA, Composer, and token-minting Airflows (local/81) (@jlaneve)
  • 9d01cad: Read --output's validated value instead of parsing it twice (@schnie)
  • 67dabc7: Read ASTRO_HOME the way the rest of the CLI reads it (@schnie)
  • 4a3274f: Read AstroRuntimeVersion on the deploy paths, not the deprecated field (@jlaneve)
  • baf8df9: Read Environment Manager objects through the shared policy (@schnie)
  • cbaa672: Read a connection URI the way Airflow does (@schnie)
  • 3d03ae7: Read a connection's id from its env-var key, without a placeholder value (@schnie)
  • 80c108b: Read a v1 instance's deployment id from its auth table for the link command (@jlaneve)
  • 3a7be50: Read and write the local vault shared with Astro Desktop (@schnie)
  • a86eae9: Read back the Airflow pin this scaffold writes (@schnie)
  • 683ce81: Read no context, rather than panic, before the home config is loaded (@schnie)
  • dbc9aea: Read the component off a log line Airflow actually colored (@schnie)
  • 1580b96: Record main as merged into v2 (@schnie)
  • 2fbbaa9: Record the git commit on v2 deploys, as v1 does (@jlaneve)
  • 4c95302: Record which projects a global vault entry reaches (@schnie)
  • 211ceea: Refuse a bad answer to the APC workspace switch, instead of panicking (@schnie)
  • d6e0390: Refuse a connection with no conn_type, and declare a URI one as its scheme (@schnie)
  • c0b913b: Refuse a declared Dockerfile docker mode cannot run (@schnie)
  • 05e576c: Refuse a v2 image deploy to an older runtime before building (@jlaneve)
  • 4b7e712: Refuse empty af arguments, take DAG_ID on runs list and dags stats, add --input to local api (@jlaneve)
  • c53956c: Refuse every prompt under --output json, as input_required (@schnie)
  • 554b438: Refuse four more deploy flags a v2 project silently drops (@jlaneve)
  • 5457652: Refuse sensitive under connections, as the reference already says we do (@schnie)
  • 90edffc: Refuse the deploy flags a v2 project silently drops (@jlaneve)
  • 169b81b: Refuse to delete a context the config does not hold, instead of panicking (@schnie)
  • df5d18a: Regenerate the cloud list goldens for pr/439's snake_case keys (@schnie)
  • 4f2dff5: Register the proxy route before the health wait, as docker mode does (@schnie)
  • 7434c6d: Reject tampered or planted values in the local secrets vault (@schnie)
  • 249eb4b: Remove an unused cause helper (@schnie)
  • 521394e: Remove an unused legacy schema reader (@schnie)
  • c60a1bd: Remove an unused workspace key helper (@schnie)
  • c57e2b9: Remove astro deployment connection, airflow-variable and pool (@schnie)
  • 3572b25: Remove deployment --deployment-file and inspect --template (@schnie)
  • 0fb9d16: Remove the committed test lock file and gitignore it (@jlaneve)
  • a0cf0d8: Remove the invented dev-mapping URL (@jlaneve)
  • 8a8a66f: Remove the release workflow from v2 (@jlaneve)
  • fa8ab12: Remove the tag-creation workflow from v2 (@jlaneve)
  • fcde9aa: Remove the v1 files a conversion has finished with (@schnie)
  • 39d4ea0: Remove two exports nothing calls (@schnie)
  • f4fcd34: Rename cmd/cloud to cmd/astro (@jlaneve)
  • b534d06: Rename the cloud-named import aliases to astro (@jlaneve)
  • 3c8b2af: Rename the v1/v2 identifiers pr/421 left for a 1.x project and the manifest path (@schnie)
  • 6b2a570: Report a duplicate dag_id as a duplicate, not as an import error (@schnie)
  • a3fd66e: Report a slow or duplicated DAG at a path the user can open (@schnie)
  • a9221bc: Report every command's failure by the output contract, from the root (@schnie)
  • 969c9fc: Report standalone omissions from the local runtime (@schnie)
  • 1ad126d: Report the cause uv gave, not the line that happened to be last (@schnie)
  • 33ae0cc: Report the exception that closed the traceback, and keep check's exit contract (@schnie)
  • 737f997: Report the manifest before the environment, and the exception before the frames (@schnie)
  • 6e52058: Report the sync retry, and retry only when a clean tree would help (@schnie)
  • d120b3b: Report workspace value causes in the same words as Astro Desktop (@schnie)
  • 83c35bf: Require a target for astro api airflow instead of localhost:8080 (@jlaneve)
  • 61ac734: Require the space after the colon before calling a line an exception (@schnie)
  • ad51dcf: Reset a docker project that has no record left (@schnie)
  • 72c3935: Reset the stream flag around the cliout tests that depend on it (@schnie)
  • c3b215f: Resolve deployment-link defaults at parse time (@jlaneve)
  • 16de370: Resolve e2e packages as of 2026-10-05 (@github-actions[bot])
  • bd31a09: Resolve which Airflow a command acts on, with astro use and astro instance list (@jlaneve)
  • 25fa50f: Resolve workspace connections, and workspace values in docker mode (@schnie)
  • 59fe355: Resolve workspace-source local env values from Environment Manager (@jlaneve)
  • 20c2f82: Retire the ~/.astro/env global file (@schnie)
  • a35534f: Retire v1/v2 as names for the project layout and the code generation (@schnie)
  • 5c059cd: Return an error when the login callback cannot bind (@jlaneve)
  • cc1539c: Return what a variable change did, instead of printing it (@jlaneve)
  • 92e92d9: Reuse a working saved login in astro login and context switch (@jlaneve)
  • 6b51c51: Revive the local proxy daemon for astro v2 (@jlaneve)
  • 19bf087: Revive the skipped deployment create and update tests (@schnie)
  • c691ac7: Revive the skipped hosted create-from-file tests (@schnie)
  • a5d9c45: Rework pkg/proxy: routes Store, shared server core, daemon start race fix (@jlaneve)
  • b92f79d: Rewrite the v2 docs as current-state documentation (@schnie)
  • b3e7898: Route astro deploy by project type and add v2 dags-only deploy (@jlaneve)
  • e12d9c2: Route deploy and deployment inspect json through the one encoder (@schnie)
  • 91445aa: Run Airflow 2 projects in docker mode (@jlaneve)
  • 9319836: Run local DAGs only when triggered, in standalone and docker mode (@jlaneve)
  • e298214: Run local commands with Airflow stopped, and make stop idempotent (@jlaneve)
  • 82e0605: Run push CI on v2 instead of main (@jlaneve)
  • 7ad8a7e: Run the pkg/* sub-module tests on Windows too (@schnie)
  • 6b9aad9: Say CLI settings are global in a pyproject.toml project, and add config list (@jlaneve)
  • be854a2: Say how to wake a hibernating Deployment on deploy, and fix the 1-1 prompt (@jlaneve)
  • a3fdd32: Say migrated rather than carried (@schnie)
  • b33eea7: Say that the conversion left the credential in the file (@schnie)
  • 4e5ed02: Say that the health report's DAG count is DAGs with runs (@schnie)
  • 874cd16: Say the v1 file was migrated, not carried, in the retirement label (@schnie)
  • be4604c: Say what Airflow refused, not its whole problem document (@jlaneve)
  • 55894a8: Say what an interrupted start did, not how it stopped (@schnie)
  • 0e77555: Say what build this is, even when it was built without the -ldflags (@schnie)
  • 8755f40: Say when astro af fails because the Deployment is hibernating (@jlaneve)
  • 75da344: Say when deployments see an env change, and give the deploy URL a scheme (@jlaneve)
  • a09ec4c: Scaffold a shorter AGENTS.md that points to the CLI for commands (@schnie)
  • b8eafa7: Share one login across every host on the same auth tenant (@jlaneve)
  • dd6a9e7: Share the check that runs before deleting with --undeclare (@schnie)
  • edd2037: Share the policy behind reading Environment Manager objects (@schnie)
  • 8616157: Share the test helpers the three instance modules were copying (@schnie)
  • d0c5748: Show the remote execution API URL in deployment inspect (@chomipi88)
  • 07cf61c: Show the traceback, list a run's tasks, and give api airflow a scheme (@jlaneve)
  • adea21a: Simplify the env schema: string = default, table = supplied elsewhere (@jlaneve)
  • ff55d19: Skip the blank entries in v1's stock airflow_settings.yaml, as v1 did (@jlaneve)
  • 0babddb: Spell unrecognized the way the linter does (@schnie)
  • 413bdfb: Split scaffold's Run into Plan and Apply (@schnie)
  • 9cf2a4f: Split the connection value codec out from the env-var pair (@schnie)
  • 43f64cd: Stand up an e2e suite that drives the built binary (@schnie)
  • 58ece11: Standalone Airflow can import from include/ again (@schnie)
  • aa39000: Standalone mode: run local Airflow from the project venv (local/42) (@jlaneve)
  • 9d2e2f5: Standardize the cloud list commands on -o text|json (@schnie)
  • f68a91a: Start Airflow 2 in Docker and ask who answered (@schnie)
  • ce2fe6c: Start a project on a new local database instead of copying its astro dev one (@schnie)
  • e647af8: Start a real Airflow and check it: e2e tier 2, nightly (@schnie)
  • bc4a126: Start tier 3, and fix the feature it found broken (@schnie)
  • 8c93159: Stop creating v1 config as a side effect of reading it (@schnie)
  • 1f65652: Stop naming Astro Desktop when the CLI talks about the vault (@schnie)
  • 65bbe5e: Stop platform-agnostic code importing a platform, and check it (@jlaneve)
  • 824dcc2: Stop publishing Go field names in the missing-values payload (@schnie)
  • 368047a: Stop racing two timers 1ms apart in the postgres-exit test (@schnie)
  • 9179082: Stop saving warehouse passwords to disk for Otto (@schnie)
  • 4847590: Stop telling someone to remove an orphan without saying how (@schnie)
  • d89ed1c: Stop the index page from deleting what it lists (@schnie)
  • 5c7eeb6: Stop the tests sleeping, and cache what CI builds (@jlaneve)
  • a174d17: Stop waiting for an Airflow that has already exited (@schnie)
  • 9adfbda: Stop writing a SQLAlchemy cap into new projects (@schnie)
  • ae7308b: Store connections, Airflow variables and values declared sensitive in the vault (@schnie)
  • b555524: Store your Astro login in the local secrets vault (@schnie)
  • 2f5ecfd: Strip Bearer from the Docker API push token, and drop pycache from DAG bundles (@jlaneve)
  • 265a8cc: Take -o text|json on deployment inspect and version (@schnie)
  • d37f6fb: Take port 6563 from an astro 1.x proxy, and keep the fallback port stable (@jlaneve)
  • 56d17d4: Take the containers back down when a docker start fails (@schnie)
  • d01ee5c: Take the login link when stdin is not a terminal (@jlaneve)
  • cd3c6ce: Take the proxy down with the last route, however it goes (@schnie)
  • 7644669: Tell a blocked check what would unblock it (@schnie)
  • 61df4da: Tell mapped task instances apart in af runs tasks (@jlaneve)
  • 6603716: The CLI reads the workspace organization Astro Desktop records, and no longer has a link workspace command (@schnie)
  • e990e75: The deployment noun, and the machine's own astro local surface (local/88) (@jlaneve)
  • f0ba911: The review fixes that missed the merge of pr/203, pr/205 and pr/206 (@schnie)
  • d55bd7d: Tighten lint config and burn down the errors it was hiding (@jlaneve)
  • 6701abe: Treat a v1 project with a tools-only pyproject as v1, and fix the v1 deploy workspace check (@jlaneve)
  • 494174c: Trim the env-schema comments to what the code does (@schnie)
  • 15508fe: Turn on -race in the test suite (local/57) (@jlaneve)
  • 228ed8d: Unhide the bundle commands and flags (#2264) (@jeremybeard)
  • 6d8f24e: Upgrading a standalone project from Airflow 2 to 3 on macOS no longer breaks the Dag processor (@schnie)
  • effc87a: Use generic placeholders in fixtures and tidy comments (@schnie)
  • 49b5fb9: Use the project's Astro host for Astro deployment links (@jlaneve)
  • 05fe693: Values are stored encrypted by default; --plain opts out (@schnie)
  • 6ea5096: Warn about a slow DAG before Airflow gives up on it, not at the same moment (@schnie)
  • 52ffd94: Warn before a build when the Dockerfile mounts a secret nobody gave (@jlaneve)
  • 97bab37: Watch the door, now that everything goes through it (@schnie)
  • c4d7651: Wire cmd/local to the plan builder and mount the v2 tree on the real root (local/39) (@jlaneve)
  • 8594040: Word the workspace causes without em dashes (@schnie)
  • 090ae11: Workspace links name their host, and a missing workspace value blocks the start (@schnie)
  • 90c8de4: Write Deployment wait progress and update warnings to stderr; unexport deployment's internal helpers (@schnie)
  • 4c9ff9b: Write down the -o json rollout rules, and rename pkg/scaffold.V1LinkName (@schnie)
  • e629463: Your linked workspace's values reach local Airflow without declaring them (@schnie)
  • c16d5e7: astro af can wait for a triggered run, diagnose failures and list import errors (@schnie)
  • 0e28d45: astro env connection and airflow-variable gain link (@schnie)
  • 2b166de: astro init links a converted project to its saved Deployment (@schnie)
  • 37628fa: astro init: greenfield scaffold and AGENTS.md (local/40) (@jlaneve)
  • 8a10b05: astro init: scaffold the Airflow dependency so a fresh project starts (@jlaneve)
  • 973abb6: astro local check reports missing environment values, and astro package says what the image leaves out (@schnie)
  • ecff5ca: astro local env list shows the value a start will use when .env and your shell both set a name (@schnie)
  • b9a4bda: astro local list: cross-machine list, record-aware route pruning, stale GC (@jlaneve)
  • d10b2e2: astro local start --docker builds the same image astro deploy does (@schnie)
  • 7350eea: astro local upgrade airflow moves a project to a new Airflow (@schnie)
  • dc53182: astro otto detects a v2 project's running local Airflow (@jlaneve)
  • 940c773: chore(ci): add deadcode tooling to catch exported orphan funcs (#2127) (@schnie)
  • 0112624: manifest: load, validate, and comment-preserving edit of pyproject.toml (local/37) (@jlaneve)
  • 41447e9: pkg/secrets: keyring-backed store (local/45 part 1) (@jlaneve)
  • b2a26ac: pkg/uv: uv discovery, venv/lock/sync/run, typed resolution errors (local/41) (@jlaneve)
  • cb70328: v2 contracts: shared types, layer rules, and the architecture doc (@jlaneve)
  • 4ee5757: v2 plumbing: composition root, cmd/local tree, dev stub, --output json (local/39 part 1) (@jlaneve)

Don't miss a new astro-cli release

NewReleases is sending notifications on new releases.