@@ -5,6 +5,103 @@ All notable changes to this project will be documented in this file.
55The format is based on [ Keep a Changelog] ( https://keepachangelog.com/en/1.0.0/ ) ,
66and this project adheres to [ Semantic Versioning] ( https://semver.org/spec/v2.0.0.html ) .
77
8+ ## [ 3.0.0] - 2026-01-19
9+
10+ ### 🔒 Production Hardening
11+
12+ This release transforms the action into a bulletproof primitive suitable for foundational CI/CD use.
13+
14+ ### Added ➕
15+
16+ - ** Invariant Validation** - Mandatory validation step ensures setup integrity:
17+ - CLI is installed AND functional (not just present on PATH)
18+ - Authenticated org is reachable (not just auth succeeded)
19+ - API version is resolved (not just queried)
20+ - Fails fast with clear violation messages instead of silent partial failures
21+ - ** Default Usage Tracking** - New outputs enable enforcement hooks in higher-level workflows:
22+ - ` used_default_node ` - Whether default Node.js version (20) was used
23+ - ` used_default_cli_version ` - Whether default CLI version (latest) was used
24+ - ` used_default_api_version ` - Whether API version was auto-detected (always true currently)
25+ - Allows CI/CD policies to block deployments that rely on implicit defaults
26+ - ** Dry-Run Mode** - New ` dry_run ` input skips authentication and mutations while validating detection logic:
27+ - Useful for testing action configuration without consuming org API calls
28+ - Skips all auth steps but still installs CLI and resolves environment
29+ - ** Debug Mode** - New ` debug ` input placeholder for future verbose output (accepted but not yet implemented)
30+ - ** Structured Observability** - New step publishes audit-friendly summary to GitHub Step Summary:
31+ - Auth method, org type, API version
32+ - CLI and Node.js versions
33+ - Default usage warnings
34+ - Complete list of installed tools and plugins
35+ - Always runs (even on failure) for post-mortem analysis
36+ - ** Forward Compatibility Outputs** - Added outputs to support future v4 modularization:
37+ - ` cli_binary_path ` - Absolute path to installed binary (for custom tooling integration)
38+ - ` validated_config ` - JSON summary of effective configuration (for auditing/debugging)
39+
40+ ### Changed 🔧
41+
42+ - ** BREAKING (Intentional)** : Action now fails fast on partial failures
43+ - Workflows that previously succeeded despite broken CLI or unreachable orgs will now fail
44+ - This is the correct behavior for a primitive—silent failures are dangerous
45+ - Example: CLI installed but ` sf ` command non-functional → now fails instead of succeeding
46+ - ** Shell Hardening Enhanced** : All bash steps now use strict error handling:
47+ - Core steps: ` set -euo pipefail ` (exit on error, undefined variables, or pipe failures)
48+ - Optional tooling: ` set -eu ` + conditional ` pipefail ` based on ` strict ` mode
49+ - Prevents subtle bugs from undefined variables while keeping plugin installs resilient
50+
51+ ### Fixed 🐞
52+
53+ - ** Hidden Partial Failure Risk** : Action will no longer report success when:
54+ - CLI installation succeeds but CLI is non-functional
55+ - Authentication succeeds but org is unreachable
56+ - Org display succeeds but API version cannot be determined
57+ - ** Silent Downgrade Risk** : Default usage is now explicitly tracked and exposed
58+ - Prevents workflows from unknowingly relying on implicit defaults
59+ - Enables explicit versioning enforcement in hardened pipelines
60+
61+ ### Testing 🧪
62+
63+ - ** New Test Workflow** : ` test-invariants.yml ` validates:
64+ - Invariant validation catches failures correctly
65+ - Dry-run mode works without authentication
66+ - Default tracking outputs are accurate
67+ - All features work across Linux, macOS, Windows
68+
69+ ### Documentation 📖
70+
71+ - ** Guaranteed Invariants** : New README section documents the action's contract:
72+ - Lists explicit invariants guaranteed on success
73+ - Explains why this matters for primitive composability
74+ - Positions action as safe foundation for complex workflows
75+ - ** Versioning Policy** : Formal semantic versioning governance:
76+ - Defines what counts as breaking vs non-breaking changes
77+ - Guarantees defaults never change in MINOR versions
78+ - Recommends pinning to MAJOR version in production
79+ - ** Caching Strategy** : Comprehensive documentation of cache behavior:
80+ - Explains cache key composition
81+ - Documents CLI version resolution logic (npm query + time-based fallback)
82+ - Lists cache hit/miss scenarios
83+ - Provides cache refresh strategies
84+ - ** Architecture Documentation** : New ` docs/ARCHITECTURE.md ` captures:
85+ - Design philosophy and principles
86+ - Current v3 architecture with component diagrams
87+ - Future v4 modularization roadmap
88+ - Polyglot pattern for hybrid TypeScript utilities
89+ - Architectural Decision Records (ADRs)
90+
91+ ### Why This Matters
92+
93+ This action is designed as a ** primitive** , not an application. Primitives must fail loudly and clearly when invariants are violated. Silent partial failures undermine trust in the entire CI/CD pipeline.
94+
95+ Before v3.0.0, it was possible for:
96+
97+ - CLI to install but be non-functional → workflow succeeds → subsequent steps fail mysteriously
98+ - Auth to succeed but org be unreachable → workflow succeeds → deployments fail unpredictably
99+ - API version to be unresolved → workflow succeeds → commands using API calls fail
100+
101+ After v3.0.0, these scenarios fail immediately with actionable error messages.
102+
103+ ---
104+
8105## [ 2.2.0] - 2026-01-17
9106
10107### 🚀 New Features - Performance & Caching
@@ -231,6 +328,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
231328
232329---
233330
331+ [ 3.0.0 ] : https://github.com/rdbumstead/setup-salesforce-action/releases/tag/v3.0.0
234332[ 2.2.0 ] : https://github.com/rdbumstead/setup-salesforce-action/releases/tag/v2.2.0
235333[ 2.1.0 ] : https://github.com/rdbumstead/setup-salesforce-action/releases/tag/v2.1.0
236334[ 2.0.1 ] : https://github.com/rdbumstead/setup-salesforce-action/releases/tag/v2.0.1
0 commit comments