Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
38a1da19ee |
Executable
+294
@@ -0,0 +1,294 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
################################################################################
|
||||||
|
## File: diff-image-versions.sh
|
||||||
|
## Desc: Compare software versions between two runner image releases
|
||||||
|
## Usage: ./diff-image-versions.sh <os-name> <version1> <version2>
|
||||||
|
##
|
||||||
|
## Example:
|
||||||
|
## ./diff-image-versions.sh ubuntu22 20251102.127 20251125.163
|
||||||
|
## ./diff-image-versions.sh win25 20251102.77 20251125.122
|
||||||
|
## ./diff-image-versions.sh macos-14 20251102.0024 20251125.0031
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<EOF
|
||||||
|
Usage: $(basename "${0}") <os-name> <version1> <version2>
|
||||||
|
|
||||||
|
Compare runner image versions and display software changes.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
os-name OS identifier (ubuntu22, ubuntu24, win19, win22, win25,
|
||||||
|
macos-13, macos-14, macos-15, or arm64 variants)
|
||||||
|
version1 Earlier version (YYYYMMDD.NNN)
|
||||||
|
version2 Later version (YYYYMMDD.NNN)
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
$(basename "${0}") ubuntu22 20251102.127 20251125.163
|
||||||
|
$(basename "${0}") win25 20251102.77 20251125.122
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
get_readme_path() {
|
||||||
|
local os_name="${1}"
|
||||||
|
local os_folder=""
|
||||||
|
local pattern=""
|
||||||
|
|
||||||
|
# Determine OS folder and readme filename pattern
|
||||||
|
case "${os_name}" in
|
||||||
|
ubuntu*)
|
||||||
|
os_folder="ubuntu"
|
||||||
|
local version="${os_name#ubuntu}"
|
||||||
|
pattern="Ubuntu${version}04-Readme.md"
|
||||||
|
;;
|
||||||
|
win*)
|
||||||
|
os_folder="windows"
|
||||||
|
local version="${os_name#win}"
|
||||||
|
pattern="Windows20${version}-Readme.md"
|
||||||
|
;;
|
||||||
|
macos*)
|
||||||
|
os_folder="macos"
|
||||||
|
pattern="${os_name}-Readme.md"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Error: Unknown OS '${os_name}'" >&2
|
||||||
|
echo "Valid: ubuntu*, win*, macos-*" >&2
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
local readme_path="images/${os_folder}/${pattern}"
|
||||||
|
|
||||||
|
# Verify file exists in git repository
|
||||||
|
if ! git cat-file -e "HEAD:${readme_path}" 2>/dev/null; then
|
||||||
|
echo "Error: Readme not found: ${readme_path}" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "${readme_path}"
|
||||||
|
}
|
||||||
|
|
||||||
|
validate_version() {
|
||||||
|
local version="${1}"
|
||||||
|
|
||||||
|
if [[ ! "${version}" =~ ^[0-9]{8}\.[0-9]+$ ]]; then
|
||||||
|
echo "Error: Invalid version '${version}'" >&2
|
||||||
|
echo "Format: YYYYMMDD.NNN (e.g., 20251102.127)" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
tag_exists() {
|
||||||
|
local tag="${1}"
|
||||||
|
|
||||||
|
if git rev-parse "${tag}" >/dev/null 2>&1; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "Error: Tag '${tag}' not found" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
# Check arguments
|
||||||
|
if [[ $# -ne 3 ]]; then
|
||||||
|
usage
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local os_name="${1}"
|
||||||
|
local version1="${2}"
|
||||||
|
local version2="${3}"
|
||||||
|
|
||||||
|
# Validate inputs
|
||||||
|
validate_version "${version1}" || return 1
|
||||||
|
validate_version "${version2}" || return 1
|
||||||
|
|
||||||
|
# Get readme path
|
||||||
|
local readme_path
|
||||||
|
readme_path="$(get_readme_path "${os_name}")" || return 1
|
||||||
|
|
||||||
|
# Construct git tags
|
||||||
|
local tag1="${os_name}/${version1}"
|
||||||
|
local tag2="${os_name}/${version2}"
|
||||||
|
|
||||||
|
# Verify tags exist
|
||||||
|
tag_exists "${tag1}" || return 1
|
||||||
|
tag_exists "${tag2}" || return 1
|
||||||
|
|
||||||
|
# Get release dates
|
||||||
|
local date1
|
||||||
|
local date2
|
||||||
|
date1=$(git log -1 --format="%ci" "${tag1}" | cut -d' ' -f1)
|
||||||
|
date2=$(git log -1 --format="%ci" "${tag2}" | cut -d' ' -f1)
|
||||||
|
|
||||||
|
# Calculate days between releases
|
||||||
|
local days_diff
|
||||||
|
days_diff=$(( ($(date -d "${date2}" +%s) - $(date -d "${date1}" +%s)) / 86400 ))
|
||||||
|
|
||||||
|
# Display header
|
||||||
|
echo "================================================================================"
|
||||||
|
echo "Comparing: ${os_name}"
|
||||||
|
echo " From: ${version1} (${date1})"
|
||||||
|
echo " To: ${version2} (${date2})"
|
||||||
|
echo " Span: ${days_diff} days"
|
||||||
|
echo "================================================================================"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Perform diff with minimal context (only changed lines with colors)
|
||||||
|
# ANSI codes: ^[[31m (red for -), ^[[32m (green for +), ^[[36m (cyan for @@)
|
||||||
|
# Filter to show only lines starting with red/green (additions/deletions)
|
||||||
|
local diff_output
|
||||||
|
diff_output=$(git diff --color=always --unified=0 "${tag1}:${readme_path}" "${tag2}:${readme_path}" | \
|
||||||
|
grep -E $'^\x1b\\[(31|32)m' | \
|
||||||
|
grep -v -E $'^\x1b\\[1m(---|\\+\\+\\+)')
|
||||||
|
|
||||||
|
if [[ -n "${diff_output}" ]]; then
|
||||||
|
# Extract announcements from both versions
|
||||||
|
local announcements1
|
||||||
|
local announcements2
|
||||||
|
announcements1=$(git show "${tag1}:${readme_path}" | sed -n '/| Announcements |/,/^\*\*\*$/p' | grep -E '^\| \[' | sed 's/^| \[/• [/' | sed 's/ |$//' || true)
|
||||||
|
announcements2=$(git show "${tag2}:${readme_path}" | sed -n '/| Announcements |/,/^\*\*\*$/p' | grep -E '^\| \[' | sed 's/^| \[/• [/' | sed 's/ |$//' || true)
|
||||||
|
|
||||||
|
# Show announcement changes
|
||||||
|
if [[ "${announcements1}" != "${announcements2}" ]]; then
|
||||||
|
echo "📢 Announcement Changes:"
|
||||||
|
echo "────────────────────────────────────────────────────────────────────────────────"
|
||||||
|
if [[ -n "${announcements2}" ]]; then
|
||||||
|
echo "${announcements2}"
|
||||||
|
else
|
||||||
|
echo "(no announcements)"
|
||||||
|
fi
|
||||||
|
echo "────────────────────────────────────────────────────────────────────────────────"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract cached tools sections
|
||||||
|
local cached_tools1
|
||||||
|
local cached_tools2
|
||||||
|
cached_tools1=$(git show "${tag1}:${readme_path}" | sed -n '/^### Cached Tools$/,/^###[^#]/p' | head -n -1 || true)
|
||||||
|
cached_tools2=$(git show "${tag2}:${readme_path}" | sed -n '/^### Cached Tools$/,/^###[^#]/p' | head -n -1 || true)
|
||||||
|
|
||||||
|
# Show cached tools changes
|
||||||
|
if [[ "${cached_tools1}" != "${cached_tools2}" ]]; then
|
||||||
|
local cached_diff
|
||||||
|
cached_diff=$(git diff --color=always --unified=2 --no-index \
|
||||||
|
<(echo "${cached_tools1}") <(echo "${cached_tools2}") 2>/dev/null | \
|
||||||
|
grep -E $'(^\x1b\\[(31|32)m[-+]| #### )' | \
|
||||||
|
sed -r 's/\x1b\[m$//' || true)
|
||||||
|
|
||||||
|
if [[ -n "${cached_diff}" ]]; then
|
||||||
|
echo "🔧 Cached Tools Changes (setup-* actions):"
|
||||||
|
echo "────────────────────────────────────────────────────────────────────────────────"
|
||||||
|
echo "${cached_diff}"
|
||||||
|
echo "────────────────────────────────────────────────────────────────────────────────"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Full Diff:"
|
||||||
|
echo "────────────────────────────────────────────────────────────────────────────────"
|
||||||
|
echo "${diff_output}"
|
||||||
|
echo "────────────────────────────────────────────────────────────────────────────────"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Count changes
|
||||||
|
local changes
|
||||||
|
changes=$(echo "${diff_output}" | wc -l)
|
||||||
|
echo "Changes: ${changes} lines"
|
||||||
|
|
||||||
|
# Parse version changes for breaking change analysis
|
||||||
|
local breaking_changes=()
|
||||||
|
local removals=()
|
||||||
|
local additions=()
|
||||||
|
|
||||||
|
# Extract clean lines (strip ANSI codes)
|
||||||
|
while IFS= read -r line; do
|
||||||
|
if [[ "${line}" =~ ^\-(.+)$ ]]; then
|
||||||
|
removals+=("${BASH_REMATCH[1]}")
|
||||||
|
elif [[ "${line}" =~ ^\+(.+)$ ]]; then
|
||||||
|
additions+=("${BASH_REMATCH[1]}")
|
||||||
|
fi
|
||||||
|
done < <(echo "${diff_output}" | sed -r 's/\x1b\[[0-9;]*m//g')
|
||||||
|
|
||||||
|
# Detect breaking changes
|
||||||
|
for removed in "${removals[@]}"; do
|
||||||
|
local tool_name=""
|
||||||
|
local old_version=""
|
||||||
|
local found_match=false
|
||||||
|
|
||||||
|
# Try to extract tool name and version (handle various formats)
|
||||||
|
if [[ "${removed}" =~ ^([^0-9]+[[:space:]]+)([0-9]+\.[0-9]+[^[:space:]]*) ]]; then
|
||||||
|
tool_name="${BASH_REMATCH[1]}"
|
||||||
|
old_version="${BASH_REMATCH[2]}"
|
||||||
|
elif [[ "${removed}" =~ ^([^0-9]+[[:space:]]+v)([0-9]+\.[0-9]+[^[:space:]]*) ]]; then
|
||||||
|
tool_name="${BASH_REMATCH[1]}"
|
||||||
|
old_version="${BASH_REMATCH[2]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If we found a semver-style version, look for matching addition
|
||||||
|
if [[ -n "${tool_name}" && -n "${old_version}" ]]; then
|
||||||
|
for added in "${additions[@]}"; do
|
||||||
|
if [[ "${added}" =~ ^${tool_name}([0-9]+\.[0-9]+[^[:space:]]*) ]]; then
|
||||||
|
local new_version="${BASH_REMATCH[1]}"
|
||||||
|
found_match=true
|
||||||
|
|
||||||
|
# Extract major version for semver comparison
|
||||||
|
if [[ "${old_version}" =~ ^([0-9]+)\. && "${new_version}" =~ ^([0-9]+)\. ]]; then
|
||||||
|
local old_major="${BASH_REMATCH[1]}"
|
||||||
|
local new_major="${BASH_REMATCH[1]}"
|
||||||
|
|
||||||
|
[[ "${old_version}" =~ ^([0-9]+)\. ]] && old_major="${BASH_REMATCH[1]}"
|
||||||
|
[[ "${new_version}" =~ ^([0-9]+)\. ]] && new_major="${BASH_REMATCH[1]}"
|
||||||
|
|
||||||
|
if [[ ${new_major} -gt ${old_major} ]]; then
|
||||||
|
breaking_changes+=("🔴 ${tool_name}${old_version} → ${new_version} (major version bump)")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If no match found and looks like a versioned tool, it's a removal
|
||||||
|
if [[ ${found_match} == false && -n "${old_version}" ]]; then
|
||||||
|
breaking_changes+=("❌ ${removed} (removed)")
|
||||||
|
elif [[ ${found_match} == false && "${removed}" =~ [0-9]+\.[0-9]+ ]]; then
|
||||||
|
breaking_changes+=("❌ ${removed} (removed)")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Display breaking changes
|
||||||
|
if [[ ${#breaking_changes[@]} -gt 0 ]]; then
|
||||||
|
echo ""
|
||||||
|
echo "⚠️ Breaking changes detected (${#breaking_changes[@]}):"
|
||||||
|
echo "--------------------------------------------------------------------------------"
|
||||||
|
printf '%s\n' "${breaking_changes[@]}"
|
||||||
|
echo "--------------------------------------------------------------------------------"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "No changes found."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Display PR link and commit count
|
||||||
|
local pr_number
|
||||||
|
pr_number=$(git log --all --format="%s" --grep="${version2}" | \
|
||||||
|
grep -oP '\(#\K[0-9]+(?=\))' | head -1)
|
||||||
|
|
||||||
|
local commit_count
|
||||||
|
commit_count=$(git rev-list --count "${tag1}..${tag2}")
|
||||||
|
|
||||||
|
echo "Commits: ${commit_count}"
|
||||||
|
|
||||||
|
if [[ -n "${pr_number}" ]]; then
|
||||||
|
echo "PR: https://github.com/actions/runner-images/pull/${pr_number}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Execute main function
|
||||||
|
main "$@"
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
| Announcements |
|
| Announcements |
|
||||||
|-|
|
|-|
|
||||||
| [[macOS] Deprecation of Xcode 16.3 and older runtimes on macOS 15 on January 12th, 2026.](https://github.com/actions/runner-images/issues/13392) |
|
|
||||||
| [[macOS] Deprecation of Xcode 16.4 on macOS 26 on December 8th.](https://github.com/actions/runner-images/issues/13345) |
|
| [[macOS] Deprecation of Xcode 16.4 on macOS 26 on December 8th.](https://github.com/actions/runner-images/issues/13345) |
|
||||||
| [[macOS] The macOS 13 Ventura based runner images will begin deprecation on September 22nd and will be fully unsupported by December 4th for GitHub and ADO](https://github.com/actions/runner-images/issues/13046) |
|
| [[macOS] The macOS 13 Ventura based runner images will begin deprecation on September 22nd and will be fully unsupported by December 4th for GitHub and ADO](https://github.com/actions/runner-images/issues/13046) |
|
||||||
| [[macOS] The additional macOS 15 Sonoma Intel-based image will be available in GitHub Actions](https://github.com/actions/runner-images/issues/13045) |
|
| [[macOS] The additional macOS 15 Sonoma Intel-based image will be available in GitHub Actions](https://github.com/actions/runner-images/issues/13045) |
|
||||||
| [macOS 26 (Tahoe) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/13008) |
|
| [macOS 26 (Tahoe) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/13008) |
|
||||||
|
| [[macOS] Deprecation of 4 tools on November 3rd.](https://github.com/actions/runner-images/issues/12873) |
|
||||||
***
|
***
|
||||||
# macOS 14
|
# macOS 14
|
||||||
- OS Version: macOS 14.8.2 (23J126)
|
- OS Version: macOS 14.8.2 (23J126)
|
||||||
- Kernel Version: Darwin 23.6.0
|
- Kernel Version: Darwin 23.6.0
|
||||||
- Image Version: 20251209.0061.1
|
- Image Version: 20251203.0047.1
|
||||||
|
|
||||||
## Installed Software
|
## Installed Software
|
||||||
|
|
||||||
@@ -29,21 +29,21 @@
|
|||||||
- Node.js 20.19.6
|
- Node.js 20.19.6
|
||||||
- Perl 5.40.2
|
- Perl 5.40.2
|
||||||
- PHP 8.5.0
|
- PHP 8.5.0
|
||||||
- Python3 3.14.2
|
- Python3 3.14.0
|
||||||
- Ruby 3.3.10
|
- Ruby 3.3.10
|
||||||
|
|
||||||
### Package Management
|
### Package Management
|
||||||
- Bundler 4.0.1
|
- Bundler 4.0.0
|
||||||
- Carthage 0.40.0
|
- Carthage 0.40.0
|
||||||
- CocoaPods 1.16.2
|
- CocoaPods 1.16.2
|
||||||
- Composer 2.9.2
|
- Composer 2.9.2
|
||||||
- Homebrew 5.0.5
|
- Homebrew 5.0.4
|
||||||
- NPM 10.8.2
|
- NPM 10.8.2
|
||||||
- NuGet 6.3.1.1
|
- NuGet 6.3.1.1
|
||||||
- Pip3 25.3 (python 3.14)
|
- Pip3 25.3 (python 3.14)
|
||||||
- Pipx 1.8.0
|
- Pipx 1.8.0
|
||||||
- RubyGems 4.0.1
|
- RubyGems 4.0.0
|
||||||
- Vcpkg 2025 (build from commit efe5a56fb7)
|
- Vcpkg 2025 (build from commit 4c4abc2e87)
|
||||||
- Yarn 1.22.22
|
- Yarn 1.22.22
|
||||||
|
|
||||||
### Project Management
|
### Project Management
|
||||||
@@ -75,14 +75,14 @@
|
|||||||
- Ninja 1.13.2
|
- Ninja 1.13.2
|
||||||
|
|
||||||
### Tools
|
### Tools
|
||||||
- AWS CLI 2.32.12
|
- AWS CLI 2.32.8
|
||||||
- AWS SAM CLI 1.149.0
|
- AWS SAM CLI 1.149.0
|
||||||
- AWS Session Manager CLI 1.2.764.0
|
- AWS Session Manager CLI 1.2.764.0
|
||||||
- Azure CLI 2.81.0
|
- Azure CLI 2.81.0
|
||||||
- Azure CLI (azure-devops) 1.0.2
|
- Azure CLI (azure-devops) 1.0.2
|
||||||
- Bicep CLI 0.39.26
|
- Bicep CLI 0.39.26
|
||||||
- Cmake 4.2.0
|
- Cmake 4.2.0
|
||||||
- CodeQL Action Bundle 2.23.7
|
- CodeQL Action Bundle 2.23.6
|
||||||
- Fastlane 2.229.1
|
- Fastlane 2.229.1
|
||||||
- SwiftFormat 0.58.7
|
- SwiftFormat 0.58.7
|
||||||
- Xcbeautify 3.1.1
|
- Xcbeautify 3.1.1
|
||||||
@@ -98,8 +98,8 @@
|
|||||||
- Google Chrome 143.0.7499.41
|
- Google Chrome 143.0.7499.41
|
||||||
- Google Chrome for Testing 143.0.7499.40
|
- Google Chrome for Testing 143.0.7499.40
|
||||||
- ChromeDriver 143.0.7499.40
|
- ChromeDriver 143.0.7499.40
|
||||||
- Microsoft Edge 143.0.3650.66
|
- Microsoft Edge 142.0.3595.94
|
||||||
- Microsoft Edge WebDriver 143.0.3650.66
|
- Microsoft Edge WebDriver 142.0.3595.94
|
||||||
- Mozilla Firefox 145.0.2
|
- Mozilla Firefox 145.0.2
|
||||||
- geckodriver 0.36.0
|
- geckodriver 0.36.0
|
||||||
- Selenium server 4.38.0
|
- Selenium server 4.38.0
|
||||||
@@ -132,8 +132,8 @@
|
|||||||
- 3.10.19
|
- 3.10.19
|
||||||
- 3.11.9
|
- 3.11.9
|
||||||
- 3.12.10
|
- 3.12.10
|
||||||
- 3.13.11
|
- 3.13.10
|
||||||
- 3.14.2
|
- 3.14.1
|
||||||
|
|
||||||
#### Node.js
|
#### Node.js
|
||||||
- 20.19.6
|
- 20.19.6
|
||||||
@@ -238,32 +238,32 @@
|
|||||||
| DriverKit 24.2 | driverkit24.2 | 16.2 |
|
| DriverKit 24.2 | driverkit24.2 | 16.2 |
|
||||||
|
|
||||||
#### Installed Simulators
|
#### Installed Simulators
|
||||||
| Name | OS | Simulators |
|
| Name | OS | Simulators |
|
||||||
| ------------ | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| ------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||||
| iOS 17.0 | 17.0.1 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation) |
|
| iOS 17.0 | 17.0.1 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation) |
|
||||||
| iOS 17.2 | 17.2 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation) |
|
| iOS 17.2 | 17.2 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation) |
|
||||||
| iOS 17.4 | 17.4 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
|
| iOS 17.4 | 17.4 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
|
||||||
| iOS 17.5 | 17.5 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
|
| iOS 17.5 | 17.5 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
|
||||||
| iOS 18.1 | 18.1 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
|
| iOS 18.1 | 18.1 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
|
||||||
| iOS 18.2 | 18.2 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
|
| iOS 18.2 | 18.2 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
|
||||||
| tvOS 17.0 | 17.0 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
|
| tvOS 17.0 | 17.0 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
|
||||||
| tvOS 17.2 | 17.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
|
| tvOS 17.2 | 17.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
|
||||||
| tvOS 17.4 | 17.4 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
|
| tvOS 17.4 | 17.4 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
|
||||||
| tvOS 17.5 | 17.5 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
|
| tvOS 17.5 | 17.5 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
|
||||||
| tvOS 18.1 | 18.1 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
|
| tvOS 18.1 | 18.1 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
|
||||||
| tvOS 18.2 | 18.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
|
| tvOS 18.2 | 18.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
|
||||||
| watchOS 10.0 | 10.0 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
|
| watchOS 10.0 | 10.0 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
|
||||||
| watchOS 10.2 | 10.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
|
| watchOS 10.2 | 10.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
|
||||||
| watchOS 10.4 | 10.4 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
|
| watchOS 10.4 | 10.4 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
|
||||||
| watchOS 10.5 | 10.5 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
|
| watchOS 10.5 | 10.5 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
|
||||||
| watchOS 11.1 | 11.1 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
|
| watchOS 11.1 | 11.1 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
|
||||||
| watchOS 11.2 | 11.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
|
| watchOS 11.2 | 11.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
|
||||||
|
|
||||||
### Android
|
### Android
|
||||||
| Package Name | Version |
|
| Package Name | Version |
|
||||||
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| Android Command Line Tools | 11.0 |
|
| Android Command Line Tools | 11.0 |
|
||||||
| Android Emulator | 36.3.10 |
|
| Android Emulator | 36.2.12 |
|
||||||
| Android SDK Build-tools | 36.0.0 36.1.0<br>35.0.0 35.0.1<br>34.0.0<br>33.0.2 33.0.3 |
|
| Android SDK Build-tools | 36.0.0 36.1.0<br>35.0.0 35.0.1<br>34.0.0<br>33.0.2 33.0.3 |
|
||||||
| Android SDK Platforms | android-36.1 (rev 1)<br>android-36-ext19 (rev 1)<br>android-36-ext18 (rev 1)<br>android-36 (rev 2)<br>android-35-ext15 (rev 1)<br>android-35-ext14 (rev 1)<br>android-35 (rev 2)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3) |
|
| Android SDK Platforms | android-36.1 (rev 1)<br>android-36-ext19 (rev 1)<br>android-36-ext18 (rev 1)<br>android-36 (rev 2)<br>android-35-ext15 (rev 1)<br>android-35-ext14 (rev 1)<br>android-35 (rev 2)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3) |
|
||||||
| Android SDK Platform-Tools | 36.0.0 |
|
| Android SDK Platform-Tools | 36.0.0 |
|
||||||
|
|||||||
Reference in New Issue
Block a user