------------------------------------------------------------------- Mon Mar 2 07:05:46 UTC 2026 - Johannes Kastl - update to 11.0.0: * Switch license from GPL-2.0+ to Apache-2.0 ------------------------------------------------------------------- Mon Mar 2 06:41:52 UTC 2026 - Johannes Kastl - update to 10.0.0: * Replace distro dependency with built-in /etc/os-release parser, making the package dependency-free. macOS Platform.info() now returns distro_id: None instead of distro_id: "darwin". * Add new Agent trait type for detecting AI coding agents. * Add 3 agent definitions: CLAUDE_CODE, CLINE, CURSOR. * Add current_agent() detection function. * Add agent group: ALL_AGENTS. * Add @skip_ and @unless_ pytest decorators for all agents and agent groups. * Add GENERIC_LINUX platform for Linux environments where distro cannot identify the specific distribution (e.g., minimal containers or build chroots without /etc/os-release). Closes #479. * Show detected agent in extra-platforms CLI output. * Use TERM, CI, and LLM environment variables to distinguish unrecognized terminals, CI systems, and agents from absent ones. ------------------------------------------------------------------- Tue Feb 17 05:59:05 UTC 2026 - Johannes Kastl - update to 9.2.0: * Add new Terminal trait type for detecting terminal emulators. Closes #459. * Add 20 terminal definitions: ALACRITTY, APPLE_TERMINAL, CONTOUR, FOOT, GHOSTTY, GNOME_TERMINAL, GNU_SCREEN, HYPER, ITERM2, KITTY, KONSOLE, RIO, TABBY, TILIX, TMUX, VSCODE_TERMINAL, WEZTERM, WINDOWS_TERMINAL, XTERM, ZELLIJ. * Add current_terminal() detection function. * Add terminal groups: ALL_TERMINALS, GPU_TERMINALS, MULTIPLEXERS, NATIVE_TERMINALS, WEB_TERMINALS. * Add @skip_ and @unless_ pytest decorators for all terminals and terminal groups. * Display all detected traits and groups in extra-platforms CLI. * Fix emoji column alignment in CLI. - update to 9.1.0: * Add extra-platforms CLI command. * Skip Nuitka binary builds. * Add new ALPINE, KALI, MANJARO, OPENWRT platform definitions. * Replace filesystem-based shell detection with parent process tree walking via /proc on Linux. * Make is_powershell() detection cross-platform (Linux, macOS, Windows) via PSModulePath environment variable and process tree inspection. * Fix CLI crash on Windows due to cp1252 encoding not supporting Unicode output. * Tweak some icons. * Add issue template with detection results reporting. ------------------------------------------------------------------- Thu Feb 12 06:39:16 UTC 2026 - Johannes Kastl - update to 9.0.0: * Add new Shell trait type for detecting command-line interpreters. * Add 12 shell definitions: ASH, BASH, CMD, CSH, DASH, FISH, KSH, NUSHELL, POWERSHELL, TCSH, XONSH, ZSH. * Add current_shell() detection function. * Add shell groups: ALL_SHELLS, BOURNE_SHELLS, C_SHELLS, OTHER_SHELLS, WINDOWS_SHELLS. * Add @skip_ and @unless_ pytest decorators for all shells and shell groups. * Fix icons conflicts. * Fix crash in compiled binaries (Nuitka, PyInstaller, cx_Freeze) caused by missing source files for docstring extraction. * Force Sphinx documentation builds to use Python >= 3.12 via [tool.uv.dependency-groups]. * Remove all deprecated backward-compatibility aliases: - Remove ALL_PLATFORM_IDS (use ALL_TRAIT_IDS). - Remove ALL_PLATFORMS_WITHOUT_CI (use ALL_PLATFORMS). - Remove UNKNOWN_LINUX (use UNKNOWN_PLATFORM). - Remove ANY_ARM, ANY_MIPS, ANY_SPARC, ANY_WINDOWS (use ALL_ARM, ALL_MIPS, ALL_SPARC, ALL_WINDOWS). - Remove OTHER_UNIX (use OTHER_POSIX). - Remove current_os() (use current_platform()). - Remove current_platforms() (use current_traits()). - Remove platforms_from_ids() (use traits_from_ids()). - Remove is_unknown_linux() (use is_unknown_platform()). - Remove is_all_architectures(), is_all_platforms(), is_all_ci(), is_all_traits() (use is_any_architecture(), is_any_platform(), is_any_ci(), is_any_trait()). - Remove is_all_platforms_without_ci() (use is_any_platform()). - Remove is_ci() (use is_any_ci()). - Remove is_other_unix() (use is_other_posix()). - Remove is_bsd_without_macos() (use is_bsd_not_macos()). - Remove is_unix_without_macos() (use is_unix_not_macos()). - Remove Group._extract_members() and Group._extract_platforms() (use extract_members()). - Remove deprecated module shims for extra_platforms.platform and extra_platforms.operations. * Remove '_deprecated.py' module. ------------------------------------------------------------------- Tue Feb 3 11:56:26 UTC 2026 - Johannes Kastl - update to 8.0.0: * Add aliases field to Trait class, allowing alternative IDs that resolve to the canonical ID. * Add aliases for common architecture names: - arm64 → aarch64 - amd64 → x86_64 - armhf, armv7 → armv7l - i486 → i386 - powerpc64le, ppc64el → ppc64le * Emit a UserWarning when an alias is used, encouraging use of the canonical ID. * Change Trait.aliases type from tuple to frozenset for better semantics. * Add new BIG_ENDIAN and LITTLE_ENDIAN groups to classify architectures by endianness, with is_big_endian() and is_little_endian() detection functions. * Remove operations.py and move content to group and group_data modules. * Rename Group._extract_members() to extract_members() and make it public. * Simplify reduce() algorithm from brute-force enumeration to a greedy approximation for better performance. * Move current_*() and is_unknown_*() functions to detection.py module. * Create new platform_info.py module for platform-specific info gathering. * Add claude.md documentation file. ------------------------------------------------------------------- Mon Jan 19 06:56:02 UTC 2026 - Johannes Kastl - update to 7.0.0: - Add new ARMV5TEL architecture. - Add new DRAGONFLY_BSD, HAIKU and ILLUMOS platforms. - Add new ARCH_32_BIT, ARCH_64_BIT and UNKNOWN groups. - Add new detection functions: - is_armv5tel() - is_dragonfly_bsd() - is_haiku() - is_illumos() - is_arch_32_bit() - is_arch_64_bit() - is_unknown() - Fix detection of AARCH64 on Windows ARM runners. - Rename UNKNOWN_LINUX trait to UNKNOWN_PLATFORM. - Remove UNKNOWN_ARCHITECTURE trait from ALL_ARCHITECTURES group. - Remove UNKNOWN_LINUX trait from ALL_PLATFORMS group. - Remove UNKNOWN_CI trait from ALL_CI group. - current_architecture(), current_platform() and current_ci() functions now returns UNKNOWN_ARCHITECTURE, UNKNOWN_PLATFORM and UNKNOWN_CI if detection fails. Add strict mode to raise an exception instead. - Rename groups: - OTHER_UNIX → OTHER_POSIX - ANY_ARM → ALL_ARM - ANY_MIPS → ALL_MIPS - ANY_SPARC → ALL_SPARC - ANY_WINDOWS → ALL_WINDOWS - Rename detection functions: - is_other_unix() → is_other_posix() - is_all_architectures() → is_any_architecture() - is_all_platforms() → is_any_platform() - is_all_ci() → is_any_ci() - is_all_traits() → is_any_trait() - is_unknown_linux() → is_unknown_platform() - is_bsd_without_macos() → is_bsd_not_macos() - is_unix_without_macos() → is_unix_not_macos() - Re-introduce aliases removed in v6.0.0 for backward compatibility: - Group._extract_platforms() → Group._extract_members() - is_all_platforms_without_ci() → is_any_platform() - is_ci() → is_any_ci() - Rename Pytest decorators: - @skip/@unless_unknown_linux → @skip/@unless_unknown_platform - @skip/@unless_bsd_without_macos → @skip/@unless_bsd_not_macos - @skip/@unless_unix_without_macos → @skip/@unless_unix_not_macos - Deprecate renamed symbols and detection functions with aliases. - Pre-compute traits and groups metadata to enforce conventions for data definitions, detection functions, Pytest decorators and document generation. - Mark all canonical groups with the ⬥ symbol everywhere in the documentation. - Cross-link all traits, groups and detection functions in the documentation. ------------------------------------------------------------------- Fri Jan 16 13:45:07 UTC 2026 - Johannes Kastl - update to 6.0.0: * Add architecture detection: aarch64, arm, armv6l, armv7l, armv8l, i386, i586, i686, loongarch64, mips, mips64, mips64el, mipsel, ppc, ppc64, ppc64le, riscv32, riscv64, s390x, sparc, sparc64, unknown_architecture, wasm32, wasm64, x86_64. * Architectures, platforms and CI systems are now known as traits. * Add new current_traits() method to return all traits matching the current environment: architecture, platforms and CI systems. Deprecate current_platforms() in favor of it. * Add new current_architecture() and current_ci() methods to return the current architecture and CI system. * Rename: - current_os() to current_platform(). - platforms_from_ids() to traits_from_ids(). - CI group to ALL_CI. CI now refers to the CI(Trait) class. - ALL_PLATFORM_IDS constant to ALL_TRAIT_IDS. - Group.platforms to Group.members. - Group.platform_ids to Group.member_ids. - Group._extract_platforms() to Group._extract_members() * Group.members is now an immutable MappingProxyType. * Add more in-place operators (|=, &=, -=, ^=) and set-like behavior to Group. * Add canonical attribute to Group. * Add new ALL_ARCHITECTURES, ANY_ARM, X86, LOONGARCH, ANY_MIPS, POWERPC, RISCV, ANY_SPARC, IBM_MAINFRAME, WEBASSEMBLY and ALL_TRAITS groups. * Deprecate ALL_PLATFORMS_WITHOUT_CI group is favor of ALL_PLATFORMS. * Add new ALL_ARCHITECTURE_GROUPS, ALL_PLATFORM_GROUPS and ALL_CI_GROUPS collections of groups. * Remove utilization workaround for macos-15-intel. * Replace deprecated codecov/test-results-action by codecov/codecov-action. * Move auto-lock time from 8:43 to 4:43. - switch to tarball from GitHub, as the one from PyPi does no longer container the tests directory ------------------------------------------------------------------- Tue Dec 9 06:44:50 UTC 2025 - Johannes Kastl - update to 5.1.0: * Change Amazon Linux icon. * Add cooldown period for dependabot and uv.lock updates. * Merge all label jobs into a single one. * Change the test, typing and docs extra dependency groups into development dependency groups. * Uncap all dependencies. * Run tests on Python 3.14t and 3.15t free-threaded variants. * Run tests on ubuntu-slim GitHub Actions runner. * Run docs update job on ubuntu-slim runner. * Unlock a CPU core stuck at 100% utilization on macos-15-intel. ------------------------------------------------------------------- Mon Nov 17 06:55:54 UTC 2025 - Johannes Kastl - update to 5.0.1: * Add detection of CachyOS. Closes #341. ------------------------------------------------------------------- Tue Nov 4 16:54:46 UTC 2025 - Johannes Kastl - update to 5.0.0 * Changes - Relax dependencies to support Python 3.10. - Re-introduce tomli dependency for Python 3.10 users. - Skip tests on intermediate Python versions (3.11, 3.12 and 3.13) to reduce CI load. ------------------------------------------------------------------- Sun Nov 2 16:01:14 UTC 2025 - Johannes Kastl - update to 4.1.1: * Add detection of Ultramarine Linux. Closes #329. ------------------------------------------------------------------- Wed Oct 22 04:46:43 UTC 2025 - Johannes Kastl - update to 4.1.0: * Add new invalidate_caches() method to invalidate internal caches used for platform detection. * Remove dependency on boltons. * Add all Operating System :: trove classifiers. * Add all platform names as package keywords. - update to 4.0.0: * Fix detection of GNU/Hurd. Closes #308. * Move all typing-related imports behind a hard-coded TYPE_CHECKING guard to avoid runtime imports. * Remove maximum capped version of all dependencies (relax all ~= specifiers to >=). This gives more freedom to downstream and upstream packagers. Document each minimal version choice. * Add official support of Python 3.14. * Run tests on Python 3.15. * Skip tests on Python 3.12 and 3.13 to reduce CI load. * Use astral-sh/setup-uv action to install uv instead of manually installing it with pip. * Run tests on macos-26 and macos-15-intel runners. * Remove tests on EOL'ed windows-2019 and macos-13. * Support GitHub admonitions in Sphinx/MyST documentation. ------------------------------------------------------------------- Wed Aug 6 05:28:30 UTC 2025 - Johannes Kastl - update to 3.2.3: * Add detection of macOS Tahoe (v26.x) ------------------------------------------------------------------- Sun May 25 07:58:30 UTC 2025 - Johannes Kastl - update to 3.2.2: * Fix detection of UNKNOWN_CI ------------------------------------------------------------------- Sun May 18 06:25:24 UTC 2025 - Johannes Kastl - update to 3.2.1: * Add convenient ALL_PLATFORMS_WITHOUT_CI group to exclude all CI systems from ALL_PLATFORMS ------------------------------------------------------------------- Sun May 18 06:03:14 UTC 2025 - Johannes Kastl - update to 3.2.0: * Add detection of CI systems: GITHUB_CI, GITLAB_CI and UNKNOWN_CI. * Add new CI group to group all CI platforms. * Move OS families diagrams to group documentation page. * Remove ALL_PLATFORMS from Sankey diagram. * Run tests on windows-11-arm runners. * Remove tests on EOL ubuntu-20-04. ------------------------------------------------------------------- Wed Mar 5 10:53:54 UTC 2025 - Johannes Kastl - update to 3.1.0: * Allow platform ID membership test on groups. * Add items() method to Group. * Allow None values in nested references to platforms and groups. * Keep initial order of data from platforms_from_ids() and groups_from_ids() results. * Allow arbitrary arguments number in Group._extract_platforms(). ------------------------------------------------------------------- Wed Mar 5 10:51:41 UTC 2025 - Johannes Kastl - update to 3.0.0: * Allow set operations to resolve group and Platform IDs. * Make resolution of platform and group IDs case-insensitive. * Only runs website tests on Linux to prevent DOSing them. * Drop supports for Python 3.10. * Remove tomli dependency. ------------------------------------------------------------------- Thu Feb 20 18:31:07 UTC 2025 - Johannes Kastl - update to 2.1.0: * Add new platforms_from_ids and groups_from_ids methods to retrieve platforms and groups from a collection of IDs. * Allow a platform to be fetched by its ID from a group with the group[platform_id] item getter syntax. * Add new ALL_PLATFORM_IDS, ALL_GROUP_IDS and ALL_IDS constants. * Removes ALL_OS_LABELS. * Add windows-2025 to the test matrix. * Mark Python 3.14 tests as stable. ------------------------------------------------------------------- Fri Jan 3 08:46:58 UTC 2025 - Johannes Kastl - update to 2.0.0: * Add support for Nobara detection. * Fix current_os() to always return a single platform. Closes #158. * Add new current_platforms() method to return all platforms matching the current environment. * Generate a pair of Pytest @skip_/@unless_ decorators for each platform and group. * Change all group membership check utilities to be functions instead of variables. You now have to call is_() instead of is_. * Cache the result of is_() group membership check utilities. * Do not call all detection heuristics on module import. Instead, call them lazily when needed. * Make URLs required on all platforms. * Invite users in error messages and logs to contribute back edge-cases to improve detection heuristics. * Upload test results to coverage. ------------------------------------------------------------------- Tue Dec 3 08:39:24 UTC 2024 - Johannes Kastl - update to 1.7.0: * Display the hierarchy of non-overlapping groups as a mindmap. * Add URL on all platforms. * Add support for openSUSE Tumbleweed detection. Closes #133. * Do not allow icons on platforms and groups to be empty. * Run tests in parallel to speed up CI. ------------------------------------------------------------------- Thu Nov 28 10:31:10 UTC 2024 - Johannes Kastl - enable builds for python3.13 ------------------------------------------------------------------- Wed Nov 20 13:47:55 UTC 2024 - Johannes Kastl - new package python-extra-platforms, required by python-click-extra