Validate frozen environments. Checks: - No conflicts between freeze_base/freeze_env and extra_files for same environment - Conda-standalone version if frozen environments exist
(
info: dict, exe_type: StandaloneExe | None, exe_version: Version | None
)
| 138 | |
| 139 | # Validate frozen environments |
| 140 | def validate_frozen_envs( |
| 141 | info: dict, exe_type: StandaloneExe | None, exe_version: Version | None |
| 142 | ) -> bool: |
| 143 | """Validate frozen environments. |
| 144 | |
| 145 | Checks: |
| 146 | - No conflicts between freeze_base/freeze_env and extra_files for same environment |
| 147 | - Conda-standalone version if frozen environments exist |
| 148 | """ |
| 149 | |
| 150 | def get_frozen_env(path: str) -> str | None: |
| 151 | """Extract environment name from frozen marker destination path. |
| 152 | |
| 153 | Returns: |
| 154 | Environment name if frozen marker found in the path, otherwise None. |
| 155 | """ |
| 156 | parts = Path(path).parts |
| 157 | if parts == ("conda-meta", "frozen"): |
| 158 | return "base" |
| 159 | if len(parts) == 4 and parts[0] == "envs" and parts[-2:] == ("conda-meta", "frozen"): |
| 160 | return parts[1] |
| 161 | return None |
| 162 | |
| 163 | # Collect environments using freeze_base/freeze_env |
| 164 | frozen_envs = set() |
| 165 | if info.get("freeze_base", {}).get("conda") is not None: |
| 166 | frozen_envs.add("base") |
| 167 | for env_name, env_config in info.get("extra_envs", {}).items(): |
| 168 | if env_config.get("freeze_env", {}).get("conda") is not None: |
| 169 | frozen_envs.add(env_name) |
| 170 | |
| 171 | # Collect environments using extra_files frozen markers |
| 172 | frozen_envs_extra_files = set() |
| 173 | paths = [] |
| 174 | for file in info.get("extra_files", ()): |
| 175 | if isinstance(file, dict): |
| 176 | paths.extend(file.values()) |
| 177 | elif isinstance(file, str): |
| 178 | paths.append(file) |
| 179 | |
| 180 | for path in paths: |
| 181 | if env := get_frozen_env(path): |
| 182 | frozen_envs_extra_files.add(env) |
| 183 | |
| 184 | if not frozen_envs and not frozen_envs_extra_files: |
| 185 | return |
| 186 | |
| 187 | # Check for conflicts with extra_files |
| 188 | if common_envs := frozen_envs.intersection(frozen_envs_extra_files): |
| 189 | raise RuntimeError( |
| 190 | f"Frozen marker files found from both " |
| 191 | f"'freeze_base / freeze_env' and 'extra_files' for the following environments: {', '.join(sorted(common_envs))}" |
| 192 | ) |
| 193 | |
| 194 | # Conda-standalone version validation |
| 195 | if exe_type == StandaloneExe.CONDA and check_version( |
| 196 | exe_version, min_version="25.5.0", max_version="25.7.0" |
| 197 | ): |
no test coverage detected