Skip to content

Latest commit

 

History

History
256 lines (164 loc) · 23 KB

File metadata and controls

256 lines (164 loc) · 23 KB

Changelog

All notable changes to the APIOps CLI are documented in this file.

The format is inspired by Keep a Changelog. This project uses Semantic Versioning with alpha pre-release tags.

[1.0.4] - 2026-09-25

Bug Fixes

  • Operation-filtered specifications - apply the operations API sub-filter to extracted OpenAPI/Swagger specifications, removing excluded operations and empty paths while preserving shared definitions and scalar precision (#296)
  • Version flag - apiops -v now prints the CLI version, alongside -V and --version (#298)
  • Identity setup prompts - generated Copilot identity setup prompts ask for one value per question instead of combined NAME= templates (#300)

Docs & Testing

  • Identity setup guidance - README describes the generated Copilot prompt file and manual setup guide for workflow identity setup (#299)
  • Filtering guide - document how operation filters apply to extracted specifications and their known limitations (#296)

[1.0.3] - 2026-09-20

Bug Fixes

  • Cross-service publishing - strip source-service ARM IDs from PUT and PATCH payloads when publishing extracted resources to another APIM service (#285)
  • Diagnostic logger references - rebuild logger IDs against the target service, including workspace paths and environment-mapped names (#285)
  • WSDL re-import - remove external XSD import locations when their namespaces are available in inline schemas, allowing re-import without resolving those external URLs (#285)

[1.0.2] - 2026-09-11

Bug Fixes

  • WSDL schema publishing - skip importer-generated XSD schemas for WSDL imports, while preserving standalone schemas (#272)
  • Gateway dry runs - prevent crashes when displaying gateway API association descriptors (#272)
  • Subscription owners - normalize subscription owner IDs to relative /users paths when publishing across services (#279)
  • Portal-created schemas - recognize 13-digit timestamp schema IDs and skip re-publishing only when the imported specification recreates structurally equivalent components (#280)
  • Sovereign-cloud publishing - respect the selected cloud endpoint during publish pre-flight checks (#281)

[1.0.1] - 2026-09-04

Features

  • Multi-environment publishing - publish multiple environment-affixed API revisions to a shared APIM instance, with warnings when generated names exceed APIM limits
  • Filtered publishing parity - apply resource filters consistently during publish operations
  • Gateway API reconciliation - reconcile managed API assignments for gateways during publishing

Bug Fixes

  • Revision-aware environment mapping - preserve revision identity across mapped names, operation reconciliation, authentication overrides, and delete filtering
  • API round-trip reliability - preserve SOAP APIs and gateway associations while retrying pessimistic-concurrency conflicts and safely handling concurrent deletes
  • Publishing order and cleanup - publish APIs before products, use desired API manifests for unmatched-resource deletion, and skip missing or in-use associations instead of aborting
  • Publish validation - reject explicitly empty environment resource scopes before planning deletes, and classify DELETE failures by HTTP status and structured error code
  • Dependency security - apply npm audit fixes and update fast-uri to 3.1.7

Docs & Testing

  • Filtered-resource publishing guide - document publishing behavior and examples for resource filters
  • Transitive dependency coverage - add extraction and publishing tests for transitive dependencies

1.0.0 — 2026-08-27

Breaking Changes

  • npm package moved to the Microsoft-owned scope — install @azure-tools/apiops-cli instead of @peterhauge/apiops-cli; generated repositories, pipelines, documentation, and tarball names now use the new package name (#239)

Features

  • Azure API Center backup and restore — new apiops apic extract and apiops apic publish commands round-trip API Center resources and API definition specifications (#232)
  • Filter exclusions — filter entries can use a leading ! to exclude exact names or wildcard patterns, including inside API and workspace sub-filters (#222)
  • Stale artifact cleanup — apiops extract --remove-stale safely reconciles managed artifacts after a fully successful extraction, with generated pipelines opting into cleanup (#246)

Bug Fixes

  • Service-level policy filtering — extraction now honors the policies filter for the service policy and documents the supported nested filter syntax (#221)
  • Operation schema links and dynamic authorization policies — publishing preserves schema-bound OpenAPI request and response representations, while extraction no longer redacts dynamic Authorization policy expressions as secrets (#239)
  • HTTP 200 asynchronous updates — trusted ARM async-operation responses are polled to completion even when the initial APIM response is HTTP 200 (#243)
  • GitHub secret preservation — identity setup inventories existing repository and environment secrets and requires an explicit reuse, rename, or overwrite decision (#244)

Docs & Testing

  • Azure DevOps pipeline samples — pipeline examples now live under samples/pipelines/azure-devops (#241)
  • Filter documentation alignment — README and filter guides now cover wildcard exclusions, the singleton policy key, and supported nested API filter syntax (#242)
  • API Center command reference — README and command documentation now describe apiops apic discovery, flags, defaults, examples, authentication, and output behavior (#247)

0.4.0-alpha.2 — 2026-07-02

Bug Fixes

  • Publish no longer aborts on auto-generated logger-credential named values — the pre-flight secret-redaction scan added in v0.4.0-alpha.0 was incorrectly flagging APIM-managed logger credential named values (which legitimately contain *** REDACTED *** markers from the service). apiops publish now ignores those auto-generated named values so publishes proceed without manual intervention (#220)

Docs & Testing

  • Added missing --artifact-dir flag to the apiops init README table — the flag was already implemented but wasn't documented in the README options reference (#217)
  • Polished the environment-overrides and filter guides plus the shipped Copilot prompt templates — added a fallback paragraph pointing users who skipped apiops init to the prompt source files on GitHub, and cleaned up formatting in apiops-configure-filter.prompt.md and apiops-configure-overrides.prompt.md (follow-up to #183) (#196)

0.4.0-alpha.0 — 2026-07-01

Breaking Changes

  • apiops init output filenames renamed — identity setup guides and Copilot prompts are now emitted as APIOPS-PIPELINE-IDENTITY-SETUP.md / APIOPS-WORKFLOW-IDENTITY-SETUP.md and apiops-setup-pipeline-identity.prompt.md / apiops-setup-workflow-identity.prompt.md. Generated pipeline files are now named run-apiops-extractor.yml / run-apiops-publisher.yml. Users who re-run apiops init after upgrading will see the new files alongside any previously generated ones; delete the old files if you no longer want them tracked (#200)

Features

  • Secret redaction in policy XML — apiops extract now redacts inline secrets (including literal bearer tokens in Authorization headers) from extracted policy files while preserving named-value references. apiops publish performs a pre-flight scan of all artifacts and aborts (including in dry-run mode) if any *** REDACTED *** markers remain, preventing accidental secret exposure (#199)
  • JSON schemas and Copilot prompts for filter/override configuration — new schemas/extractor-config.schema.json and schemas/override-config.schema.json provide IDE autocompletion for configuration.extractor.yaml and configuration.{env}.yaml via the yaml-language-server $schema directive. apiops init now also lays down apiops-configure-filter.prompt.md and apiops-configure-overrides.prompt.md to conversationally guide users through building these files. Schemas are auto-generated from the TypeScript types on every build so they stay in sync (#183)
  • Dry-run validation gate in generated publish pipelines — GitHub Actions and Azure DevOps publish templates emitted by apiops init now run apiops publish --dry-run before every real publish step. If the dry-run fails (connectivity, invalid resources, permission errors), the pipeline halts before touching APIM, preventing partial-failure states (#182)
  • Identity setup guides rewritten for UI workflows — the manual identity setup guides emitted by apiops init now walk users through the Azure portal, Azure DevOps, and GitHub web UIs with step-by-step instructions and links to official docs, while the companion .prompt.md files remain the CLI/scripted path for Copilot-driven setup (#200)

Bug Fixes

  • Removed stale mcpServerInformation.json references — follow-up to #173, which moved MCP server configuration into apiInformation.json. Documentation (docs/reference/artifact-format.md, docs/reference/resource-types.md) and the all-resource-types integration test manifest now match the post-#173 artifact layout (#205)

0.3.0-alpha.0 — 2026-06-25

Breaking Changes

  • Removed unimplemented CLI options — --spec-format (extract command) and --otel (global) have been removed from the CLI, docs, and specs. Both were documented but never implemented, so no functional behavior changes for users who weren't relying on them (#165)

Features

  • Wildcard pattern matching in filter configuration — all name-based filter fields (apis, backends, namedValues, etc.) now accept glob-style patterns with * and ?. Exact names still work alongside patterns (#160)
  • Workspace sub-resource filtering — nested workspace filters are now applied at runtime (previously documented but not implemented). Wildcard patterns in the workspaces list trigger discovery-then-filter instead of being used as literal names. Adds schemas field on WorkspaceSubFilter (#160)
  • Token substitution validation in generated GitHub Actions publish workflow — apiops init now adds a validation step between token substitution and publish that greps for unresolved `{#[...]#}` tokens and fails the job with a clear list of unmapped names. Mirrors the existing Azure DevOps behavior (#158)
  • MCP publish from embedded API metadata — MCP configuration is now read/written exclusively from apiInformation.json; the redundant mcpServerInformation.json sidecar is no longer produced or consumed. Legacy sidecars are ignored. Tool operation references are rewritten from source to target ARM IDs before override application so overrides still win (#173)
  • Association scope tracking for round-trip correctness — extract/publish now records and reconstructs whether each linked resource (e.g. workspace product → built-in group) is service-scoped or workspace-scoped, producing correct ARM paths in both directions. Backward-compatible with legacy artifact files that only contain name. 409 "link already exists" responses are treated as idempotent successes (#175)

Bug Fixes

  • Resource group log masking preserves meaningful segments — Protect-ResourceGroupName now detects resource group names ending with a long numeric suffix (>=6 digits, typical of GitHub run_id values) and preserves the last dash-separated segment before the number. Output goes from rg-...1553476 to rg-...src-27781553476, making source vs target groups distinguishable in logs (#168)
  • Override config template no longer hardcodes a secret — the generated configuration.override.yaml from apiops init now uses a `{#[DB_Connection_String]#}` token placeholder for the connection-string example (aligned with the pipeline substitution format) and drops the confusing "APIOps Toolkit" reference comment (#164)

Docs & Testing

  • Incremental publish behavior documented — clarified that changes to override files alone don't trigger incremental publish; only API/policy/etc. artifact changes do (#159)
  • Environment overrides guide improvements — expanded examples and clarifications in docs/guides/environment-overrides.md (#166)
  • All-types round-trip test imports Petstore Swagger — the all-resource-types integration test now imports the canonical Petstore Swagger spec in both V2 and V3 forms, exercising a broader surface (#171)

0.2.1-alpha.0 — 2026-06-12

Features

  • Token substitution in publish pipelines — `{#[TOKEN_NAME]#}` placeholders are now resolved during publish, matching APIOps Toolkit behavior (#127)

Bug Fixes

  • Named value reference resolution — logger credentials now correctly resolve {{displayName}} refs across environments; auto-generated named values are published when an override is provided (#145)
  • Redacted secret guard — secret named values with *** REDACTED *** placeholder are skipped during publish with a clear warning (#145)
  • Schema ref stripping extended — removes stale schemaId/typeName from queryParameters, headers, templateParameters, and response headers during operation PATCH (#145)
  • Workspace ARM paths — use workspace-specific ARM paths for association resources (tag links, product links) (#136)

Docs & Testing

  • Comprehensive environment override documentation — added examples for all resource types, auto-generated named value walkthrough, and gotchas for secrets and loggers (#145)
  • Override config template — added logger credentials.instrumentationKey example (#145)

0.2.0-alpha.0 — 2026-06-10

Features

  • A2A (Agent-to-Agent) API support — full extract/publish round-trip for A2A protocol APIs (#89)
  • ApiOperation as first-class resource — operations are persisted individually with PATCH reconciliation for drift-free round-trips (#104)
  • Async LRO polling — long-running APIM operations are polled to completion; OpenAPI specs are sanitized before import (#112)
  • Workspace support on V2 SKUs — workspace-scoped resources (APIs, products, backends, named values, tags) are extracted and published with correct ARM paths (#128, #129)
  • Integration test split into 7 phases — deploy, extract, validate, override, publish, compare, teardown — each runnable independently (#92)

Bug Fixes

  • Override & filter config alignment — fully aligned with APIOps Toolkit array-based format (#102, #115)
  • Schema ref stripping — removes stale schemaId/typeName from operation representations during post-import PATCH reconciliation (#111)
  • Windows cmd.exe quoting — fixed stdin and argument quoting issues in Invoke-MaskedProcess (#110)

Docs & Testing

  • Extract filter documentation — documented full filter surface and explicit exclude-all semantics (#103)
  • Hardened teardown — Phase 7 handles APIM delete/purge races and soft-delete conflicts (#122)
  • Package-build test README — added single-test run command for quick iteration (#87)

0.1.7-alpha.0 — 2026-06-01

Features

  • Workspace-scoped resource refactor — uses workspaceSupported flag to determine which resource types are available in workspace containers (#84)

Bug Fixes

  • Premium SKU round-trip fixes — resolved test failures specific to Premium tier (#80)
  • Workspace unit test fixes — corrected test failures introduced by workspace refactor (#93)

Docs & Testing

  • Air-gapped setup walkthroughs — step-by-step guides for GitHub Actions and Azure DevOps in disconnected environments (#77)
  • APIOps terminology update — replaced "APIOps v1/v2" with "APIOps Toolkit/CLI" across all docs (#94)
  • API version docs correction — fixed default API version in documentation (#81)
  • Integration test skill notes — added AADSTS700016 and UI access troubleshooting (#83)

0.1.6-alpha.0 — 2026-05-21

Features

  • MCP server support — extract and publish MCP server configurations (#36, #51)
  • Publish --commit-id flag — CLI-over-env precedence for commit tracking (#47)
  • Reusable integration test workflow — workflow_call support for CI reuse (#42)

Bug Fixes

  • AzDO publish pipeline flag — corrected --overrides (was --override) in Azure DevOps template (#75)
  • Empty override file handling — gracefully handles empty or missing override files (#33)

Docs & Testing

  • User-facing documentation — added getting started guides, architecture diagram, and agent charters (#69, #56)
  • Open-source readiness — copyright headers, sensitivity audit, accuracy policies (#78)
  • Security hardening — added SecurityExpert to Squad team (#70)

0.1.5-alpha.1 — 2026-05-07

Features

  • Azure DevOps init — interactive Copilot prompt with managed identity / WIF support (#31)
  • Public npm registry support — install directly from @azure-tools/apiops-cli on npmjs.com (#28)

Bug Fixes

  • Empty override file — fixed crash when override file exists but is empty (#33)
  • Dependency bump — updated uuid and @azure/msal-node (#26)

Docs & Testing

  • Auth documentation — clarified OIDC vs client-secret auth paths (#27)
  • Azure DevOps manual setup — updated instructions for apiops init --ci azure-devops (#30)

0.1.4-alpha.1 — 2026-04-29

Features

  • User-Agent header — all REST API calls now include a User-Agent header for tracing (#21)
  • Optional --cli-package parameter — enables using apiops from the public npm registry without specifying a local package path (#20)

0.1.2-alpha.0 — 2026-04-28

Features

  • Initial release — core extract, publish, and init commands for Azure API Management (#15)
  • CodeQL analysis — automated security scanning workflow (#19)