From fdd94a55c22b0711b09c9f6bea20cf2bdd8244e5 Mon Sep 17 00:00:00 2001 From: Arjun Raja Yogidas Date: Sun, 6 Jul 2025 02:21:14 +0000 Subject: [PATCH] feat: add finch vm testing Signed-off-by: Arjun Raja Yogidas --- .github/workflows/finch-vm-test.yaml | 129 +++++++++++++++++++++++++++ Makefile | 22 +++++ 2 files changed, 151 insertions(+) create mode 100644 .github/workflows/finch-vm-test.yaml diff --git a/.github/workflows/finch-vm-test.yaml b/.github/workflows/finch-vm-test.yaml new file mode 100644 index 00000000..d6a8e947 --- /dev/null +++ b/.github/workflows/finch-vm-test.yaml @@ -0,0 +1,129 @@ +name: Finch VM +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-e2e: + runs-on: codebuild-finch-daemon-arm64-2-instance-${{ 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: | + 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: Install Rosetta 2 + run: su ec2-user -c 'echo "A" | /usr/sbin/softwareupdate --install-rosetta --agree-to-license || true' + + - name: Configure Homebrew for ec2-user + run: | + echo "Creating .brewrc file for ec2-user..." + cat > /Users/ec2-user/.brewrc << 'EOF' + # Homebrew environment setup + export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:$PATH" + export HOMEBREW_PREFIX="/opt/homebrew" + export HOMEBREW_CELLAR="/opt/homebrew/Cellar" + export HOMEBREW_REPOSITORY="/opt/homebrew" + export HOMEBREW_NO_AUTO_UPDATE=1 + EOF + chown ec2-user:staff /Users/ec2-user/.brewrc + + # Fix Homebrew permissions + echo "Setting permissions for Homebrew directories..." + mkdir -p /opt/homebrew/Cellar + chown -R ec2-user:staff /opt/homebrew + shell: bash + + # 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' + 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 + + - name: Configure workspace for ec2-user + run: | + # Ensure workspace is properly owned by ec2-user + chown -R ec2-user:staff ${{ github.workspace }} + + # 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"' + mkdir -p /private/var/run/finch-lima + cat /etc/passwd + chown ec2-user:daemon /private/var/run/finch-lima + shell: bash + + # Build binaries + - name: Build binaries + run: | + echo "Building cross architecture binaries..." + su ec2-user -c 'cd ${{ github.workspace }} && STATIC=1 GOPROXY=direct GOOS=linux GOARCH=$(GOARCH) make' + su ec2-user -c 'finch vm remove -f' + cp -f ${{ github.workspace }}/bin/finch-daemon /Applications/Finch/finch-daemon/finch-daemon + shell: bash + + # Initialize VM and check version + - name: Check Finch version + run: | + echo "Initializing VM and checking version..." + su ec2-user -c 'finch vm init' + sleep 5 # Wait for services to be ready + echo "Checking Finch version..." + su ec2-user -c 'LIMA_HOME=/Applications/Finch/lima/data /Applications/Finch/lima/bin/limactl shell finch curl --unix-socket /var/run/finch.sock -X GET http:/v1.43/version' + shell: bash + + # Run e2e tests + - name: Run e2e tests + run: | + echo "Running e2e tests..." + su ec2-user -c '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() diff --git a/Makefile b/Makefile index 7c729913..0272b6f2 100644 --- a/Makefile +++ b/Makefile @@ -163,3 +163,25 @@ coverage: linux release: linux @echo "$@" @$(FINCH_DAEMON_PROJECT_ROOT)/scripts/create-releases.sh $(RELEASE_TAG) + +.PHONY: macos +macos: +ifeq ($(shell uname), Darwin) + @echo "Running on macOS" +else + $(error This target can only be run on macOS!) +endif + + +DAEMON_DOCKER_HOST := "unix:///Applications/Finch/lima/data/finch/sock/finch.sock" +# DAEMON_ROOT + +.PHONY: test-e2e-inside-vm +test-e2e-inside-vm: macos + DOCKER_HOST=$(DAEMON_DOCKER_HOST) \ + DOCKER_API_VERSION="v1.41" \ + TEST_E2E=1 \ + go test ./e2e -test.v -ginkgo.v -ginkgo.randomize-all \ + --subject="finch" \ + --daemon-context-subject-prefix="/Applications/Finch/lima/bin/limactl shell finch sudo" \ + --daemon-context-subject-env="LIMA_HOME=/Applications/Finch/lima/data"