-
Notifications
You must be signed in to change notification settings - Fork 1
177 lines (164 loc) · 6.55 KB
/
build.yml
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
on:
push:
pull_request:
name: CI
# Note: Windows ARM64 builds are currently disabled as GTK4 and its dependencies
# are not yet available for this platform in vcpkg
jobs:
flatpak:
name: "Flatpak"
runs-on: ubuntu-24.04
container:
image: bilelmoussaoui/flatpak-github-actions:gnome-47
options: --privileged
strategy:
matrix:
arch: [x86_64, aarch64]
fail-fast: false
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install deps
if: ${{ matrix.arch != 'x86_64' }}
run: |
dnf -y install docker
- name: Set up QEMU
if: ${{ matrix.arch != 'x86_64' }}
id: qemu
uses: docker/setup-qemu-action@v2
with:
platforms: arm64
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: aardvark.flatpak
manifest-path: org.p2panda.aardvark.json
cache-key: flatpak-builder-${{ github.sha }}
arch: ${{ matrix.arch }}
macos:
name: "macOS"
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-apple-darwin
arch: x86_64
- target: aarch64-apple-darwin
arch: arm64
steps:
- uses: actions/checkout@v4
- uses: moonrepo/setup-rust@v1
# Cache Homebrew packages
- uses: actions/cache@v3
with:
path: |
~/Library/Caches/Homebrew
/usr/local/Homebrew
/opt/homebrew
key: ${{ runner.os }}-${{ matrix.arch }}-brew-${{ hashFiles('.github/workflows/build.yml') }}
restore-keys: |
${{ runner.os }}-${{ matrix.arch }}-brew-
- name: Install dependencies
run: |
if [ "${{ matrix.arch }}" = "x86_64" ]; then
# Install x86_64 versions for Intel builds
HOMEBREW_PREFIX="/usr/local"
# Create /usr/local if it doesn't exist
sudo mkdir -p /usr/local
sudo chown -R $(whoami) /usr/local
# Install Homebrew for x86_64
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Add Homebrew to PATH
eval "$(/usr/local/bin/brew shellenv)"
# Install dependencies
arch -x86_64 /usr/local/bin/brew install pkg-config gtk4 pango cairo gdk-pixbuf at-spi2-core graphene
arch -x86_64 /usr/local/bin/brew install -v libadwaita
# Set pkg-config path for x86_64
echo "PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/opt/pango/lib/pkgconfig:/usr/local/opt/cairo/lib/pkgconfig:/usr/local/opt/gdk-pixbuf/lib/pkgconfig:/usr/local/opt/graphene/lib/pkgconfig:/usr/local/opt/libffi/lib/pkgconfig:/usr/local/opt/gtk4/lib/pkgconfig:/usr/local/opt/libadwaita/lib/pkgconfig" >> $GITHUB_ENV
# Ensure brew links are correct
arch -x86_64 brew link --force pango cairo gdk-pixbuf gtk4 libadwaita
else
# Install ARM64 versions for Apple Silicon builds
brew install pkg-config gtk4 pango cairo gdk-pixbuf at-spi2-core graphene libadwaita || true
brew upgrade pkg-config gtk4 pango cairo gdk-pixbuf at-spi2-core graphene libadwaita || true
echo "PKG_CONFIG_PATH=/opt/homebrew/lib/pkgconfig" >> $GITHUB_ENV
fi
echo "PKG_CONFIG_ALLOW_CROSS=1" >> $GITHUB_ENV
- name: Add target ${{ matrix.target }}
run: rustup target add ${{ matrix.target }}
- name: Build
env:
PKG_CONFIG_ALLOW_CROSS: "1"
CFLAGS: "-I/usr/local/include -I/usr/local/include/gtk-4.0 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include"
LDFLAGS: "-L/usr/local/lib -framework Cocoa -framework Security"
MACOSX_DEPLOYMENT_TARGET: "10.15"
PKG_CONFIG_SYSROOT_DIR: ""
PKG_CONFIG_PATH: "${{ env.PKG_CONFIG_PATH }}"
run: cargo build --release --target ${{ matrix.target }}
- name: Create App Bundle
run: |
mkdir -p Aardvark.app/Contents/MacOS
cp target/${{ matrix.target }}/release/aardvark Aardvark.app/Contents/MacOS/
# Create Info.plist - you'll need to customize this
cat > Aardvark.app/Contents/Info.plist << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>aardvark</string>
<key>CFBundleIdentifier</key>
<string>org.p2panda.aardvark</string>
<key>CFBundleName</key>
<string>Aardvark</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
</dict>
</plist>
EOF
- name: Create DMG
run: |
hdiutil create -volname "Aardvark" -srcfolder Aardvark.app -ov -format UDZO aardvark-${{ matrix.arch }}.dmg
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: aardvark-macos-${{ matrix.arch }}
path: aardvark-${{ matrix.arch }}.dmg
windows:
name: "Windows"
runs-on: windows-latest
# Only build for x64 since GTK4 is not available for Windows ARM64 yet
strategy:
fail-fast: false
matrix:
arch: [x64]
steps:
- uses: actions/checkout@v4
- uses: moonrepo/setup-rust@v1
- name: Install target
if: matrix.arch == 'arm64'
run: rustup target add aarch64-pc-windows-msvc
- name: Setup Windows build variables
run: |
$arch = "${{ matrix.arch }}"
$triplet = if ($arch -eq "x64") { "x64-windows" } else { "arm64-windows" }
echo "VCPKG_TRIPLET=$triplet" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
echo "VCPKG_ROOT=C:\vcpkg" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
shell: pwsh
# Cache vcpkg packages
- name: Cache vcpkg
uses: actions/cache@v3
with:
path: |
C:\vcpkg\installed
C:\vcpkg\packages
key: vcpkg-${{ matrix.arch }}-${{ hashFiles('**/vcpkg.json', '.github/workflows/install_vcpkg.ps1') }}
restore-keys: |
vcpkg-${{ matrix.arch }}-
- name: Install GTK4 and dependencies
run: |
. .\.github\workflows\install_vcpkg.ps1
shell: pwsh