Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: Galvnyz/Az-Dev-Cleanup
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.5.0
Choose a base ref
...
head repository: Galvnyz/Az-Dev-Cleanup
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.6.0
Choose a head ref
  • 1 commit
  • 22 files changed
  • 2 contributors

Commits on Apr 3, 2026

  1. feat: v0.6.0 — Operational Readiness (#49)

    * chore: Add .gitignore and preserve output directory structure
    
    Generated report outputs (discovery reports, metric CSVs, Excel workbooks,
    cleanup logs) are now ignored. Scripts, queries, and documentation remain
    tracked. .gitkeep files preserve the reports/ and discovery/reports/
    directories for clones.
    
    Closes #41
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * feat: Add dry-run orchestrator with consolidated WhatIf report
    
    Invoke-CleanupDryRun.ps1 runs all 8 cleanup scripts in -WhatIf mode
    and produces a normalized CSV report for stakeholder review. Uses a
    declarative script registry pattern for result mapping, per-script
    error isolation, and dependency-aware execution ordering.
    
    Closes #42
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * feat: Add cost savings projection from cleanup candidates
    
    Get-CostSavingsProjection.ps1 cross-references dry-run output with Azure
    Cost Management data to estimate monthly savings per category. Uses a
    two-tier approach: real cost data where available, rate-card fallbacks
    for resources without billing records.
    
    Closes #43
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * feat: Add before/after tenant state comparison
    
    Save-TenantBaseline.ps1 captures lightweight tenant snapshots as versioned
    JSON (resource counts, RG counts, per-type breakdown, optional cost).
    Compare-TenantState.ps1 diffs two baselines or compares a baseline against
    the live tenant state, producing summary tables and per-type change detail.
    
    Closes #45
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * feat: Add cleanup execution orchestrator with safety gates
    
    Invoke-CleanupExecution.ps1 orchestrates all cleanup scripts with a 5-step
    safety pipeline: dry-run preview, confirmation gate, before baseline,
    execution with per-script error isolation, and after baseline with
    automatic comparison. Requires -Force for unattended execution.
    
    Closes #46
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * test: Add Pester tests for remaining cleanup scripts
    
    Adds test coverage for Remove-StoppedVMs, Remove-OldSnapshots,
    Remove-UnusedPublicIPs, and Remove-UnusedNSGs. All 27 tests pass.
    Each test file covers: exclude-tag/threshold filtering, resource-lock
    skip, and WhatIf safety (no destructive calls in dry-run).
    
    Closes #44
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * feat: Enhance scheduled-cleanup workflow with orchestrators and notifications
    
    Replaces individual script steps with Invoke-CleanupDryRun and
    Invoke-CleanupExecution orchestrators for full 8-script coverage.
    Adds cost savings projection, GITHUB_STEP_SUMMARY Markdown tables,
    webhook notifications (conditional on secret), and before/after
    comparison artifacts on execute runs.
    
    Closes #47
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * docs: Add operational runbook, update README and cleanup strategy
    
    Adds docs/operational-runbook.md with step-by-step guide for the full
    cleanup lifecycle. Updates README with new script inventory and quick
    start referencing orchestrators. Updates cleanup-strategy.md to reflect
    the consolidated dry-run/execution workflow.
    
    Closes #48
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * fix: Cap orphan detection lookback to 90 days (Activity Log API limit)
    
    The Azure Activity Log API rejects lookback periods over 90 days.
    Get-OrphanedResources.ps1 defaulted to 365 days, causing a BadRequest
    error during dry-run orchestration.
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * fix: Harden discovery script against API limits and fragile assumptions
    
    - Cap LookbackDays validation to 90 (Activity Log API hard limit)
    - Resolve Cost Management column indices from metadata instead of
      assuming fixed [cost, rg, currency] order
    - Fix KQL directory path to use $PSScriptRoot directly (script is
      already in discovery/)
    - Log warning when adaptive chunking hits the 5000-record limit on a
      single-day window (previously silently truncated)
    - Replace hardcoded TotalCostLast30Days key with dynamic TotalCost +
      CostLookbackDays fields in summary JSON
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * docs: Add HTML report design spec and implementation plan
    
    Design spec for a self-contained dark-themed HTML discovery report
    with KPI cards, inline SVG charts, searchable inventory table, and
    auto-generated recommendations. Implementation plan breaks the build
    into 12 incremental tasks.
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * feat(html-report): Add script skeleton with CSS, nav, and KPI cards
    
    Create Export-HtmlReport.ps1 that generates a self-contained dark-themed
    HTML report from Azure tenant discovery data. Includes full CSS theme with
    dark palette and responsive breakpoints, sticky sidebar navigation with
    scroll-spy, hamburger menu for mobile, and 4 KPI cards showing total
    resources, monthly cost, cleanup candidates, and untagged resource counts.
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * feat(html-report): Add data sections with SVG charts
    
    Implement Tasks 5-8: Tenant Overview (subscription table, resource type
    distribution bar chart, age histogram), Cost Analysis (stat boxes, top-20
    RG bar chart, cost table), Cleanup Candidates (donut chart with legend,
    collapsible detail tables with priority badges), and Governance Gaps
    (tag coverage progress bar, untagged-by-type breakdown).
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * feat(html-report): Add inventory, activity, and recommendations sections
    
    Implements Tasks 9-11: searchable/sortable resource inventory table (500-row
    initial display with show-all), activity analysis with dormant RG detection,
    data-driven recommendation cards, and enhanced footer with resource/cost stats.
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    * chore: Add .superpowers/ to gitignore
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    
    ---------
    
    Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    Daren9m and claude authored Apr 3, 2026
    Configuration menu
    Copy the full SHA
    b0af3d3 View commit details
    Browse the repository at this point in the history
Loading