From 458d59b4013326d152edcc9eddf50ffb212bdd53 Mon Sep 17 00:00:00 2001 From: tt2468 <tt2468@gmail.com> Date: Tue, 13 Apr 2021 05:04:08 -0700 Subject: [PATCH] CI: Refactor much of the MacOS CI --- CI/macos/Brewfile | 5 - .../build-plugin-macos.sh} | 2 - CI/{ => macos}/install-build-obs-macos.sh | 6 +- CI/{ => macos}/install-dependencies-macos.sh | 36 ++--- CI/{ => macos}/package-macos.sh | 1 - CI/macos/qt.rb | 145 ------------------ azure-pipelines.yml | 10 +- 7 files changed, 26 insertions(+), 179 deletions(-) rename CI/{build-macos.sh => macos/build-plugin-macos.sh} (91%) rename CI/{ => macos}/install-build-obs-macos.sh (89%) rename CI/{ => macos}/install-dependencies-macos.sh (69%) rename CI/{ => macos}/package-macos.sh (96%) delete mode 100644 CI/macos/qt.rb diff --git a/CI/macos/Brewfile b/CI/macos/Brewfile index 20fabb71..923af906 100644 --- a/CI/macos/Brewfile +++ b/CI/macos/Brewfile @@ -1,10 +1,5 @@ -tap "akeru-inc/tap" brew "jack" brew "speexdsp" brew "cmake" brew "freetype" brew "fdk-aac" -brew "https://gist.githubusercontent.com/DDRBoxman/9c7a2b08933166f4b61ed9a44b242609/raw/ef4de6c587c6bd7f50210eccd5bd51ff08e6de13/qt.rb" -brew "swig", link: false -brew "https://gist.githubusercontent.com/DDRBoxman/4cada55c51803a2f963fa40ce55c9d3e/raw/572c67e908bfbc1bcb8c476ea77ea3935133f5b5/swig.rb" -brew "akeru-inc/tap/xcnotary" \ No newline at end of file diff --git a/CI/build-macos.sh b/CI/macos/build-plugin-macos.sh similarity index 91% rename from CI/build-macos.sh rename to CI/macos/build-plugin-macos.sh index 3a371a78..260fe50f 100755 --- a/CI/build-macos.sh +++ b/CI/macos/build-plugin-macos.sh @@ -14,8 +14,6 @@ if [ "${HAS_CMAKE}" = "" ]; then exit 1 fi -#export QT_PREFIX="$(find /usr/local/Cellar/qt5 -d 1 | tail -n 1)" - echo "[obs-websocket] Building 'obs-websocket' for macOS." mkdir -p build && cd build cmake .. \ diff --git a/CI/install-build-obs-macos.sh b/CI/macos/install-build-obs-macos.sh similarity index 89% rename from CI/install-build-obs-macos.sh rename to CI/macos/install-build-obs-macos.sh index 7fea6fb8..a6e8ca82 100755 --- a/CI/install-build-obs-macos.sh +++ b/CI/macos/install-build-obs-macos.sh @@ -31,9 +31,9 @@ mkdir build && cd build echo "[obs-websocket] Building obs-studio.." cmake .. \ -DQTDIR=/tmp/obsdeps \ - -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 \ + -DDepsPath=/tmp/obsdeps \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 \ -DDISABLE_PLUGINS=true \ -DENABLE_SCRIPTING=0 \ - -DDepsPath=/tmp/obsdeps \ - -DCMAKE_PREFIX_PATH=/usr/local/opt/qt/lib/cmake \ + -DCMAKE_PREFIX_PATH=/tmp/obsdeps/lib/cmake \ && make -j4 diff --git a/CI/install-dependencies-macos.sh b/CI/macos/install-dependencies-macos.sh similarity index 69% rename from CI/install-dependencies-macos.sh rename to CI/macos/install-dependencies-macos.sh index 9974fed4..872dcca5 100755 --- a/CI/install-dependencies-macos.sh +++ b/CI/macos/install-dependencies-macos.sh @@ -14,22 +14,22 @@ if [ "${HAS_BREW}" = "" ]; then exit 1 fi -# OBS Studio deps +# OBS Studio Brew Deps echo "[obs-websocket] Updating Homebrew.." brew update >/dev/null echo "[obs-websocket] Checking installed Homebrew formulas.." -BREW_PACKAGES=$(brew list --formula) -BREW_DEPENDENCIES="jack speexdsp ccache swig mbedtls" -for DEPENDENCY in ${BREW_DEPENDENCIES}; do - if echo "${BREW_PACKAGES}" | grep -q "^${DEPENDENCY}\$"; then - echo "[obs-websocket] Upgrading OBS-Studio dependency '${DEPENDENCY}'.." - brew upgrade ${DEPENDENCY} 2>/dev/null - else - echo "[obs-websocket] Installing OBS-Studio dependency '${DEPENDENCY}'.." - brew install ${DEPENDENCY} 2>/dev/null - fi -done +if [ -d /usr/local/opt/openssl@1.0.2t ]; then + brew uninstall openssl@1.0.2t + brew untap local/openssl +fi + +if [ -d /usr/local/opt/python@2.7.17 ]; then + brew uninstall python@2.7.17 + brew untap local/python2 +fi + +brew bundle --file ./CI/macos/Brewfile # Fetch and install Packages app # =!= NOTICE =!= @@ -45,13 +45,13 @@ if [ "${HAS_PACKAGES}" = "" ]; then sudo installer -pkg /Volumes/Packages\ 1.2.9/Install\ Packages.pkg -target / fi +# OBS Deps +echo "[obs-websocket] Installing obs-websocket dependency 'OBS Deps ${OBS_DEPS_VERSION}'.." +wget --quiet --retry-connrefused --waitretry=1 https://github.com/obsproject/obs-deps/releases/download/${OBS_DEPS_VERSION}/macos-deps-${OBS_DEPS_VERSION}.tar.gz +tar -xf ./macos-deps-${OBS_DEPS_VERSION}.tar.gz -C /tmp + # Qt deps echo "[obs-websocket] Installing obs-websocket dependency 'Qt ${QT_VERSION}'.." curl -L -O https://github.com/obsproject/obs-deps/releases/download/${OBS_DEPS_VERSION}/macos-qt-${QT_VERSION}-${OBS_DEPS_VERSION}.tar.gz tar -xf ./macos-qt-${QT_VERSION}-${OBS_DEPS_VERSION}.tar.gz -C "/tmp" -xattr -r -d com.apple.quarantine /tmp/obsdeps - -# OBS Deps -echo "[obs-websocket] Downloading and unpacking OBS dependencies" -wget --quiet --retry-connrefused --waitretry=1 https://github.com/obsproject/obs-deps/releases/download/${OBS_DEPS_VERSION}/macos-deps-${OBS_DEPS_VERSION}.tar.gz -tar -xf ./macos-deps-${OBS_DEPS_VERSION}.tar.gz -C /tmp \ No newline at end of file +xattr -r -d com.apple.quarantine /tmp/obsdeps \ No newline at end of file diff --git a/CI/package-macos.sh b/CI/macos/package-macos.sh similarity index 96% rename from CI/package-macos.sh rename to CI/macos/package-macos.sh index 4363a8ab..db8193b4 100755 --- a/CI/package-macos.sh +++ b/CI/macos/package-macos.sh @@ -10,7 +10,6 @@ if [ "${OSTYPE}" != "Darwin" ]; then fi echo "[obs-websocket] Preparing package build" -export QT_CELLAR_PREFIX="$(/usr/bin/find /usr/local/Cellar/qt -d 1 | sort -t '.' -k 1,1n -k 2,2n -k 3,3n | tail -n 1)" GIT_HASH=$(git rev-parse --short HEAD) GIT_BRANCH_OR_TAG=$(git name-rev --name-only HEAD | awk -F/ '{print $NF}') diff --git a/CI/macos/qt.rb b/CI/macos/qt.rb deleted file mode 100644 index 4405a240..00000000 --- a/CI/macos/qt.rb +++ /dev/null @@ -1,145 +0,0 @@ -# Patches for Qt must be at the very least submitted to Qt's Gerrit codereview -# rather than their bug-report Jira. The latter is rarely reviewed by Qt. -class Qt < Formula - desc "Cross-platform application and UI framework" - homepage "https://www.qt.io/" - url "https://download.qt.io/official_releases/qt/5.10/5.10.1/single/qt-everywhere-src-5.10.1.tar.xz" - mirror "https://www.mirrorservice.org/sites/download.qt-project.org/official_releases/qt/5.10/5.10.1/single/qt-everywhere-src-5.10.1.tar.xz" - sha256 "05ffba7b811b854ed558abf2be2ddbd3bb6ddd0b60ea4b5da75d277ac15e740a" - head "https://code.qt.io/qt/qt5.git", :branch => "5.10", :shallow => false - - bottle do - sha256 "8b4bad005596a5f8790150fe455db998ac2406f4e0f04140d6656205d844d266" => :high_sierra - sha256 "9c488554935fb573554a4e36d36d3c81e47245b7fefc4b61edef894e67ba1740" => :sierra - sha256 "c0407afba5951df6cc4c6f6c1c315972bd41c99cecb4e029919c4c15ab6f7bdc" => :el_capitan - end - - keg_only "Qt 5 has CMake issues when linked" - - option "with-docs", "Build documentation" - option "with-examples", "Build examples" - option "without-proprietary-codecs", "Don't build with proprietary codecs (e.g. mp3)" - - # OS X 10.7 Lion is still supported in Qt 5.5, but is no longer a reference - # configuration and thus untested in practice. Builds on OS X 10.7 have been - # reported to fail: <https://github.com/Homebrew/homebrew/issues/45284>. - # depends_on :macos => :mountain_lion - - depends_on "pkg-config" => :build - depends_on :xcode => :build - depends_on "mysql" => :optional - depends_on "postgresql" => :optional - - # Restore `.pc` files for framework-based build of Qt 5 on OS X. This - # partially reverts <https://codereview.qt-project.org/#/c/140954/> merged - # between the 5.5.1 and 5.6.0 releases. (Remove this as soon as feasible!) - # - # Core formulae known to fail without this patch (as of 2016-10-15): - # * gnuplot (with `--with-qt` option) - # * mkvtoolnix (with `--with-qt` option, silent build failure) - # * poppler (with `--with-qt` option) - patch do - url "https://raw.githubusercontent.com/Homebrew/formula-patches/e8fe6567/qt5/restore-pc-files.patch" - sha256 "48ff18be2f4050de7288bddbae7f47e949512ac4bcd126c2f504be2ac701158b" - end - - def install - args = %W[ - -verbose - -prefix #{prefix} - -release - -opensource -confirm-license - -system-zlib - -qt-libpng - -qt-libjpeg - -qt-freetype - -qt-pcre - -nomake tests - -no-rpath - -pkg-config - -dbus-runtime - ] - - args << "-nomake" << "examples" if build.without? "examples" - - if build.with? "mysql" - args << "-plugin-sql-mysql" - (buildpath/"brew_shim/mysql_config").write <<~EOS - #!/bin/sh - if [ x"$1" = x"--libs" ]; then - mysql_config --libs | sed "s/-lssl -lcrypto//" - else - exec mysql_config "$@" - fi - EOS - chmod 0755, "brew_shim/mysql_config" - args << "-mysql_config" << buildpath/"brew_shim/mysql_config" - end - - args << "-plugin-sql-psql" if build.with? "postgresql" - args << "-proprietary-codecs" if build.with? "proprietary-codecs" - - system "./configure", *args - system "make" - ENV.deparallelize - system "make", "install" - - if build.with? "docs" - system "make", "docs" - system "make", "install_docs" - end - - # Some config scripts will only find Qt in a "Frameworks" folder - frameworks.install_symlink Dir["#{lib}/*.framework"] - - # The pkg-config files installed suggest that headers can be found in the - # `include` directory. Make this so by creating symlinks from `include` to - # the Frameworks' Headers folders. - Pathname.glob("#{lib}/*.framework/Headers") do |path| - include.install_symlink path => path.parent.basename(".framework") - end - - # Move `*.app` bundles into `libexec` to expose them to `brew linkapps` and - # because we don't like having them in `bin`. - # (Note: This move breaks invocation of Assistant via the Help menu - # of both Designer and Linguist as that relies on Assistant being in `bin`.) - libexec.mkpath - Pathname.glob("#{bin}/*.app") { |app| mv app, libexec } - end - - def caveats; <<~EOS - We agreed to the Qt opensource license for you. - If this is unacceptable you should uninstall. - EOS - end - - test do - (testpath/"hello.pro").write <<~EOS - QT += core - QT -= gui - TARGET = hello - CONFIG += console - CONFIG -= app_bundle - TEMPLATE = app - SOURCES += main.cpp - EOS - - (testpath/"main.cpp").write <<~EOS - #include <QCoreApplication> - #include <QDebug> - - int main(int argc, char *argv[]) - { - QCoreApplication a(argc, argv); - qDebug() << "Hello World!"; - return 0; - } - EOS - - system bin/"qmake", testpath/"hello.pro" - system "make" - assert_predicate testpath/"hello", :exist? - assert_predicate testpath/"main.o", :exist? - system "./hello" - end -end \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d5da8c6f..4103d3af 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -156,7 +156,7 @@ jobs: - job: 'Build_macOS' pool: - vmImage: 'macos-10.14' + vmImage: 'macOS-10.15' variables: obsDepsVersion: '2020-12-22' qtVersion: '5.15.2' @@ -164,16 +164,16 @@ jobs: - checkout: self submodules: true - - script: ./CI/install-dependencies-macos.sh + - script: ./CI/macos/install-dependencies-macos.sh displayName: 'Install dependencies' env: OBS_DEPS_VERSION: $(obsDepsVersion) QT_VERSION: $(qtVersion) - - script: ./CI/install-build-obs-macos.sh + - script: ./CI/macos/install-build-obs-macos.sh displayName: 'Build OBS' - - script: ./CI/build-macos.sh + - script: ./CI/macos/build-plugin-macos.sh displayName: 'Build obs-websocket' - task: InstallAppleCertificate@2 @@ -183,7 +183,7 @@ jobs: certSecureFile: 'Certificates.p12' certPwd: $(secrets.macOS.certificatesImportPassword) - - script: ./CI/package-macos.sh + - script: ./CI/macos/package-macos.sh displayName: 'Package obs-websocket' env: RELEASE_MODE: $(isReleaseMode)