migrate to Conan v2 #114
Workflow file for this run
This file contains hidden or 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
name: VCMI - dependencies | |
on: | |
pull_request: | |
paths-ignore: | |
- README.md | |
workflow_dispatch: | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- platform: mac-intel | |
os: macos-14 | |
before_install: macos.sh | |
conan_profile: macos-intel | |
conan_system_libs: bzip2 libiconv sqlite3 zlib | |
- platform: mac-arm | |
os: macos-14 | |
before_install: macos.sh | |
conan_profile: macos-arm | |
conan_system_libs: bzip2 libiconv sqlite3 zlib | |
- platform: ios | |
os: macos-14 | |
before_install: macos.sh | |
conan_profile: ios-arm64 | |
conan_system_libs: bzip2 libiconv sqlite3 zlib | |
- platform: android-armeabi-v7a | |
os: ubuntu-latest | |
before_install: android-32.sh | |
conan_profile: android-32-ndk | |
conan_system_libs: zlib | |
- platform: android-arm64-v8a | |
os: ubuntu-latest | |
conan_profile: android-64-ndk | |
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 current | |
uses: actions/checkout@v4 | |
- 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: '17' | |
- 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: | | |
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 | |
- name: Build recipes with our patches | |
run: | | |
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: | | |
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 \ | |
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 install . \ | |
--output-folder=conan-generated \ | |
--build=missing \ | |
--profile=conan_profiles/${{ matrix.conan_profile }} \ | |
${{ matrix.conan_options }} | |
- name: Remove builds and source code | |
run: conan cache clean | |
- name: Get NDK path | |
if: ${{ startsWith(matrix.platform, 'android') }} | |
run: | | |
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 }} \ | |
--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: conan cache save --file "$DEPS_FILE" "*:*" | |
- 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: ${{ env.DEPS_FILE }} |