Skip to content

migrate to Conan v2 #8

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Aug 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
288 changes: 198 additions & 90 deletions .github/workflows/rebuildDependencies.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
name: VCMI - dependencies

on:
push:
branches:
- main
pull_request:
paths-ignore:
- README.md
workflow_dispatch:

jobs:
Expand All @@ -14,135 +13,244 @@ jobs:
matrix:
include:
- platform: mac-intel
os: macos-13
os: macos-14
before_install: macos.sh
conan_profile: macos-intel
conan_prebuilts: dependencies-mac-intel
conan_options: --options with_apple_system_libs=True
conan_system_libs: bzip2 libiconv sqlite3 zlib
- platform: mac-arm
os: macos-13
os: macos-14
before_install: macos.sh
conan_profile: macos-arm
conan_prebuilts: dependencies-mac-arm
conan_options: --options with_apple_system_libs=True
conan_system_libs: bzip2 libiconv sqlite3 zlib
- platform: ios
os: macos-13
os: macos-14
before_install: macos.sh
conan_profile: ios-arm64
conan_prebuilts: dependencies-ios
conan_options: --options with_apple_system_libs=True
- platform: mingw-x86-64
os: ubuntu-24.04
before_install: mingw.sh
conan_profile: mingw64-linux.jinja
conan_prebuilts: dependencies-mingw-x86-64
- platform: mingw-x86
os: ubuntu-24.04
before_install: mingw.sh
conan_profile: mingw32-linux.jinja
conan_prebuilts: dependencies-mingw-x86
conan_system_libs: bzip2 libiconv sqlite3 zlib
- platform: android-armeabi-v7a
os: ubuntu-24.04
os: ubuntu-latest
before_install: android-32.sh
conan_profile: android-32-ndk
conan_prebuilts: dependencies-android-armeabi-v7a
conan_system_libs: zlib
- platform: android-arm64-v8a
os: ubuntu-24.04
os: ubuntu-latest
conan_profile: android-64-ndk
conan_prebuilts: dependencies-android-arm64-v8a
conan_system_libs: zlib
- platform: android-x64
os: ubuntu-latest
conan_profile: android-x64-ndk
conan_system_libs: zlib
- platform: windows-x64
os: windows-latest
conan_profile: msvc-x64
conan_options: -o "&:target_pre_windows10=True"
- platform: windows-x86
os: windows-latest
conan_profile: msvc-x86
conan_options: -o "&:target_pre_windows10=True"
- platform: windows-arm64
os: windows-11-arm
conan_profile: msvc-arm64
conan_options: -o "&:lua_lib=lua"
runs-on: ${{ matrix.os }}
defaults:
run:
shell: bash

steps:
- name: Checkout repository
- name: Checkout current
uses: actions/checkout@v4
with:
repository: 'vcmi/vcmi'
ref: 'update_prebuilts'

- name: Define common variables
run: |
echo CUSTOM_PATCHES_PATH="$(pwd)/conan_patches" >> "$GITHUB_ENV"
echo DEPS_FILE="dependencies-${{ matrix.platform }}.tgz" >> "$GITHUB_ENV"
echo DEPS_LIST_FILE="dependencies-${{ matrix.platform }}.txt" >> "$GITHUB_ENV"
- name: Prepare CI
if: ${{ matrix.before_install }}
run: ci/${{ matrix.before_install }}

- name: Obtain path to the Windows-aware Perl
if: ${{ startsWith(matrix.platform, 'windows') }}
run: |
windowsPerl=$(which -a perl | fgrep Strawberry)
echo "WINDOWS_PERL_DIR=$(dirname "$windowsPerl")" >> "$GITHUB_ENV"
- uses: actions/setup-java@v4
if: ${{ startsWith(matrix.platform, 'android') }}
with:
distribution: 'temurin'
java-version: '11'
java-version: '17'

- name: Prepare CI
if: "${{ matrix.before_install != '' }}"
run: source '${{github.workspace}}/CI/before_install/${{matrix.before_install}}'

