.github/workflows/build-native.yml #39
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: | |
workflow_dispatch: | |
push: | |
paths-ignore: | |
- 'cloud/**' | |
- 'doc/**' | |
- 'fuzzer/**' | |
- 'ide/**' | |
- 'kobo/**' | |
- 'python/**' | |
- '.github/workflows/build-container.yml' | |
- '.github/workflows/build-unix.yml' | |
- '.readthedocs.yaml' | |
branches: | |
- master | |
pull_request: | |
paths-ignore: | |
- 'cloud/**' | |
- 'doc/**' | |
- 'fuzzer/**' | |
- 'ide/**' | |
- 'kobo/**' | |
- 'python/**' | |
- '.github/workflows/build-container.yml' | |
- '.github/workflows/build-unix.yml' | |
- '.readthedocs.yaml' | |
branches: | |
- master | |
env: | |
DEBUG: y | |
BOOST: boost_1_85_0 | |
jobs: | |
build-ubuntu: | |
runs-on: ubuntu-22.04 | |
env: | |
TARGET: UNIX | |
TARGET_BIN: xcsoar | |
TARGET_FINAL: xcsoar-debug | |
TARGET_EXT: '' | |
steps: | |
- name: set vars for push | |
if: github.event_name == 'push' | |
run: | | |
echo "DEBUG=n" >> $GITHUB_ENV | |
echo "TARGET_FINAL=xcsoar" >> $GITHUB_ENV | |
- id: checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- id: cache-ccache | |
uses: hendrikmuhs/ccache-action@v1 | |
with: | |
key: ${{ env.TARGET }} | |
- name: "Cache Boost" | |
uses: actions/cache@v4 | |
with: | |
key: ${{ env.BOOST }}-${{ hashFiles('lib/boost/patches/**') }} | |
path: | | |
${{ github.workspace }}/output/download/${{ env.BOOST }}.tar.bz2 | |
${{ github.workspace }}/output/src/stamp-${{ env.BOOST }} | |
${{ github.workspace }}/output/src/${{ env.BOOST }}/boost | |
- name: find githash | |
run: | | |
echo "git_hash=$(git rev-parse --short $GITHUB_SHA)" >> $GITHUB_ENV | |
- name: Install dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y --no-install-recommends \ | |
make \ | |
quilt \ | |
g++ \ | |
python3 \ | |
librsvg2-bin xsltproc \ | |
imagemagick gettext sox \ | |
zlib1g-dev \ | |
libfmt-dev \ | |
libdbus-1-dev \ | |
libsodium-dev \ | |
libfreetype6-dev \ | |
libpng-dev libjpeg-dev \ | |
libtiff5-dev libgeotiff-dev \ | |
libc-ares-dev \ | |
libcurl4-gnutls-dev \ | |
libc-ares-dev \ | |
liblua5.4-dev \ | |
libxml-parser-perl \ | |
libasound2-dev \ | |
libgles2-mesa-dev libegl1-mesa-dev \ | |
libnetcdf-dev libnetcdf-c++4-dev | |
- name: Compile XCSoar | |
run: | | |
make -j$(nproc) TARGET=${{env.TARGET }} DEBUG=${{ env.DEBUG }} USE_CCACHE=y V=2 everything check | |
- name: upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.TARGET_FINAL }}-${{ env.git_hash }}${{ env.TARGET_EXT }} | |
path: output/${{ env.TARGET }}/bin/${{ env.TARGET_BIN }}${{ env.TARGET_EXT }} | |
- name: Deploy to Staging server | |
if: | | |
github.repository == 'XCSoar/XCSoar' && | |
github.ref == 'ref/heads/master' && | |
github.event == 'push' | |
uses: easingthemes/ssh-deploy@main | |
env: | |
SSH_PRIVATE_KEY: ${{ secrets.REPOSITORY_SSH_KEY }} | |
ARGS: "-rltgoDzvO" | |
SOURCE: output/${{ env.TARGET }}/bin/${{ env.TARGET_BIN }}.${{ env.TARGET_EXT }} | |
REMOTE_HOST: ${{ secrets.REPOSITORY_HOST }} | |
REMOTE_USER: ${{ secrets.REPOSITORY_SSH_USER }} | |
TARGET: ${{ secrets.REPOSITORY_REMOTE_PATH }}/testing/${{ env.TARGET }}/ | |
build-sanitizer: | |
# Build with AddressSanitizer and all libstdc++ debugging features | |
# enabled. | |
runs-on: ubuntu-22.04 | |
env: | |
TARGET: UNIX | |
steps: | |
- id: checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- id: cache-ccache | |
uses: hendrikmuhs/ccache-action@v1 | |
with: | |
key: ${{ env.TARGET }}-sanitizer | |
- name: find githash | |
run: | | |
echo "git_hash=$(git rev-parse --short $GITHUB_SHA)" >> $GITHUB_ENV | |
- name: "Cache Boost" | |
uses: actions/cache@v4 | |
with: | |
key: ${{ env.BOOST }}-${{ hashFiles('lib/boost/patches/**') }} | |
path: | | |
${{ github.workspace }}/output/download/${{ env.BOOST }}.tar.bz2 | |
${{ github.workspace }}/output/src/stamp-${{ env.BOOST }} | |
${{ github.workspace }}/output/src/${{ env.BOOST }}/boost | |
- name: Install dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y --no-install-recommends \ | |
make \ | |
quilt \ | |
g++ \ | |
python3 \ | |
librsvg2-bin xsltproc \ | |
imagemagick gettext sox \ | |
zlib1g-dev \ | |
libfmt-dev \ | |
libdbus-1-dev \ | |
libsodium-dev \ | |
libfreetype6-dev \ | |
libpng-dev libjpeg-dev \ | |
libtiff5-dev libgeotiff-dev \ | |
libc-ares-dev \ | |
libcurl4-gnutls-dev \ | |
libc-ares-dev \ | |
liblua5.4-dev \ | |
libxml-parser-perl \ | |
libasound2-dev \ | |
libnetcdf-dev libnetcdf-c++4-dev | |
- name: workaround random bits value in github actions | |
run: sudo sysctl --write vm.mmap_rnd_bits=28 | |
- name: Compile XCSoar | |
run: | | |
make -j$(nproc) TARGET=${{env.TARGET }} DEBUG=${{ env.DEBUG }} VFB=y SANITIZE=y DEBUG_GLIBCXX=y USE_CCACHE=y V=2 everything check | |
build-kobo: | |
runs-on: ubuntu-22.04 | |
env: | |
TARGET: KOBO | |
TARGET_BIN: KoboRoot | |
TARGET_FINAL: KoboRoot | |
TARGET_EXT: tgz | |
steps: | |
- name: set vars for push | |
if: github.event_name == 'push' | |
run: | | |
echo "DEBUG=n" >> $GITHUB_ENV | |
- id: checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- id: cache-ccache | |
uses: hendrikmuhs/ccache-action@v1 | |
with: | |
key: ${{ env.TARGET }} | |
- name: "Cache Boost" | |
uses: actions/cache@v4 | |
with: | |
key: ${{ env.BOOST }}-${{ hashFiles('lib/boost/patches/**') }} | |
path: | | |
${{ github.workspace }}/output/download/${{ env.BOOST }}.tar.bz2 | |
${{ github.workspace }}/output/src/stamp-${{ env.BOOST }} | |
${{ github.workspace }}/output/src/${{ env.BOOST }}/boost | |
- name: "Cache third-party libraries" | |
uses: actions/cache@v4 | |
with: | |
key: ${{ runner.os }}-libs-${{ env.TARGET }}-${{ hashFiles('build/**') }} | |
path: | | |
${{ github.workspace }}/output/${{ env.TARGET }}/lib | |
!${{ github.workspace }}/output/${{ env.TARGET }}/lib/build | |
- name: find githash | |
run: | | |
echo "git_hash=$(git rev-parse --short $GITHUB_SHA)" >> $GITHUB_ENV | |
- name: Install dependencies | |
# texinfo appears to be necessary for building binutils, but | |
# that seems to be a binutils 2.38 bug. | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y --no-install-recommends \ | |
make \ | |
quilt \ | |
g++ \ | |
libmpc-dev \ | |
texinfo \ | |
librsvg2-bin xsltproc \ | |
imagemagick gettext sox \ | |
cmake meson ninja-build \ | |
ttf-bitstream-vera \ | |
libnetcdf-dev libnetcdf-c++4-dev | |
- name: Compile XCSoar | |
run: | | |
make -j$(nproc) \ | |
TARGET=${{env.TARGET}} \ | |
DEBUG=${{env.DEBUG}} \ | |
USE_CCACHE=y \ | |
V=2 \ | |
output/${{env.TARGET}}/${{ env.TARGET_BIN }}.${{ env.TARGET_EXT }} | |
- name: upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.TARGET_FINAL }}-${{ env.git_hash }}.${{ env.TARGET_EXT }} | |
path: output/${{env.TARGET}}/${{ env.TARGET_BIN }}.${{ env.TARGET_EXT }} | |
- name: Deploy to Staging server | |
if: | | |
github.repository == 'XCSoar/XCSoar' && | |
github.ref == 'ref/heads/master' && | |
github.event == 'push' | |
uses: easingthemes/ssh-deploy@main | |
env: | |
SSH_PRIVATE_KEY: ${{ secrets.REPOSITORY_SSH_KEY }} | |
ARGS: "-rltgoDzvO" | |
SOURCE: output/${{ env.TARGET }}/bin/${{ env.TARGET_BIN }}.${{ env.TARGET_EXT }} | |
REMOTE_HOST: ${{ secrets.REPOSITORY_HOST }} | |
REMOTE_USER: ${{ secrets.REPOSITORY_SSH_USER }} | |
TARGET: ${{ secrets.REPOSITORY_REMOTE_PATH }}/testing/${{ env.TARGET }}/ | |
build-android: | |
runs-on: ubuntu-22.04 | |
env: | |
DEBUG: n | |
TARGET: ANDROIDFAT | |
TARGET_BIN: XCSoar | |
TARGET_FINAL: XCSoar | |
TARGET_EXT: apk | |
NDK: r26d | |
steps: | |
- id: checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- id: cache-ccache | |
uses: hendrikmuhs/ccache-action@v1 | |
with: | |
key: ${{ env.TARGET }} | |
- name: "Cache Boost" | |
uses: actions/cache@v4 | |
with: | |
key: ${{ env.BOOST }}-${{ hashFiles('lib/boost/patches/**') }} | |
path: | | |
${{ github.workspace }}/output/download/${{ env.BOOST }}.tar.bz2 | |
${{ github.workspace }}/output/src/stamp-${{ env.BOOST }} | |
${{ github.workspace }}/output/src/${{ env.BOOST }}/boost | |
- name: "Cache third-party libraries" | |
uses: actions/cache@v4 | |
with: | |
key: ${{ runner.os }}-libs-${{ env.TARGET }}-${{ hashFiles('build/**') }} | |
path: | | |
${{ github.workspace }}/output/ANDROID/*/lib | |
!${{ github.workspace }}/output/ANDROID/*/lib/build | |
- name: find githash | |
run: | | |
echo "git_hash=$(git rev-parse --short $GITHUB_SHA)" >> $GITHUB_ENV | |
- name: Install dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y --no-install-recommends \ | |
make \ | |
quilt \ | |
g++ \ | |
librsvg2-bin xsltproc \ | |
imagemagick gettext sox \ | |
vorbis-tools \ | |
cmake ninja-build | |
- name: Install Android NDK | |
# We need NDK r26, but the GitHub runner has only r25 | |
run: | | |
mkdir -p output/download | |
cd output/download | |
wget --quiet https://dl.google.com/android/repository/android-ndk-${{env.NDK}}-linux.zip | |
unzip -q android-ndk-${{env.NDK}}-linux.zip | |
rm android-ndk-${{env.NDK}}-linux.zip | |
echo ANDROID_NDK_LATEST_HOME=$PWD/android-ndk-${{env.NDK}} >> $GITHUB_ENV | |
- name: Prepare signing key | |
shell: bash | |
run: | | |
echo "${{ secrets.XCSOAR_JET_UPLOAD_KEY_JKS_BASE64 }}" | base64 -d > signing-key.jks | |
md5sum signing-key.jks | |
- name: Compile XCSoar | |
run: | | |
ANDROID_KEYSTORE_PASS=${{ secrets.XCSOAR_JET_UPLOAD_KEY_JKS_PASSWORD }} \ | |
make -j$(nproc) \ | |
TARGET=${{env.TARGET}} \ | |
ANDROID_NDK=${ANDROID_NDK_LATEST_HOME} \ | |
ANDROID_SDK=${ANDROID_HOME} \ | |
DEBUG=${{env.DEBUG}} \ | |
USE_CCACHE=y \ | |
V=2 \ | |
ANDROID_KEYSTORE=signing-key.jks \ | |
ANDROID_KEY_ALIAS=${{ secrets.XCSOAR_JET_UPLOAD_KEY_JKS_KEY_ALIAS }} \ | |
output/ANDROID/bin/${{ env.TARGET_BIN }}.${{ env.TARGET_EXT }} | |
- name: upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.TARGET_FINAL }}-${{ env.git_hash }}.${{ env.TARGET_EXT }} | |
path: output/ANDROID/bin/${{ env.TARGET_BIN }}.${{ env.TARGET_EXT }} | |
- name: Deploy to Staging server | |
if: | | |
github.repository == 'XCSoar/XCSoar' && | |
github.ref == 'ref/heads/master' && | |
github.event == 'push' | |
uses: easingthemes/ssh-deploy@main | |
env: | |
SSH_PRIVATE_KEY: ${{ secrets.REPOSITORY_SSH_KEY }} | |
ARGS: "-rltgoDzvO" | |
SOURCE: output/${{ env.TARGET }}/bin/${{ env.TARGET_BIN }}.${{ env.TARGET_EXT }} | |
REMOTE_HOST: ${{ secrets.REPOSITORY_HOST }} | |
REMOTE_USER: ${{ secrets.REPOSITORY_SSH_USER }} | |
TARGET: ${{ secrets.REPOSITORY_REMOTE_PATH }}/testing/${{ env.TARGET }}/ | |
build-windows: | |
runs-on: ubuntu-22.04 | |
container: | |
image: debian:bookworm-slim | |
env: | |
TARGET: WIN64 | |
TARGET_BIN: XCSoar | |
TARGET_FINAL: XCSoar-debug | |
TARGET_EXT: .exe | |
steps: | |
- name: set vars for push | |
if: github.event_name == 'push' | |
run: | | |
echo "DEBUG=n" >> $GITHUB_ENV | |
echo "TARGET_FINAL=XCSoar" >> $GITHUB_ENV | |
- name: Install build dependencies | |
run: | | |
apt-get update | |
apt-get install -y --no-install-recommends \ | |
git \ | |
quilt \ | |
make \ | |
g++ \ | |
g++-mingw-w64 \ | |
ccache \ | |
xz-utils \ | |
pkgconf \ | |
ca-certificates \ | |
python3 \ | |
librsvg2-bin xsltproc \ | |
imagemagick gettext sox \ | |
cmake ninja-build | |
- id: checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- id: cache-ccache | |
uses: hendrikmuhs/ccache-action@v1 | |
with: | |
key: ${{ env.TARGET }} | |
- name: "Cache Boost" | |
uses: actions/cache@v4 | |
with: | |
key: ${{ env.BOOST }}-${{ hashFiles('lib/boost/patches/**') }} | |
path: | | |
${{ github.workspace }}/output/download/${{ env.BOOST }}.tar.bz2 | |
${{ github.workspace }}/output/src/stamp-${{ env.BOOST }} | |
${{ github.workspace }}/output/src/${{ env.BOOST }}/boost | |
- name: "Cache third-party libraries" | |
uses: actions/cache@v4 | |
with: | |
key: ${{ runner.os }}-libs-${{ env.TARGET }}-${{ hashFiles('build/**') }} | |
path: | | |
${{ github.workspace }}/output/${{ env.TARGET }}/lib | |
!${{ github.workspace }}/output/${{ env.TARGET }}/lib/build | |
- name: find githash | |
run: | | |
echo "git_hash=$(git rev-parse --short $GITHUB_SHA)" >> $GITHUB_ENV | |
- name: Patch mingw intrin.h (mingw64 v8 bug workaround) | |
run: sed -i -e '/extern.* __builtin/d' /usr/share/mingw-w64/include/intrin.h | |
- name: Compile XCSoar | |
run: | | |
make -j$(nproc) TARGET=${{env.TARGET }} DEBUG=${{ env.DEBUG }} USE_CCACHE=y V=2 everything | |
- name: upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.TARGET_FINAL }}-${{ env.git_hash }}${{ env.TARGET_EXT }} | |
path: output/${{ env.TARGET }}/bin/${{ env.TARGET_BIN }}${{ env.TARGET_EXT }} | |
- name: store checks and compile artefacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: xcsoar-${{ env.TARGET }}-artifact | |
path: | | |
${{ github.workspace }}/output/${{ env.TARGET }} | |
!${{ github.workspace }}/output/${{ env.TARGET }}/lib/build | |
!**.d | |
retention-days: 1 | |
- name: Deploy to Staging server | |
if: | | |
github.repository == 'XCSoar/XCSoar' && | |
github.ref == 'ref/heads/master' && | |
github.event == 'push' | |
uses: easingthemes/ssh-deploy@main | |
env: | |
SSH_PRIVATE_KEY: ${{ secrets.REPOSITORY_SSH_KEY }} | |
ARGS: "-rltgoDzvO" | |
SOURCE: output/${{ env.TARGET }}/bin/${{ env.TARGET_BIN }}.${{ env.TARGET_EXT }} | |
REMOTE_HOST: ${{ secrets.REPOSITORY_HOST }} | |
REMOTE_USER: ${{ secrets.REPOSITORY_SSH_USER }} | |
TARGET: ${{ secrets.REPOSITORY_REMOTE_PATH }}/testing/${{ env.TARGET }}/ | |
test-windows: | |
runs-on: windows-latest | |
env: | |
TARGET: WIN64 | |
needs: build-windows | |
steps: | |
- id: checkout | |
uses: actions/checkout@v4 | |
- name: fetch artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: xcsoar-${{ env.TARGET }}-artifact | |
path: ${{ github.workspace }}/output/${{ env.TARGET }} | |
- name: XCSoar run checks on ${{ env.TARGET }} | |
run: make check-no-build | |
working-directory: ${{ github.workspace }} | |
build-macos: | |
runs-on: macos-12 | |
env: | |
TARGET: OSX64 | |
steps: | |
- id: checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- id: cache-ccache | |
uses: hendrikmuhs/ccache-action@v1 | |
with: | |
key: macos | |
- name: "Cache Boost" | |
uses: actions/cache@v4 | |
with: | |
key: ${{ env.BOOST }}-${{ hashFiles('lib/boost/patches/**') }} | |
path: | | |
${{ github.workspace }}/output/download/${{ env.BOOST }}.tar.bz2 | |
${{ github.workspace }}/output/src/stamp-${{ env.BOOST }} | |
${{ github.workspace }}/output/src/${{ env.BOOST }}/boost | |
- name: Install dependencies | |
run: | | |
brew install \ | |
make \ | |
quilt \ | |
librsvg \ | |
imagemagick gettext sox \ | |
fmt \ | |
sdl2 \ | |
libsodium \ | |
freetype \ | |
libpng libjpeg-turbo \ | |
libtiff libgeotiff proj \ | |
c-ares \ | |
curl \ | |
lua \ | |
netcdf-cxx \ | |
libgeotiff | |
- name: Compile XCSoar | |
# We use "-O0" instead of the default "-Og" to work around a | |
# LLVM bug in Apple Xcode which crashes clang with "fatal | |
# error: error in backend: Cannot select: intrinsic | |
# %llvm.coro.size" | |
run: | | |
gmake -j$(sysctl -n hw.logicalcpu) TARGET=${{env.TARGET }} USE_CCACHE=y \ | |
OPTIMIZE="-O0" \ | |
USE_HOMEBREW=y \ | |
V=2 \ | |
everything check | |
- name: Deploy to Staging server | |
if: | | |
github.repository == 'XCSoar/XCSoar' && | |
github.ref == 'ref/heads/master' && | |
github.event == 'push' | |
uses: easingthemes/ssh-deploy@main | |
env: | |
SSH_PRIVATE_KEY: ${{ secrets.REPOSITORY_SSH_KEY }} | |
ARGS: "-rltgoDzvO" | |
SOURCE: output/${{ env.TARGET }}/bin/${{ env.TARGET_BIN }}.${{ env.TARGET_EXT }} | |
REMOTE_HOST: ${{ secrets.REPOSITORY_HOST }} | |
REMOTE_USER: ${{ secrets.REPOSITORY_SSH_USER }} | |
TARGET: ${{ secrets.REPOSITORY_REMOTE_PATH }}/testing/${{ env.TARGET }}/ | |
build-ios: | |
runs-on: macos-12 | |
env: | |
TARGET: IOS64 | |
steps: | |
- id: checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: "Cache third-party libraries" | |
uses: actions/cache@v4 | |
with: | |
key: ${{ runner.os }}-libs-${{ env.TARGET }}-${{ hashFiles('build/**') }} | |
path: | | |
${{ github.workspace }}/output/${{ env.TARGET }}/lib | |
!${{ github.workspace }}/output/${{ env.TARGET }}/lib/build | |
- id: cache-ccache | |
uses: hendrikmuhs/ccache-action@v1 | |
with: | |
key: ios | |
- name: "Cache Boost" | |
uses: actions/cache@v4 | |
with: | |
key: ${{ env.BOOST }}-${{ hashFiles('lib/boost/patches/**') }} | |
path: | | |
${{ github.workspace }}/output/download/${{ env.BOOST }}.tar.bz2 | |
${{ github.workspace }}/output/src/stamp-${{ env.BOOST }} | |
${{ github.workspace }}/output/src/${{ env.BOOST }}/boost | |
- name: Install dependencies | |
run: | | |
brew install \ | |
automake autoconf libtool \ | |
make \ | |
quilt \ | |
librsvg \ | |
imagemagick gettext sox \ | |
cmake ninja | |
- name: Compile XCSoar | |
# TODO: remove the "||true" as soon as the remaining SDL2 | |
# linker failure ("Undefined symbols: _SDL_IsIPad, _main") is | |
# fixed. | |
run: | | |
gmake -j$(sysctl -n hw.logicalcpu) TARGET=${{env.TARGET }} USE_CCACHE=y \ | |
OPTIMIZE="-O0" \ | |
V=2 ||true | |
- name: Deploy to Staging server | |
if: | | |
github.repository == 'XCSoar/XCSoar' && | |
github.ref == 'ref/heads/master' && | |
github.event == 'push' | |
uses: easingthemes/ssh-deploy@main | |
env: | |
SSH_PRIVATE_KEY: ${{ secrets.REPOSITORY_SSH_KEY }} | |
ARGS: "-rltgoDzvO" | |
SOURCE: output/${{ env.TARGET }}/bin/${{ env.TARGET_BIN }}.${{ env.TARGET_EXT }} | |
REMOTE_HOST: ${{ secrets.REPOSITORY_HOST }} | |
REMOTE_USER: ${{ secrets.REPOSITORY_SSH_USER }} | |
TARGET: ${{ secrets.REPOSITORY_REMOTE_PATH }}/testing/${{ env.TARGET }}/ |