Skip to content

Add correct tag for docker image #41

Add correct tag for docker image

Add correct tag for docker image #41

Workflow file for this run

name: Build Binaries
on:
push:
branches: ['main']
tags: ['v*']
pull_request:
branches: ['main']
workflow_dispatch:
permissions:
contents: write
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-24.04
name: linux
arch: amd64
- os: ubuntu-24.04-arm
name: linux
arch: arm64
- os: windows-latest
name: windows
arch: amd64
- os: macos-latest
name: macos
arch: arm64
- os: macos-15-intel
name: macos
arch: amd64
steps:
- uses: actions/checkout@v4
- name: Build binary (Linux in Ubuntu 25.10 container)
if: matrix.name == 'linux'
shell: bash
run: |
# Docker container with Ubuntu 25.10 and build the binary inside it
rm -rf dist/*
docker run --rm \
-v "$PWD:/workspace" \
-w /workspace \
ubuntu:25.10 \
bash -c "
set -e
echo 'Setting up Ubuntu 25.10 build environment...'
apt-get update -y
apt-get install -y --fix-missing curl python3 python3-pip python3-venv binutils
# Install uv (Python package manager)
curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH=\"\$HOME/.local/bin:\$PATH\"
echo 'Building binary with uv...'
uv sync
uv run build.py
echo 'Build completed. Checking output:'
ls -la dist/
"
- name: Setup uv for Windows/macOS
if: matrix.name != 'linux'
uses: astral-sh/setup-uv@v4
- name: Build binary (Windows/macOS native)
if: matrix.name != 'linux'
shell: bash
run: |
rm -rf dist/*
uv sync
uv run build.py
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: perfecto-mcp-${{ matrix.name }}-${{ matrix.arch }}
path: dist/
commit-artifacts:
needs: build
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts/
- name: Organize artifacts into dist/
shell: bash
run: |
mkdir -p dist/
# Copy all binaries from artifact directories to dist/
# upload-artifacts job does not preserve the executable permission
# so we need to set it manually: https://github.com/actions/download-artifact?tab=readme-ov-file#limitations
if [ -d "artifacts/perfecto-mcp-linux-amd64" ]; then
cp artifacts/perfecto-mcp-linux-amd64/* dist/
chmod +x dist/perfecto-mcp-linux-amd64
echo "Copied Linux AMD64 binary"
fi
if [ -d "artifacts/perfecto-mcp-linux-arm64" ]; then
cp artifacts/perfecto-mcp-linux-arm64/* dist/
chmod +x dist/perfecto-mcp-linux-arm64
echo "Copied Linux ARM64 binary"
fi
if [ -d "artifacts/perfecto-mcp-windows-amd64" ]; then
cp artifacts/perfecto-mcp-windows-amd64/* dist/
echo "Copied Windows AMD64 binary"
fi
if [ -d "artifacts/perfecto-mcp-macos-arm64" ]; then
cp -r artifacts/perfecto-mcp-macos-arm64/* dist/
if [ -d "dist/perfecto-mcp-arm64.app" ]; then
echo "Found macOS ARM64 .app bundle"
else
chmod +x dist/perfecto-mcp-macos-arm64 2>/dev/null || true
echo "Copied macOS ARM64 binary"
fi
fi
if [ -d "artifacts/perfecto-mcp-macos-amd64" ]; then
cp -r artifacts/perfecto-mcp-macos-amd64/* dist/
if [ -d "dist/perfecto-mcp-amd64.app" ]; then
echo "Found macOS AMD64 .app bundle"
else
chmod +x dist/perfecto-mcp-macos-amd64 2>/dev/null || true
echo "Copied macOS AMD64 binary"
fi
fi
echo "Final dist/ contents:"
ls -la dist/ || echo "No dist/ directory found"
- name: Commit all artifacts to repository
shell: bash
run: |
git config --local user.email "actions@github.com"
git config --local user.name "GitHub Actions"
git add dist/
if git diff --staged --quiet; then
echo "No changes to commit"
else
git commit -m "[skip ci] Update all binary artifacts"
git push
fi