Github workflow: Fix python link error on macOS #2114
Workflow file for this run
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: master | |
on: # yamllint disable-line rule:truthy | |
push: | |
branches: [master] | |
pull_request: | |
branches: [master] | |
workflow_dispatch: | |
jobs: | |
build: | |
name: build | |
strategy: | |
matrix: | |
os: ['ubuntu-20.04', 'ubuntu-22.04', 'macos-12', 'macos-13', 'macos-14'] | |
arch: ['x86_64', 'arm64'] | |
cc: ['gcc', 'clang'] | |
include: | |
- cc: 'gcc' | |
cxx: 'g++' | |
- cc: 'clang' | |
cxx: 'clang++' | |
exclude: | |
- os: 'ubuntu-20.04' | |
arch: 'arm64' | |
- os: 'ubuntu-22.04' | |
arch: 'arm64' | |
- os: 'macos-12' | |
arch: 'arm64' | |
- os: 'macos-13' | |
arch: 'arm64' | |
fail-fast: false | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout master | |
uses: actions/checkout@v3 | |
- name: Setup build environment | |
run: | | |
echo "MYTHTV_CONFIG=--prefix=${{ github.workspace }}/build/install --cc=${{ matrix.cc }} --cxx=${{ matrix.cxx }}" >> $GITHUB_ENV | |
echo "CCACHE_DIR=$HOME/.ccache" >> $GITHUB_ENV | |
# As some OSes can cross-compile, establish defaule configrue/make | |
# commands which can be overided as appropriate | |
echo "CONFIGURE_CMD=./configure" >> $GITHUB_ENV | |
echo "MAKE_CMD=make" >> $GITHUB_ENV | |
# GitHub caches are immutable, so to update a cache, use a unique key with | |
# a prefixed restore-key. GitHub will rotate the caches within their 10 GB | |
# storage limit. | |
# See https://github.com/actions/cache/blob/471fb0c87e5d7210f339d8ea2e01505ddafd793d/workarounds.md#update-a-cache | |
- name: Check ccache | |
uses: actions/cache@v3 | |
with: | |
path: ~/.ccache | |
key: ${{ matrix.os }}-${{ matrix.cc }}-ccache-${{ github.sha }} | |
restore-keys: ${{ matrix.os }}-${{ matrix.cc }}-ccache | |
# macOS runners on github use homebrew which can place executables in | |
# an assortment of places. Also, the runners can in various unsynced | |
# states that need update to resolve linking | |
- name: Update environment (macOS) | |
env: | |
ARCH: ${{ matrix.arch }} | |
PYTHONVERS: 3.12 | |
run: | | |
SYSARCH=$(/usr/bin/uname -m) | |
PKGMGR_CMD='brew' | |
HB_PREFIX=$(${PKGMGR_CMD} --prefix) | |
echo "HB_PREFIX=$HB_PREFIX" >> $GITHUB_ENV | |
echo "PYTHONVERS=${PYTHONVERS}" >> $GITHUB_ENV | |
${PKGMGR_CMD} update | |
# unlink python3 and remove all symlinks related to then | |
# specified python version | |
${PKGMGR_CMD} unlink python3 | |
rm -f ${HB_PREFIX}/bin/*${PYTHONVERS}* | |
# remove azure-cli since we won't need install | |
${PKGMGR_CMD} uninstall azure-cli --force --ignore-dependencies | |
# brute force unlink and unpgrade python versions | |
# we'll re-link the specified version later | |
INSTALLED_PYTHONS=$($PKGMGR_CMD list|grep 'python@') | |
for PYTH in $INSTALLED_PYTHONS; do | |
${PKGMGR_CMD} unlink $PYTH | |
${PKGMGR_CMD} uninstall $PYTH --force --ignore-dependencies | |
done | |
# ask homebrew to cleanup any dead links and upgrade the | |
# remaining packages | |
${PKGMGR_CMD} cleanup | |
${PKGMGR_CMD} upgrade --force | |
## Install/re-install specified python version | |
${PKGMGR_CMD} reinstall python@${PYTHONVERS} --force | |
${PKGMGR_CMD} link python@${PYTHONVERS} --force --overwrite | |
# macOS based github runners starting at macos-14 only run on arm64 | |
# architectures. To generate x86_64 based executable, the arch | |
# -x86_64 command is needed before any brew commands, make, and | |
# install to run as x86_64 via Rosetta2. | |
if [ "$SYSARCH" = "$ARCH" ]; then | |
# this is a cross-compile | |
PKGMGR_CMD="arch -${ARCH} $PKGMGR_CMD" | |
echo "CONFIGURE_CMD=arch -${ARCH} $CONFIGURE_CMD" >> $GITHUB_ENV | |
echo "MAKE_CMD=arch -${ARCH} $MAKE_CMD" >> $GITHUB_ENV | |
fi | |
echo "PKGMGR_CMD=$PKGMGR_CMD" >> $GITHUB_ENV | |
if: runner.os == 'macOS' | |
# N.B. These dependencies are for the master branch. Unlike the ansible | |
# playlists they do not include old dependencies that may be required for | |
# older versions. The list is intended to provide as much code coverage as | |
# possible (i.e. enable as many options as possible) | |
- name: Install core dependencies (linux) | |
run: | | |
sudo apt update | |
sudo apt install ccache qt5-qmake qtscript5-dev nasm libsystemd-dev \ | |
libfreetype6-dev libmp3lame-dev libx264-dev libx265-dev \ | |
libxrandr-dev libxml2-dev libavahi-compat-libdnssd-dev \ | |
libasound2-dev liblzo2-dev libhdhomerun-dev libsamplerate0-dev \ | |
libva-dev libdrm-dev libvdpau-dev libass-dev libpulse-dev \ | |
libcec-dev libssl-dev libtag1-dev libbluray-dev libbluray-bdj \ | |
libgnutls28-dev libqt5webkit5-dev libvpx-dev python3-mysqldb \ | |
python3-lxml python3-setuptools libdbi-perl libdbd-mysql-perl \ | |
libnet-upnp-perl libio-socket-inet6-perl libxml-simple-perl \ | |
libqt5sql5-mysql libwayland-dev qtbase5-private-dev libzip-dev \ | |
libsoundtouch-dev | |
if: runner.os == 'Linux' | |
- name: Install core dependencies (macOS) | |
env: | |
OS_VERS: ${{ matrix.os }} | |
run: | | |
${PKGMGR_CMD} install pkg-config ccache qt@5 nasm libsamplerate \ | |
taglib lzo libcec libbluray libass libhdhomerun dav1d x264 x265 \ | |
libvpx openssl sound-touch lame freetype libass libiconv libxml2 \ | |
libzip XviD zlib pyenv-virtualenv python-lxml python-requests \ | |
python-setuptools --force --overwrite | |
${PKGMGR_CMD} link qt@5 --force | |
# macos-14 updated the linker and needs to be run in "classic" mode | |
case $OS_VERS in | |
macos-14 | macos-13) | |
LDFLAGS="-Wl,-ld_classic" | |
;; | |
esac | |
# homebrew uses different prefixes on x86_64 and arm64, find the | |
# correct one and setup the correct build variables | |
C_INCLUDE_PATH=$HB_PREFIX/include:$C_INCLUDE_PATH | |
echo "C_INCLUDE_PATH=$C_INCLUDE_PATH" >> $GITHUB_ENV | |
CPLUS_INCLUDE_PATH=$HB_PREFIX/include:$CPLUS_INCLUDE_PATH | |
echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV | |
LDFLAGS="-L$HB_PREFIX/lib $LDFLAGS" | |
echo "LDFLAGS=$LDFLAGS" >> $GITHUB_ENV | |
LIBRARY_PATH=$HB_PREFIX/lib:$LIBRARY_PATH | |
echo "LIBRARY_PATH=$LIBRARY_PATH" >> $GITHUB_ENV | |
PKG_CONFIG_PATH=$HB_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH | |
echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH" >> $GITHUB_ENV | |
if: runner.os == 'macOS' | |
- name: ccache statistics [pre] | |
run: | | |
ccache -sV | |
- name: Configure core | |
working-directory: ./mythtv | |
run: ${CONFIGURE_CMD} $MYTHTV_CONFIG --enable-libmp3lame --enable-libvpx | |
--enable-libx264 --enable-libx265 --enable-bdjava --enable-vulkan | |
- name: Make core | |
working-directory: ./mythtv | |
run: ${MAKE_CMD} all_no_test -j4 | |
- name: Install core | |
working-directory: ./mythtv | |
run: ${MAKE_CMD} install | |
# QTest requires a QT SQL plugin - but there are currently none available | |
# via brew on macOS | |
- name: Unit test core | |
working-directory: ./mythtv | |
run: ${MAKE_CMD} test | |
if: runner.os == 'Linux' | |
- name: Install plugin dependencies (linux) | |
run: sudo apt install libvorbis-dev libflac++-dev libminizip-dev | |
libcdio-dev libcdio-paranoia-dev python3-pycurl libxml-xpath-perl | |
libdate-manip-perl libdatetime-format-iso8601-perl | |
libsoap-lite-perl libjson-perl libimage-size-perl | |
if: runner.os == 'Linux' | |
- name: Install plugin dependencies (ubuntu-20.04) | |
run: sudo apt install python3-oauth | |
if: matrix.os == 'ubuntu-20.04' | |
- name: Install plugin dependencies (ubuntu-22.04) | |
run: sudo apt install python3-oauthlib | |
if: matrix.os == 'ubuntu-22.04' | |
- name: Install plugin dependencies (macOS) | |
run: ${PKGMGR_CMD} install minizip flac libvorbis libcdio python-pycurl | |
python-oauthlib --force --overwrite | |
if: runner.os == 'macOS' | |
- name: Configure plugins | |
working-directory: ./mythplugins | |
run: ${CONFIGURE_CMD} $MYTHTV_CONFIG | |
- name: Make plugins | |
working-directory: ./mythplugins | |
run: ${MAKE_CMD} -j4 | |
- name: ccache statistics [post] | |
run: | | |
ccache -sV |