From a4e26a7a5170fb52cb790dceb3c9cda55d87ada1 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sat, 3 Feb 2024 19:19:28 +0100 Subject: [PATCH] Update github actions Based on obs-plugintemplate@68e9fcd --- .../{action.yml => action.yaml} | 13 +- .github/actions/build-plugin/action.yaml | 110 +++++ .github/actions/build-plugin/action.yml | 89 ---- .github/actions/package-plugin/action.yaml | 117 +++++ .github/actions/package-plugin/action.yml | 109 ----- .github/actions/run-clang-format/action.yaml | 61 +++ .github/actions/run-cmake-format/action.yaml | 59 +++ .github/actions/run-tests/action.yml | 37 -- .../setup-macos-codesigning/action.yaml | 154 ++++++ .github/scripts/.Aptfile | 6 +- .github/scripts/.Brewfile | 2 +- .github/scripts/.Wingetfile | 3 +- .github/scripts/.build-deps.zsh | 125 ++++- .github/scripts/.build.zsh | 244 ++++++---- .github/scripts/.package.zsh | 246 ++++++---- .github/scripts/Build-Deps-Windows.ps1 | 82 +++- .github/scripts/Build-Windows.ps1 | 108 ++-- .github/scripts/Package-Windows.ps1 | 60 ++- .../scripts/{build-linux.zsh => build-linux} | 0 .github/scripts/build-linux.sh | 13 - .../scripts/{build-macos.zsh => build-macos} | 0 .github/scripts/check-changes.sh | 11 - .github/scripts/check-cmake.sh | 53 -- .github/scripts/check-format.sh | 60 --- .../{package-linux.zsh => package-linux} | 0 .github/scripts/package-linux.sh | 13 - .../{package-macos.zsh => package-macos} | 0 .github/scripts/utils.pwsh/Check-Git.ps1 | 25 - .../utils.pwsh/Install-BuildDependencies.ps1 | 24 +- .../scripts/utils.pwsh/Invoke-GitCheckout.ps1 | 117 ----- .github/scripts/utils.pwsh/Logger.ps1 | 32 +- .github/scripts/utils.pwsh/Setup-Host.ps1 | 103 ---- .github/scripts/utils.pwsh/Setup-Obs.ps1 | 84 ---- .github/scripts/utils.zsh/check_linux | 37 +- .github/scripts/utils.zsh/check_macos | 8 +- .github/scripts/utils.zsh/check_packages | 52 -- .github/scripts/utils.zsh/log_debug | 2 +- .github/scripts/utils.zsh/log_error | 2 +- .github/scripts/utils.zsh/log_group | 16 + .github/scripts/utils.zsh/log_info | 0 .github/scripts/utils.zsh/log_output | 0 .github/scripts/utils.zsh/log_status | 0 .github/scripts/utils.zsh/log_warning | 2 +- .github/scripts/utils.zsh/mkcd | 0 .github/scripts/utils.zsh/read_codesign | 4 +- .../scripts/utils.zsh/read_codesign_installer | 2 +- .github/scripts/utils.zsh/read_codesign_pass | 13 +- .github/scripts/utils.zsh/read_codesign_team | 7 + .github/scripts/utils.zsh/read_codesign_user | 4 +- .github/scripts/utils.zsh/set_loglevel | 0 .github/scripts/utils.zsh/setup_ccache | 32 +- .github/scripts/utils.zsh/setup_linux | 69 +-- .github/scripts/utils.zsh/setup_macos | 127 ----- .github/scripts/utils.zsh/setup_obs | 122 ----- .github/workflows/build-debian.yml | 4 +- .github/workflows/build-project.yaml | 301 ++++++++++++ .github/workflows/check-format.yaml | 27 + .github/workflows/dispatch.yaml | 18 + .github/workflows/locale-check.yml | 4 +- .github/workflows/main.yml | 460 ------------------ .github/workflows/pr-pull.yaml | 27 + .github/workflows/push.yaml | 122 +++++ .../CI/check-locale.py | 0 {CI => build-aux/CI}/linux/debian/changelog | 0 {CI => build-aux/CI}/linux/debian/control | 0 {CI => build-aux/CI}/linux/debian/copyright | 0 {CI => build-aux/CI}/linux/debian/rules | 0 .../CI}/linux/debian/source/format | 0 68 files changed, 1758 insertions(+), 1864 deletions(-) rename .github/actions/build-dependencies/{action.yml => action.yaml} (80%) create mode 100644 .github/actions/build-plugin/action.yaml delete mode 100644 .github/actions/build-plugin/action.yml create mode 100644 .github/actions/package-plugin/action.yaml delete mode 100644 .github/actions/package-plugin/action.yml create mode 100644 .github/actions/run-clang-format/action.yaml create mode 100644 .github/actions/run-cmake-format/action.yaml delete mode 100644 .github/actions/run-tests/action.yml create mode 100644 .github/actions/setup-macos-codesigning/action.yaml rename .github/scripts/{build-linux.zsh => build-linux} (100%) delete mode 100755 .github/scripts/build-linux.sh rename .github/scripts/{build-macos.zsh => build-macos} (100%) delete mode 100755 .github/scripts/check-changes.sh delete mode 100755 .github/scripts/check-cmake.sh delete mode 100755 .github/scripts/check-format.sh rename .github/scripts/{package-linux.zsh => package-linux} (100%) delete mode 100755 .github/scripts/package-linux.sh rename .github/scripts/{package-macos.zsh => package-macos} (100%) delete mode 100644 .github/scripts/utils.pwsh/Check-Git.ps1 delete mode 100644 .github/scripts/utils.pwsh/Invoke-GitCheckout.ps1 delete mode 100644 .github/scripts/utils.pwsh/Setup-Host.ps1 delete mode 100644 .github/scripts/utils.pwsh/Setup-Obs.ps1 mode change 100755 => 100644 .github/scripts/utils.zsh/check_linux mode change 100755 => 100644 .github/scripts/utils.zsh/check_macos delete mode 100755 .github/scripts/utils.zsh/check_packages mode change 100755 => 100644 .github/scripts/utils.zsh/log_debug mode change 100755 => 100644 .github/scripts/utils.zsh/log_error create mode 100644 .github/scripts/utils.zsh/log_group mode change 100755 => 100644 .github/scripts/utils.zsh/log_info mode change 100755 => 100644 .github/scripts/utils.zsh/log_output mode change 100755 => 100644 .github/scripts/utils.zsh/log_status mode change 100755 => 100644 .github/scripts/utils.zsh/log_warning mode change 100755 => 100644 .github/scripts/utils.zsh/mkcd mode change 100755 => 100644 .github/scripts/utils.zsh/read_codesign mode change 100755 => 100644 .github/scripts/utils.zsh/read_codesign_installer mode change 100755 => 100644 .github/scripts/utils.zsh/read_codesign_pass create mode 100644 .github/scripts/utils.zsh/read_codesign_team mode change 100755 => 100644 .github/scripts/utils.zsh/read_codesign_user mode change 100755 => 100644 .github/scripts/utils.zsh/set_loglevel mode change 100755 => 100644 .github/scripts/utils.zsh/setup_ccache mode change 100755 => 100644 .github/scripts/utils.zsh/setup_linux delete mode 100755 .github/scripts/utils.zsh/setup_macos delete mode 100755 .github/scripts/utils.zsh/setup_obs create mode 100644 .github/workflows/build-project.yaml create mode 100644 .github/workflows/check-format.yaml create mode 100644 .github/workflows/dispatch.yaml delete mode 100644 .github/workflows/main.yml create mode 100644 .github/workflows/pr-pull.yaml create mode 100644 .github/workflows/push.yaml rename CI/checkLocale.py => build-aux/CI/check-locale.py (100%) rename {CI => build-aux/CI}/linux/debian/changelog (100%) rename {CI => build-aux/CI}/linux/debian/control (100%) rename {CI => build-aux/CI}/linux/debian/copyright (100%) rename {CI => build-aux/CI}/linux/debian/rules (100%) rename {CI => build-aux/CI}/linux/debian/source/format (100%) diff --git a/.github/actions/build-dependencies/action.yml b/.github/actions/build-dependencies/action.yaml similarity index 80% rename from .github/actions/build-dependencies/action.yml rename to .github/actions/build-dependencies/action.yaml index 1aa77e48..838f1fd2 100644 --- a/.github/actions/build-dependencies/action.yml +++ b/.github/actions/build-dependencies/action.yaml @@ -26,7 +26,7 @@ runs: - name: Restore cached dependencies id: restore-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ${{ env.DEP_DIR }} key: ${{ env.DEP_DIR }}-${{ runner.os }}-${{ inputs.target }} @@ -37,12 +37,13 @@ runs: run: | build_args=( -c ${{ inputs.config }} - -t macos-${{ inputs.target }} + -t ${{ inputs.target }} + -o ${{ env.DEP_DIR }} ) if (( ${+CI} && ${+RUNNER_DEBUG} )) build_args+=(--debug) - ${{ inputs.workingDirectory }}/.github/scripts/build-deps-macos.zsh -o ${{ env.DEP_DIR }} ${build_args} + .github/scripts/build-deps-macos.zsh -o ${{ env.DEP_DIR }} ${build_args} - name: Run Linux Build if: ${{ runner.os == 'Linux' && steps.restore-cache.outputs.cache-hit != 'true' }} @@ -57,7 +58,7 @@ runs: build_args+=(--debug) fi - ${{ inputs.workingDirectory }}/.github/scripts/build-deps-linux.sh -o ${{ env.DEP_DIR }} "${build_args[@]}" + .github/scripts/build-deps-linux.sh -o ${{ env.DEP_DIR }} "${build_args[@]}" - name: Run Windows Build if: ${{ runner.os == 'Windows' && steps.restore-cache.outputs.cache-hit != 'true' }} @@ -66,7 +67,7 @@ runs: $BuildArgs = @{ Target = '${{ inputs.target }}' Configuration = '${{ inputs.config }}' - CMakeGenerator = '${{ inputs.visualStudio }}' + OutDirName = '${{ env.DEP_DIR }}' } if ( ( Test-Path env:CI ) -and ( Test-Path env:RUNNER_DEBUG ) ) { @@ -75,5 +76,5 @@ runs: } } - ${{ inputs.workingDirectory }}/.github/scripts/Build-Deps-Windows.ps1 -OutDirName ${{ env.DEP_DIR }} @BuildArgs + .github/scripts/Build-Deps-Windows.ps1 -OutDirName ${{ env.DEP_DIR }} @BuildArgs diff --git a/.github/actions/build-plugin/action.yaml b/.github/actions/build-plugin/action.yaml new file mode 100644 index 00000000..0fde0ed8 --- /dev/null +++ b/.github/actions/build-plugin/action.yaml @@ -0,0 +1,110 @@ +name: 'Set up and build plugin' +description: 'Builds the plugin for specified architecture and build config' +inputs: + target: + description: 'Target architecture for dependencies' + required: true + config: + description: 'Build configuration' + required: false + default: 'RelWithDebInfo' + codesign: + description: 'Enable codesigning (macOS only)' + required: false + default: 'false' + codesignIdent: + description: 'Developer ID for application codesigning (macOS only)' + required: false + default: '-' + workingDirectory: + description: 'Working directory for packaging' + required: false + default: ${{ github.workspace }} +runs: + using: composite + steps: + - name: Run macOS Build + if: runner.os == 'macOS' + shell: zsh --no-rcs --errexit --pipefail {0} + working-directory: ${{ inputs.workingDirectory }} + env: + CODESIGN_IDENT: ${{ inputs.codesignIdent }} + CODESIGN_TEAM: ${{ inputs.codesignTeam }} + run: | + : Run macOS Build + + local -a build_args=( + --config ${{ inputs.config }} + --dep ${{ env.DEP_DIR }} + ) + if (( ${+RUNNER_DEBUG} )) build_args+=(--debug) + + if [[ '${{ inputs.codesign }}' == 'true' ]] build_args+=(--codesign) + + .github/scripts/build-macos ${build_args} + + - name: Install Dependencies 🛍️ + if: runner.os == 'Linux' + shell: bash + run: | + : Install Dependencies 🛍️ + echo ::group::Install Dependencies + eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" + echo "/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH + brew install --quiet zsh + echo ::endgroup:: + + - name: Run Ubuntu Build + if: runner.os == 'Linux' + shell: zsh --no-rcs --errexit --pipefail {0} + working-directory: ${{ inputs.workingDirectory }} + run: | + : Run Ubuntu Build + + local -a build_args=( + --target linux-${{ inputs.target }} + --config ${{ inputs.config }} + ) + if (( ${+RUNNER_DEBUG} )) build_args+=(--debug) + + .github/scripts/build-linux ${build_args} + + - name: Run Windows Build + if: runner.os == 'Windows' + shell: pwsh + run: | + # Run Windows Build + if ( $Env:RUNNER_DEBUG -ne $null ) { + Set-PSDebug -Trace 1 + } + + $BuildArgs = @{ + Target = '${{ inputs.target }}' + Configuration = '${{ inputs.config }}' + ADVSSDepName = '${{ env.DEP_DIR }}' + } + + .github/scripts/Build-Windows.ps1 @BuildArgs + + - name: Create Summary 📊 + if: contains(fromJSON('["Linux", "macOS"]'),runner.os) + shell: zsh --no-rcs --errexit --pipefail {0} + env: + CCACHE_CONFIGPATH: ${{ inputs.workingDirectory }}/.ccache.conf + run: | + : Create Summary 📊 + + local -a ccache_data + if (( ${+RUNNER_DEBUG} )) { + setopt XTRACE + ccache_data=("${(fA)$(ccache -s -vv)}") + } else { + ccache_data=("${(fA)$(ccache -s)}") + } + + print '### ${{ runner.os }} Ccache Stats (${{ inputs.target }})' >> $GITHUB_STEP_SUMMARY + print '```' >> $GITHUB_STEP_SUMMARY + for line (${ccache_data}) { + print ${line} >> $GITHUB_STEP_SUMMARY + } + print '```' >> $GITHUB_STEP_SUMMARY diff --git a/.github/actions/build-plugin/action.yml b/.github/actions/build-plugin/action.yml deleted file mode 100644 index 9405cae1..00000000 --- a/.github/actions/build-plugin/action.yml +++ /dev/null @@ -1,89 +0,0 @@ -name: 'Setup and build plugin' -description: 'Builds the plugin for specified architecture and build config.' -inputs: - target: - description: 'Build target for dependencies' - required: true - config: - description: 'Build configuration' - required: false - default: 'Release' - codesign: - description: 'Enable codesigning (macOS only)' - required: false - default: 'false' - codesignIdent: - description: 'Developer ID for application codesigning (macOS only)' - required: false - default: '-' - visualStudio: - description: 'Visual Studio version (Windows only)' - required: false - default: 'Visual Studio 16 2019' - portable: - description: 'Set portable mode (Linux only)' - required: false - default: 'false' - workingDirectory: - description: 'Working directory for packaging' - required: false - default: ${{ github.workspace }} -runs: - using: 'composite' - steps: - - name: Setup cmake - uses: jwlawson/actions-setup-cmake@v1.13 - with: - cmake-version: '3.24.x' - - name: Run macOS Build - if: ${{ runner.os == 'macOS' }} - shell: zsh {0} - env: - CODESIGN_IDENT: ${{ inputs.codesignIdent }} - run: | - build_args=( - -c ${{ inputs.config }} - -t macos-${{ inputs.target }} - ) - - if [[ '${{ inputs.codesign }}' == 'true' ]] build_args+=(-s) - if (( ${+CI} && ${+RUNNER_DEBUG} )) build_args+=(--debug) - - ${{ inputs.workingDirectory }}/.github/scripts/build-macos.zsh -d ${{ env.DEP_DIR }} ${build_args} - - - name: Run Linux Build - if: ${{ runner.os == 'Linux' }} - shell: bash - run: | - build_args=( - -c ${{ inputs.config }} - -t linux-${{ inputs.target }} - ) - - if [[ -n "${CI}" && -n "${RUNNER_DEBUG}" ]]; then - build_args+=(--debug) - fi - - if [[ '${{ inputs.portable }}' == 'true' ]]; then - build_args+=(-p) - fi - - ${{ inputs.workingDirectory }}/.github/scripts/build-linux.sh -d ${{ env.DEP_DIR }} "${build_args[@]}" - - - name: Run Windows Build - if: ${{ runner.os == 'Windows' }} - shell: pwsh - run: | - $BuildArgs = @{ - Target = '${{ inputs.target }}' - Configuration = '${{ inputs.config }}' - CMakeGenerator = '${{ inputs.visualStudio }}' - } - - if ( ( Test-Path env:CI ) -and ( Test-Path env:RUNNER_DEBUG ) ) { - $BuildArgs += @{ - Debug = $true - } - } - - ${{ inputs.workingDirectory }}/.github/scripts/Build-Windows.ps1 -ADVSSDepName ${{ env.DEP_DIR }} @BuildArgs diff --git a/.github/actions/package-plugin/action.yaml b/.github/actions/package-plugin/action.yaml new file mode 100644 index 00000000..13e78071 --- /dev/null +++ b/.github/actions/package-plugin/action.yaml @@ -0,0 +1,117 @@ +name: 'Package plugin' +description: 'Packages the plugin for specified architecture and build config.' +inputs: + target: + description: 'Build target for dependencies' + required: true + config: + description: 'Build configuration' + required: false + default: 'RelWithDebInfo' + codesign: + description: 'Enable codesigning (macOS only)' + required: false + default: 'false' + notarize: + description: 'Enable notarization (macOS only)' + required: false + default: 'false' + codesignIdent: + description: 'Developer ID for application codesigning (macOS only)' + required: false + default: '-' + installerIdent: + description: 'Developer ID for installer package codesigning (macOS only)' + required: false + default: '' + codesignTeam: + description: 'Developer team for codesigning (macOS only)' + required: false + default: '' + codesignUser: + description: 'Apple ID username for notarization (macOS only)' + required: false + default: '' + codesignPass: + description: 'Apple ID password for notarization (macOS only)' + required: false + default: '' + package: + description: 'Create Windows or macOS installation package' + required: false + default: 'true' + workingDirectory: + description: 'Working directory for packaging' + required: false + default: ${{ github.workspace }} +runs: + using: composite + steps: + - name: Run macOS Packaging + if: runner.os == 'macOS' + shell: zsh --no-rcs --errexit --pipefail {0} + working-directory: ${{ inputs.workingDirectory }} + env: + CODESIGN_IDENT: ${{ inputs.codesignIdent }} + CODESIGN_IDENT_INSTALLER: ${{ inputs.installerIdent }} + CODESIGN_TEAM: ${{ inputs.codesignTeam }} + CODESIGN_IDENT_USER: ${{ inputs.codesignUser }} + CODESIGN_IDENT_PASS: ${{ inputs.codesignPass }} + run: | + : Run macOS Packaging + + local -a package_args=(--config ${{ inputs.config }}) + if (( ${+RUNNER_DEBUG} )) package_args+=(--debug) + + if [[ '${{ inputs.codesign }}' == 'true' ]] package_args+=(--codesign) + if [[ '${{ inputs.notarize }}' == 'true' ]] package_args+=(--notarize) + if [[ '${{ inputs.package }}' == 'true' ]] package_args+=(--package) + + .github/scripts/package-macos ${package_args} + + - name: Install Dependencies 🛍️ + if: runner.os == 'Linux' + shell: bash + run: | + : Install Dependencies 🛍️ + echo ::group::Install Dependencies + eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" + echo "/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH + brew install --quiet zsh + echo ::endgroup:: + + - name: Run Ubuntu Packaging + if: runner.os == 'Linux' + shell: zsh --no-rcs --errexit --pipefail {0} + working-directory: ${{ inputs.workingDirectory }} + run: | + : Run Ubuntu Packaging + package_args=( + --target linux-${{ inputs.target }} + --config ${{ inputs.config }} + ) + if (( ${+RUNNER_DEBUG} )) build_args+=(--debug) + + if [[ '${{ inputs.package }}' == 'true' ]] package_args+=(--package) + + .github/scripts/package-linux ${package_args} + + - name: Run Windows Packaging + if: runner.os == 'Windows' + shell: pwsh + run: | + # Run Windows Packaging + if ( $Env:RUNNER_DEBUG -ne $null ) { + Set-PSDebug -Trace 1 + } + + $PackageArgs = @{ + Target = '${{ inputs.target }}' + Configuration = '${{ inputs.config }}' + } + + if ( '${{ inputs.package }}' -eq 'true' ) { + $PackageArgs += @{BuildInstaller = $true} + } + + .github/scripts/Package-Windows.ps1 @PackageArgs diff --git a/.github/actions/package-plugin/action.yml b/.github/actions/package-plugin/action.yml deleted file mode 100644 index dbe5f9da..00000000 --- a/.github/actions/package-plugin/action.yml +++ /dev/null @@ -1,109 +0,0 @@ -name: 'Package plugin' -description: 'Packages the plugin for specified architecture and build config.' -inputs: - target: - description: 'Build target for dependencies' - required: true - config: - description: 'Build configuration' - required: false - default: 'Release' - codesign: - description: 'Enable codesigning (macOS only)' - required: false - default: 'false' - notarize: - description: 'Enable notarization (macOS only)' - required: false - default: 'false' - codesignIdent: - description: 'Developer ID for application codesigning (macOS only)' - required: false - default: '-' - installerIdent: - description: 'Developer ID for installer package codesigning (macOS only)' - required: false - default: '' - codesignUser: - description: 'Apple ID username for notarization (macOS only)' - required: false - default: '' - codesignPass: - description: 'Apple ID password for notarization (macOS only)' - required: false - default: '' - createInstaller: - description: 'Create InnoSetup installer (Windows only)' - required: false - default: 'false' - portable: - description: 'Create deb package / portable archive (Linux only)' - required: false - default: 'false' - workingDirectory: - description: 'Working directory for packaging' - required: false - default: ${{ github.workspace }} -runs: - using: 'composite' - steps: - - name: Run macOS packaging - if: ${{ runner.os == 'macOS' }} - shell: zsh {0} - env: - CODESIGN_IDENT: ${{ inputs.codesignIdent }} - CODESIGN_IDENT_INSTALLER: ${{ inputs.installerIdent }} - CODESIGN_IDENT_USER: ${{ inputs.codesignUser }} - CODESIGN_IDENT_PASS: ${{ inputs.codesignPass }} - run: | - package_args=( - -c ${{ inputs.config }} - -t macos-${{ inputs.target }} - ) - - if [[ '${{ inputs.codesign }}' == 'true' ]] package_args+=(-s) - if [[ '${{ inputs.notarize }}' == 'true' ]] package_args+=(-n) - if (( ${+CI} && ${+RUNNER_DEBUG} )) build_args+=(--debug) - - package_args+=(-z) - - ${{ inputs.workingDirectory }}/.github/scripts/package-macos.zsh ${package_args} - - - name: Run Linux packaging - if: ${{ runner.os == 'Linux' }} - shell: bash - run: | - package_args=( - -c ${{ inputs.config }} - -t linux-${{ inputs.target }} - ) - if [[ -n "${CI}" && -n "${RUNNER_DEBUG}" ]]; then - build_args+=(--debug) - fi - - if [[ '${{ inputs.portable }}' == 'true' ]]; then - package_args+=(-z) - fi - - ${{ inputs.workingDirectory }}/.github/scripts/package-linux.sh "${package_args[@]}" - - - name: Run Windows packaging - if: ${{ runner.os == 'Windows' }} - shell: pwsh - run: | - $PackageArgs = @{ - Target = '${{ inputs.target }}' - Configuration = '${{ inputs.config }}' - } - - if ( '${{ inputs.createInstaller }}' -eq 'true' ) { - $PackageArgs += @{BuildInstaller = $true} - } - - if ( ( Test-Path env:CI ) -and ( Test-Path env:RUNNER_DEBUG ) ) { - $BuildArgs += @{ - Debug = $true - } - } - - ${{ inputs.workingDirectory }}/.github/scripts/Package-Windows.ps1 @PackageArgs diff --git a/.github/actions/run-clang-format/action.yaml b/.github/actions/run-clang-format/action.yaml new file mode 100644 index 00000000..9e873b4d --- /dev/null +++ b/.github/actions/run-clang-format/action.yaml @@ -0,0 +1,61 @@ +name: Run clang-format +description: Runs clang-format and checks for any changes introduced by it +inputs: + failCondition: + description: Controls whether failed checks also fail the workflow run + required: false + default: 'never' + workingDirectory: + description: Working directory for checks + required: false + default: ${{ github.workspace }} +runs: + using: composite + steps: + - name: Check Runner Operating System 🏃‍♂️ + if: runner.os == 'Windows' + shell: bash + run: | + : Check Runner Operating System 🏃‍♂️ + echo "::notice::run-clang-format action requires a macOS-based or Linux-based runner." + exit 2 + + - name: Install Dependencies 🛍️ + if: runner.os == 'Linux' + shell: bash + run: | + : Install Dependencies 🛍️ + echo ::group::Install Dependencies + eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" + echo "/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH + echo "/home/linuxbrew/.linuxbrew/opt/clang-format@16/bin" >> $GITHUB_PATH + brew install --quiet zsh + echo ::endgroup:: + + - name: Run clang-format 🐉 + id: result + shell: zsh --no-rcs --errexit --pipefail {0} + working-directory: ${{ inputs.workingDirectory }} + env: + GITHUB_EVENT_FORCED: ${{ github.event.forced }} + GITHUB_REF_BEFORE: ${{ github.event.before }} + run: | + : Run clang-format 🐉 + if (( ${+RUNNER_DEBUG} )) setopt XTRACE + + local -a changes=($(git diff --name-only HEAD~1 HEAD)) + case ${GITHUB_EVENT_NAME} { + pull_request) changes=($(git diff --name-only origin/${GITHUB_BASE_REF} HEAD)) ;; + push) if [[ ${GITHUB_EVENT_FORCED} != true ]] changes=($(git diff --name-only ${GITHUB_REF_BEFORE} HEAD)) ;; + *) ;; + } + + if (( ${changes[(I)(*.c|*.h|*.cpp|*.hpp|*.m|*.mm)]} )) { + echo ::group::Install clang-format-16 + brew install --quiet obsproject/tools/clang-format@16 + echo ::endgroup:: + + echo ::group::Run clang-format-16 + ./build-aux/run-clang-format --fail-${{ inputs.failCondition }} --check + echo ::endgroup:: + } diff --git a/.github/actions/run-cmake-format/action.yaml b/.github/actions/run-cmake-format/action.yaml new file mode 100644 index 00000000..40360263 --- /dev/null +++ b/.github/actions/run-cmake-format/action.yaml @@ -0,0 +1,59 @@ +name: Run cmake-format +description: Runs cmake-format and checks for any changes introduced by it +inputs: + failCondition: + description: Controls whether failed checks also fail the workflow run + required: false + default: 'never' + workingDirectory: + description: Working directory for checks + required: false + default: ${{ github.workspace }} +runs: + using: composite + steps: + - name: Check Runner Operating System 🏃‍♂️ + if: runner.os == 'Windows' + shell: bash + run: | + : Check Runner Operating System 🏃‍♂️ + echo "::notice::run-cmake-format action requires a macOS-based or Linux-based runner." + exit 2 + + - name: Install Dependencies 🛍️ + if: runner.os == 'Linux' + shell: bash + run: | + : Install Dependencies 🛍️ + echo ::group::Install Dependencies + eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" + echo "/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH + brew install --quiet zsh + echo ::endgroup:: + + - name: Run cmake-format 🎛️ + id: result + shell: zsh --no-rcs --errexit --pipefail {0} + working-directory: ${{ github.workspace }} + env: + GITHUB_EVENT_FORCED: ${{ github.event.forced }} + GITHUB_REF_BEFORE: ${{ github.event.before }} + run: | + : Run cmake-format 🎛️ + if (( ${+RUNNER_DEBUG} )) setopt XTRACE + + local -a changes=($(git diff --name-only HEAD~1 HEAD)) + case ${GITHUB_EVENT_NAME} { + pull_request) changes=($(git diff --name-only origin/${GITHUB_BASE_REF} HEAD)) ;; + push) if [[ ${GITHUB_EVENT_FORCED} != true ]] changes=($(git diff --name-only ${GITHUB_REF_BEFORE} HEAD)) ;; + *) ;; + } + + if (( ${changes[(I)*.cmake|*CMakeLists.txt]} )) { + echo ::group::Install cmakelang + pip3 install cmakelang + echo ::endgroup:: + echo ::group::Run cmake-format + ./build-aux/run-cmake-format --fail-${{ inputs.failCondition }} --check + echo ::endgroup:: + } diff --git a/.github/actions/run-tests/action.yml b/.github/actions/run-tests/action.yml deleted file mode 100644 index 91332fea..00000000 --- a/.github/actions/run-tests/action.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: 'Package plugin' -description: 'Packages the plugin for specified architecture and build config.' -inputs: - target: - description: 'Build target' - required: true - workingDirectory: - description: 'Working directory' - required: false - default: ${{ github.workspace }} -runs: - using: 'composite' - steps: - - name: Run macOS tests - if: ${{ runner.os == 'macOS' }} - shell: zsh {0} - run: | - if [[ '${{ inputs.target }}' != 'x86_64' ]]; then - echo tests skipped! - exit 0 - fi - ${{ inputs.workingDirectory }}/build_x86_64/tests/advanced-scene-switcher-tests - - - name: Run Linux packaging - if: ${{ runner.os == 'Linux' }} - shell: bash - run: | - if [[ '${{ inputs.target }}' != 'x86_64' ]]; then - exit 0 - fi - ${{ inputs.workingDirectory }}/build_x86_64/tests/advanced-scene-switcher-tests - - - name: Run Windows packaging - if: ${{ runner.os == 'Windows' }} - shell: pwsh - run: | - ${{ inputs.workingDirectory }}/build_x64/tests/RelWithDebInfo/advanced-scene-switcher-tests.exe diff --git a/.github/actions/setup-macos-codesigning/action.yaml b/.github/actions/setup-macos-codesigning/action.yaml new file mode 100644 index 00000000..5f24114b --- /dev/null +++ b/.github/actions/setup-macos-codesigning/action.yaml @@ -0,0 +1,154 @@ +name: Set up macOS codesigning +description: Sets up code signing certificates, provisioning profiles, and notarization information +inputs: + codesignIdentity: + description: Codesigning identity + required: true + installerIdentity: + description: Codesigning identity for package installer + required: false + codesignCertificate: + description: PKCS12 certificate in base64 format + required: true + certificatePassword: + description: Password required to install PKCS12 certificate + required: true + keychainPassword: + description: Password to use for temporary keychain + required: false + notarizationUser: + description: Apple ID to use for notarization + required: false + notarizationPassword: + description: Application password for notarization + provisioningProfile: + description: Provisioning profile in base64 format + required: false +outputs: + haveCodesignIdent: + description: True if necessary codesigning credentials were found + value: ${{ steps.codesign.outputs.haveCodesignIdent }} + haveProvisioningProfile: + description: True if necessary provisioning profile credentials were found + value: ${{ steps.provisioning.outputs.haveProvisioningProfile }} + haveNotarizationUser: + description: True if necessary notarization credentials were found + value: ${{ steps.notarization.outputs.haveNotarizationUser }} + codesignIdent: + description: Codesigning identity + value: ${{ steps.codesign.outputs.codesignIdent }} + installerIdent: + description: Codesigning identity for package installer + value: ${{ steps.codesign.outputs.installerIdent }} + codesignTeam: + description: Codesigning team + value: ${{ steps.codesign.outputs.codesignTeam }} +runs: + using: composite + steps: + - name: Check Runner Operating System 🏃‍♂️ + if: runner.os != 'macOS' + shell: bash + run: | + : Check Runner Operating System 🏃‍♂️ + echo "setup-macos-codesigning action requires a macOS-based runner." + exit 2 + + - name: macOS Codesigning ✍️ + shell: zsh --no-rcs --errexit --pipefail {0} + id: codesign + env: + MACOS_SIGNING_IDENTITY: ${{ inputs.codesignIdentity }} + MACOS_SIGNING_IDENTITY_INSTALLER: ${{ inputs.installerIdentity}} + MACOS_SIGNING_CERT: ${{ inputs.codesignCertificate }} + MAOCS_SIGNING_CERT_PASSWORD: ${{ inputs.certificatePassword }} + MACOS_KEYCHAIN_PASSWORD: ${{ inputs.keychainPassword }} + run: | + : macOS Codesigning ✍️ + if (( ${+RUNNER_DEBUG} )) setopt XTRACE + + if [[ ${MACOS_SIGNING_IDENTITY} && ${MACOS_SIGNING_IDENTITY_INSTALLER} && ${MACOS_SIGNING_CERT} ]] { + print 'haveCodesignIdent=true' >> $GITHUB_OUTPUT + + local -r certificate_path="${RUNNER_TEMP}/build_certificate.p12" + local -r keychain_path="${RUNNER_TEMP}/app-signing.keychain-db" + + print -n "${MACOS_SIGNING_CERT}" | base64 --decode --output="${certificate_path}" + + : "${MACOS_KEYCHAIN_PASSWORD:="$(print ${RANDOM} | shasum | head -c 32)"}" + + print '::group::Keychain setup' + security create-keychain -p "${MACOS_KEYCHAIN_PASSWORD}" ${keychain_path} + security set-keychain-settings -lut 21600 ${keychain_path} + security unlock-keychain -p "${MACOS_KEYCHAIN_PASSWORD}" ${keychain_path} + + security import "${certificate_path}" -P "${MAOCS_SIGNING_CERT_PASSWORD}" -A \ + -t cert -f pkcs12 -k ${keychain_path} \ + -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/xcrun + + security set-key-partition-list -S 'apple-tool:,apple:' -k "${MACOS_KEYCHAIN_PASSWORD}" \ + ${keychain_path} &> /dev/null + + security list-keychain -d user -s ${keychain_path} 'login-keychain' + print '::endgroup::' + + local -r team_id="${${MACOS_SIGNING_IDENTITY##* }//(\(|\))/}" + + print "codesignIdent=${MACOS_SIGNING_IDENTITY}" >> $GITHUB_OUTPUT + print "installerIdent=${MACOS_SIGNING_IDENTITY_INSTALLER}" >> $GITHUB_OUTPUT + print "MACOS_KEYCHAIN_PASSWORD=${MACOS_KEYCHAIN_PASSWORD}" >> $GITHUB_ENV + print "codesignTeam=${team_id}" >> $GITHUB_OUTPUT + } else { + print 'haveCodesignIdent=false' >> $GITHUB_OUTPUT + } + + - name: Provisioning Profile 👤 + shell: zsh --no-rcs --errexit --pipefail {0} + id: provisioning + if: ${{ fromJSON(steps.codesign.outputs.haveCodesignIdent) }} + env: + MACOS_SIGNING_PROVISIONING_PROFILE: ${{ inputs.provisioningProfile }} + run: | + : Provisioning Profile 👤 + if (( ${+RUNNER_DEBUG} )) setopt XTRACE + + if [[ ${MACOS_SIGNING_PROVISIONING_PROFILE} ]] { + print 'haveProvisioningProfile=true' >> $GITHUB_OUTPUT + + local -r profile_path="${RUNNER_TEMP}/build_profile.provisionprofile" + print -n "${MACOS_SIGNING_PROVISIONING_PROFILE}" \ + | base64 --decode --output ${profile_path} + + print '::group::Provisioning Profile Setup' + mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles + security cms -D -i ${profile_path} -o ${RUNNER_TEMP}/build_profile.plist + local -r uuid="$(plutil -extract UUID raw ${RUNNER_TEMP}/build_profile.plist)" + local -r team_id="$(plutil -extract TeamIdentifier.0 raw -expect string ${RUNNER_TEMP}/build_profile.plist)" + + if [[ ${team_id} != '${{ steps.codesign.codesignTeam }}' ]] { + print '::notice::Code Signing team in provisioning profile does not match certificate.' + } + + cp ${profile_path} ~/Library/MobileDevice/Provisioning\ Profiles/${uuid}.provisionprofile + print "provisioningProfileUUID=${uuid}" >> $GITHUB_OUTPUT + print '::endgroup::' + } else { + print 'haveProvisioningProfile=false' >> $GITHUB_OUTPUT + } + + - name: Notarization 🧑‍💼 + shell: zsh --no-rcs --errexit --pipefail {0} + id: notarization + if: ${{ fromJSON(steps.codesign.outputs.haveCodesignIdent) }} + env: + MACOS_NOTARIZATION_USERNAME: ${{ inputs.notarizationUser }} + MACOS_NOTARIZATION_PASSWORD: ${{ inputs.notarizationPassword }} + run: | + : Notarization 🧑‍💼 + if (( ${+RUNNER_DEBUG} )) setopt XTRACE + + if [[ ${MACOS_NOTARIZATION_USERNAME} && ${MACOS_NOTARIZATION_PASSWORD} ]] { + print 'haveNotarizationUser=true' >> $GITHUB_OUTPUT + } else { + print 'haveNotarizationUser=false' >> $GITHUB_OUTPUT + } diff --git a/.github/scripts/.Aptfile b/.github/scripts/.Aptfile index fb1ef466..aee6ebe3 100644 --- a/.github/scripts/.Aptfile +++ b/.github/scripts/.Aptfile @@ -1,14 +1,12 @@ package 'cmake' package 'ccache' -package 'curl' package 'git' package 'jq' package 'ninja-build', bin: 'ninja' package 'pkg-config' -package 'clang' -package 'clang-format-13' +package 'libcurl4-openssl-dev' package 'libxtst-dev' package 'libxss-dev' package 'libopencv-dev' package 'libtesseract-dev' -package 'libprocps-dev' +package 'libprocps-dev' \ No newline at end of file diff --git a/.github/scripts/.Brewfile b/.github/scripts/.Brewfile index 6990ecf4..8368e3d2 100644 --- a/.github/scripts/.Brewfile +++ b/.github/scripts/.Brewfile @@ -3,4 +3,4 @@ brew "coreutils" brew "cmake" brew "git" brew "jq" -brew "ninja" +brew "xcbeautify" diff --git a/.github/scripts/.Wingetfile b/.github/scripts/.Wingetfile index 39ed656c..63f74231 100644 --- a/.github/scripts/.Wingetfile +++ b/.github/scripts/.Wingetfile @@ -1,4 +1,3 @@ -package '7zip.7zip', path: '7-zip', bin: '7z' package 'cmake', path: 'Cmake\bin', bin: 'cmake' package 'innosetup', path: 'Inno Setup 6', bin: 'iscc' -package 'OpenSSL', path: 'OpenSSL', bin: 'openssl' +package 'OpenSSL', path: 'OpenSSL', bin: 'openssl' \ No newline at end of file diff --git a/.github/scripts/.build-deps.zsh b/.github/scripts/.build-deps.zsh index 86bcda24..6b86d9cf 100755 --- a/.github/scripts/.build-deps.zsh +++ b/.github/scripts/.build-deps.zsh @@ -33,7 +33,6 @@ _trap_error() { build() { if (( ! ${+SCRIPT_HOME} )) typeset -g SCRIPT_HOME=${ZSH_ARGZERO:A:h} local host_os=${${(s:-:)ZSH_ARGZERO:t:r}[3]} - local target="${host_os}-${CPUTYPE}" local project_root=${SCRIPT_HOME:A:h:h} local buildspec_file="${project_root}/buildspec.json" @@ -53,8 +52,6 @@ build() { local -i _verbosity=1 local -r _version='1.0.0' local -r -a _valid_targets=( - macos-x86_64 - macos-arm64 macos-universal linux-x86_64 ) @@ -126,7 +123,7 @@ Usage: %B${functrace[1]%:*}%b