From fe173d132d3bc3248e97cd13e3fa458819b52d0b Mon Sep 17 00:00:00 2001 From: Christian Feldmann Date: Tue, 19 Mar 2024 17:16:28 +0100 Subject: [PATCH 1/8] Add parsing of three_dimensional_reference_displays_info --- YUViewLib/src/parser/HEVC/SEI/sei_message.cpp | 5 +- ...ee_dimensional_reference_displays_info.cpp | 102 ++++++++++++++++++ ...hree_dimensional_reference_displays_info.h | 69 ++++++++++++ 3 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.cpp create mode 100644 YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.h diff --git a/YUViewLib/src/parser/HEVC/SEI/sei_message.cpp b/YUViewLib/src/parser/HEVC/SEI/sei_message.cpp index 9cc37adf8..0c659cd2a 100644 --- a/YUViewLib/src/parser/HEVC/SEI/sei_message.cpp +++ b/YUViewLib/src/parser/HEVC/SEI/sei_message.cpp @@ -38,9 +38,10 @@ #include "content_light_level_info.h" #include "mastering_display_colour_volume.h" #include "parser/common/SubByteReaderLoggingOptions.h" -#include #include "pic_timing.h" +#include "three_dimensional_reference_displays_info.h" #include "user_data_unregistered.h" +#include namespace parser::hevc { @@ -234,6 +235,8 @@ sei_message::parsePayloadData(bool reparse, this->payload = std::make_shared(); else if (this->payloadType == 147) this->payload = std::make_shared(); + else if (this->payloadType == 176) + this->payload = std::make_shared(); else this->payload = std::make_shared(); } diff --git a/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.cpp b/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.cpp new file mode 100644 index 000000000..24e24ac74 --- /dev/null +++ b/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.cpp @@ -0,0 +1,102 @@ +/* This file is part of YUView - The YUV player with advanced analytics toolset + * + * Copyright (C) 2015 Institut f�r Nachrichtentechnik, RWTH Aachen University, GERMANY + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the + * OpenSSL library under certain conditions as described in each + * individual source file, and distribute linked combinations including + * the two. + * + * You must obey the GNU General Public License in all respects for all + * of the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the + * file(s), but you are not obligated to do so. If you do not wish to do + * so, delete this exception statement from your version. If you delete + * this exception statement from all source files in the program, then + * also delete it here. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "three_dimensional_reference_displays_info.h" + +#include + +namespace parser::hevc +{ + +using namespace reader; + +SEIParsingResult three_dimensional_reference_displays_info::parse( + reader::SubByteReaderLogging & reader, + bool reparse, + VPSMap & vpsMap, + SPSMap & spsMap, + std::shared_ptr associatedSPS) +{ + (void)reparse; + (void)vpsMap; + (void)spsMap; + (void)associatedSPS; + + SubByteReaderLoggingSubLevel subLevel(reader, "three_dimensional_reference_displays_info"); + + this->prec_ref_display_width = reader.readUEV("prec_ref_display_width"); + this->ref_viewing_distance_flag = reader.readFlag("ref_viewing_distance_flag"); + if (this->ref_viewing_distance_flag) + this->prec_ref_viewing_dist = reader.readUEV("prec_ref_viewing_dist"); + this->num_ref_displays_minus1 = reader.readUEV("num_ref_displays_minus1"); + for (unsigned i = 0; i <= num_ref_displays_minus1; ++i) + { + this->left_view_id.push_back(reader.readUEV(formatArray("left_view_id", i))); + this->right_view_id.push_back(reader.readUEV(formatArray("right_view_id", i))); + this->exponent_ref_display_width.push_back( + reader.readBits(formatArray("exponent_ref_display_width", i), 6)); + + const auto refDispWidthBits = + this->exponent_ref_display_width.at(i) == 0 + ? std::max(0ull, this->prec_ref_display_width - 30) + : std::max(0ull, + this->exponent_ref_display_width.at(i) + this->prec_ref_display_width - 31); + this->mantissa_ref_display_width.push_back( + reader.readBits(formatArray("mantissa_ref_display_width", i), refDispWidthBits)); + + if (this->ref_viewing_distance_flag) + { + this->exponent_ref_viewing_distance.push_back( + reader.readBits(formatArray("exponent_ref_viewing_distance", i), 6)); + + const auto refViewDistBits = exponent_ref_viewing_distance.at(i) == 0 + ? std::max(0ull, this->prec_ref_viewing_dist - 30) + : std::max(0ull, + this->exponent_ref_viewing_distance.at(i) + + this->prec_ref_viewing_dist - 31); + this->mantissa_ref_viewing_distance.push_back( + reader.readBits(formatArray("mantissa_ref_viewing_distance", i), refViewDistBits)); + } + this->additional_shift_present_flag.push_back( + reader.readFlag(formatArray("additional_shift_present_flag", i))); + if (this->additional_shift_present_flag.at(i)) + this->num_sample_shift_plus512[i] = + reader.readBits(formatArray("num_sample_shift_plus512", i), 10); + } + + this->three_dimensional_reference_displays_extension_flag = + reader.readFlag("three_dimensional_reference_displays_extension_flag"); + + return SEIParsingResult::OK; +} + +} // namespace parser::hevc \ No newline at end of file diff --git a/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.h b/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.h new file mode 100644 index 000000000..250702680 --- /dev/null +++ b/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.h @@ -0,0 +1,69 @@ +/* This file is part of YUView - The YUV player with advanced analytics toolset + * + * Copyright (C) 2015 Institut f�r Nachrichtentechnik, RWTH Aachen University, GERMANY + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the + * OpenSSL library under certain conditions as described in each + * individual source file, and distribute linked combinations including + * the two. + * + * You must obey the GNU General Public License in all respects for all + * of the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the + * file(s), but you are not obligated to do so. If you do not wish to do + * so, delete this exception statement from your version. If you delete + * this exception statement from all source files in the program, then + * also delete it here. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include "parser/common/SubByteReaderLogging.h" +#include "sei_message.h" + +namespace parser::hevc +{ + +class three_dimensional_reference_displays_info : public sei_payload +{ +public: + three_dimensional_reference_displays_info() = default; + + SEIParsingResult parse(reader::SubByteReaderLogging & reader, + bool reparse, + VPSMap & vpsMap, + SPSMap & spsMap, + std::shared_ptr associatedSPS) override; + + uint64_t prec_ref_display_width{}; + bool ref_viewing_distance_flag{}; + uint64_t prec_ref_viewing_dist{}; + uint64_t num_ref_displays_minus1{}; + + vector left_view_id; + vector right_view_id; + vector exponent_ref_display_width; + vector mantissa_ref_display_width; + vector exponent_ref_viewing_distance; + vector mantissa_ref_viewing_distance; + vector additional_shift_present_flag; + umap_1d num_sample_shift_plus512; + + bool three_dimensional_reference_displays_extension_flag{}; +}; + +} // namespace parser::hevc \ No newline at end of file From 4b61b842b8ede9b9b0f88ed48529931072c2d74d Mon Sep 17 00:00:00 2001 From: ChristianFeldmann Date: Wed, 20 Mar 2024 10:26:17 +0100 Subject: [PATCH 2/8] Try ul as literal. On linux uint64_t is ul. --- .../three_dimensional_reference_displays_info.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.cpp b/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.cpp index 24e24ac74..ea8b3815f 100644 --- a/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.cpp +++ b/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.cpp @@ -40,10 +40,10 @@ namespace parser::hevc using namespace reader; SEIParsingResult three_dimensional_reference_displays_info::parse( - reader::SubByteReaderLogging & reader, + reader::SubByteReaderLogging &reader, bool reparse, - VPSMap & vpsMap, - SPSMap & spsMap, + VPSMap &vpsMap, + SPSMap &spsMap, std::shared_ptr associatedSPS) { (void)reparse; @@ -67,8 +67,8 @@ SEIParsingResult three_dimensional_reference_displays_info::parse( const auto refDispWidthBits = this->exponent_ref_display_width.at(i) == 0 - ? std::max(0ull, this->prec_ref_display_width - 30) - : std::max(0ull, + ? std::max(0UL, this->prec_ref_display_width - 30) + : std::max(0UL, this->exponent_ref_display_width.at(i) + this->prec_ref_display_width - 31); this->mantissa_ref_display_width.push_back( reader.readBits(formatArray("mantissa_ref_display_width", i), refDispWidthBits)); @@ -79,8 +79,8 @@ SEIParsingResult three_dimensional_reference_displays_info::parse( reader.readBits(formatArray("exponent_ref_viewing_distance", i), 6)); const auto refViewDistBits = exponent_ref_viewing_distance.at(i) == 0 - ? std::max(0ull, this->prec_ref_viewing_dist - 30) - : std::max(0ull, + ? std::max(0UL, this->prec_ref_viewing_dist - 30) + : std::max(0UL, this->exponent_ref_viewing_distance.at(i) + this->prec_ref_viewing_dist - 31); this->mantissa_ref_viewing_distance.push_back( From afa3bffe069d2ee5b50247bda439837a8a6aa1b9 Mon Sep 17 00:00:00 2001 From: ChristianFeldmann Date: Wed, 20 Mar 2024 10:31:45 +0100 Subject: [PATCH 3/8] Using ull or ul does not work on all platforms because of different definitions of uint64_t. --- .../SEI/three_dimensional_reference_displays_info.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.cpp b/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.cpp index ea8b3815f..f4be52e93 100644 --- a/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.cpp +++ b/YUViewLib/src/parser/HEVC/SEI/three_dimensional_reference_displays_info.cpp @@ -67,8 +67,8 @@ SEIParsingResult three_dimensional_reference_displays_info::parse( const auto refDispWidthBits = this->exponent_ref_display_width.at(i) == 0 - ? std::max(0UL, this->prec_ref_display_width - 30) - : std::max(0UL, + ? std::max(uint64_t(0), this->prec_ref_display_width - 30) + : std::max(uint64_t(0), this->exponent_ref_display_width.at(i) + this->prec_ref_display_width - 31); this->mantissa_ref_display_width.push_back( reader.readBits(formatArray("mantissa_ref_display_width", i), refDispWidthBits)); @@ -79,8 +79,8 @@ SEIParsingResult three_dimensional_reference_displays_info::parse( reader.readBits(formatArray("exponent_ref_viewing_distance", i), 6)); const auto refViewDistBits = exponent_ref_viewing_distance.at(i) == 0 - ? std::max(0UL, this->prec_ref_viewing_dist - 30) - : std::max(0UL, + ? std::max(uint64_t(0), this->prec_ref_viewing_dist - 30) + : std::max(uint64_t(0), this->exponent_ref_viewing_distance.at(i) + this->prec_ref_viewing_dist - 31); this->mantissa_ref_viewing_distance.push_back( From 82f44ba7060111cd1d5cd84c071b5bc77340ce33 Mon Sep 17 00:00:00 2001 From: ChristianFeldmann Date: Wed, 20 Mar 2024 10:56:10 +0100 Subject: [PATCH 4/8] Debug wix issue on windows --- .github/workflows/Build.yml | 272 ++++++++++++++++++------------------ 1 file changed, 138 insertions(+), 134 deletions(-) diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml index d34bef50f..62065fde5 100644 --- a/.github/workflows/Build.yml +++ b/.github/workflows/Build.yml @@ -7,140 +7,140 @@ on: - created jobs: - build-unix-native: - runs-on: ${{ matrix.os }} - strategy: - matrix: - include: - - os: ubuntu-20.04 - INSTALL_LIBS: libgl1-mesa-dev libxkbcommon-x11-0 libpcre2-16-0 qt5-default - QMAKE_COMMAND: qmake - - os: ubuntu-22.04 - INSTALL_LIBS: qt6-base-dev - QMAKE_COMMAND: qmake6 - steps: - - uses: actions/checkout@v3 - - run: git fetch --prune --unshallow - - name: Install Linux packages - run: | - sudo apt-get update - sudo apt-get install ${{matrix.INSTALL_LIBS}} - - name: Build - run: | - cd $GITHUB_WORKSPACE - mkdir build - cd build - ${{matrix.QMAKE_COMMAND}} CONFIG+=UNITTESTS .. - make -j$(nproc) - make check - build-mac-native: - runs-on: ${{ matrix.os }} - strategy: - matrix: - include: - - os: macos-12 - steps: - - uses: actions/checkout@v3 - - run: git fetch --prune --unshallow - - name: Install packages - run: | - brew install qt - - name: Build - run: | - cd $GITHUB_WORKSPACE - mkdir build - cd build - qmake6 CONFIG+=UNITTESTS .. - make -j $(sysctl -n hw.logicalcpu) - make check - build-unix: - runs-on: ${{ matrix.os }} - strategy: - matrix: - include: - - os: ubuntu-20.04 - QT_FILE: qtBase_6.5.2_ubuntu20.zip - LIBDE265_REMOTE: libde265.so - LIBDE265_LOCAL: libde265-internals.so - ARTIFACT_NAME: YUView.Ubuntu20.AppImage - CPU_COUNT_COMMAND: nproc - - os: macos-11 - QT_FILE: qtBase_6.5.2_mac11.zip - LIBDE265_REMOTE: libde265.dylib - LIBDE265_LOCAL: libde265-internals.dylib - ARTIFACT_NAME: YUView-Mac11-BigSur.zip - CPU_COUNT_COMMAND: sysctl -n hw.logicalcpu - - os: macos-12 - QT_FILE: qtBase_6.5.2_mac12.zip - LIBDE265_REMOTE: libde265.dylib - LIBDE265_LOCAL: libde265-internals.dylib - ARTIFACT_NAME: YUView-Mac12-Monterey.zip - CPU_COUNT_COMMAND: sysctl -n hw.logicalcpu - steps: - - uses: actions/checkout@v3 - - run: git fetch --prune --unshallow - - name: Install Qt base - run: | - cd ../../ - mkdir -p YUViewQt/YUViewQt - cd YUViewQt/YUViewQt - curl -L https://github.com/ChristianFeldmann/YUViewQt/releases/download/QtBase-6.5.2/${{matrix.QT_FILE}} -o Qt.zip - unzip -qa Qt.zip - echo "$GITHUB_WORKSPACE/../../YUViewQt/YUViewQt/Qt/bin" >> $GITHUB_PATH - shell: bash - - name: Install Linuxdeployqt - run: | - curl -L https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage -o linuxdeployqt-6-x86_64.AppImage - chmod a+x linuxdeployqt-6-x86_64.AppImage - if: matrix.os == 'ubuntu-20.04' - - name: Install Linux packages - run: | - sudo apt-get update - sudo apt-get install libgl1-mesa-dev libxkbcommon-x11-0 libpcre2-16-0 '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev libatspi2.0-dev libfuse2 - if: matrix.os == 'ubuntu-20.04' - - name: Install libde265 - run: | - curl -L https://github.com/ChristianFeldmann/libde265/releases/download/v1.1/${{matrix.LIBDE265_REMOTE}} -o ${{matrix.LIBDE265_LOCAL}} - curl -L https://raw.githubusercontent.com/ChristianFeldmann/libde265/master/COPYING -o libde265License.txt - shell: bash - - name: Build Linux/Mac - run: | - cd $GITHUB_WORKSPACE - export PATH=$GITHUB_WORKSPACE/../../YUViewQt/YUViewQt/Qt/bin:$PATH - mkdir build - cd build - qmake CONFIG+=UNITTESTS .. - make -j $(${{matrix.CPU_COUNT_COMMAND}}) - make check - - name: Build App (Mac) - run: | - macdeployqt build/YUViewApp/YUView.app -always-overwrite -verbose=2 - cp ${{matrix.LIBDE265_LOCAL}} build/YUViewApp/YUView.app/Contents/MacOS/. - cd build/YUViewApp - # Zip - zip -r ${{matrix.ARTIFACT_NAME}} YUView.app/ - mkdir $GITHUB_WORKSPACE/artifacts - cp ${{matrix.ARTIFACT_NAME}} $GITHUB_WORKSPACE/artifacts/ - if: matrix.os == 'macos-11' || matrix.os == 'macos-12' - - name: Build Appimage (Linux) - run: | - cd build - make INSTALL_ROOT=appdir install - $GITHUB_WORKSPACE/linuxdeployqt-6-x86_64.AppImage YUViewApp/appdir/usr/local/share/applications/de.rwth_aachen.ient.YUView.desktop -appimage -bundle-non-qt-libs -verbose=2 - mv YUView-*.AppImage YUView.AppImage - mkdir $GITHUB_WORKSPACE/artifacts - cp YUView.AppImage $GITHUB_WORKSPACE/artifacts/ - if: matrix.os == 'ubuntu-20.04' - - name: Upload Artifact - uses: actions/upload-artifact@v3 - with: - name: ${{matrix.ARTIFACT_NAME}} - path: artifacts - - name: Release - uses: softprops/action-gh-release@v1 - if: startsWith(github.ref, 'refs/tags/') - with: - files: artifacts/${{matrix.ARTIFACT_NAME}} + # build-unix-native: + # runs-on: ${{ matrix.os }} + # strategy: + # matrix: + # include: + # - os: ubuntu-20.04 + # INSTALL_LIBS: libgl1-mesa-dev libxkbcommon-x11-0 libpcre2-16-0 qt5-default + # QMAKE_COMMAND: qmake + # - os: ubuntu-22.04 + # INSTALL_LIBS: qt6-base-dev + # QMAKE_COMMAND: qmake6 + # steps: + # - uses: actions/checkout@v3 + # - run: git fetch --prune --unshallow + # - name: Install Linux packages + # run: | + # sudo apt-get update + # sudo apt-get install ${{matrix.INSTALL_LIBS}} + # - name: Build + # run: | + # cd $GITHUB_WORKSPACE + # mkdir build + # cd build + # ${{matrix.QMAKE_COMMAND}} CONFIG+=UNITTESTS .. + # make -j$(nproc) + # make check + # build-mac-native: + # runs-on: ${{ matrix.os }} + # strategy: + # matrix: + # include: + # - os: macos-12 + # steps: + # - uses: actions/checkout@v3 + # - run: git fetch --prune --unshallow + # - name: Install packages + # run: | + # brew install qt + # - name: Build + # run: | + # cd $GITHUB_WORKSPACE + # mkdir build + # cd build + # qmake6 CONFIG+=UNITTESTS .. + # make -j $(sysctl -n hw.logicalcpu) + # make check + # build-unix: + # runs-on: ${{ matrix.os }} + # strategy: + # matrix: + # include: + # - os: ubuntu-20.04 + # QT_FILE: qtBase_6.5.2_ubuntu20.zip + # LIBDE265_REMOTE: libde265.so + # LIBDE265_LOCAL: libde265-internals.so + # ARTIFACT_NAME: YUView.Ubuntu20.AppImage + # CPU_COUNT_COMMAND: nproc + # - os: macos-11 + # QT_FILE: qtBase_6.5.2_mac11.zip + # LIBDE265_REMOTE: libde265.dylib + # LIBDE265_LOCAL: libde265-internals.dylib + # ARTIFACT_NAME: YUView-Mac11-BigSur.zip + # CPU_COUNT_COMMAND: sysctl -n hw.logicalcpu + # - os: macos-12 + # QT_FILE: qtBase_6.5.2_mac12.zip + # LIBDE265_REMOTE: libde265.dylib + # LIBDE265_LOCAL: libde265-internals.dylib + # ARTIFACT_NAME: YUView-Mac12-Monterey.zip + # CPU_COUNT_COMMAND: sysctl -n hw.logicalcpu + # steps: + # - uses: actions/checkout@v3 + # - run: git fetch --prune --unshallow + # - name: Install Qt base + # run: | + # cd ../../ + # mkdir -p YUViewQt/YUViewQt + # cd YUViewQt/YUViewQt + # curl -L https://github.com/ChristianFeldmann/YUViewQt/releases/download/QtBase-6.5.2/${{matrix.QT_FILE}} -o Qt.zip + # unzip -qa Qt.zip + # echo "$GITHUB_WORKSPACE/../../YUViewQt/YUViewQt/Qt/bin" >> $GITHUB_PATH + # shell: bash + # - name: Install Linuxdeployqt + # run: | + # curl -L https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage -o linuxdeployqt-6-x86_64.AppImage + # chmod a+x linuxdeployqt-6-x86_64.AppImage + # if: matrix.os == 'ubuntu-20.04' + # - name: Install Linux packages + # run: | + # sudo apt-get update + # sudo apt-get install libgl1-mesa-dev libxkbcommon-x11-0 libpcre2-16-0 '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev libatspi2.0-dev libfuse2 + # if: matrix.os == 'ubuntu-20.04' + # - name: Install libde265 + # run: | + # curl -L https://github.com/ChristianFeldmann/libde265/releases/download/v1.1/${{matrix.LIBDE265_REMOTE}} -o ${{matrix.LIBDE265_LOCAL}} + # curl -L https://raw.githubusercontent.com/ChristianFeldmann/libde265/master/COPYING -o libde265License.txt + # shell: bash + # - name: Build Linux/Mac + # run: | + # cd $GITHUB_WORKSPACE + # export PATH=$GITHUB_WORKSPACE/../../YUViewQt/YUViewQt/Qt/bin:$PATH + # mkdir build + # cd build + # qmake CONFIG+=UNITTESTS .. + # make -j $(${{matrix.CPU_COUNT_COMMAND}}) + # make check + # - name: Build App (Mac) + # run: | + # macdeployqt build/YUViewApp/YUView.app -always-overwrite -verbose=2 + # cp ${{matrix.LIBDE265_LOCAL}} build/YUViewApp/YUView.app/Contents/MacOS/. + # cd build/YUViewApp + # # Zip + # zip -r ${{matrix.ARTIFACT_NAME}} YUView.app/ + # mkdir $GITHUB_WORKSPACE/artifacts + # cp ${{matrix.ARTIFACT_NAME}} $GITHUB_WORKSPACE/artifacts/ + # if: matrix.os == 'macos-11' || matrix.os == 'macos-12' + # - name: Build Appimage (Linux) + # run: | + # cd build + # make INSTALL_ROOT=appdir install + # $GITHUB_WORKSPACE/linuxdeployqt-6-x86_64.AppImage YUViewApp/appdir/usr/local/share/applications/de.rwth_aachen.ient.YUView.desktop -appimage -bundle-non-qt-libs -verbose=2 + # mv YUView-*.AppImage YUView.AppImage + # mkdir $GITHUB_WORKSPACE/artifacts + # cp YUView.AppImage $GITHUB_WORKSPACE/artifacts/ + # if: matrix.os == 'ubuntu-20.04' + # - name: Upload Artifact + # uses: actions/upload-artifact@v3 + # with: + # name: ${{matrix.ARTIFACT_NAME}} + # path: artifacts + # - name: Release + # uses: softprops/action-gh-release@v1 + # if: startsWith(github.ref, 'refs/tags/') + # with: + # files: artifacts/${{matrix.ARTIFACT_NAME}} build-windows: runs-on: ${{ matrix.os }} strategy: @@ -215,6 +215,10 @@ jobs: python deployment/versioning.py -d deploy -o deploy/versioninfo.txt mkdir artifacts 7z a artifacts/YUView-Win.zip ./deploy/* + - name: List Program dir + run: | + cd "C:\Program Files (x86)" + dir - name: Wix Windows run: | cd ${{ github.workspace }}/deployment/wix From e2486bf3cd79fd97f7e1d253a96d4a6ad5d668f4 Mon Sep 17 00:00:00 2001 From: ChristianFeldmann Date: Wed, 20 Mar 2024 11:17:16 +0100 Subject: [PATCH 5/8] Wix was updated in the image to 3.14 --- .github/workflows/Build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml index 62065fde5..6d02cf15a 100644 --- a/.github/workflows/Build.yml +++ b/.github/workflows/Build.yml @@ -223,10 +223,10 @@ jobs: run: | cd ${{ github.workspace }}/deployment/wix cp 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Redist\MSVC\v142\MergeModules\Microsoft_VC142_CRT_x64.msm' . - & "C:\Program Files (x86)\WiX Toolset v3.11\bin\heat.exe" dir ../../deploy -gg -dr APPLICATIONFOLDER -srd -sreg -cg YUViewComponents -out harvestedDirectory.wxs - & "C:\Program Files (x86)\WiX Toolset v3.11\bin\candle.exe" -dConfiguration=Release -dOutDir=bin/Release/ '-dTargetExt=.msi' '-dTargetFileName=YUViewSetup.msi' -dTargetName=YUViewSetup -out obj/Release/ -arch x64 -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUIExtension.dll" YUView.wxs - & "C:\Program Files (x86)\WiX Toolset v3.11\bin\candle.exe" -dConfiguration=Release -dOutDir=bin/Release/ '-dTargetExt=.msi' '-dTargetFileName=YUViewSetup.msi' -dTargetName=YUViewSetup -out obj/Release/ -arch x64 harvestedDirectory.wxs - & "C:\Program Files (x86)\WiX Toolset v3.11\bin\light.exe" -b ../../deploy -out bin/Release/YUViewSetup.msi -pdbout bin/Release/YUViewSetup.wixpdb -cultures:null -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUIExtension.dll" -contentsfile obj/Release/YUViewSetup.wixproj.BindContentsFileListnull.txt -outputsfile obj/Release/YUViewSetup.wixproj.BindOutputsFileListnull.txt -builtoutputsfile obj/Release/YUViewSetup.wixproj.BindBuiltOutputsFileListnull.txt obj/Release/YUView.wixobj obj/Release/harvestedDirectory.wixobj + & "C:\Program Files (x86)\WiX Toolset v3.14\bin\heat.exe" dir ../../deploy -gg -dr APPLICATIONFOLDER -srd -sreg -cg YUViewComponents -out harvestedDirectory.wxs + & "C:\Program Files (x86)\WiX Toolset v3.14\bin\candle.exe" -dConfiguration=Release -dOutDir=bin/Release/ '-dTargetExt=.msi' '-dTargetFileName=YUViewSetup.msi' -dTargetName=YUViewSetup -out obj/Release/ -arch x64 -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUIExtension.dll" YUView.wxs + & "C:\Program Files (x86)\WiX Toolset v3.14\bin\candle.exe" -dConfiguration=Release -dOutDir=bin/Release/ '-dTargetExt=.msi' '-dTargetFileName=YUViewSetup.msi' -dTargetName=YUViewSetup -out obj/Release/ -arch x64 harvestedDirectory.wxs + & "C:\Program Files (x86)\WiX Toolset v3.14\bin\light.exe" -b ../../deploy -out bin/Release/YUViewSetup.msi -pdbout bin/Release/YUViewSetup.wixpdb -cultures:null -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUIExtension.dll" -contentsfile obj/Release/YUViewSetup.wixproj.BindContentsFileListnull.txt -outputsfile obj/Release/YUViewSetup.wixproj.BindOutputsFileListnull.txt -builtoutputsfile obj/Release/YUViewSetup.wixproj.BindBuiltOutputsFileListnull.txt obj/Release/YUView.wixobj obj/Release/harvestedDirectory.wixobj cd ${{ github.workspace }} cp deployment/wix/bin/Release/YUViewSetup.msi ./ if: matrix.auto_update == true From f2d17f912f6555a218a5ab54eafefdfb28986d86 Mon Sep 17 00:00:00 2001 From: Christian Feldmann Date: Wed, 20 Mar 2024 11:44:34 +0100 Subject: [PATCH 6/8] Missed 2 paths --- .github/workflows/Build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml index 6d02cf15a..8b972a19f 100644 --- a/.github/workflows/Build.yml +++ b/.github/workflows/Build.yml @@ -224,9 +224,9 @@ jobs: cd ${{ github.workspace }}/deployment/wix cp 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Redist\MSVC\v142\MergeModules\Microsoft_VC142_CRT_x64.msm' . & "C:\Program Files (x86)\WiX Toolset v3.14\bin\heat.exe" dir ../../deploy -gg -dr APPLICATIONFOLDER -srd -sreg -cg YUViewComponents -out harvestedDirectory.wxs - & "C:\Program Files (x86)\WiX Toolset v3.14\bin\candle.exe" -dConfiguration=Release -dOutDir=bin/Release/ '-dTargetExt=.msi' '-dTargetFileName=YUViewSetup.msi' -dTargetName=YUViewSetup -out obj/Release/ -arch x64 -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUIExtension.dll" YUView.wxs + & "C:\Program Files (x86)\WiX Toolset v3.14\bin\candle.exe" -dConfiguration=Release -dOutDir=bin/Release/ '-dTargetExt=.msi' '-dTargetFileName=YUViewSetup.msi' -dTargetName=YUViewSetup -out obj/Release/ -arch x64 -ext "C:\Program Files (x86)\WiX Toolset v3.14\bin\WixUIExtension.dll" YUView.wxs & "C:\Program Files (x86)\WiX Toolset v3.14\bin\candle.exe" -dConfiguration=Release -dOutDir=bin/Release/ '-dTargetExt=.msi' '-dTargetFileName=YUViewSetup.msi' -dTargetName=YUViewSetup -out obj/Release/ -arch x64 harvestedDirectory.wxs - & "C:\Program Files (x86)\WiX Toolset v3.14\bin\light.exe" -b ../../deploy -out bin/Release/YUViewSetup.msi -pdbout bin/Release/YUViewSetup.wixpdb -cultures:null -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUIExtension.dll" -contentsfile obj/Release/YUViewSetup.wixproj.BindContentsFileListnull.txt -outputsfile obj/Release/YUViewSetup.wixproj.BindOutputsFileListnull.txt -builtoutputsfile obj/Release/YUViewSetup.wixproj.BindBuiltOutputsFileListnull.txt obj/Release/YUView.wixobj obj/Release/harvestedDirectory.wixobj + & "C:\Program Files (x86)\WiX Toolset v3.14\bin\light.exe" -b ../../deploy -out bin/Release/YUViewSetup.msi -pdbout bin/Release/YUViewSetup.wixpdb -cultures:null -ext "C:\Program Files (x86)\WiX Toolset v3.14\bin\WixUIExtension.dll" -contentsfile obj/Release/YUViewSetup.wixproj.BindContentsFileListnull.txt -outputsfile obj/Release/YUViewSetup.wixproj.BindOutputsFileListnull.txt -builtoutputsfile obj/Release/YUViewSetup.wixproj.BindBuiltOutputsFileListnull.txt obj/Release/YUView.wixobj obj/Release/harvestedDirectory.wixobj cd ${{ github.workspace }} cp deployment/wix/bin/Release/YUViewSetup.msi ./ if: matrix.auto_update == true From b1b5e5cd7e1a7c38ad9771fc41de5a288233b490 Mon Sep 17 00:00:00 2001 From: Christian Feldmann Date: Wed, 20 Mar 2024 11:56:25 +0100 Subject: [PATCH 7/8] Reenable all other workflows. Also update checkout version. --- .github/workflows/Build.yml | 274 ++++++++++++++++++------------------ 1 file changed, 135 insertions(+), 139 deletions(-) diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml index 8b972a19f..f79227b5a 100644 --- a/.github/workflows/Build.yml +++ b/.github/workflows/Build.yml @@ -7,140 +7,140 @@ on: - created jobs: - # build-unix-native: - # runs-on: ${{ matrix.os }} - # strategy: - # matrix: - # include: - # - os: ubuntu-20.04 - # INSTALL_LIBS: libgl1-mesa-dev libxkbcommon-x11-0 libpcre2-16-0 qt5-default - # QMAKE_COMMAND: qmake - # - os: ubuntu-22.04 - # INSTALL_LIBS: qt6-base-dev - # QMAKE_COMMAND: qmake6 - # steps: - # - uses: actions/checkout@v3 - # - run: git fetch --prune --unshallow - # - name: Install Linux packages - # run: | - # sudo apt-get update - # sudo apt-get install ${{matrix.INSTALL_LIBS}} - # - name: Build - # run: | - # cd $GITHUB_WORKSPACE - # mkdir build - # cd build - # ${{matrix.QMAKE_COMMAND}} CONFIG+=UNITTESTS .. - # make -j$(nproc) - # make check - # build-mac-native: - # runs-on: ${{ matrix.os }} - # strategy: - # matrix: - # include: - # - os: macos-12 - # steps: - # - uses: actions/checkout@v3 - # - run: git fetch --prune --unshallow - # - name: Install packages - # run: | - # brew install qt - # - name: Build - # run: | - # cd $GITHUB_WORKSPACE - # mkdir build - # cd build - # qmake6 CONFIG+=UNITTESTS .. - # make -j $(sysctl -n hw.logicalcpu) - # make check - # build-unix: - # runs-on: ${{ matrix.os }} - # strategy: - # matrix: - # include: - # - os: ubuntu-20.04 - # QT_FILE: qtBase_6.5.2_ubuntu20.zip - # LIBDE265_REMOTE: libde265.so - # LIBDE265_LOCAL: libde265-internals.so - # ARTIFACT_NAME: YUView.Ubuntu20.AppImage - # CPU_COUNT_COMMAND: nproc - # - os: macos-11 - # QT_FILE: qtBase_6.5.2_mac11.zip - # LIBDE265_REMOTE: libde265.dylib - # LIBDE265_LOCAL: libde265-internals.dylib - # ARTIFACT_NAME: YUView-Mac11-BigSur.zip - # CPU_COUNT_COMMAND: sysctl -n hw.logicalcpu - # - os: macos-12 - # QT_FILE: qtBase_6.5.2_mac12.zip - # LIBDE265_REMOTE: libde265.dylib - # LIBDE265_LOCAL: libde265-internals.dylib - # ARTIFACT_NAME: YUView-Mac12-Monterey.zip - # CPU_COUNT_COMMAND: sysctl -n hw.logicalcpu - # steps: - # - uses: actions/checkout@v3 - # - run: git fetch --prune --unshallow - # - name: Install Qt base - # run: | - # cd ../../ - # mkdir -p YUViewQt/YUViewQt - # cd YUViewQt/YUViewQt - # curl -L https://github.com/ChristianFeldmann/YUViewQt/releases/download/QtBase-6.5.2/${{matrix.QT_FILE}} -o Qt.zip - # unzip -qa Qt.zip - # echo "$GITHUB_WORKSPACE/../../YUViewQt/YUViewQt/Qt/bin" >> $GITHUB_PATH - # shell: bash - # - name: Install Linuxdeployqt - # run: | - # curl -L https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage -o linuxdeployqt-6-x86_64.AppImage - # chmod a+x linuxdeployqt-6-x86_64.AppImage - # if: matrix.os == 'ubuntu-20.04' - # - name: Install Linux packages - # run: | - # sudo apt-get update - # sudo apt-get install libgl1-mesa-dev libxkbcommon-x11-0 libpcre2-16-0 '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev libatspi2.0-dev libfuse2 - # if: matrix.os == 'ubuntu-20.04' - # - name: Install libde265 - # run: | - # curl -L https://github.com/ChristianFeldmann/libde265/releases/download/v1.1/${{matrix.LIBDE265_REMOTE}} -o ${{matrix.LIBDE265_LOCAL}} - # curl -L https://raw.githubusercontent.com/ChristianFeldmann/libde265/master/COPYING -o libde265License.txt - # shell: bash - # - name: Build Linux/Mac - # run: | - # cd $GITHUB_WORKSPACE - # export PATH=$GITHUB_WORKSPACE/../../YUViewQt/YUViewQt/Qt/bin:$PATH - # mkdir build - # cd build - # qmake CONFIG+=UNITTESTS .. - # make -j $(${{matrix.CPU_COUNT_COMMAND}}) - # make check - # - name: Build App (Mac) - # run: | - # macdeployqt build/YUViewApp/YUView.app -always-overwrite -verbose=2 - # cp ${{matrix.LIBDE265_LOCAL}} build/YUViewApp/YUView.app/Contents/MacOS/. - # cd build/YUViewApp - # # Zip - # zip -r ${{matrix.ARTIFACT_NAME}} YUView.app/ - # mkdir $GITHUB_WORKSPACE/artifacts - # cp ${{matrix.ARTIFACT_NAME}} $GITHUB_WORKSPACE/artifacts/ - # if: matrix.os == 'macos-11' || matrix.os == 'macos-12' - # - name: Build Appimage (Linux) - # run: | - # cd build - # make INSTALL_ROOT=appdir install - # $GITHUB_WORKSPACE/linuxdeployqt-6-x86_64.AppImage YUViewApp/appdir/usr/local/share/applications/de.rwth_aachen.ient.YUView.desktop -appimage -bundle-non-qt-libs -verbose=2 - # mv YUView-*.AppImage YUView.AppImage - # mkdir $GITHUB_WORKSPACE/artifacts - # cp YUView.AppImage $GITHUB_WORKSPACE/artifacts/ - # if: matrix.os == 'ubuntu-20.04' - # - name: Upload Artifact - # uses: actions/upload-artifact@v3 - # with: - # name: ${{matrix.ARTIFACT_NAME}} - # path: artifacts - # - name: Release - # uses: softprops/action-gh-release@v1 - # if: startsWith(github.ref, 'refs/tags/') - # with: - # files: artifacts/${{matrix.ARTIFACT_NAME}} + build-unix-native: + runs-on: ${{ matrix.os }} + strategy: + matrix: + include: + - os: ubuntu-20.04 + INSTALL_LIBS: libgl1-mesa-dev libxkbcommon-x11-0 libpcre2-16-0 qt5-default + QMAKE_COMMAND: qmake + - os: ubuntu-22.04 + INSTALL_LIBS: qt6-base-dev + QMAKE_COMMAND: qmake6 + steps: + - uses: actions/checkout@v4 + - run: git fetch --prune --unshallow + - name: Install Linux packages + run: | + sudo apt-get update + sudo apt-get install ${{matrix.INSTALL_LIBS}} + - name: Build + run: | + cd $GITHUB_WORKSPACE + mkdir build + cd build + ${{matrix.QMAKE_COMMAND}} CONFIG+=UNITTESTS .. + make -j$(nproc) + make check + build-mac-native: + runs-on: ${{ matrix.os }} + strategy: + matrix: + include: + - os: macos-12 + steps: + - uses: actions/checkout@v4 + - run: git fetch --prune --unshallow + - name: Install packages + run: | + brew install qt + - name: Build + run: | + cd $GITHUB_WORKSPACE + mkdir build + cd build + qmake6 CONFIG+=UNITTESTS .. + make -j $(sysctl -n hw.logicalcpu) + make check + build-unix: + runs-on: ${{ matrix.os }} + strategy: + matrix: + include: + - os: ubuntu-20.04 + QT_FILE: qtBase_6.5.2_ubuntu20.zip + LIBDE265_REMOTE: libde265.so + LIBDE265_LOCAL: libde265-internals.so + ARTIFACT_NAME: YUView.Ubuntu20.AppImage + CPU_COUNT_COMMAND: nproc + - os: macos-11 + QT_FILE: qtBase_6.5.2_mac11.zip + LIBDE265_REMOTE: libde265.dylib + LIBDE265_LOCAL: libde265-internals.dylib + ARTIFACT_NAME: YUView-Mac11-BigSur.zip + CPU_COUNT_COMMAND: sysctl -n hw.logicalcpu + - os: macos-12 + QT_FILE: qtBase_6.5.2_mac12.zip + LIBDE265_REMOTE: libde265.dylib + LIBDE265_LOCAL: libde265-internals.dylib + ARTIFACT_NAME: YUView-Mac12-Monterey.zip + CPU_COUNT_COMMAND: sysctl -n hw.logicalcpu + steps: + - uses: actions/checkout@v4 + - run: git fetch --prune --unshallow + - name: Install Qt base + run: | + cd ../../ + mkdir -p YUViewQt/YUViewQt + cd YUViewQt/YUViewQt + curl -L https://github.com/ChristianFeldmann/YUViewQt/releases/download/QtBase-6.5.2/${{matrix.QT_FILE}} -o Qt.zip + unzip -qa Qt.zip + echo "$GITHUB_WORKSPACE/../../YUViewQt/YUViewQt/Qt/bin" >> $GITHUB_PATH + shell: bash + - name: Install Linuxdeployqt + run: | + curl -L https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage -o linuxdeployqt-6-x86_64.AppImage + chmod a+x linuxdeployqt-6-x86_64.AppImage + if: matrix.os == 'ubuntu-20.04' + - name: Install Linux packages + run: | + sudo apt-get update + sudo apt-get install libgl1-mesa-dev libxkbcommon-x11-0 libpcre2-16-0 '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev libatspi2.0-dev libfuse2 + if: matrix.os == 'ubuntu-20.04' + - name: Install libde265 + run: | + curl -L https://github.com/ChristianFeldmann/libde265/releases/download/v1.1/${{matrix.LIBDE265_REMOTE}} -o ${{matrix.LIBDE265_LOCAL}} + curl -L https://raw.githubusercontent.com/ChristianFeldmann/libde265/master/COPYING -o libde265License.txt + shell: bash + - name: Build Linux/Mac + run: | + cd $GITHUB_WORKSPACE + export PATH=$GITHUB_WORKSPACE/../../YUViewQt/YUViewQt/Qt/bin:$PATH + mkdir build + cd build + qmake CONFIG+=UNITTESTS .. + make -j $(${{matrix.CPU_COUNT_COMMAND}}) + make check + - name: Build App (Mac) + run: | + macdeployqt build/YUViewApp/YUView.app -always-overwrite -verbose=2 + cp ${{matrix.LIBDE265_LOCAL}} build/YUViewApp/YUView.app/Contents/MacOS/. + cd build/YUViewApp + # Zip + zip -r ${{matrix.ARTIFACT_NAME}} YUView.app/ + mkdir $GITHUB_WORKSPACE/artifacts + cp ${{matrix.ARTIFACT_NAME}} $GITHUB_WORKSPACE/artifacts/ + if: matrix.os == 'macos-11' || matrix.os == 'macos-12' + - name: Build Appimage (Linux) + run: | + cd build + make INSTALL_ROOT=appdir install + $GITHUB_WORKSPACE/linuxdeployqt-6-x86_64.AppImage YUViewApp/appdir/usr/local/share/applications/de.rwth_aachen.ient.YUView.desktop -appimage -bundle-non-qt-libs -verbose=2 + mv YUView-*.AppImage YUView.AppImage + mkdir $GITHUB_WORKSPACE/artifacts + cp YUView.AppImage $GITHUB_WORKSPACE/artifacts/ + if: matrix.os == 'ubuntu-20.04' + - name: Upload Artifact + uses: actions/upload-artifact@v3 + with: + name: ${{matrix.ARTIFACT_NAME}} + path: artifacts + - name: Release + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/') + with: + files: artifacts/${{matrix.ARTIFACT_NAME}} build-windows: runs-on: ${{ matrix.os }} strategy: @@ -155,7 +155,7 @@ jobs: ARTIFACT_NAME: YUView-Win2019-noautoupdate.zip QT_FILE: qtBase_6.5.2_win2019.zip steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ilammy/msvc-dev-cmd@v1 - run: git fetch --prune --unshallow - name: Install Qt base @@ -215,10 +215,6 @@ jobs: python deployment/versioning.py -d deploy -o deploy/versioninfo.txt mkdir artifacts 7z a artifacts/YUView-Win.zip ./deploy/* - - name: List Program dir - run: | - cd "C:\Program Files (x86)" - dir - name: Wix Windows run: | cd ${{ github.workspace }}/deployment/wix From b302f4256a92f79b316e9810f24aaf7d69a300ee Mon Sep 17 00:00:00 2001 From: Christian Feldmann Date: Wed, 20 Mar 2024 13:13:15 +0100 Subject: [PATCH 8/8] Also update actions/upload-artifact to v4 --- .github/workflows/Build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml index f79227b5a..e2acbfaec 100644 --- a/.github/workflows/Build.yml +++ b/.github/workflows/Build.yml @@ -132,7 +132,7 @@ jobs: cp YUView.AppImage $GITHUB_WORKSPACE/artifacts/ if: matrix.os == 'ubuntu-20.04' - name: Upload Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{matrix.ARTIFACT_NAME}} path: artifacts @@ -227,12 +227,12 @@ jobs: cp deployment/wix/bin/Release/YUViewSetup.msi ./ if: matrix.auto_update == true - name: Upload Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{matrix.ARTIFACT_NAME}} path: artifacts - name: Upload Windows installer Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: YUViewSetup.msi path: ./YUViewSetup.msi