Repository: zarf-dev/zarf (Go)

Issue:
Error when deploying v0.28.4 of init pkg using library Zarf
### Environment
Device and OS: Mac M1
App version: 0.28.4
Kubernetes distro being used: k3d


### Steps to reproduce
When calling the [packager.Deploy](https://github.com/defenseunicorns/zarf/blob/5b5396c1466a123e5fb83adb2f02ac040a2c3e5b/src/pkg/packager/deploy.go#L41) function, I get the following error:
```
unable to parse Zarf CLI version 'unset' : Invalid Semantic Version
```
The stack trace leads to the [validateLastNonBreakingVersion](https://github.com/defenseunicorns/zarf/blob/5b5396c1466a123e5fb83adb2f02ac040a2c3e5b/src/pkg/packager/common.go#L465) function. Some notes on that function:

On v0.28.3 of the init pkg:
- the `lastNonBreakingVersion` var gets set to `""`
- the `cliVersion` var is set to "unset"

On v0.28.4 of the init pkg
- the `lastNonBreakingVersion` var gets set to `"v0.27.0"`
- the `cliVersion` var is set to "unset"


Discussion: This is expected behavior - Zarf is trying to determine if the package that is being deployed might have issues deploying and is looking at it's version to do so - `unset` is the default value to flag that this value should be set - setting it to UnknownVersion will skip this check if you don't want to have a version at all (though this will throw errors in other places) or the version can be set to the version of Zarf (which is recommended since this value is used in checks elsewhere).

You should be able to get the info needed from `debug.BuildInfo` for now and we may take a look at refactoring this to be cleaner in the future (hence marking as tech debt instead of possible bug).



Fix (patch):
diff --git a/src/config/lang/english.go b/src/config/lang/english.go
index 9bfe870250..8e9ac8884f 100644
--- a/src/config/lang/english.go
+++ b/src/config/lang/english.go
@@ -256,6 +256,7 @@ const (
 	CmdPackageDeployFlagPublicKey                      = "Path to public key file for validating signed packages"
 	CmdPackageDeployValidateArchitectureErr            = "this package architecture is %s, but the target cluster has the %s architecture. These architectures must be the same"
 	CmdPackageDeployValidateLastNonBreakingVersionWarn = "the version of this Zarf binary '%s' is less than the LastNonBreakingVersion of '%s'. You may need to upgrade your Zarf version to at least '%s' to deploy this package"
+	CmdPackageDeployInvalidCLIVersionWarn              = "CLIVersion is set to '%s' which can cause issues with package creation and deployment. To avoid such issues, please set the value to the valid semantic version for this version of Zarf."
 	CmdPackageDeployErr                                = "Failed to deploy package: %s"
 
 	CmdPackageInspectFlagSbom      = "View SBOM contents while inspecting the package"
diff --git a/src/pkg/packager/common.go b/src/pkg/packager/common.go
index 0d93429bf0..1a986ffc58 100644
--- a/src/pkg/packager/common.go
+++ b/src/pkg/packager/common.go
@@ -496,14 +496,12 @@ func (p *Packager) validatePackageArchitecture() (err error) {
 	return nil
 }
 
-// validateLastNonBreakingVersion compares the Zarf CLI version against a package's LastNonBreakingVersion.
-// It will return an error if there is an error parsing either of the two versions,
-// and will throw a warning if the CLI version is less than the LastNonBreakingVersion.
+// validateLastNonBreakingVersion validates the Zarf CLI version against a package's LastNonBreakingVersion.
 func (p *Packager) validateLastNonBreakingVersion() (err error) {
 	cliVersion := config.CLIVersion
 	lastNonBreakingVersion := p.cfg.Pkg.Build.LastNonBreakingVersion
 
-	if lastNonBreakingVersion == "" || cliVersion == "UnknownVersion" {
+	if lastNonBreakingVersion == "" {
 		return nil
 	}
 
@@ -514,7 +512,9 @@ func (p *Packager) validateLastNonBreakingVersion() (err error) {
 
 	cliSemVer, err := semver.NewVersion(cliVersion)
 	if err != nil {
-		return fmt.Errorf("unable to parse Zarf CLI version '%s' : %w", cliVersion, err)
+		warning := fmt.Sprintf(lang.CmdPackageDeployInvalidCLIVersionWarn, config.CLIVersion)
+		p.warnings = append(p.warnings, warning)
+		return nil
 	}
 
 	if cliSemVer.LessThan(lastNonBreakingSemVer) {