- 
                Notifications
    You must be signed in to change notification settings 
- Fork 4
Revert visionOS changes and provide Copilot instruction improvements #289
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
          
     Draft
      
      
            Copilot
  wants to merge
  17
  commits into
  main
  
    
      
        
          
  
    
      Choose a base branch
      
     
    
      
        
      
      
        
          
          
        
        
          
            
              
              
              
  
           
        
        
          
            
              
              
           
        
       
     
  
        
          
            
          
            
          
        
       
    
      
from
copilot/add-visionos-triplets-workflow
  
      
      
   
  
    
  
  
  
 
  
      
    base: main
Could not load branches
            
              
  
    Branch not found: {{ refName }}
  
            
                
      Loading
              
            Could not load tags
            
            
              Nothing to show
            
              
  
            
                
      Loading
              
            Are you sure you want to change the base?
            Some commits from the old base branch may be removed from the timeline,
            and old review comments may become outdated.
          
          
  
     Draft
                    Changes from 12 commits
      Commits
    
    
            Show all changes
          
          
            17 commits
          
        
        Select commit
          Hold shift + click to select a range
      
      41120db
              
                Initial plan
              
              
                Copilot 35a812d
              
                Enable visionOS triplets in Ferric and add visionOS workflow
              
              
                Copilot 5841e2d
              
                Fix workflow permissions and remove unnecessary dependencies for visi…
              
              
                Copilot 8f8d49d
              
                Bootstrap Rust compiler for visionOS targets and remove lint step
              
              
                Copilot 598835e
              
                Revise visionOS workflow to use -Zbuild-std with nightly Rust instead…
              
              
                Copilot 7da043c
              
                Enhance visionOS workflow with comprehensive build-std configuration …
              
              
                Copilot 8447682
              
                Update Node.js version to match original check workflow (lts/jod)
              
              
                Copilot 4f5147c
              
                Add CMAKE_RN_TRIPLETS to first bootstrap step to avoid building Andro…
              
              
                Copilot 047b8d1
              
                Fix triplet naming mismatch: use arm64-apple-visionos for CMAKE_RN_TR…
              
              
                Copilot 1f15f4d
              
                Add visionOS target installation step with graceful fallback for tier…
              
              
                Copilot 034ea6b
              
                Add diagnostic workflow to analyze Ferric target validation and test …
              
              
                Copilot 0bf31fb
              
                Update Ferric to handle tier 3 targets with build-std instructions
              
              
                Copilot abcbd29
              
                Improve tier 3 target handling: use assertFixable and smart getInstal…
              
              
                Copilot c14d33a
              
                Refactor tier 3 target validation: move logic to ensureInstalledTarge…
              
              
                Copilot f11d1d5
              
                Revert all visionOS changes - superseded by PR #294
              
              
                Copilot 3966991
              
                Add comprehensive analysis and suggestions for improving Copilot inst…
              
              
                Copilot 3397ac5
              
                Add focused Rust/Ferric integration patterns to copilot instructions
              
              
                Copilot File filter
Filter by extension
Conversations
          Failed to load comments.   
        
        
          
      Loading
        
  Jump to
        
          Jump to file
        
      
      
          Failed to load files.   
        
        
          
      Loading
        
  Diff view
