chore: run e2e in finch vm #46
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
| name: macOS Tests | |
| on: | |
| push: | |
| branches: | |
| - main | |
| paths-ignore: | |
| - '**.md' | |
| pull_request: | |
| branches: | |
| - main | |
| paths-ignore: | |
| - '**.md' | |
| workflow_dispatch: | |
| env: | |
| GO_VERSION: '1.23.8' | |
| jobs: | |
| mac-test: | |
| runs-on: codebuild-Test-fd-codebuild-mac-${{ github.run_id }}-${{ github.run_attempt }} | |
| timeout-minutes: 30 | |
| steps: | |
| - name: Clean macOS runner workspace | |
| run: | | |
| rm -rf ${{ github.workspace }}/* | |
| - name: Configure Git for ec2-user | |
| run: | | |
| # sudo chown -R ec2-user: /private | |
| git config --global --add safe.directory "*" | |
| shell: bash | |
| - uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0 | |
| with: | |
| go-version: ${{ env.GO_VERSION }} | |
| cache: false | |
| - name: Configure Go for ec2-user | |
| run: | | |
| # Ensure Go is properly configured for ec2-user | |
| chown -R ec2-user:staff $GOPATH || true | |
| chown -R ec2-user:staff $RUNNER_TOOL_CACHE/go || true | |
| # - name: Clean up previous files | |
| # run: | | |
| # sudo -u ec2-user bash rm -rf /opt/finch | |
| # sudo -u ec2-user bash rm -rf ~/.finch | |
| # sudo -u ec2-user bash rm -rf ./_output | |
| # if pgrep '^qemu-system'; then | |
| # sudo -u ec2-user bash pkill '^qemu-system' | |
| # fi | |
| # if pgrep '^socket_vmnet'; then | |
| # sudo -u ec2-user bash pkill '^socket_vmnet' | |
| # fi | |
| # Debug step to see available users | |
| - name: List available users and system info | |
| run: | | |
| su ec2-user -c 'echo "Current user: $(whoami)" | |
| echo "Current user ID: $(id -u)" | |
| echo "Current user home: $HOME" | |
| echo "Console user: $(stat -f "%Su" /dev/console)" | |
| echo "All users:" | |
| dscl . -list /Users | grep -v "^_" | |
| echo "Users with home directories:" | |
| ls -la /Users/ | |
| echo "Environment variables:" | |
| env | sort | |
| echo "Brew info:" | |
| which brew || echo "brew not found in PATH" | |
| echo "PATH: $PATH"' | |
| - name: Install Rosetta 2 | |
| run: su ec2-user -c 'echo "A" | softwareupdate --install-rosetta || true' | |
| # Fix Homebrew permissions and setup environment | |
| - name: Fix Homebrew permissions and setup environment | |
| run: | | |
| echo "Fixing Homebrew permissions for ec2-user..." | |
| chown -R ec2-user:staff /opt/homebrew | |
| # Create a cache directory that ec2-user can access | |
| mkdir -p /tmp/homebrew-cache | |
| chown -R ec2-user:staff /tmp/homebrew-cache | |
| # Create a .brewrc file for ec2-user with environment settings | |
| su ec2-user -c 'cat > /Users/ec2-user/.brewrc << EOF | |
| export HOMEBREW_NO_AUTO_UPDATE=1 | |
| export HOMEBREW_NO_INSTALL_CLEANUP=1 | |
| export HOMEBREW_CACHE=/tmp/homebrew-cache | |
| export HOMEBREW_NO_ENV_HINTS=1 | |
| EOF' | |
| # Make sure ec2-user sources the .brewrc file | |
| su ec2-user -c 'echo "source /Users/ec2-user/.brewrc" >> /Users/ec2-user/.zshrc' | |
| su ec2-user -c 'echo "source /Users/ec2-user/.brewrc" >> /Users/ec2-user/.bashrc' | |
| # Install dependencies using ec2-user with custom environment | |
| - name: Install dependencies | |
| run: | | |
| echo "Installing dependencies as ec2-user..." | |
| # Run brew with custom environment | |
| su ec2-user -c 'source /Users/ec2-user/.brewrc && brew install lz4 automake autoconf libtool yq' | |
| # Verify installation | |
| su ec2-user -c 'source /Users/ec2-user/.brewrc && brew list | grep lz4 || echo "lz4 not installed"' | |
| shell: bash | |
| # Install Finch | |
| - name: Install Finch | |
| run: | | |
| echo "Installing Finch as ec2-user..." | |
| # Run brew with custom environment | |
| su ec2-user -c 'source /Users/ec2-user/.brewrc && brew install finch --cask' | |
| # Verify installation | |
| su ec2-user -c 'source /Users/ec2-user/.brewrc && brew list | grep finch || echo "finch not installed"' | |
| # Create .finch directory and config for ec2-user | |
| echo "Creating .finch directory and config for ec2-user..." | |
| su ec2-user -c 'mkdir -p /Users/ec2-user/.finch' | |
| su ec2-user -c 'echo "cpus: 4" > /Users/ec2-user/.finch/finch.yaml' | |
| su ec2-user -c 'echo "memory: 8GiB" >> /Users/ec2-user/.finch/finch.yaml' | |
| # Fix ownership of var/run directories | |
| echo "Fixing ownership of /private/var/run directories..." | |
| chown -R root:wheel /private/var/run | |
| mkdir -p /private/var/run/finch-lima | |
| chown -R root:wheel /private/var/run/finch-lima | |
| # Check finch version with HOME set to ec2-user's home | |
| echo "Checking finch version..." | |
| if ! su ec2-user -c 'HOME=/Users/ec2-user finch version'; then | |
| echo "finch version command failed, starting VM..." | |
| su ec2-user -c 'HOME=/Users/ec2-user finch vm remove' | |
| su ec2-user -c 'HOME=/Users/ec2-user finch vm init' | |
| fi | |
| shell: bash | |
| # Check for Finch socket | |
| - name: Check for Finch socket | |
| run: | | |
| su ec2-user -c 'echo "Checking for Finch socket at /Applications/Finch/lima/data/finch/sock/finch.sock..." | |
| # Check if the socket file exists | |
| if test -S /Applications/Finch/lima/data/finch/sock/finch.sock; then | |
| echo "Socket file exists" | |
| else | |
| echo "ERROR: Socket file not found at expected location /Applications/Finch/lima/data/finch/sock/finch.sock" | |
| exit 1 | |
| fi' | |
| # Store the socket path for later steps (this needs to run as root to modify GITHUB_ENV) | |
| echo "SOCKET_PATH=/Applications/Finch/lima/data/finch/sock/finch.sock" >> $GITHUB_ENV | |
| shell: bash | |
| - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| # We need to get all the git tags to make version injection work. See VERSION in Makefile for more detail. | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| submodules: recursive | |
| ssh-user: ec2-user | |
| - name: Configure workspace for ec2-user | |
| run: | | |
| # Ensure workspace is properly owned by ec2-user | |
| chown -R ec2-user:staff ${{ github.workspace }} | |
| # Run e2e tests inside the Finch VM | |
| - name: Run e2e tests | |
| run: | | |
| echo "Running e2e tests as ec2-user..." | |
| su ec2-user -c "cd ${{ github.workspace }} && DOCKER_HOST=unix:///Applications/Finch/lima/data/finch/sock/finch.sock make test-e2e-inside-vm" | |
| shell: bash | |
| # Cleanup | |
| - name: Stop Finch VM | |
| run: | | |
| echo "Stopping Finch VM as ec2-user..." | |
| # Stop VM using ec2-user with custom environment | |
| su ec2-user -c "source /Users/ec2-user/.brewrc && HOME=/Users/ec2-user finch vm stop" | |
| shell: bash | |
| if: always() |