refactor: Extract vcpkg installation script and update cache key #64
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
- name: Configure pkg-config paths | |
run: | | |
$installPrefix = "$env:VCPKG_ROOT\installed\$env:VCPKG_TRIPLET" | |
# Add required paths to system PATH | |
$env:Path = "$installPrefix\bin;$env:Path" | |
$env:Path = "$env:VCPKG_ROOT\downloads\tools\pkgconfig\windows\pkg-config-0.29.2-3\tools\pkg-config-0.29.2\bin;$env:Path" | |
# Set pkg-config environment variables | |
$env:PKG_CONFIG = "$env:VCPKG_ROOT\downloads\tools\pkgconfig\windows\pkg-config-0.29.2-3\tools\pkg-config-0.29.2\bin\pkg-config.exe" | |
$env:PKG_CONFIG_PATH = "$installPrefix\lib\pkgconfig" | |
$env:PKG_CONFIG_LIBDIR = "$installPrefix\lib\pkgconfig" | |
$env:PKG_CONFIG_ALLOW_CROSS = "1" | |
$env:PKG_CONFIG_ALLOW_SYSTEM_CFLAGS = "1" | |
$env:PKG_CONFIG_ALLOW_SYSTEM_LIBS = "1" | |
# Export variables to GITHUB_ENV | |
"PKG_CONFIG=$env:PKG_CONFIG" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | |
"PKG_CONFIG_PATH=$env:PKG_CONFIG_PATH" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | |
"PKG_CONFIG_LIBDIR=$env:PKG_CONFIG_LIBDIR" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | |
"PKG_CONFIG_ALLOW_CROSS=1" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | |
"PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | |
"PKG_CONFIG_ALLOW_SYSTEM_LIBS=1" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | |
# Add to PATH for subsequent steps | |
"$installPrefix\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
"$env:VCPKG_ROOT\downloads\tools\pkgconfig\windows\pkg-config-0.29.2-3\tools\pkg-config-0.29.2\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
shell: pwsh | |
- name: Verify pkg-config setup | |
run: | | |
Write-Host "Verifying pkg-config installation..." | |
pkg-config --version | |
Write-Host "Checking library configurations..." | |
pkg-config --debug --print-errors --cflags --libs glib-2.0 | |
pkg-config --debug --print-errors --cflags --libs gtk4 libadwaita-1 | |
shell: pwsh | |
- name: Build | |
run: | | |
$arch = "${{ matrix.arch }}" | |
$target = if ($arch -eq "x64") { "x86_64-pc-windows-msvc" } else { "aarch64-pc-windows-msvc" } | |
cargo build --release --target $target | |
shell: pwsh | |
- name: Package | |
run: | | |
mkdir aardvark-${{ matrix.arch }} | |
copy target/${{ matrix.arch == 'x64' && 'x86_64-pc-windows-msvc' || 'aarch64-pc-windows-msvc' }}/release/aardvark.exe aardvark-${{ matrix.arch }}/ | |
# Add any additional DLLs or resources here | |
- name: Create ZIP | |
run: Compress-Archive -Path aardvark-${{ matrix.arch }} -DestinationPath aardvark-windows-${{ matrix.arch }}.zip | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: aardvark-windows-${{ matrix.arch }} | |
path: aardvark-windows-${{ matrix.arch }}.zip |