-
Notifications
You must be signed in to change notification settings - Fork 3
142 lines (123 loc) · 4.12 KB
/
Copy pathbuild.yml
File metadata and controls
142 lines (123 loc) · 4.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
name: Build Binaries
on:
push:
branches: ['main']
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: 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 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 artifacts/perfecto-mcp-macos-arm64/* dist/
chmod +x dist/perfecto-mcp-macos-arm64
echo "Copied macOS ARM64 binary"
fi
if [ -d "artifacts/perfecto-mcp-macos-amd64" ]; then
cp artifacts/perfecto-mcp-macos-amd64/* dist/
chmod +x dist/perfecto-mcp-macos-amd64
echo "Copied macOS AMD64 binary"
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