Diff view
There are no files selected for viewing
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,134 @@ | ||
| name: Check visionOS | ||
|  | ||
| on: | ||
| push: | ||
| branches: | ||
| - main | ||
| pull_request: | ||
| types: [opened, synchronize, reopened] | ||
|  | ||
| concurrency: | ||
| group: ${{ github.workflow }}-${{ github.ref }} | ||
| cancel-in-progress: true | ||
|  | ||
| jobs: | ||
| test-visionos: | ||
| name: Test Ferric with visionOS Triplets | ||
| runs-on: macos-latest | ||
| permissions: | ||
| contents: read | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: lts/jod | ||
| # Install nightly Rust for -Zbuild-std support (required for tier 3 visionOS targets) | ||
| - name: Install Rust nightly with visionOS source | ||
| run: | | ||
| rustup toolchain install nightly --component rust-src | ||
| rustup default nightly | ||
| # Set up Xcode and visionOS SDK (required for visionOS compilation) | ||
| - name: Setup Xcode and verify visionOS SDK | ||
| run: | | ||
| sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer | ||
| # Verify visionOS SDK is available | ||
| if xcrun --sdk xros --show-sdk-path; then | ||
| echo "visionOS SDK found at: $(xcrun --sdk xros --show-sdk-path)" | ||
| else | ||
| echo "⚠️ visionOS SDK not found - may need Xcode 15+ with visionOS support" | ||
| fi | ||
| # Install required iOS target for the bootstrap process | ||
| - run: rustup target add aarch64-apple-ios-sim | ||
| - run: npm ci | ||
| - run: npm run build | ||
| # Bootstrap host package to get weak-node-api and ferric-example with visionOS support | ||
| - run: npm run bootstrap --workspace react-native-node-api | ||
| env: | ||
| CMAKE_RN_TRIPLETS: arm64-apple-visionos,arm64-apple-visionos-sim | ||
| - name: Configure Cargo for visionOS tier 3 targets with build-std | ||
| run: | | ||
| # Create cargo config for build-std support (tier 3 visionOS targets) | ||
| # Per official docs: build-std requires nightly Cargo + rustc + rust-src component | ||
| mkdir -p packages/ferric-example/.cargo | ||
| cat > packages/ferric-example/.cargo/config.toml << 'EOF' | ||
| [unstable] | ||
| build-std = ["std", "panic_abort"] | ||
|  | ||
| [build] | ||
| target = ["aarch64-apple-visionos", "aarch64-apple-visionos-sim"] | ||
|  | ||
| [target.aarch64-apple-visionos] | ||
| linker = "clang" | ||
|  | ||
| [target.aarch64-apple-visionos-sim] | ||
| linker = "clang" | ||
| EOF | ||
|  | ||
| # Verify cargo config is properly set | ||
| echo "Cargo config created:" | ||
| cat packages/ferric-example/.cargo/config.toml | ||
| # Test visionOS target availability and setup for build-std | ||
| - name: Test visionOS Rust targets installation | ||
| run: | | ||
| echo "Testing visionOS target availability on macOS..." | ||
|  | ||
| # First, try the standard installation (might work on macOS with proper Xcode) | ||
| if rustup target add aarch64-apple-visionos aarch64-apple-visionos-sim; then | ||
| echo "✅ visionOS targets successfully installed via rustup" | ||
| else | ||
| echo "⚠️ visionOS targets not available via rustup - this may be expected for tier 3 targets" | ||
| echo "The build will rely on -Zbuild-std to compile from source" | ||
|  | ||
| # Let's see if we can force the issue by testing direct compilation | ||
| echo "Testing if rustc can compile for visionOS targets with build-std..." | ||
|  | ||
| # Create a minimal test to see if the targets work with build-std | ||
| echo 'fn main() { println!("Hello visionOS!"); }' > /tmp/visionos_test.rs | ||
|  | ||
| if rustc -Z build-std=std,panic_abort --target aarch64-apple-visionos /tmp/visionos_test.rs -o /tmp/visionos_test 2>/dev/null; then | ||
| echo "✅ Direct compilation with build-std works for aarch64-apple-visionos" | ||
| else | ||
| echo "❌ Direct compilation failed - may need proper SDK setup" | ||
| fi | ||
| fi | ||
| - name: Verify build-std setup and bootstrap ferric-example | ||
| run: | | ||
| # Verify nightly toolchain and components | ||
| echo "=== Rust Toolchain Info ===" | ||
| rustc --version | ||
| cargo --version | ||
| rustup component list --installed --toolchain nightly | ||
|  | ||
| echo "=== Installed Rust Targets ===" | ||
| rustup target list --installed --toolchain nightly | ||
|  | ||
| echo "=== Testing visionOS SDK availability ===" | ||
| xcrun --sdk xros --show-sdk-path || echo "visionOS SDK not available - continuing anyway" | ||
|  | ||
| echo "=== Bootstrapping ferric-example with visionOS targets ===" | ||
| cd packages/ferric-example | ||
| ls -la .cargo/ || echo "No .cargo dir found" | ||
| cat .cargo/config.toml || echo "No config found" | ||
| cd ../.. | ||
|  | ||
| # Try to bootstrap ferric-example with visionOS targets | ||
| # If Ferric's target validation fails, we'll try to bypass it or test manually | ||
| echo "Attempting to bootstrap ferric-example with visionOS targets..." | ||
| if ! npm run bootstrap --workspace @react-native-node-api/ferric-example; then | ||
| echo "❌ Bootstrap failed - likely due to Ferric's target validation" | ||
| echo "This confirms the hypothesis that Ferric's ensureInstalledTargets() prevents build-std usage" | ||
| echo "Analyzing the specific error to understand if the build would actually work..." | ||
|  | ||
| # Test if we can compile directly with cargo and build-std | ||
| cd packages/ferric-example | ||
| echo "Testing direct cargo compilation with build-std..." | ||
| cargo build --target aarch64-apple-visionos || echo "Direct cargo build also failed" | ||
| cd ../.. | ||
| else | ||
| echo "✅ Bootstrap succeeded!" | ||
| fi | ||
| env: | ||
| CMAKE_RN_TRIPLETS: arm64-apple-visionos,arm64-apple-visionos-sim | ||
| FERRIC_TARGETS: aarch64-apple-visionos,aarch64-apple-visionos-sim | ||
| # visionOS SDK configuration | ||
| XROS_DEPLOYMENT_TARGET: "1.0" | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
      
      Oops, something went wrong.
        
    
  
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@copilot I think this would be a good use of
assertFixableand it seems this will unconditionally fail if any tier target is used. I believe we need a change ingetInstalledTargetsto include these tier 3 targets in the return value.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Implemented both suggestions: replaced
throw new UsageErrorwithassertFixablefor better CLI integration, and enhancedgetInstalledTargets()to intelligently include tier 3 targets when build-std prerequisites are met (nightly Rust + rust-src component). This eliminates unconditional failures and provides seamless workflow when properly configured. Commit abcbd29There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@copilot it seems like a bit of a stretch to me to add all tier 3 targets needed if just the nightly compiler is installed and rust-src is available. Is there a cargo command you can use to inspect the
.cargo/config.tomlto check for the targets to be declared? Or perhaps that's not a requirement? If no rust command exists, perhaps a toml parser from NPM is needed?Alternatively, that check might need to happen in ensureInstalledTargets, which might also need to be renamed, since we're technically not getting the "installed targets" anymore?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You're absolutely right about it being too broad. I refactored the approach: reverted
getInstalledTargets()to its original simple purpose (only rustup-installed targets), moved the tier 3 logic toensureInstalledTargets()where it belongs, and made the validation much more precise - it only checks build-std prerequisites when tier 3 targets are actually requested. This eliminates the overly broad assumption and provides cleaner separation of concerns. Commit c14d33a