From 89dba5865f80eb4927c361b99618002639cdb024 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9drik=20Fuoco?= Date: Mon, 26 Aug 2024 12:51:17 -0400 Subject: [PATCH] Windows CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Cédrik Fuoco --- .github/workflows/ci.yml | 288 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 288 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..56530763f --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,288 @@ +name: OpenRV + +# TODO: Pin workflow extension to specific commits for security + +on: + push: + branches: + - 'feature/**' + paths: + - .github/workflows/ci.yml + + pull_request: + branches: + - 'feature/**' + paths: + - .github/workflows/ci.yml + +jobs: + macos-13: + runs-on: macos-13 + steps: + - name: Check out repository code + uses: actions/checkout@v4 + with: + submodules: recursive + + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + + - name: Display Python installation location + run: | + python -c "import sys; print(sys.executable)" + + - name: Prepare Qt folder + run: | + mkdir -p "${{ github.workspace }}/deps" + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: '5.15.2' + host: 'mac' + target: 'desktop' + arch: 'clang_64' + dir: "${{ github.workspace }}/deps" + install-deps: 'false' + modules: 'debug_info qtcharts qtdatavis3d qtlottie qtnetworkauth qtquick3d qtquicktimeline qtscript qtwebengine qtwebglplugin' + archives: 'd3dcompiler_47 opengl32sw qt3d qtactiveqt qtbase qtconnectivity qtdeclarative qtgraphicaleffects qtimageformats qtlocation qtmultimedia qtquickcontrols qtquickcontrols2 qtremoteobjects qtscxml qtsensors qtsvg qttools qttranslations qtwebchannel qtwebsockets qtwebview qtwinextras qtxmlpatterns' + cache: true + cache-key-prefix: 'install-qt-action' + setup-python: 'false' + tools: 'tools_qtcreator' + set-env: 'true' + tools-only: 'false' + aqtversion: '==3.1.*' + + - name: Display Qt installation + run: | + ls -al "${{ github.workspace }}/deps/Qt/5.15.2/clang_64" + + - name: Install pip + run: | + python3 -m pip install --user --upgrade -r requirements.txt + + - name: Restore Homebrew cache + uses: actions/cache@v3 + id: brew-cache-restore + with: + path: ~/Library/Caches/Homebrew + key: ${{ runner.os }}-brew + + - name: Install Homebrew + run: | + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + + - name: Install dependencies + run: | + brew install cmake ninja readline sqlite3 xz zlib tcl-tk autoconf automake libtool python yasm clang-format black meson nasm pkg-config glew + + - name: Configure + run: | + export QT_HOME=${{ github.workspace }}/deps/Qt/5.15.2/clang_64 + cmake -B _build -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DRV_DEPS_QT5_LOCATION=$QT_HOME -DRV_VFX_PLATFORM=CY2023 + + - name: Build dependencies + run: | + cmake --build _build --target dependencies --parallel=1 -v + + - name: Build main executable + run: | + cmake --build _build --target main_executable --parallel -v + + - name: Tests + run: | + ctest --test-dir _build --extra-verbose + + macos-14-arm64: + runs-on: macos-latest + steps: + - name: Check out repository code + uses: actions/checkout@v4 + with: + submodules: recursive + + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + + - name: Display Python installation location + run: | + python -c "import sys; print(sys.executable)" + + - name: Prepare Qt folder + run: | + mkdir -p "${{ github.workspace }}/deps" + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: '5.15.2' + host: 'mac' + target: 'desktop' + arch: 'clang_64' + dir: "${{ github.workspace }}/deps" + install-deps: 'false' + modules: 'debug_info qtcharts qtdatavis3d qtlottie qtnetworkauth qtquick3d qtquicktimeline qtscript qtwebengine qtwebglplugin' + archives: 'd3dcompiler_47 opengl32sw qt3d qtactiveqt qtbase qtconnectivity qtdeclarative qtgraphicaleffects qtimageformats qtlocation qtmultimedia qtquickcontrols qtquickcontrols2 qtremoteobjects qtscxml qtsensors qtsvg qttools qttranslations qtwebchannel qtwebsockets qtwebview qtwinextras qtxmlpatterns' + cache: true + cache-key-prefix: 'install-qt-action' + setup-python: 'false' + tools: 'tools_qtcreator' + set-env: 'true' + tools-only: 'false' + aqtversion: '==3.1.*' + + - name: Install pip + run: | + python3 -m pip install --user --upgrade -r requirements.txt + + - name: Restore Homebrew cache + uses: actions/cache@v3 + id: brew-cache-restore + with: + path: ~/Library/Caches/Homebrew + key: ${{ runner.os }}-brew + + - name: Install Homebrew + run: | + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + + - name: Install dependencies + run: | + brew install cmake ninja readline sqlite3 xz zlib tcl-tk autoconf automake libtool python yasm clang-format black meson nasm pkg-config glew + brew install --cask xquartz + + - name: Configure + run: | + export QT_HOME=${{ github.workspace }}/deps/Qt/5.15.2/clang_64 + cmake -B _build -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DRV_DEPS_QT5_LOCATION=$QT_HOME -DRV_VFX_PLATFORM=CY2023 + + - name: Build dependencies + run: | + cmake --build _build --target dependencies --parallel=1 -v + + - name: Build main executable + run: | + cmake --build _build --target main_executable --parallel -v + + - name: Tests + run: | + ctest --test-dir _build --extra-verbose + + windows: + runs-on: windows-latest + steps: + - name: Check out repository code + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Setup msys2 + uses: msys2/setup-msys2@v2 + with: + msystem: MINGW64 + update: true + cache: true + install: >- + mingw-w64-x86_64-autotools + mingw-w64-x86_64-cmake + mingw-w64-x86_64-cmake-cmcldeps + mingw-w64-x86_64-glew + mingw-w64-x86_64-libarchive + mingw-w64-x86_64-make + mingw-w64-x86_64-meson + mingw-w64-x86_64-toolchain + autoconf + automake + bison + flex + git + libtool + nasm + p7zip + patch + unzip + zip + + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + + - name: Display Python installation location + run: | + python -c "import sys; print(sys.executable)" + + - run: | + echo "export PATH=/c/hostedtoolcache/windows/Python/3.10.11/x64:/c/Strawberry/c/bin:/c/Strawberry/perl/site/bin:/c/Strawberry/perl/bin:/c/msys64/mingw64/bin:$PATH" >> ~/.bash_profile + shell: msys2 {0} + + - run: | + echo $PATH + which python + which python3 + shell: msys2 {0} + + - name: Prepare Qt folder + run: | + mkdir -p /c/qt + shell: msys2 {0} + + # - name: Cache Qt installation + # uses: actions/cache@v3 + # id: qt-cache + # with: + # path: "c:/" + # key: ${{ runner.os }}-qt-${{ hashFiles('~/qt/**') }} + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: '5.15.2' + host: 'windows' + target: 'desktop' + arch: 'win64_msvc2019_64' + dir: "c:/" + install-deps: 'false' + modules: 'debug_info qtcharts qtdatavis3d qtlottie qtnetworkauth qtquick3d qtquicktimeline qtscript qtwebengine qtwebglplugin' + archives: 'd3dcompiler_47 opengl32sw qt3d qtactiveqt qtbase qtconnectivity qtdeclarative qtgraphicaleffects qtimageformats qtlocation qtmultimedia qtquickcontrols qtquickcontrols2 qtremoteobjects qtscxml qtsensors qtsvg qttools qttranslations qtwebchannel qtwebsockets qtwebview qtwinextras qtxmlpatterns' + cache: true + cache-key-prefix: 'install-qt-action' + setup-python: 'false' + tools: 'tools_qtcreator' + set-env: 'true' + tools-only: 'false' + aqtversion: '==3.1.*' + + - name: Install pip + run: | + SETUPTOOLS_USE_DISTUTILS=stdlib python3 -m pip install --user --upgrade -r ./requirements.txt + shell: msys2 {0} + + - name: Configure + run: | + which perl + export QT_HOME=c:/Qt/5.15.2/msvc2019_64 + cmake -B _build -G "Visual Studio 17 2022" -A x64 -DRV_DEPS_WIN_PERL_ROOT=c:/Strawberry/perl/bin -DCMAKE_BUILD_TYPE=Release -DRV_DEPS_QT5_LOCATION=$QT_HOME -DRV_VFX_PLATFORM=CY2023 + shell: msys2 {0} + + - name: Build deps + run: | + cmake --build _build --config Release --target RV_DEPS_FFMPEG --parallel=1 -v + shell: msys2 {0} + id: build_deps + + - name: Failure debugging + if: always() + run: | + ls -al ./_build/RV_DEPS_FFMPEG/src/ffbuild + ls -al ./_build/RV_DEPS_DAV1D/install/lib/pkgconfig + cat ./_build/RV_DEPS_FFMPEG/src/ffbuild/config.log + shell: msys2 {0} + + # - name: Build main + # run: | + # cmake --build _build --config Release --target main_executable --parallel -v + # shell: msys2 {0} + \ No newline at end of file