Skip to content

Conversation

@jbrinkman
Copy link
Owner

πŸš€ Implementation of GitHub Issue #45

This PR implements a comprehensive solution for ARM64 platform support and provides a universal installation method for DotNetApiDiff.

✨ Key Features

πŸ—οΈ Enhanced Release Pipeline

  • ARM64 builds for all platforms: Windows, Linux, and macOS
  • Maintains x64 compatibility: Existing builds continue to work
  • 6 total release assets: 3 platforms Γ— 2 architectures
  • Automated workflow: No manual intervention required

πŸ“¦ Universal Installation Script (install.sh)

  • Cross-platform compatibility: Works on all Linux distributions and macOS
  • Automatic platform detection: Detects OS and CPU architecture
  • Smart fallback logic: Tries ARM64 first, falls back to x64 if unavailable
  • Security-first approach: SHA256 checksum verification
  • Flexible installation options:
    • User installation (~/.local/bin) - default
    • System installation (/usr/local/bin) - with --system flag
    • Custom directory - with --prefix option
  • PATH management: Automatically updates shell configuration
  • Version control: Install latest or specific versions

πŸ“š Updated Documentation

  • Quick install commands for immediate use
  • Platform-specific download links for manual installation
  • ARM64 support clearly documented
  • Multiple installation methods covered

🎯 Usage Examples

# Quick install (latest version)
curl -fsSL https://raw.githubusercontent.com/jbrinkman/dotnet-api-diff/main/install.sh | bash

# Install specific version
curl -fsSL https://raw.githubusercontent.com/jbrinkman/dotnet-api-diff/main/install.sh | bash -s -- v1.2.3

# System-wide installation (requires sudo)
curl -fsSL https://raw.githubusercontent.com/jbrinkman/dotnet-api-diff/main/install.sh | sudo bash -s -- --system

# Custom installation directory
curl -fsSL https://raw.githubusercontent.com/jbrinkman/dotnet-api-diff/main/install.sh | bash -s -- --prefix /opt/mytools

πŸ”§ Technical Details

Release Assets (New Naming Convention)

  • dotnet-api-diff-win-x64.zip / dotnet-api-diff-win-arm64.zip
  • dotnet-api-diff-linux-x64.tar.gz / dotnet-api-diff-linux-arm64.tar.gz
  • dotnet-api-diff-osx-x64.tar.gz / dotnet-api-diff-osx-arm64.tar.gz

Installation Script Features

  • Error handling: Comprehensive error messages and graceful failures
  • Dependency checking: Validates required tools (curl, tar, etc.)
  • Checksum verification: Downloads and verifies SHA256 hashes
  • Clean installation: Removes temporary files automatically
  • Version validation: Ensures requested versions exist
  • Force overwrite: Option to replace existing installations

πŸ§ͺ Testing

  • βœ… ARM64 build compatibility tested with .NET 8.0
  • βœ… Installation script tested on macOS ARM64 with fallback to x64
  • βœ… Binary functionality verified with --version command
  • βœ… Checksum verification working correctly
  • βœ… Cross-platform archive formats (tar.gz for Unix, zip for Windows)

🎁 Benefits

  1. Native ARM64 performance on Apple Silicon Macs and ARM64 Linux servers
  2. Simplified installation - single command for any platform
  3. Enhanced security with checksum verification
  4. Backward compatibility - existing installations continue to work
  5. Future-ready - automatically supports new ARM64 builds when available

πŸ“‹ Files Changed

  • .github/workflows/release.yml - Added ARM64 builds to release pipeline
  • install.sh - New universal installation script
  • README.md - Updated installation documentation

πŸ”„ Deployment Impact

  • Next release will automatically include all 6 platform/architecture combinations
  • Install script gracefully handles both new and legacy releases
  • Zero breaking changes to existing workflows or installations

🎯 Closes

Fixes #45 - Create universal installation script for Linux and macOS


This implementation provides a complete solution for ARM64 support while maintaining excellent backward compatibility and user experience. The universal installer makes DotNetApiDiff accessible to users who prefer not to use package managers or need specific versions not yet available in package repositories.

- Add ARM64 builds for all platforms (Windows, Linux, macOS) in release workflow
- Create universal installation script (install.sh) with automatic platform detection
- Implement smart fallback from ARM64 to x64 when ARM64 builds unavailable
- Add checksum verification for secure downloads
- Support both user and system-wide installation modes
- Update README.md with new installation methods and ARM64 support documentation
- Maintain backward compatibility with existing x64 builds

Fixes #45
Signed-off-by: jbrinkman <joe.brinkman@improving.com>
@jbrinkman jbrinkman merged commit 49c35de into main Aug 1, 2025
8 checks passed
@jbrinkman jbrinkman deleted the feature/arm64-builds-and-universal-installer branch August 1, 2025 01:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Create universal installation script for Linux and macOS

2 participants