Skip to content

conan v2 wip #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

Draft
wants to merge 46 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
a71b888
conan v2 wip
kambala-decapitator Mar 16, 2025
bca5f97
wip
kambala-decapitator Mar 16, 2025
b558f43
1
kambala-decapitator Mar 16, 2025
66b91fb
1
kambala-decapitator Mar 16, 2025
3de8c8f
1
kambala-decapitator Mar 16, 2025
e555d09
Update rebuildDependencies.yml
kambala-decapitator Mar 17, 2025
63f7d27
system libs, luajit
kambala-decapitator Mar 18, 2025
546754a
test macOS Intel
kambala-decapitator Mar 18, 2025
b2cd6eb
apply custom patches to minizip and Qt
kambala-decapitator Apr 3, 2025
aa2c88b
fix
kambala-decapitator Apr 3, 2025
c120b61
1
kambala-decapitator Apr 3, 2025
5cf1ef5
1
kambala-decapitator Apr 3, 2025
b082131
1
kambala-decapitator Apr 3, 2025
a047352
fix
kambala-decapitator Apr 3, 2025
2c62188
1
kambala-decapitator Apr 3, 2025
2beb304
1
kambala-decapitator Apr 3, 2025
baa0223
1
kambala-decapitator Apr 3, 2025
98de95c
1
kambala-decapitator Apr 3, 2025
ecd8ad0
md4c
kambala-decapitator Apr 3, 2025
3ea5038
1
kambala-decapitator Apr 3, 2025
b2b1e03
1
kambala-decapitator Apr 3, 2025
96f25c3
1
kambala-decapitator Apr 3, 2025
86646ec
1
kambala-decapitator Apr 3, 2025
6d05062
Update rebuildDependencies.yml
kambala-decapitator Apr 5, 2025
4ca367d
Update rebuildDependencies.yml
kambala-decapitator Apr 5, 2025
d88723a
Update rebuildDependencies.yml
kambala-decapitator Apr 5, 2025
3276fa2
Update rebuildDependencies.yml
kambala-decapitator Apr 5, 2025
c6ceb29
Update rebuildDependencies.yml
kambala-decapitator Apr 5, 2025
3a8e6ac
Update rebuildDependencies.yml
kambala-decapitator Apr 5, 2025
6f3080c
Update rebuildDependencies.yml
kambala-decapitator Apr 5, 2025
ae972f0
Update rebuildDependencies.yml
kambala-decapitator Apr 5, 2025
20b20e5
Update rebuildDependencies.yml
kambala-decapitator Apr 5, 2025
4a9085d
Update rebuildDependencies.yml
kambala-decapitator Apr 5, 2025
87d62b3
default bash, use Conan action, use default CMake
kambala-decapitator May 13, 2025
1d31c7a
print NDK path
kambala-decapitator May 13, 2025
f335de3
1
kambala-decapitator May 13, 2025
f4275be
create release with artifacts
kambala-decapitator May 13, 2025
7d810e3
shell
kambala-decapitator May 13, 2025
cc9f31e
[flac] add patch for Android < 21
kambala-decapitator May 14, 2025
37676fe
fix
kambala-decapitator May 14, 2025
397e8d5
fix
kambala-decapitator May 14, 2025
a38ef6e
Revert "shell"
kambala-decapitator May 14, 2025
90a8805
1
kambala-decapitator May 14, 2025
6496688
1
kambala-decapitator May 14, 2025
c0cf226
win test
kambala-decapitator May 15, 2025
6ed4ae0
1
kambala-decapitator May 15, 2025
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
343 changes: 247 additions & 96 deletions .github/workflows/rebuildDependencies.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,141 +8,292 @@ on:
workflow_dispatch:

jobs:
prepare:
runs-on: ubuntu-latest
outputs:
RELEASE_TAG: ${{ steps.release_tag.outputs.RELEASE_TAG }}
steps:
- name: Name release tag after today's date
id: release_tag
run: echo "RELEASE_TAG=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT

- name: Create draft release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.release_tag.outputs.RELEASE_TAG }}
draft: true
prerelease: true

build:
needs: prepare
strategy:
fail-fast: false
matrix:
include:
- platform: mac-intel
os: macos-13
before_install: macos.sh
conan_profile: macos-intel
conan_prebuilts: dependencies-mac-intel
conan_options: --options with_apple_system_libs=True
- platform: mac-arm
os: macos-13
before_install: macos.sh
conan_profile: macos-arm
conan_prebuilts: dependencies-mac-arm
conan_options: --options with_apple_system_libs=True
- platform: ios
os: macos-13
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
- platform: android-armeabi-v7a
os: ubuntu-24.04
conan_profile: android-32-ndk
conan_prebuilts: dependencies-android-armeabi-v7a
- platform: android-arm64-v8a
os: ubuntu-24.04
conan_profile: android-64-ndk
conan_prebuilts: dependencies-android-arm64-v8a
# - platform: mac-intel
# os: macos-15
# before_install: macos.sh
# conan_profile: macos-intel
# conan_system_libs: bzip2 libiconv sqlite3 zlib
# - platform: mac-arm
# os: macos-15
# before_install: macos.sh
# conan_profile: macos-arm
# conan_system_libs: bzip2 libiconv sqlite3 zlib
# - platform: ios
# os: macos-15
# 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.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: windows-x64
os: windows-2022
conan_profile: msvc-x64
conan_options: -o "&:target_pre_windows10=True"
- platform: windows-x86
os: windows-2022
conan_profile: msvc-x86
conan_options: -o "&:target_pre_windows10=True"
runs-on: ${{ matrix.os }}
defaults:
run:
shell: bash

