Workflow improvements #41
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
name: VCMI - dependencies | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
workflow_dispatch: | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- platform: mac-intel | |
os: macos-13 | |
before_install: macos.sh | |
preset: macos-conan-ninja-release | |
conan_profile: macos-intel | |
conan_prebuilts: dependencies-mac-intel | |
conan_options: --options with_apple_system_libs=True | |
artifact_platform: intel | |
- platform: mac-arm | |
os: macos-13 | |
before_install: macos.sh | |
preset: macos-arm-conan-ninja-release | |
conan_profile: macos-arm | |
conan_prebuilts: dependencies-mac-arm | |
conan_options: --options with_apple_system_libs=True | |
artifact_platform: arm | |
- platform: ios | |
os: macos-13 | |
before_install: macos.sh | |
preset: ios-release-conan-ccache | |
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_x86_64.sh | |
preset: windows-mingw-conan-linux | |
conan_profile: mingw64-linux.jinja | |
conan_prebuilts: dependencies-mingw | |
- platform: mingw-x86 | |
os: ubuntu-24.04 | |
before_install: mingw_x86.sh | |
preset: windows-mingw-conan-linux | |
conan_profile: mingw32-linux.jinja | |
conan_prebuilts: dependencies-mingw-32 | |
- platform: android-armeabi-v7a | |
os: ubuntu-24.04 | |
preset: android-conan-ninja-release | |
conan_profile: android-32-ndk | |
conan_prebuilts: dependencies-android-32 | |
artifact_platform: armeabi-v7a | |
- platform: android-arm64-v8a | |
os: ubuntu-24.04 | |
preset: android-conan-ninja-release | |
conan_profile: android-64-ndk | |
conan_prebuilts: dependencies-android-64 | |
artifact_platform: arm64-v8a | |
runs-on: ${{ matrix.os }} | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
repository: 'vcmi/vcmi' | |
ref: 'update_prebuilts' | |
- uses: actions/setup-java@v4 | |
if: ${{ startsWith(matrix.platform, 'android') }} | |
with: | |
distribution: 'temurin' | |
java-version: '11' | |
- 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 | |
# 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 | |
# if: ${{ startsWith(matrix.platform, 'android') }} | |
# run: | | |
# mv ~/.conan/data/libiconv ~/ | |
# rm -rf ~/.conan/data/*/*/_/_/package | |
# mv ~/libiconv ~/.conan/data | |
# 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 | |
run: | | |
rm -rf ~/.conan/data/ffmpeg | |
rm -rf ~/.conan/data/pkgconfig | |
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' }} | |
run: | | |
rm -rf ~/.conan/data/sqlite3 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.10' | |
- name: Setup Conan | |
run: pip3 install 'conan<2.0' | |
- name: Generate conan profile | |
run: | | |
conan profile new default --detect | |
conan install . \ | |
--install-folder=conan-generated \ | |
--no-imports \ | |
--build=missing \ | |
--profile:build=default \ | |
--profile:host=CI/conan/${{ 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: | | |
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 | |
- name: Create dependencies archive | |
run: "tar --create --xz --file dependencies-${{matrix.platform}}.txz -C ~/.conan data" | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dependencies-${{ matrix.platform }} | |
compression-level: 0 | |
path: 'dependencies-${{matrix.platform}}.txz' |