- name: Install Conan Dependencies
if: "${{ matrix.conan_prebuilts != '' }}"
run: source '${{github.workspace}}/CI/install_conan_dependencies.sh' '${{matrix.conan_prebuilts}}'

- name: Remove old binary packages (non-android)
if: ${{ !startsWith(matrix.platform, 'android') }}
run: rm -rf ~/.conan/data/*/*/_/_/package

# TODO: fix libiconv - fails to build on android (both macos and linux host)
- name: Remove old binary packages (android)
if: ${{ startsWith(matrix.platform, 'android') }}
- name: Setup Conan Client
run: |
pipx install conan
conan profile detect
# CMake/Ninja version should be synced with runners
# https://github.com/actions/runner-images/tree/main/images
- name: Prepare platform tools
run: |
echo "
[platform_tool_requires]
cmake/3.31.6
ninja/1.13.1
[conf]
tools.cmake.cmaketoolchain:generator=Ninja" >> $(conan profile path default)
- name: Install system libs recipes
if: ${{ matrix.conan_system_libs }}
run: |
mv ~/.conan/data/libiconv ~/
rm -rf ~/.conan/data/*/*/_/_/package
mv ~/libiconv ~/.conan/data
systemLibsRepo='conan-system-libs'
git clone "https://github.com/kambala-decapitator/$systemLibsRepo.git" \
--depth 1 \
--no-tags \
--single-branch
cd "$systemLibsRepo"
for p in ${{ matrix.conan_system_libs }} ; do
conan create "$p" --user system
done
# Completely remove packages that were confirmed to be rebuildable using upstream recipe/sources
# TODO: generate entire package from scratch instead of such cleanup
- name: Remove old recipes
- name: Build recipes with our patches
run: |
rm -rf ~/.conan/data/boost
rm -rf ~/.conan/data/ffmpeg
rm -rf ~/.conan/data/xz_utils
rm -rf ~/.conan/data/sdl_mixer
rm -rf ~/.conan/data/sdl_image
rm -rf ~/.conan/data/sdl_ttf
rm -rf ~/.conan/data/sdl
- name: Remove old recipes (non-apple)
if: ${{ matrix.platform != 'ios' && matrix.platform != 'mac-intel' && matrix.platform != 'mac-arm' }}
cciRepo='conan-center-index'
branchName='master'
recipePathQt='recipes/qt'
git clone "https://github.com/conan-io/$cciRepo.git" \
--branch "$branchName" \
--no-checkout \
--depth 1 \
--no-tags \
--single-branch \
--sparse
cd "$cciRepo"
git sparse-checkout set \
recipes/minizip \
recipes/flac \
$recipePathQt \
git checkout
# versions must be synced with: conan_patches/<package>/conandata.yml
# if no custom patches are required for a package, it should be removed from here
for p in minizip/1.3.1 flac/1.4.2 qt/5.15.16 ; do
IFS_OLD="$IFS"
IFS=/
read package version <<<"$p"
IFS="$IFS_OLD"
if [[ $package == qt ]] ; then
packagePath="$recipePathQt/5.x.x"
else
packagePath="recipes/$package/all"
fi
# Windows workaround for https://bugreports.qt.io/browse/QTBUG-84543
PATH="$WINDOWS_PERL_DIR:$PATH" conan create $packagePath \
--version=$version \
--profile=../conan_profiles/${{ matrix.conan_profile }} \
--build=missing \
--test-folder= \
--core-conf core.sources.patch:extra_path=$CUSTOM_PATCHES_PATH \
${{ startsWith(matrix.platform, 'android') && '-o "qt/*:android_sdk=$ANDROID_HOME"' || '' }}
done
# TODO: remove LuaJIT when https://github.com/conan-io/conan-center-index/pull/26577 is merged
- name: Build LuaJIT from PR changes
if: ${{ !contains(matrix.conan_options, '"&:lua_lib=lua"') }}
run: |
rm -rf ~/.conan/data/sqlite3
cciForkRepo='cci-fork'
branchName='vcmi'
git clone "https://github.com/kambala-decapitator/conan-center-index.git" "$cciForkRepo" \
--branch "$branchName" \
--no-checkout \
--depth 1 \
--no-tags \
--single-branch \
--sparse
cd "$cciForkRepo"
git sparse-checkout set \
recipes/luajit \
- name: Install Conan
run: pipx install 'conan<2.0'
git checkout
for p in luajit/2.1.0-beta3 ; do
IFS_OLD="$IFS"
IFS=/
read package version <<<"$p"
IFS="$IFS_OLD"
conan create "recipes/$package/all" \
--version=$version \
--profile=../conan_profiles/${{ matrix.conan_profile }} \
--build=missing \
--test-folder=
done
- name: Generate conan profile
run: |
conan profile new default --detect
conan install . \
--install-folder=conan-generated \
--no-imports \
--output-folder=conan-generated \
--build=missing \
--profile:build=default \
--profile:host=CI/conan/${{ matrix.conan_profile }} \
--profile=conan_profiles/${{ matrix.conan_profile }} \
${{ matrix.conan_options }}
env:
GENERATE_ONLY_BUILT_CONFIG: 1
- name: Remove builds and source code
run: "conan remove --builds --src --force '*'"