steps:
- name: Checkout repository
- name: Checkout VCMI
uses: actions/checkout@v4
# TODO
with:
repository: 'vcmi/vcmi'
ref: 'update_prebuilts'
repository: 'kambala-decapitator/vcmi'
ref: 'conan-v2'

- 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 != '' }}"
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: Setup Conan Client
uses: conan-io/setup-conan@v1
with:
home: ${{github.workspace}}/conan_home

- 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') }}
# CMake/Ninja version should be synced with runners
# https://github.com/actions/runner-images/tree/main/images
# using CMake from Android SDK because some runners already have CMake v4
- name: Prepare platform tools
run: |
cmakeVersion=3.31.6

# newPathFile=$(mktemp)
# echo "$ANDROID_HOME/cmake/$cmakeVersion/bin" | cat - "$GITHUB_PATH" > "$newPathFile"
# mv -f "$newPathFile" "$GITHUB_PATH"

echo "
[platform_tool_requires]
cmake/$cmakeVersion
ninja/1.12.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

- name: Checkout current
uses: actions/checkout@v4
with:
path: deps

# 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' }}
set -x
cciRepo='conan-center-index'
branchName='master'
recipePathQt='recipes/qt'
custom_patches_path="$(pwd)/deps/conan_patches"

#extraAndroidOptions="-o qt/*:android_sdk=$ANDROID_HOME"
#extraOptionsBash=${{ startsWith(matrix.platform, 'android') && '"-o qt/*:android_sdk=$ANDROID_HOME"' || '' }}

function slash_to_backslash {
slash=/
echo "${1//$slash/\\}"
}

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

conanCreateCommand="conan create $packagePath \
--version=$version \
--profile=../CI/conan/${{ matrix.conan_profile }} \
--build=missing \
--test-folder= \
--core-conf core.sources.patch:extra_path=$custom_patches_path \
"
# $(slash_to_backslash "$conanCreateCommand")
# Windows workaround for https://bugreports.qt.io/browse/QTBUG-84543
PATH="/c/Strawberry/perl/bin:$PATH" $conanCreateCommand ${{ startsWith(matrix.platform, 'android') && '-o "qt/*:android_sdk=$ANDROID_HOME"' || '' }}
done

# TODO: remove when https://github.com/conan-io/conan-center-index/pull/26577 is merged
- name: Build LuaJIT from PR changes
run: |
rm -rf ~/.conan/data/sqlite3
cciForkRepo='cci-fork'
branchName='package/luajit'
recipePath='recipes/luajit'

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 "$recipePath"
git checkout

- name: Install Conan
run: pipx install 'conan<2.0'
conan create "$recipePath/all" \
--version=2.1.0-beta3 \
--profile=../CI/conan/${{ matrix.conan_profile }} \
--build=missing \
--test-folder=''

- 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 }} \
${{ matrix.conan_options }}
env:
GENERATE_ONLY_BUILT_CONFIG: 1
--profile=CI/conan/${{ matrix.conan_profile }} \
${{ matrix.conan_options }} || true

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.platform }}
compression-level: 0
path: |
${{github.workspace}}/conan_home/p/b/ffmp*/b/build-release
${{github.workspace}}/conan_home/p/b/zlib*/p

- run: exit 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: |
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=CI/conan/${{ 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: |
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
packageList="$(conan list --format=compact | tail -n +2)"
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 dependencies-${{matrix.platform}}.tgz "*:*"

- name: Upload artifacts
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: dependencies-${{ matrix.platform }}
compression-level: 0
path: 'dependencies-${{matrix.platform}}.txz'
path: 'dependencies-${{matrix.platform}}.tgz'

- name: Update release with artifact and text
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.prepare.outputs.RELEASE_TAG }}
files: 'dependencies-${{matrix.platform}}.tgz'
append_body: true
body: |
<details><summary>`${{ matrix.platform }}` packages</summary>

${{ env.CONAN_PACKAGES }}
</details>

release:
needs: [prepare, build]
runs-on: ubuntu-latest
steps:
- name: Publish release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.prepare.outputs.RELEASE_TAG }}
draft: false
Loading