Skip to content

Commit 67fac73

Browse files
committed
chore: run e2e in finch vm
Signed-off-by: Arjun Raja Yogidas <[email protected]>
1 parent 7ec7d02 commit 67fac73

File tree

1 file changed

+201
-0
lines changed

1 file changed

+201
-0
lines changed

.github/workflows/mac-test.yaml

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
name: macOS Tests
2+
on:
3+
push:
4+
branches:
5+
- main
6+
paths-ignore:
7+
- '**.md'
8+
pull_request:
9+
branches:
10+
- main
11+
paths-ignore:
12+
- '**.md'
13+
workflow_dispatch:
14+
env:
15+
GO_VERSION: '1.23.8'
16+
jobs:
17+
mac-test:
18+
runs-on: codebuild-Test-fd-codebuild-mac-${{ github.run_id }}-${{ github.run_attempt }}
19+
timeout-minutes: 30
20+
steps:
21+
- name: Clean macOS runner workspace
22+
run: |
23+
rm -rf ${{ github.workspace }}/*
24+
- name: Manual checkout as ec2-user
25+
run: |
26+
echo "Setting up Git for ec2-user..."
27+
# Create .gitconfig for ec2-user
28+
sudo -u ec2-user bash -c 'cat > /Users/ec2-user/.gitconfig << EOF
29+
[safe]
30+
directory = *
31+
EOF'
32+
33+
# Ensure workspace directory exists and is owned by ec2-user
34+
sudo mkdir -p ${{ github.workspace }}
35+
sudo chown -R ec2-user:staff ${{ github.workspace }}
36+
37+
# Clone the repository as ec2-user
38+
echo "Cloning repository as ec2-user..."
39+
sudo -u ec2-user bash -c 'cd ${{ github.workspace }} && git clone --recurse-submodules ${{ github.server_url }}/${{ github.repository }}.git .'
40+
41+
# Fetch all tags for version injection
42+
echo "Fetching all tags..."
43+
sudo -u ec2-user bash -c 'cd ${{ github.workspace }} && git fetch --tags --force'
44+
45+
# Checkout the specific ref
46+
echo "Checking out ${{ github.ref }}..."
47+
sudo -u ec2-user bash -c 'cd ${{ github.workspace }} && git checkout -f ${{ github.sha }}'
48+
49+
# Show git status
50+
echo "Git status:"
51+
sudo -u ec2-user bash -c 'cd ${{ github.workspace }} && git status'
52+
shell: bash
53+
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
54+
with:
55+
go-version: ${{ env.GO_VERSION }}
56+
cache: false
57+
- name: Clean up previous files
58+
run: |
59+
sudo rm -rf /opt/finch
60+
sudo rm -rf ~/.finch
61+
sudo rm -rf ./_output
62+
if pgrep '^qemu-system'; then
63+
sudo pkill '^qemu-system'
64+
fi
65+
if pgrep '^socket_vmnet'; then
66+
sudo pkill '^socket_vmnet'
67+
fi
68+
69+
# Debug step to see available users
70+
- name: List available users and system info
71+
run: |
72+
echo "Current user: $(whoami)"
73+
echo "Current user ID: $(id -u)"
74+
echo "Current user home: $HOME"
75+
echo "Console user: $(stat -f "%Su" /dev/console)"
76+
echo "All users:"
77+
dscl . -list /Users | grep -v '^_'
78+
echo "Users with home directories:"
79+
ls -la /Users/
80+
echo "Environment variables:"
81+
env | sort
82+
echo "Brew info:"
83+
which brew || echo "brew not found in PATH"
84+
echo "PATH: $PATH"
85+
86+
- name: Install Rosetta 2
87+
run: echo "A" | softwareupdate --install-rosetta || true
88+
89+
# Fix Homebrew permissions and setup environment
90+
- name: Fix Homebrew permissions and setup environment
91+
run: |
92+
echo "Fixing Homebrew permissions for ec2-user..."
93+
sudo chown -R ec2-user:staff /opt/homebrew
94+
95+
# Create a cache directory that ec2-user can access
96+
sudo mkdir -p /tmp/homebrew-cache
97+
sudo chown -R ec2-user:staff /tmp/homebrew-cache
98+
99+
# Create a .brewrc file for ec2-user with environment settings
100+
sudo -u ec2-user bash -c 'cat > /Users/ec2-user/.brewrc << EOF
101+
export HOMEBREW_NO_AUTO_UPDATE=1
102+
export HOMEBREW_NO_INSTALL_CLEANUP=1
103+
export HOMEBREW_CACHE=/tmp/homebrew-cache
104+
export HOMEBREW_NO_ENV_HINTS=1
105+
EOF'
106+
107+
# Make sure ec2-user sources the .brewrc file
108+
sudo -u ec2-user bash -c 'echo "source /Users/ec2-user/.brewrc" >> /Users/ec2-user/.zshrc'
109+
sudo -u ec2-user bash -c 'echo "source /Users/ec2-user/.brewrc" >> /Users/ec2-user/.bashrc'
110+
111+
# Install dependencies using ec2-user with custom environment
112+
- name: Install dependencies
113+
run: |
114+
echo "Installing dependencies as ec2-user..."
115+
116+
# Run brew with custom environment
117+
sudo -u ec2-user bash -c 'source /Users/ec2-user/.brewrc && brew install lz4 automake autoconf libtool yq'
118+
119+
# Verify installation
120+
sudo -u ec2-user bash -c 'source /Users/ec2-user/.brewrc && brew list | grep lz4 || echo "lz4 not installed"'
121+
shell: bash
122+
123+
# Install Finch
124+
- name: Install Finch
125+
run: |
126+
echo "Installing Finch as ec2-user..."
127+
128+
# Run brew with custom environment
129+
sudo -u ec2-user bash -c 'source /Users/ec2-user/.brewrc && brew install finch --cask'
130+
131+
# Verify installation
132+
sudo -u ec2-user bash -c 'source /Users/ec2-user/.brewrc && brew list | grep finch || echo "finch not installed"'
133+
134+
# Find finch executable
135+
echo "Searching for finch executable..."
136+
sudo -u ec2-user bash -c 'which finch || echo "finch not in PATH"'
137+
sudo -u ec2-user bash -c 'find /Applications -name finch || echo "finch not found in /Applications"'
138+
sudo -u ec2-user bash -c 'find /usr/local -name finch || echo "finch not found in /usr/local"'
139+
140+
# Set finch path for later steps
141+
FINCH_PATH=$(sudo -u ec2-user bash -c 'which finch || echo "/usr/local/bin/finch"')
142+
echo "FINCH_PATH=$FINCH_PATH" >> $GITHUB_ENV
143+
144+
# Create .finch directory and config for ec2-user
145+
echo "Creating .finch directory and config for ec2-user..."
146+
sudo -u ec2-user bash -c 'mkdir -p /Users/ec2-user/.finch'
147+
sudo -u ec2-user bash -c 'echo "cpus: 4" > /Users/ec2-user/.finch/finch.yaml'
148+
sudo -u ec2-user bash -c 'echo "memory: 8GiB" >> /Users/ec2-user/.finch/finch.yaml'
149+
150+
# Check finch version with HOME set to ec2-user's home
151+
echo "Checking finch version..."
152+
if ! sudo -u ec2-user bash -c 'HOME=/Users/ec2-user finch version'; then
153+
echo "finch version command failed, starting VM..."
154+
sudo -u ec2-user bash -c 'HOME=/Users/ec2-user finch vm start'
155+
fi
156+
shell: bash
157+
158+
159+
# Check for Finch socket
160+
- name: Check for Finch socket
161+
run: |
162+
echo "Checking for Finch socket at /Applications/Finch/lima/data/finch/sock/finch.sock..."
163+
164+
# Check if the socket file exists
165+
if sudo -u ec2-user bash -c 'test -S /Applications/Finch/lima/data/finch/sock/finch.sock'; then
166+
echo "Socket file exists"
167+
else
168+
echo "ERROR: Socket file not found at expected location /Applications/Finch/lima/data/finch/sock/finch.sock"
169+
exit 1
170+
fi
171+
172+
# Store the socket path for later steps
173+
echo "SOCKET_PATH=/Applications/Finch/lima/data/finch/sock/finch.sock" >> $GITHUB_ENV
174+
shell: bash
175+
176+
# Run e2e tests inside the Finch VM
177+
- name: Run e2e tests
178+
run: |
179+
echo "Running e2e tests as ec2-user..."
180+
181+
sudo -u ec2-user bash -c "cd ${{ github.workspace }} && DOCKER_HOST=unix:///Applications/Finch/lima/data/finch/sock/finch.sock make test-e2e"
182+
shell: bash
183+
184+
# Run e2e tests with OPA authorization
185+
- name: Run opa e2e tests
186+
run: |
187+
echo "Running e2e tests with OPA authorization as ec2-user..."
188+
189+
echo "Using DOCKER_HOST=unix:///Applications/Finch/lima/data/finch/sock/finch.sock"
190+
sudo -u ec2-user bash -c "cd ${{ github.workspace }} && DOCKER_HOST=unix:///Applications/Finch/lima/data/finch/sock/finch.sock make test-e2e-opa"
191+
shell: bash
192+
193+
# Cleanup
194+
- name: Stop Finch VM
195+
run: |
196+
echo "Stopping Finch VM as ec2-user..."
197+
198+
# Stop VM using ec2-user with custom environment
199+
sudo -u ec2-user bash -c "source /Users/ec2-user/.brewrc && HOME=/Users/ec2-user finch vm stop"
200+
shell: bash
201+
if: always()

0 commit comments

Comments
 (0)