- name: Remove build requirements
run: conan cache clean

- name: Get NDK path
if: ${{ startsWith(matrix.platform, 'android') }}
run: |
rm -rf ~/.conan/data/android-ndk
rm -rf ~/.conan/data/autoconf
rm -rf ~/.conan/data/automake
rm -rf ~/.conan/data/b2
rm -rf ~/.conan/data/cmake
rm -rf ~/.conan/data/gnu-config
rm -rf ~/.conan/data/libtool
rm -rf ~/.conan/data/m4
rm -rf ~/.conan/data/nasm
rm -rf ~/.conan/data/pkgconf
rm -rf ~/.conan/data/yasm
ndkPackage='android-ndk'
hexRegex='[[:xdigit:]]+'
ndkPackageRevision=$(conan list --format=compact "$ndkPackage/*:*" \
| egrep --only-matching "$ndkPackage/\\w+#$hexRegex:$hexRegex")
ndkPackagePath=$(conan cache path "$ndkPackageRevision")
ndkPath="$ndkPackagePath/bin"
echo "NDK directory: $ndkPath"
- name: Remove build requirements' binaries
run: |
graphFile='graph.json'
packageListFile='pkglist.json'
conan graph info . \
--profile=conan_profiles/${{ matrix.conan_profile }} \
${{ matrix.conan_options }} \
--format=json \
--build=never \
--no-remote \
> "$graphFile"
conan list \
--graph "$graphFile" \
--graph-context=build-only \
--format=json \
> "$packageListFile"
conan remove --list "$packageListFile" --confirm
- name: Create list of built packages
run: |
packageList="$(conan list --format=compact | tail -n +2)"
echo "$packageList" > "$DEPS_LIST_FILE"
echo "CONAN_PACKAGES<<EOF
$packageList
EOF" >> "$GITHUB_ENV"
- name: Create dependencies archive
run: "tar --create --xz --file dependencies-${{matrix.platform}}.txz -C ~/.conan data"
run: conan cache save --file "$DEPS_FILE" "*:*"

- name: Upload artifacts
- name: Upload binaries list
uses: actions/upload-artifact@v4
with:
name: list of dependencies-${{ matrix.platform }}
path: ${{ env.DEPS_LIST_FILE }}
- name: Upload binaries
uses: actions/upload-artifact@v4
with:
name: dependencies-${{ matrix.platform }}
compression-level: 0
path: 'dependencies-${{matrix.platform}}.txz'
path: ${{ env.DEPS_FILE }}
Loading
Loading