Skip to content

Commit 37ed3cc

Browse files
stacynolandpre-commit-ci[bot]marcoesters
authored
Add installer attributes for name, version, platform, and type to .installer.info (#1260)
* Add installer attributes for name, version, platform, and type to .constructor-build.info * Add news item for PR 1260 * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Revert changes for .constructor-build.info file * Add installer name, version, platform, and type to .installer.info file * Change 'platform' to '_platform' for 'info.get()' call * Add test statements for .installer.info to 'test_example_miniforge' * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Reduce if-else statements in 'test_example_miniforge' * Move installer_name and installer_version to parameterized values in 'test_example_miniforge' * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update tests/test_examples.py Co-authored-by: Marco Esters <mesters@anaconda.com> * Check installer platform against 'cc_platform' for testing .installer.info values * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Marco Esters <mesters@anaconda.com>
1 parent f80d676 commit 37ed3cc

5 files changed

Lines changed: 50 additions & 4 deletions

File tree

constructor/nsis/main.nsi.tmpl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1502,6 +1502,7 @@ Section "Install"
15021502
SetOutPath "$INSTDIR"
15031503
File {{ conda_exe }}
15041504
File {{ pre_uninstall }}
1505+
File {{ installer_info }}
15051506

15061507
{%- for path, files in EXTRA_FILES | items %}
15071508
SetOutPath "{{ path }}"

constructor/preconda.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import ruamel_json as json
5050

5151
files = (
52+
".installer.info",
5253
"pkgs/.constructor-build.info",
5354
"pkgs/urls",
5455
"pkgs/urls.txt",
@@ -165,6 +166,15 @@ def write_files(info: dict, workspace: str):
165166
with open(join(pkgs_dir, ".constructor-build.info"), "w") as fo:
166167
json.dump(system_info(), fo)
167168

169+
out = {
170+
"name": info.get("name"),
171+
"version": info.get("version"),
172+
"platform": info.get("_platform"),
173+
"type": info.get("installer_type"),
174+
}
175+
with open(join(workspace, ".installer.info"), "w") as fo:
176+
json.dump(out, fo)
177+
168178
all_urls = info["_urls"].copy()
169179
for env_info in info.get("_extra_envs_info", {}).values():
170180
all_urls += env_info["_urls"]

constructor/winexe.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ def make_nsi(
187187
"pre_install": "@pre_install.bat",
188188
"post_install": "@post_install.bat",
189189
"pre_uninstall": "@pre_uninstall.bat",
190+
"installer_info": "@.installer.info",
190191
"index_cache": "@" + join("pkgs", "cache"),
191192
"repodata_record": "@" + join("pkgs", "repodata_record.json"),
192193
}

news/1260-installer-attributes

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
### Enhancements
2+
3+
* <news item>
4+
5+
### Bug fixes
6+
7+
* <news item>
8+
9+
### Deprecations
10+
11+
* <news item>
12+
13+
### Docs
14+
15+
* <news item>
16+
17+
### Other
18+
19+
* Add the `installer` name, version, platform and type attributes to a `.installer.info` file in the main `workspace` directory,
20+
so this information can be persistently stored. (#1250)

tests/test_examples.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from conda.models.version import VersionOrder as Version
2323
from ruamel.yaml import YAML
2424

25+
from constructor.conda_interface import cc_platform
2526
from constructor.utils import (
2627
StandaloneExe,
2728
check_version,
@@ -570,8 +571,14 @@ def test_example_mirrored_channels(tmp_path, request):
570571
),
571572
reason="Known issue with conda-standalone<=23.10: shortcuts are created but not removed.",
572573
)
573-
@pytest.mark.parametrize("example", ("miniforge", "miniforge-mamba2"))
574-
def test_example_miniforge(tmp_path, request, example):
574+
@pytest.mark.parametrize(
575+
"example, installer_name, installer_version",
576+
[
577+
("miniforge", "Miniforge3", "25.0.0-1"),
578+
("miniforge-mamba2", "Miniforge3-mamba2", "25.1.1-0"),
579+
],
580+
)
581+
def test_example_miniforge(tmp_path, request, example, installer_name, installer_version):
575582
input_path = _example_path(example)
576583
for installer, install_dir in create_installer(input_path, tmp_path):
577584
if installer.suffix == ".sh":
@@ -596,9 +603,16 @@ def test_example_miniforge(tmp_path, request, example):
596603
# Check that key metadata files are in place
597604
assert install_dir.glob("conda-meta/*.json")
598605
assert install_dir.glob("pkgs/cache/*.json") # enables offline installs
606+
# Check that the installer info file is in place
607+
info_file = install_dir / ".installer.info"
608+
assert info_file.is_file()
609+
installer_info = json.loads(info_file.read_text())
610+
assert installer_info["name"] == installer_name
611+
assert installer_info["version"] == installer_version
612+
assert installer_info["platform"] == cc_platform
613+
assert installer_info["type"] == installer.suffix[1:]
599614
if installer.suffix == ".pkg" and ON_CI:
600-
basename = "Miniforge3" if example == "miniforge" else "Miniforge3-mamba2"
601-
_sentinel_file_checks(input_path, Path(os.environ["HOME"]) / basename)
615+
_sentinel_file_checks(input_path, Path(os.environ["HOME"]) / installer_name)
602616
if installer.suffix == ".exe":
603617
for key in ("ProgramData", "AppData"):
604618
start_menu_dir = Path(

0 commit comments

Comments
 (0)