瀏覽代碼

remove .github/

Noah Vogt 8 小時之前
父節點
當前提交
ceb21cec8d
共有 34 個文件被更改,包括 0 次插入2370 次删除
  1. 0 109
      .github/actions/build-plugin/action.yaml
  2. 0 77
      .github/actions/check-changes/action.yaml
  3. 0 113
      .github/actions/package-plugin/action.yaml
  4. 0 60
      .github/actions/run-clang-format/action.yaml
  5. 0 59
      .github/actions/run-gersemi/action.yaml
  6. 0 159
      .github/actions/setup-macos-codesigning/action.yaml
  7. 0 6
      .github/scripts/.Aptfile
  8. 0 5
      .github/scripts/.Brewfile
  9. 0 86
      .github/scripts/Build-Windows.ps1
  10. 0 72
      .github/scripts/Package-Windows.ps1
  11. 0 153
      .github/scripts/build-macos
  12. 0 232
      .github/scripts/build-ubuntu
  13. 0 173
      .github/scripts/package-macos
  14. 0 176
      .github/scripts/package-ubuntu
  15. 0 29
      .github/scripts/utils.pwsh/Ensure-Location.ps1
  16. 0 40
      .github/scripts/utils.pwsh/Invoke-External.ps1
  17. 0 149
      .github/scripts/utils.pwsh/Logger.ps1
  18. 0 22
      .github/scripts/utils.zsh/check_macos
  19. 0 61
      .github/scripts/utils.zsh/check_ubuntu
  20. 0 1
      .github/scripts/utils.zsh/log_debug
  21. 0 1
      .github/scripts/utils.zsh/log_error
  22. 0 12
      .github/scripts/utils.zsh/log_group
  23. 0 1
      .github/scripts/utils.zsh/log_info
  24. 0 1
      .github/scripts/utils.zsh/log_output
  25. 0 1
      .github/scripts/utils.zsh/log_status
  26. 0 1
      .github/scripts/utils.zsh/log_warning
  27. 0 1
      .github/scripts/utils.zsh/mkcd
  28. 0 17
      .github/scripts/utils.zsh/set_loglevel
  29. 0 65
      .github/scripts/utils.zsh/setup_ubuntu
  30. 0 297
      .github/workflows/build-project.yaml
  31. 0 27
      .github/workflows/check-format.yaml
  32. 0 18
      .github/workflows/dispatch.yaml
  33. 0 27
      .github/workflows/pr-pull.yaml
  34. 0 119
      .github/workflows/push.yaml

+ 0 - 109
.github/actions/build-plugin/action.yaml

@@ -1,109 +0,0 @@
-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:
-        CCACHE_DIR: ${{ inputs.workingDirectory }}/.ccache
-        CODESIGN_IDENT: ${{ inputs.codesignIdent }}
-        CODESIGN_TEAM: ${{ inputs.codesignTeam }}
-      run: |
-        : Run macOS Build
-
-        local -a build_args=(--config ${{ inputs.config }})
-        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 }}
-      env:
-        CCACHE_DIR: ${{ inputs.workingDirectory }}/.ccache
-      run: |
-        : Run Ubuntu Build
-
-        local -a build_args=(
-          --target ubuntu-${{ inputs.target }}
-          --config ${{ inputs.config }}
-        )
-        if (( ${+RUNNER_DEBUG} )) build_args+=(--debug)
-
-        .github/scripts/build-ubuntu ${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 }}'
-        }
-
-        .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_DIR: ${{ inputs.workingDirectory }}/.ccache
-      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

+ 0 - 77
.github/actions/check-changes/action.yaml

@@ -1,77 +0,0 @@
-name: Check For Changed Files
-description: Checks for changed files compared to specific git reference and glob expression
-inputs:
-  baseRef:
-    description: Git reference to check against
-    required: false
-  ref:
-    description: Git reference to check with
-    required: false
-    default: HEAD
-  checkGlob:
-    description: Glob expression to limit check to specific files
-    required: false
-  useFallback:
-    description: Use fallback compare against prior commit
-    required: false
-    default: 'true'
-  diffFilter:
-    description: git diff-filter string to use
-    required: false
-    default: ''
-outputs:
-  hasChangedFiles:
-    value: ${{ steps.checks.outputs.hasChangedFiles }}
-    description: True if specified files were changed in comparison to specified git reference
-  changedFiles:
-    value: ${{ steps.checks.outputs.changedFiles }}
-    description: List of changed files
-runs:
-  using: composite
-  steps:
-    - name: Check For Changed Files ✅
-      shell: bash
-      id: checks
-      env:
-        GIT_BASE_REF: ${{ inputs.baseRef }}
-        GIT_REF: ${{ inputs.ref }}
-        GITHUB_EVENT_FORCED: ${{ github.event.forced }}
-        GITHUB_REF_BEFORE: ${{ github.event.before }}
-        USE_FALLBACK: ${{ inputs.useFallback }}
-        DIFF_FILTER: ${{ inputs.diffFilter }}
-      run: |
-        : Check for Changed Files ✅
-        if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
-        shopt -s extglob
-        shopt -s dotglob
-
-        if [[ "${GIT_BASE_REF}" ]]; then
-          if ! git cat-file -e "${GIT_BASE_REF}" &> /dev/null; then
-            echo "::warning::Provided base reference ${GIT_BASE_REF} is invalid"
-            if [[ "${USE_FALLBACK}" == 'true' ]]; then
-              GIT_BASE_REF='HEAD~1'
-            fi
-          fi
-        else
-          if ! git cat-file -e ${GITHUB_REF_BEFORE} &> /dev/null; then
-            GITHUB_REF_BEFORE='4b825dc642cb6eb9a060e54bf8d69288fbee4904'
-          fi
-
-          GIT_BASE_REF='HEAD~1'
-          case "${GITHUB_EVENT_NAME}" in
-            pull_request) GIT_BASE_REF="origin/${GITHUB_BASE_REF}" ;;
-            push) if [[ "${GITHUB_EVENT_FORCED}" != 'true' ]]; then GIT_BASE_REF="${GITHUB_REF_BEFORE}"; fi ;;
-            *) ;;
-          esac
-        fi
-
-        changes=($(git diff --name-only --diff-filter="${DIFF_FILTER}" ${GIT_BASE_REF} ${GIT_REF} -- ${{ inputs.checkGlob }}))
-
-        if (( ${#changes[@]} )); then
-          file_string="${changes[*]}"
-          echo "hasChangedFiles=true" >> $GITHUB_OUTPUT
-          echo "changedFiles=[\"${file_string// /\",\"}\"]" >> $GITHUB_OUTPUT
-        else
-          echo "hasChangedFiles=false" >> $GITHUB_OUTPUT
-          echo "changedFiles=[]" >> GITHUB_OUTPUT
-        fi

+ 0 - 113
.github/actions/package-plugin/action.yaml

@@ -1,113 +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: 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: '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 --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 ubuntu-${{ inputs.target }}
-          --config ${{ inputs.config }}
-        )
-        if (( ${+RUNNER_DEBUG} )) build_args+=(--debug)
-
-        if [[ '${{ inputs.package }}' == 'true' ]] package_args+=(--package)
-
-        .github/scripts/package-ubuntu ${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 }}'
-        }
-
-        .github/scripts/Package-Windows.ps1 @PackageArgs

+ 0 - 60
.github/actions/run-clang-format/action.yaml

@@ -1,60 +0,0 @@
-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: Check for Changed Files ✅
-      uses: ./.github/actions/check-changes
-      id: checks
-      with:
-        checkGlob: "'*.c' '*.h' '*.cpp' '*.hpp' '*.m' '*.mm'"
-        diffFilter: 'ACM'
-
-    - name: Install Dependencies 🛍️
-      if: runner.os == 'Linux' && fromJSON(steps.checks.outputs.hasChangedFiles)
-      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@17/bin" >> $GITHUB_PATH
-        brew install --quiet zsh
-        echo ::endgroup::
-
-    - name: Run clang-format 🐉
-      if: fromJSON(steps.checks.outputs.hasChangedFiles)
-      id: result
-      shell: zsh --no-rcs --errexit --pipefail {0}
-      working-directory: ${{ inputs.workingDirectory }}
-      env:
-        CHANGED_FILES: ${{ steps.checks.outputs.changedFiles }}
-      run: |
-        : Run clang-format 🐉
-        if (( ${+RUNNER_DEBUG} )) setopt XTRACE
-
-        print ::group::Install clang-format-17
-        brew install --quiet obsproject/tools/clang-format@17
-        print ::endgroup::
-
-        print ::group::Run clang-format-17
-        local -a changes=(${(s:,:)CHANGED_FILES//[\[\]\'\"]/})
-        ./build-aux/run-clang-format --fail-${{ inputs.failCondition }} --check ${changes}
-        print ::endgroup::

+ 0 - 59
.github/actions/run-gersemi/action.yaml

@@ -1,59 +0,0 @@
-name: Run gersemi
-description: Runs gersemi 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-gersemi action requires a macOS-based or Linux-based runner."
-        exit 2
-
-    - name: Check for Changed Files ✅
-      uses: ./.github/actions/check-changes
-      id: checks
-      with:
-        checkGlob: "'*.cmake' '*CMakeLists.txt'"
-        diffFilter: 'ACM'
-
-    - name: Install Dependencies 🛍️
-      if: runner.os == 'Linux' && fromJSON(steps.checks.outputs.hasChangedFiles)
-      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 gersemi 🎛️
-      if: fromJSON(steps.checks.outputs.hasChangedFiles)
-      id: result
-      shell: zsh --no-rcs --errexit --pipefail {0}
-      working-directory: ${{ github.workspace }}
-      env:
-        CHANGED_FILES: ${{ steps.checks.outputs.changedFiles }}
-      run: |
-        : Run gersemi 🎛️
-        if (( ${+RUNNER_DEBUG} )) setopt XTRACE
-
-        print ::group::Install gersemi
-        brew install --quiet obsproject/tools/gersemi
-        print ::endgroup::
-
-        print ::group::Run gersemi
-        local -a changes=(${(s:,:)CHANGED_FILES//[\[\]\'\"]/})
-        ./build-aux/run-gersemi --fail-${{ inputs.failCondition }} --check ${changes}
-        print ::endgroup::

+ 0 - 159
.github/actions/setup-macos-codesigning/action.yaml

@@ -1,159 +0,0 @@
-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 || steps.codesign.outputs.haveProvisioningProfile }}
-  provisioningProfileUUID:
-    description: UUID of imported provisioning profile
-    value: ${{ steps.provisioning.outputs.provisioningProfileUUID }}
-  haveNotarizationUser:
-    description: True if necessary notarization credentials were found
-    value: ${{ steps.notarization.outputs.haveNotarizationUser || steps.codesign.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 }}
-        MACOS_SIGNING_CERT_PASSWORD: ${{ inputs.certificatePassword }}
-        MACOS_KEYCHAIN_PASSWORD: ${{ inputs.keychainPassword }}
-      run: |
-        : macOS Code Signing ✍️
-        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 "${MACOS_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
-          print 'haveProvisioningProfile=false' >> $GITHUB_OUTPUT
-          print 'haveNotarizationUser=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.outputs.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 🧑‍💼
-      id: notarization
-      if: fromJSON(steps.codesign.outputs.haveCodesignIdent)
-      shell: zsh --no-rcs --errexit --pipefail {0}
-      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
-        }

+ 0 - 6
.github/scripts/.Aptfile

@@ -1,6 +0,0 @@
-package 'cmake'
-package 'ccache'
-package 'git'
-package 'jq'
-package 'ninja-build', bin: 'ninja'
-package 'pkg-config'

+ 0 - 5
.github/scripts/.Brewfile

@@ -1,5 +0,0 @@
-brew "ccache"
-brew "coreutils"
-brew "cmake"
-brew "jq"
-brew "xcbeautify"

+ 0 - 86
.github/scripts/Build-Windows.ps1

@@ -1,86 +0,0 @@
-[CmdletBinding()]
-param(
-    [ValidateSet('x64')]
-    [string] $Target = 'x64',
-    [ValidateSet('Debug', 'RelWithDebInfo', 'Release', 'MinSizeRel')]
-    [string] $Configuration = 'RelWithDebInfo'
-)
-
-$ErrorActionPreference = 'Stop'
-
-if ( $DebugPreference -eq 'Continue' ) {
-    $VerbosePreference = 'Continue'
-    $InformationPreference = 'Continue'
-}
-
-if ( $env:CI -eq $null ) {
-    throw "Build-Windows.ps1 requires CI environment"
-}
-
-if ( ! ( [System.Environment]::Is64BitOperatingSystem ) ) {
-    throw "A 64-bit system is required to build the project."
-}
-
-if ( $PSVersionTable.PSVersion -lt '7.2.0' ) {
-    Write-Warning 'The obs-studio PowerShell build script requires PowerShell Core 7. Install or upgrade your PowerShell version: https://aka.ms/pscore6'
-    exit 2
-}
-
-function Build {
-    trap {
-        Pop-Location -Stack BuildTemp -ErrorAction 'SilentlyContinue'
-        Write-Error $_
-        Log-Group
-        exit 2
-    }
-
-    $ScriptHome = $PSScriptRoot
-    $ProjectRoot = Resolve-Path -Path "$PSScriptRoot/../.."
-
-    $UtilityFunctions = Get-ChildItem -Path $PSScriptRoot/utils.pwsh/*.ps1 -Recurse
-
-    foreach($Utility in $UtilityFunctions) {
-        Write-Debug "Loading $($Utility.FullName)"
-        . $Utility.FullName
-    }
-
-    Push-Location -Stack BuildTemp
-    Ensure-Location $ProjectRoot
-
-    $CmakeArgs = @('--preset', "windows-ci-${Target}")
-    $CmakeBuildArgs = @('--build')
-    $CmakeInstallArgs = @()
-
-    if ( $DebugPreference -eq 'Continue' ) {
-        $CmakeArgs += ('--debug-output')
-        $CmakeBuildArgs += ('--verbose')
-        $CmakeInstallArgs += ('--verbose')
-    }
-
-    $CmakeBuildArgs += @(
-        '--preset', "windows-${Target}"
-        '--config', $Configuration
-        '--parallel'
-        '--', '/consoleLoggerParameters:Summary', '/noLogo'
-    )
-
-    $CmakeInstallArgs += @(
-        '--install', "build_${Target}"
-        '--prefix', "${ProjectRoot}/release/${Configuration}"
-        '--config', $Configuration
-    )
-
-    Log-Group "Configuring ${ProductName}..."
-    Invoke-External cmake @CmakeArgs
-
-    Log-Group "Building ${ProductName}..."
-    Invoke-External cmake @CmakeBuildArgs
-
-    Log-Group "Installing ${ProductName}..."
-    Invoke-External cmake @CmakeInstallArgs
-
-    Pop-Location -Stack BuildTemp
-    Log-Group
-}
-
-Build

+ 0 - 72
.github/scripts/Package-Windows.ps1

@@ -1,72 +0,0 @@
-[CmdletBinding()]
-param(
-    [ValidateSet('x64')]
-    [string] $Target = 'x64',
-    [ValidateSet('Debug', 'RelWithDebInfo', 'Release', 'MinSizeRel')]
-    [string] $Configuration = 'RelWithDebInfo'
-)
-
-$ErrorActionPreference = 'Stop'
-
-if ( $DebugPreference -eq 'Continue' ) {
-    $VerbosePreference = 'Continue'
-    $InformationPreference = 'Continue'
-}
-
-if ( $env:CI -eq $null ) {
-    throw "Package-Windows.ps1 requires CI environment"
-}
-
-if ( ! ( [System.Environment]::Is64BitOperatingSystem ) ) {
-    throw "Packaging script requires a 64-bit system to build and run."
-}
-
-if ( $PSVersionTable.PSVersion -lt '7.2.0' ) {
-    Write-Warning 'The packaging script requires PowerShell Core 7. Install or upgrade your PowerShell version: https://aka.ms/pscore6'
-    exit 2
-}
-
-function Package {
-    trap {
-        Write-Error $_
-        exit 2
-    }
-
-    $ScriptHome = $PSScriptRoot
-    $ProjectRoot = Resolve-Path -Path "$PSScriptRoot/../.."
-    $BuildSpecFile = "${ProjectRoot}/buildspec.json"
-
-    $UtilityFunctions = Get-ChildItem -Path $PSScriptRoot/utils.pwsh/*.ps1 -Recurse
-
-    foreach( $Utility in $UtilityFunctions ) {
-        Write-Debug "Loading $($Utility.FullName)"
-        . $Utility.FullName
-    }
-
-    $BuildSpec = Get-Content -Path ${BuildSpecFile} -Raw | ConvertFrom-Json
-    $ProductName = $BuildSpec.name
-    $ProductVersion = $BuildSpec.version
-
-    $OutputName = "${ProductName}-${ProductVersion}-windows-${Target}"
-
-    $RemoveArgs = @{
-        ErrorAction = 'SilentlyContinue'
-        Path = @(
-            "${ProjectRoot}/release/${ProductName}-*-windows-*.zip"
-        )
-    }
-
-    Remove-Item @RemoveArgs
-
-    Log-Group "Archiving ${ProductName}..."
-    $CompressArgs = @{
-        Path = (Get-ChildItem -Path "${ProjectRoot}/release/${Configuration}" -Exclude "${OutputName}*.*")
-        CompressionLevel = 'Optimal'
-        DestinationPath = "${ProjectRoot}/release/${OutputName}.zip"
-        Verbose = ($Env:CI -ne $null)
-    }
-    Compress-Archive -Force @CompressArgs
-    Log-Group
-}
-
-Package

+ 0 - 153
.github/scripts/build-macos

@@ -1,153 +0,0 @@
-#!/usr/bin/env zsh
-
-builtin emulate -L zsh
-setopt EXTENDED_GLOB
-setopt PUSHD_SILENT
-setopt ERR_EXIT
-setopt ERR_RETURN
-setopt NO_UNSET
-setopt PIPE_FAIL
-setopt NO_AUTO_PUSHD
-setopt NO_PUSHD_IGNORE_DUPS
-setopt FUNCTION_ARGZERO
-
-## Enable for script debugging
-# setopt WARN_CREATE_GLOBAL
-# setopt WARN_NESTED_VAR
-# setopt XTRACE
-
-if (( ! ${+CI} )) {
-  print -u2 -PR "%F{1}    ✖︎ ${ZSH_ARGZERO:t:r} requires CI environment.%f"
-  exit 1
-}
-
-autoload -Uz is-at-least && if ! is-at-least 5.9; then
-  print -u2 -PR "${CI:+::error::}%F{1}${funcstack[1]##*/}:%f Running on Zsh version %B${ZSH_VERSION}%b, but Zsh %B5.2%b is the minimum supported version. Upgrade Zsh to fix this issue."
-  exit 1
-fi
-
-TRAPZERR() {
-  print -u2 -PR "::error::%F{1}    ✖︎ script execution error%f"
-  print -PR -e "
-  Callstack:
-  ${(j:\n     :)funcfiletrace}
-  "
-
-  exit 2
-}
-
-build() {
-  if (( ! ${+SCRIPT_HOME} )) typeset -g SCRIPT_HOME=${ZSH_ARGZERO:A:h}
-  local host_os='macos'
-  local project_root=${SCRIPT_HOME:A:h:h}
-  local buildspec_file=${project_root}/buildspec.json
-
-  fpath=("${SCRIPT_HOME}/utils.zsh" ${fpath})
-  autoload -Uz log_group log_info log_error log_output check_macos setup_ccache
-
-  if [[ ! -r ${buildspec_file} ]] {
-    log_error \
-      'No buildspec.json found. Please create a build specification for your project.'
-    return 2
-  }
-
-  local -i debug=0
-
-  local config='RelWithDebInfo'
-  local -r -a _valid_configs=(Debug RelWithDebInfo Release MinSizeRel)
-  local -i codesign=0
-
-  local -a args
-  while (( # )) {
-    case ${1} {
-      -c|--config)
-        if (( # == 1 )) || [[ ${2:0:1} == '-' ]] {
-          log_error "Missing value for option %B${1}%b"
-          log_output ${_usage}
-          exit 2
-        }
-        ;;
-    }
-    case ${1} {
-      --) shift; args+=($@); break ;;
-      -c|--config)
-        if (( ! ${_valid_configs[(Ie)${2}]} )) {
-          log_error "Invalid value %B${2}%b for option %B${1}%b"
-          exit 2
-        }
-        config=${2}
-        shift 2
-        ;;
-      -s|--codesign) codesign=1; shift ;;
-      --debug) debug=1; shift ;;
-      *) log_error "Unknown option: %B${1}%b"; exit 2 ;;
-    }
-  }
-
-  set -- ${(@)args}
-
-  check_macos
-
-  local product_name
-  local product_version
-  read -r product_name product_version <<< \
-    "$(jq -r '. | {name, version} | join(" ")' ${buildspec_file})"
-
-  pushd ${project_root}
-
-  local -a cmake_args=()
-  local -a cmake_build_args=(--build)
-  local -a cmake_install_args=(--install)
-
-  if (( debug )) cmake_args+=(--debug-output)
-
-  cmake_args+=(--preset 'macos-ci')
-
-  typeset -gx NSUnbufferedIO=YES
-
-  typeset -gx CODESIGN_IDENT="${CODESIGN_IDENT:--}"
-  if (( codesign )) && [[ -z ${CODESIGN_TEAM} ]] {
-    typeset -gx CODESIGN_TEAM="$(print "${CODESIGN_IDENT}" | /usr/bin/sed -En 's/.+\((.+)\)/\1/p')"
-  }
-
-  log_group "Configuring ${product_name}..."
-  cmake -S ${project_root} ${cmake_args}
-
-  log_group "Building ${product_name}..."
-  run_xcodebuild() {
-    if (( debug )) {
-      xcodebuild ${@}
-    } else {
-      if [[ ${GITHUB_EVENT_NAME} == push ]] {
-        xcodebuild ${@} 2>&1 | xcbeautify --renderer terminal
-      } else {
-        xcodebuild ${@} 2>&1 | xcbeautify --renderer github-actions
-      }
-    }
-  }
-
-  local -a build_args=(
-    ONLY_ACTIVE_ARCH=NO
-    -arch arm64
-    -arch x86_64
-    -project ${product_name}.xcodeproj
-    -target ${product_name}
-    -destination "generic/platform=macOS,name=Any Mac"
-    -configuration ${config}
-    -parallelizeTargets
-    -hideShellScriptEnvironment
-    build
-  )
-
-  pushd build_macos
-  run_xcodebuild ${build_args}
-  popd
-
-  log_group "Installing ${product_name}..."
-  cmake --install build_macos --config ${config} --prefix "${project_root}/release/${config}"
-
-  popd
-  log_group
-}
-
-build ${@}

+ 0 - 232
.github/scripts/build-ubuntu

@@ -1,232 +0,0 @@
-#!/usr/bin/env zsh
-
-builtin emulate -L zsh
-setopt EXTENDED_GLOB
-setopt PUSHD_SILENT
-setopt ERR_EXIT
-setopt ERR_RETURN
-setopt NO_UNSET
-setopt PIPE_FAIL
-setopt NO_AUTO_PUSHD
-setopt NO_PUSHD_IGNORE_DUPS
-setopt FUNCTION_ARGZERO
-
-## Enable for script debugging
-# setopt WARN_CREATE_GLOBAL
-# setopt WARN_NESTED_VAR
-# setopt XTRACE
-
-autoload -Uz is-at-least && if ! is-at-least 5.2; then
-  print -u2 -PR "${CI:+::error::}%F{1}${funcstack[1]##*/}:%f Running on Zsh version %B${ZSH_VERSION}%b, but Zsh %B5.2%b is the minimum supported version. Upgrade Zsh to fix this issue."
-  exit 1
-fi
-
-TRAPZERR() {
-  if (( ${_loglevel:-3} > 2 )) {
-    print -u2 -PR "${CI:+::error::}%F{1}    ✖︎ script execution error%f"
-    print -PR -e "
-    Callstack:
-    ${(j:\n     :)funcfiletrace}
-    "
-  }
-
-  exit 2
-}
-
-build() {
-  if (( ! ${+SCRIPT_HOME} )) typeset -g SCRIPT_HOME=${ZSH_ARGZERO:A:h}
-  local host_os='ubuntu'
-  local project_root=${SCRIPT_HOME:A:h:h}
-  local buildspec_file=${project_root}/buildspec.json
-
-  fpath=("${SCRIPT_HOME}/utils.zsh" ${fpath})
-  autoload -Uz log_group log_info log_error log_output set_loglevel check_ubuntu setup_ccache
-
-  if [[ ! -r ${buildspec_file} ]] {
-    log_error \
-      'No buildspec.json found. Please create a build specification for your project.'
-    return 2
-  }
-
-  local -i debug=0
-  typeset -g -a skips=()
-  local -i verbosity=1
-  local -r _version='2.0.0'
-  local -r -a _valid_targets=(
-    ubuntu-x86_64
-  )
-  local target
-  local config='RelWithDebInfo'
-  local -r -a _valid_configs=(Debug RelWithDebInfo Release MinSizeRel)
-  local -i codesign=0
-
-  local -r -a _valid_generators=(Ninja 'Unix Makefiles')
-  local generator='Ninja'
-  local -r _usage_host="
-%F{yellow} Additional options for Linux builds%f
- -----------------------------------------------------------------------------
-  %B--generator%b                       Specify build system to generate
-                                    Available generators:
-                                      - Ninja
-                                      - Unix Makefiles"
-
-  local -i print_config=0
-  local -r _usage="
-Usage: %B${functrace[1]%:*}%b <option> [<options>]
-
-%BOptions%b:
-
-%F{yellow} Build configuration options%f
- -----------------------------------------------------------------------------
-  %B-t | --target%b                     Specify target
-  %B-c | --config%b                     Build configuration
-  %B--skip-[all|build|deps]%b           Skip all|building|checking for dependencies
-
-%F{yellow} Output options%f
- -----------------------------------------------------------------------------
-  %B-q | --quiet%b                      Quiet (error output only)
-  %B-v | --verbose%b                    Verbose (more detailed output)
-  %B--debug%b                           Debug (very detailed and added output)
-
-%F{yellow} General options%f
- -----------------------------------------------------------------------------
-  %B-h | --help%b                       Print this usage help
-  %B-V | --version%b                    Print script version information
-${_usage_host:-}"
-
-  local -a args
-  while (( # )) {
-    case ${1} {
-      -t|--target|-c|--config|--generator)
-        if (( # == 1 )) || [[ ${2:0:1} == '-' ]] {
-          log_error "Missing value for option %B${1}%b"
-          log_output ${_usage}
-          exit 2
-        }
-        ;;
-    }
-    case ${1} {
-      --)
-        shift
-        args+=($@)
-        break
-        ;;
-      -t|--target)
-        if (( ! ${_valid_targets[(Ie)${2}]} )) {
-          log_error "Invalid value %B${2}%b for option %B${1}%b"
-          log_output ${_usage}
-          exit 2
-        }
-        target=${2}
-        shift 2
-        ;;
-      -c|--config)
-        if (( ! ${_valid_configs[(Ie)${2}]} )) {
-          log_error "Invalid value %B${2}%b for option %B${1}%b"
-          log_output ${_usage}
-          exit 2
-        }
-        config=${2}
-        shift 2
-        ;;
-      -s|--codesign) codesign=1; shift ;;
-      -q|--quiet) (( verbosity -= 1 )) || true; shift ;;
-      -v|--verbose) (( verbosity += 1 )); shift ;;
-      -h|--help) log_output ${_usage}; exit 0 ;;
-      -V|--version) print -Pr "${_version}"; exit 0 ;;
-      --debug) verbosity=3; shift ;;
-      --generator)
-        if (( ! ${_valid_generators[(Ie)${2}]} )) {
-          log_error "Invalid value %B${2}%b for option %B${1}%b"
-          log_output ${_usage}
-          exit 2
-        }
-        generator=${2}
-        shift 2
-        ;;
-      --print-config) print_config=1; skips+=(deps); shift ;;
-      --skip-*)
-        local -r _skip="${${(s:-:)1}[-1]}"
-        local -r -a _check=(all build deps)
-        (( ${_check[(Ie)${_skip}]} )) || log_warning "Invalid skip mode %B${_skip}%b supplied"
-        typeset -g -a skips=(${skips} ${_skip})
-        shift
-        ;;
-      *) log_error "Unknown option: %B${1}%b"; log_output ${_usage}; exit 2 ;;
-    }
-  }
-
-  : "${target:="${host_os}-${CPUTYPE}"}"
-
-  set -- ${(@)args}
-  set_loglevel ${verbosity}
-
-  if (( ! (${skips[(Ie)all]} + ${skips[(Ie)deps]}) )) {
-    check_${host_os}
-  }
-
-  if [[ ${host_os} == ubuntu ]] {
-    autoload -Uz setup_ubuntu && setup_ubuntu
-  }
-
-  local product_name
-  local product_version
-  read -r product_name product_version <<< \
-    "$(jq -r '. | {name, version} | join(" ")' ${buildspec_file})"
-
-  pushd ${project_root}
-  if (( ! (${skips[(Ie)all]} + ${skips[(Ie)build]}) )) {
-    log_group "Configuring ${product_name}..."
-
-    local -a cmake_args=()
-    local -a cmake_build_args=(--build)
-    local -a cmake_install_args=(--install)
-
-    case ${_loglevel} {
-      0) cmake_args+=(-Wno_deprecated -Wno-dev --log-level=ERROR) ;;
-      1) ;;
-      2) cmake_build_args+=(--verbose) ;;
-      *) cmake_args+=(--debug-output) ;;
-    }
-
-    local -r _preset="${target%%-*}${CI:+-ci}"
-    case ${target} {
-      ubuntu-*)
-        cmake_args+=(
-          --preset ${_preset}-${target##*-}
-          -G "${generator}"
-          -DQT_VERSION=${QT_VERSION:-6}
-          -DCMAKE_BUILD_TYPE=${config}
-          -DCMAKE_INSTALL_PREFIX=/usr
-        )
-
-        local cmake_version
-        read -r _ _ cmake_version <<< "$(cmake --version)"
-
-        cmake_build_args+=(--preset ${_preset}-${target##*-} --config ${config})
-        if [[ ${generator} == 'Unix Makefiles' ]] {
-          cmake_build_args+=(--parallel $(( $(nproc) + 1 )))
-        } else {
-          cmake_build_args+=(--parallel)
-        }
-
-        cmake_install_args+=(build_${target##*-} --prefix ${project_root}/release/${config})
-        ;;
-    }
-
-    log_debug "Attempting to configure with CMake arguments: ${cmake_args}"
-
-    cmake ${cmake_args}
-
-    log_group "Building ${product_name}..."
-    cmake ${cmake_build_args}
-  }
-
-  log_group "Installing ${product_name}..."
-  if (( _loglevel > 1 )) cmake_install_args+=(--verbose)
-  cmake ${cmake_install_args}
-  popd
-  log_group
-}
-
-build ${@}

+ 0 - 173
.github/scripts/package-macos

@@ -1,173 +0,0 @@
-#!/usr/bin/env zsh
-
-builtin emulate -L zsh
-setopt EXTENDED_GLOB
-setopt PUSHD_SILENT
-setopt ERR_EXIT
-setopt ERR_RETURN
-setopt NO_UNSET
-setopt PIPE_FAIL
-setopt NO_AUTO_PUSHD
-setopt NO_PUSHD_IGNORE_DUPS
-setopt FUNCTION_ARGZERO
-
-## Enable for script debugging
-# setopt WARN_CREATE_GLOBAL
-# setopt WARN_NESTED_VAR
-# setopt XTRACE
-
-if (( ! ${+CI} )) {
-  print -u2 -PR "%F{1}    ✖︎ ${ZSH_ARGZERO:t:r} requires CI environment%f"
-  exit 1
-}
-
-autoload -Uz is-at-least && if ! is-at-least 5.9; then
-  print -u2 -PR "${CI:+::error::}%F{1}${funcstack[1]##*/}:%f Running on Zsh version %B${ZSH_VERSION}%b, but Zsh %B5.2%b is the minimum supported version. Upgrade Zsh to fix this issue."
-  exit 1
-fi
-
-TRAPZERR() {
-  print -u2 -PR "::error::%F{1}    ✖︎ script execution error%f"
-  print -PR -e "
-  Callstack:
-  ${(j:\n     :)funcfiletrace}
-  "
-
-  exit 2
-}
-
-package() {
-  if (( ! ${+SCRIPT_HOME} )) typeset -g SCRIPT_HOME=${ZSH_ARGZERO:A:h}
-  local host_os='macos'
-  local project_root=${SCRIPT_HOME:A:h:h}
-  local buildspec_file=${project_root}/buildspec.json
-
-  fpath=("${SCRIPT_HOME}/utils.zsh" ${fpath})
-  autoload -Uz log_group log_error log_output check_macos
-
-  if [[ ! -r ${buildspec_file} ]] {
-    log_error \
-      'No buildspec.json found. Please create a build specification for your project.'
-    return 2
-  }
-
-  local -i debug=0
-
-  local config='RelWithDebInfo'
-  local -r -a _valid_configs=(Debug RelWithDebInfo Release MinSizeRel)
-
-  local -i codesign=0
-  local -i notarize=0
-  local -i package=0
-
-  local -a args
-  while (( # )) {
-    case ${1} {
-      -c|--config)
-        if (( # == 1 )) || [[ ${2:0:1} == '-' ]] {
-          log_error "Missing value for option %B${1}%b"
-          exit 2
-        }
-        ;;
-    }
-    case ${1} {
-      --) shift; args+=($@); break ;;
-      -c|--config)
-        if (( !${_valid_configs[(Ie)${2}]} )) {
-          log_error "Invalid value %B${2}%b for option %B${1}%b"
-          exit 2
-        }
-        config=${2}
-        shift 2
-        ;;
-      -s|--codesign) typeset -g codesign=1; shift ;;
-      -n|--notarize) typeset -g notarize=1; typeset -g codesign=1; shift ;;
-      -p|--package) typeset -g package=1; shift ;;
-      --debug) debug=1; shift ;;
-      *) log_error "Unknown option: %B${1}%b"; exit 2 ;;
-    }
-  }
-
-  set -- ${(@)args}
-
-  check_macos
-
-  local product_name
-  local product_version
-  read -r product_name product_version <<< \
-    "$(jq -r '. | {name, version} | join(" ")' ${buildspec_file})"
-
-  local output_name="${product_name}-${product_version}-${host_os}-universal"
-
-  if [[ ! -d ${project_root}/release/${config}/${product_name}.plugin ]] {
-    log_error 'No release artifact found. Run the build script or the CMake install procedure first.'
-    return 2
-  }
-
-  if (( package )) {
-    if [[ ! -f ${project_root}/release/${config}/${product_name}.pkg ]] {
-      log_error 'Installer Package not found. Run the build script or the CMake build and install procedures first.'
-      return 2
-    }
-
-    log_group "Packaging ${product_name}..."
-    pushd ${project_root}
-
-    typeset -gx CODESIGN_IDENT="${CODESIGN_IDENT:--}"
-    typeset -gx CODESIGN_IDENT_INSTALLER="${CODESIGN_IDENT_INSTALLER:--}"
-    typeset -gx CODESIGN_TEAM="$(print "${CODESIGN_IDENT}" | /usr/bin/sed -En 's/.+\((.+)\)/\1/p')"
-
-    if (( codesign )) {
-      productsign \
-        --sign "${CODESIGN_IDENT_INSTALLER}" \
-        ${project_root}/release/${config}/${product_name}.pkg \
-        ${project_root}/release/${output_name}.pkg
-
-      rm ${project_root}/release/${config}/${product_name}.pkg
-    } else {
-      mv ${project_root}/release/${config}/${product_name}.pkg \
-        ${project_root}/release/${output_name}.pkg
-    }
-
-    if (( codesign && notarize )) {
-      if ! [[ ${CODESIGN_IDENT} != '-' && ${CODESIGN_TEAM} && {CODESIGN_IDENT_USER} && ${CODESIGN_IDENT_PASS} ]] {
-        log_error "Notarization requires Apple ID and application password."
-        return 2
-      }
-
-      if [[ ! -f ${project_root}/release/${output_name}.pkg ]] {
-        log_error "No package for notarization found."
-        return 2
-      }
-
-      xcrun notarytool store-credentials "${product_name}-Codesign-Password" --apple-id "${CODESIGN_IDENT_USER}" --team-id "${CODESIGN_TEAM}" --password "${CODESIGN_IDENT_PASS}"
-      xcrun notarytool submit ${project_root}/release/${output_name}.pkg --keychain-profile "${product_name}-Codesign-Password" --wait
-
-      local -i _status=0
-
-      xcrun stapler staple ${project_root}/release/${output_name}.pkg || _status=1
-
-      if (( _status )) {
-        log_error "Notarization failed. Use 'xcrun notarytool log <submission ID>' to check for errors."
-        return 2
-      }
-    }
-    popd
-  } else {
-    log_group "Archiving ${product_name}..."
-    pushd ${project_root}/release/${config}
-    XZ_OPT=-T0 tar -cvJf ${project_root}/release/${output_name}.tar.xz ${product_name}.plugin
-    popd
-  }
-
-  if [[ ${config} == Release ]] {
-    log_group "Archiving ${product_name} Debug Symbols..."
-    pushd ${project_root}/release/${config}
-    XZ_OPT=-T0 tar -cvJf ${project_root}/release/${output_name}-dSYMs.tar.xz ${product_name}.plugin.dSYM
-    popd
-  }
-
-  log_group
-}
-
-package ${@}

+ 0 - 176
.github/scripts/package-ubuntu

@@ -1,176 +0,0 @@
-#!/usr/bin/env zsh
-
-builtin emulate -L zsh
-setopt EXTENDED_GLOB
-setopt PUSHD_SILENT
-setopt ERR_EXIT
-setopt ERR_RETURN
-setopt NO_UNSET
-setopt PIPE_FAIL
-setopt NO_AUTO_PUSHD
-setopt NO_PUSHD_IGNORE_DUPS
-setopt FUNCTION_ARGZERO
-
-## Enable for script debugging
-# setopt WARN_CREATE_GLOBAL
-# setopt WARN_NESTED_VAR
-# setopt XTRACE
-
-autoload -Uz is-at-least && if ! is-at-least 5.2; then
-  print -u2 -PR "${CI:+::error::}%F{1}${funcstack[1]##*/}:%f Running on Zsh version %B${ZSH_VERSION}%b, but Zsh %B5.2%b is the minimum supported version. Upgrade Zsh to fix this issue."
-  exit 1
-fi
-
-TRAPZERR() {
-  if (( ${_loglevel:-3} > 2 )) {
-    print -u2 -PR "${CI:+::error::}%F{1}    ✖︎ script execution error%f"
-    print -PR -e "
-    Callstack:
-    ${(j:\n     :)funcfiletrace}
-    "
-  }
-
-  exit 2
-}
-
-package() {
-  if (( ! ${+SCRIPT_HOME} )) typeset -g SCRIPT_HOME=${ZSH_ARGZERO:A:h}
-  local host_os='ubuntu'
-  local project_root=${SCRIPT_HOME:A:h:h}
-  local buildspec_file=${project_root}/buildspec.json
-
-  fpath=("${SCRIPT_HOME}/utils.zsh" ${fpath})
-  autoload -Uz set_loglevel log_info log_group log_error log_output check_${host_os}
-
-  if [[ ! -r ${buildspec_file} ]] {
-    log_error \
-      'No buildspec.json found. Please create a build specification for your project.'
-    return 2
-  }
-
-  local -i debug=0
-  local -i verbosity=1
-  local -r _version='2.0.0'
-  local -r -a _valid_targets=(
-    ubuntu-x86_64
-  )
-  local target
-  local config='RelWithDebInfo'
-  local -r -a _valid_configs=(Debug RelWithDebInfo Release MinSizeRel)
-  local -i codesign=0
-  local -i notarize=0
-  local -i package=0
-  local -i skip_deps=0
-
-  local -r _usage="
-Usage: %B${functrace[1]%:*}%b <option> [<options>]
-
-%BOptions%b:
-
-%F{yellow} Package configuration options%f
- -----------------------------------------------------------------------------
-  %B-t | --target%b                     Specify target
-  %B-c | --config%b                     Build configuration
-  %B--skip-deps%b                       Skip checking for dependencies
-
-%F{yellow} Output options%f
- -----------------------------------------------------------------------------
-  %B-q | --quiet%b                      Quiet (error output only)
-  %B-v | --verbose%b                    Verbose (more detailed output)
-  %B--debug%b                           Debug (very detailed and added output)
-
-%F{yellow} General options%f
- -----------------------------------------------------------------------------
-  %B-h | --help%b                       Print this usage help
-  %B-V | --version%b                    Print script version information
-${_usage_host:-}"
-
-  local -a args
-  while (( # )) {
-    case ${1} {
-      -t|--target|-c|--config)
-        if (( # == 1 )) || [[ ${2:0:1} == '-' ]] {
-          log_error "Missing value for option %B${1}%b"
-          log_output ${_usage}
-          exit 2
-        }
-        ;;
-    }
-    case ${1} {
-      --)
-        shift
-        args+=($@)
-        break
-        ;;
-      -t|--target)
-        if (( ! ${_valid_targets[(Ie)${2}]} )) {
-          log_error "Invalid value %B${2}%b for option %B${1}%b"
-          log_output ${_usage}
-          exit 2
-        }
-        target=${2}
-        shift 2
-        ;;
-      -c|--config)
-        if (( !${_valid_configs[(Ie)${2}]} )) {
-          log_error "Invalid value %B${2}%b for option %B${1}%b"
-          log_output ${_usage}
-          exit 2
-        }
-        config=${2}
-        shift 2
-        ;;
-      -s|--codesign) typeset -g codesign=1; shift ;;
-      -n|--notarize) typeset -g notarize=1; typeset -g codesign=1; shift ;;
-      -p|--package) typeset -g package=1; shift ;;
-      --skip-deps) typeset -g skip_deps=1; shift ;;
-      -q|--quiet) (( verbosity -= 1 )) || true; shift ;;
-      -v|--verbose) (( verbosity += 1 )); shift ;;
-      -h|--help) log_output ${_usage}; exit 0 ;;
-      -V|--version) print -Pr "${_version}"; exit 0 ;;
-      --debug) verbosity=3; shift ;;
-      *) log_error "Unknown option: %B${1}%b"; log_output ${_usage}; exit 2 ;;
-    }
-  }
-
-  : "${target:="${host_os}-${CPUTYPE}"}"
-
-  set -- ${(@)args}
-  set_loglevel ${verbosity}
-
-  if (( ! skip_deps )) {
-    check_${host_os}
-  }
-
-  local product_name
-  local product_version
-  read -r product_name product_version <<< \
-    "$(jq -r '. | {name, version} | join(" ")' ${buildspec_file})"
-
-  local -a cmake_args=()
-  if (( _loglevel > 1 )) cmake_args+=(--verbose)
-
-  log_group "Creating source tarball for ${product_name}..."
-  pushd ${project_root}
-  cmake --build build_${target##*-} --config ${config} -t package_source ${cmake_args}
-  popd
-
-  if (( package )) {
-    log_group "Packaging ${product_name}..."
-    pushd ${project_root}
-    cmake --build build_${target##*-} --config ${config} -t package ${cmake_args}
-    popd
-  } else {
-    log_group "Archiving ${product_name}..."
-    local output_name="${product_name}-${product_version}-${target##*-}-ubuntu-gnu"
-    local _tarflags='cJf'
-    if (( _loglevel > 1 || ${+CI} )) _tarflags="v${_tarflags}"
-
-    pushd ${project_root}/release/${config}
-    XZ_OPT=-T0 tar "-${_tarflags}" ${project_root}/release/${output_name}.tar.xz (lib|share)
-    popd
-  }
-  log_group
-}
-
-package ${@}

+ 0 - 29
.github/scripts/utils.pwsh/Ensure-Location.ps1

@@ -1,29 +0,0 @@
-function Ensure-Location {
-    <#
-        .SYNOPSIS
-            Ensures current location to be set to specified directory.
-        .DESCRIPTION
-            If specified directory exists, switch to it. Otherwise create it,
-            then switch.
-        .EXAMPLE
-            Ensure-Location "My-Directory"
-            Ensure-Location -Path "Path-To-My-Directory"
-    #>
-
-    param(
-        [Parameter(Mandatory)]
-        [string] $Path
-    )
-
-    if ( ! ( Test-Path $Path ) ) {
-        $_Params = @{
-            ItemType = "Directory"
-            Path = ${Path}
-            ErrorAction = "SilentlyContinue"
-        }
-
-        New-Item @_Params | Set-Location
-    } else {
-        Set-Location -Path ${Path}
-    }
-}

+ 0 - 40
.github/scripts/utils.pwsh/Invoke-External.ps1

@@ -1,40 +0,0 @@
-function Invoke-External {
-    <#
-        .SYNOPSIS
-            Invokes a non-PowerShell command.
-        .DESCRIPTION
-            Runs a non-PowerShell command, and captures its return code.
-            Throws an exception if the command returns non-zero.
-        .EXAMPLE
-            Invoke-External 7z x $MyArchive
-    #>
-
-    if ( $args.Count -eq 0 ) {
-        throw 'Invoke-External called without arguments.'
-    }
-
-    if ( ! ( Test-Path function:Log-Information ) ) {
-        . $PSScriptRoot/Logger.ps1
-    }
-
-    $Command = $args[0]
-    $CommandArgs = @()
-
-    if ( $args.Count -gt 1) {
-        $CommandArgs = $args[1..($args.Count - 1)]
-    }
-
-    $_EAP = $ErrorActionPreference
-    $ErrorActionPreference = "Continue"
-
-    Log-Debug "Invoke-External: ${Command} ${CommandArgs}"
-
-    & $command $commandArgs
-    $Result = $LASTEXITCODE
-
-    $ErrorActionPreference = $_EAP
-
-    if ( $Result -ne 0 ) {
-        throw "${Command} ${CommandArgs} exited with non-zero code ${Result}."
-    }
-}

+ 0 - 149
.github/scripts/utils.pwsh/Logger.ps1

@@ -1,149 +0,0 @@
-function Log-Debug {
-    [CmdletBinding()]
-    param(
-        [Parameter(Mandatory,ValueFromPipeline)]
-        [ValidateNotNullOrEmpty()]
-        [string[]] $Message
-    )
-
-    Process {
-        foreach($m in $Message) {
-            Write-Debug "$(if ( $env:CI -ne $null ) { '::debug::' })$m"
-        }
-    }
-}
-
-function Log-Verbose {
-    [CmdletBinding()]
-    param(
-        [Parameter(Mandatory,ValueFromPipeline)]
-        [ValidateNotNullOrEmpty()]
-        [string[]] $Message
-    )
-
-    Process {
-        foreach($m in $Message) {
-            Write-Verbose $m
-        }
-    }
-}
-
-function Log-Warning {
-    [CmdletBinding()]
-    param(
-        [Parameter(Mandatory,ValueFromPipeline)]
-        [ValidateNotNullOrEmpty()]
-        [string[]] $Message
-    )
-
-    Process {
-        foreach($m in $Message) {
-            Write-Warning "$(if ( $env:CI -ne $null ) { '::warning::' })$m"
-        }
-    }
-}
-
-function Log-Error {
-    [CmdletBinding()]
-    param(
-        [Parameter(Mandatory,ValueFromPipeline)]
-        [ValidateNotNullOrEmpty()]
-        [string[]] $Message
-    )
-
-    Process {
-        foreach($m in $Message) {
-            Write-Error "$(if ( $env:CI -ne $null ) { '::error::' })$m"
-        }
-    }
-}
-
-function Log-Information {
-    [CmdletBinding()]
-    param(
-        [Parameter(Mandatory,ValueFromPipeline)]
-        [ValidateNotNullOrEmpty()]
-        [string[]] $Message
-    )
-
-    Process {
-        if ( ! ( $script:Quiet ) ) {
-            $StageName = $( if ( $script:StageName -ne $null ) { $script:StageName } else { '' })
-            $Icon = ' =>'
-
-            foreach($m in $Message) {
-                Write-Host -NoNewLine -ForegroundColor Blue "  ${StageName} $($Icon.PadRight(5)) "
-                Write-Host "${m}"
-            }
-        }
-    }
-}
-
-function Log-Group {
-    [CmdletBinding()]
-    param(
-        [Parameter(ValueFromPipeline)]
-        [string[]] $Message
-    )
-
-    Process {
-        if ( $Env:CI -ne $null )  {
-            if ( $script:LogGroup ) {
-                Write-Output '::endgroup::'
-                $script:LogGroup = $false
-            }
-
-            if ( $Message.count -ge 1 ) {
-                Write-Output "::group::$($Message -join ' ')"
-                $script:LogGroup = $true
-            }
-        } else {
-            if ( $Message.count -ge 1 ) {
-                Log-Information $Message
-            }
-        }
-    }
-}
-
-function Log-Status {
-    [CmdletBinding()]
-    param(
-        [Parameter(Mandatory,ValueFromPipeline)]
-        [ValidateNotNullOrEmpty()]
-        [string[]] $Message
-    )
-
-    Process {
-        if ( ! ( $script:Quiet ) ) {
-            $StageName = $( if ( $StageName -ne $null ) { $StageName } else { '' })
-            $Icon = '  >'
-
-            foreach($m in $Message) {
-                Write-Host -NoNewLine -ForegroundColor Green "  ${StageName} $($Icon.PadRight(5)) "
-                Write-Host "${m}"
-            }
-        }
-    }
-}
-
-function Log-Output {
-    [CmdletBinding()]
-    param(
-        [Parameter(Mandatory,ValueFromPipeline)]
-        [ValidateNotNullOrEmpty()]
-        [string[]] $Message
-    )
-
-    Process {
-        if ( ! ( $script:Quiet ) ) {
-            $StageName = $( if ( $script:StageName -ne $null ) { $script:StageName } else { '' })
-            $Icon = ''
-
-            foreach($m in $Message) {
-                Write-Output "  ${StageName} $($Icon.PadRight(5)) ${m}"
-            }
-        }
-    }
-}
-
-$Columns = (Get-Host).UI.RawUI.WindowSize.Width - 5

+ 0 - 22
.github/scripts/utils.zsh/check_macos

@@ -1,22 +0,0 @@
-autoload -Uz is-at-least log_group log_info log_error log_status
-
-local macos_version=$(sw_vers -productVersion)
-
-log_group 'Install macOS build requirements'
-log_info 'Checking macOS version...'
-if ! is-at-least 11.0 ${macos_version}; then
-  log_error "Minimum required macOS version is 11.0, but running on macOS ${macos_version}"
-  return 2
-else
-  log_status "macOS ${macos_version} is recent"
-fi
-
-log_info 'Checking for Homebrew...'
-if (( ! ${+commands[brew]} )) {
-  log_error 'No Homebrew command found. Please install Homebrew (https://brew.sh)'
-  return 2
-}
-
-brew bundle --file ${SCRIPT_HOME}/.Brewfile
-rehash
-log_group

+ 0 - 61
.github/scripts/utils.zsh/check_ubuntu

@@ -1,61 +0,0 @@
-autoload -Uz log_info log_status log_error log_debug log_warning log_group
-
-log_group 'Check Linux build requirements'
-log_debug 'Checking Linux distribution name and version...'
-
-# Check for Ubuntu version 22.10 or later, which have srt and librist available via apt-get
-typeset -g -i UBUNTU_2210_OR_LATER=0
-if [[ -f /etc/os_release ]] {
-  local dist_name
-  local dist_version
-  read -r dist_name dist_version <<< "$(source /etc/os_release; print "${NAME} ${VERSION_ID}")"
-
-  autoload -Uz is-at-least
-  if [[ ${dist_name} == Ubuntu ]] && is-at-least 22.10 ${dist_version}; then
-    typeset -g -i UBUNTU_2210_OR_LATER=1
-  fi
-}
-
-log_debug 'Checking for apt-get...'
-if (( ! ${+commands[apt-get]} )) {
-  log_error 'No apt-get command found. Please install apt'
-  return 2
-} else {
-  log_debug "Apt-get located at ${commands[apt-get]}"
-}
-
-local -a dependencies=("${(fA)$(<${SCRIPT_HOME}/.Aptfile)}")
-local -a install_list
-local binary
-
-sudo apt-get update -qq
-
-for dependency (${dependencies}) {
-  local -a tokens=(${=dependency//(,|:|\')/})
-
-  if [[ ! ${tokens[1]} == 'package' ]] continue
-
-  if [[ ${#tokens} -gt 2 && ${tokens[3]} == 'bin' ]] {
-    binary=${tokens[4]}
-  } else {
-    binary=${tokens[2]}
-  }
-
-  if (( ! ${+commands[${binary}]} )) install_list+=(${tokens[2]})
-}
-
-log_debug "List of dependencies to install: ${install_list}"
-if (( ${#install_list} )) {
-  if (( ! ${+CI} )) log_warning 'Dependency installation via apt may require elevated privileges'
-
-  local -a apt_args=(
-    ${CI:+-y}
-    --no-install-recommends
-  )
-  if (( _loglevel == 0 )) apt_args+=(--quiet)
-
-  sudo apt-get ${apt_args} install ${install_list}
-}
-
-rehash
-log_group

+ 0 - 1
.github/scripts/utils.zsh/log_debug

@@ -1 +0,0 @@
-if (( debug )) print -PR -e "::debug::%F{220}DEBUG: ${@}%f"

+ 0 - 1
.github/scripts/utils.zsh/log_error

@@ -1 +0,0 @@
-print -u2 -PR "::error::%F{1}    ✖︎%f  ${@}"

+ 0 - 12
.github/scripts/utils.zsh/log_group

@@ -1,12 +0,0 @@
-autoload -Uz log_info
-
-if (( ! ${+_log_group} )) typeset -g _log_group=0
-
-if (( _log_group )) {
-  print "::endgroup::"
-  typeset -g _log_group=0
-}
-if (( # )) {
-  print "::group::${@}"
-  typeset -g _log_group=1
-}

+ 0 - 1
.github/scripts/utils.zsh/log_info

@@ -1 +0,0 @@
-print -PR "%F{4}   =>%f  %B${@}%b"

+ 0 - 1
.github/scripts/utils.zsh/log_output

@@ -1 +0,0 @@
-print -PR "        ${@}"

+ 0 - 1
.github/scripts/utils.zsh/log_status

@@ -1 +0,0 @@
-print -PR "%F{2}    >%f  ${@}"

+ 0 - 1
.github/scripts/utils.zsh/log_warning

@@ -1 +0,0 @@
-print -PR "::warning::%F{3}   =>  ${@}%f"

+ 0 - 1
.github/scripts/utils.zsh/mkcd

@@ -1 +0,0 @@
-[[ -n ${1} ]] && mkdir -p ${1} && builtin cd ${1}

+ 0 - 17
.github/scripts/utils.zsh/set_loglevel

@@ -1,17 +0,0 @@
-autoload -Uz log_debug log_error
-
-local -r _usage="Usage: %B${0}%b <loglevel>
-
-Set log level, following levels are supported: 0 (quiet), 1 (normal), 2 (verbose), 3 (debug)"
-
-if (( ! # )); then
-  log_error 'Called without arguments.'
-  log_output ${_usage}
-  return 2
-elif (( ${1} >= 4 )); then
-  log_error 'Called with loglevel > 3.'
-  log_output ${_usage}
-fi
-
-typeset -g -i -r _loglevel=${1}
-log_debug "Log level set to '${1}'"

+ 0 - 65
.github/scripts/utils.zsh/setup_ubuntu

@@ -1,65 +0,0 @@
-autoload -Uz log_error log_status log_info mkcd
-
-if (( ! ${+project_root} )) {
-  log_error "'project_root' not set. Please set before running ${0}."
-  return 2
-}
-
-if (( ! ${+target} )) {
-  log_error "'target' not set. Please set before running ${0}."
-  return 2
-}
-
-pushd ${project_root}
-
-typeset -g QT_VERSION
-
-local -a apt_args=(
-  ${CI:+-y}
-  --no-install-recommends
-)
-if (( _loglevel == 0 )) apt_args+=(--quiet)
-
-if (( ! (${skips[(Ie)all]} + ${skips[(Ie)deps]}) )) {
-  log_group 'Installing obs-studio build dependencies...'
-
-  local suffix
-  if [[ ${CPUTYPE} != "${target##*-}" ]] {
-    local -A arch_mappings=(
-      aarch64 arm64
-      x86_64 amd64
-    )
-
-    suffix=":${arch_mappings[${target##*-}]}"
-
-    sudo apt-get install ${apt_args} gcc-${${target##*-}//_/-}-linux-gnu g++-${${target##*-}//_/-}-linux-gnu
-  }
-
-  sudo add-apt-repository --yes ppa:obsproject/obs-studio
-  sudo apt update
-
-  sudo apt-get install ${apt_args} \
-    build-essential \
-    libgles2-mesa-dev \
-    obs-studio
-
-  local -a _qt_packages=()
-
-  if (( QT_VERSION == 5 )) {
-    _qt_packages+=(
-      qtbase5-dev${suffix}
-      libqt5svg5-dev${suffix}
-      qtbase5-private-dev${suffix}
-      libqt5x11extras5-dev${suffix}
-    )
-  } else {
-    _qt_packages+=(
-      qt6-base-dev${suffix}
-      libqt6svg6-dev${suffix}
-      qt6-base-private-dev${suffix}
-    )
-  }
-
-  sudo apt-get install ${apt_args} ${_qt_packages}
-  log_group
-}

+ 0 - 297
.github/workflows/build-project.yaml

@@ -1,297 +0,0 @@
-name: Build Project
-on:
-  workflow_call:
-    outputs:
-      pluginName:
-        description: Project name detected by parsing build spec file
-        value: ${{ jobs.check-event.outputs.pluginName }}
-jobs:
-  check-event:
-    name: Check GitHub Event Data 🔎
-    runs-on: ubuntu-24.04
-    defaults:
-      run:
-        shell: bash
-    outputs:
-      package: ${{ steps.setup.outputs.package }}
-      codesign: ${{ steps.setup.outputs.codesign }}
-      notarize: ${{ steps.setup.outputs.notarize }}
-      config: ${{ steps.setup.outputs.config }}
-      commitHash: ${{ steps.setup.outputs.commitHash }}
-      pluginName: ${{ steps.setup.outputs.pluginName }}
-    steps:
-      - uses: actions/checkout@v4
-        with:
-          fetch-depth: 0
-      - name: Check Event Data ☑️
-        id: setup
-        env:
-          GH_TOKEN: ${{ github.token }}
-        run: |
-          : Check Event Data ☑️
-          if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
-
-          case "${GITHUB_EVENT_NAME}" in
-            pull_request)
-              config_data=('codesign:false' 'notarize:false' 'package:false' 'config:RelWithDebInfo')
-              if gh pr view ${{ github.event.number }} --json labels \
-                | jq -e -r '.labels[] | select(.name == "Seeking Testers")' > /dev/null; then
-                config_data[0]='codesign:true'
-                config_data[2]='package:true'
-              fi
-              ;;
-            push)
-              config_data=('codesign:true' 'notarize:false' 'package:true' 'config:RelWithDebInfo')
-              if [[ ${GITHUB_REF_NAME} =~ [0-9]+.[0-9]+.[0-9]+(-(rc|beta).+)? ]]; then
-                config_data[1]='notarize:true'
-                config_data[3]='config:Release'
-              fi
-              ;;
-            workflow_dispatch)
-              config_data=('codesign:true' 'notarize:false' 'package:false' 'config:RelWithDebInfo')
-              ;;
-            schedule)
-              config_data=('codesign:true' 'notarize:false' 'package:true' 'config:RelWithDebInfo')
-              ;;
-            *) ;;
-          esac
-
-          for config in "${config_data[@]}"; do
-            IFS=':' read -r key value <<< "${config}"
-            echo "${key}=${value}" >> $GITHUB_OUTPUT
-          done
-          echo "commitHash=${GITHUB_SHA:0:9}" >> $GITHUB_OUTPUT
-
-          plugin_name="$(grep 'name' buildspec.json | sed -E -e 's/^.+"name":[^"]+"(.+)",?$/\1/g')"
-          plugin_display_name="$(grep 'displayName' buildspec.json | sed -E -e 's/^.+"displayName":[^"]+"(.+)",?$/\1/g' || echo "")"
-
-          if [[ "${plugin_display_name}" ]]; then
-            echo "pluginName=${plugin_display_name}" >> $GITHUB_OUTPUT
-          else
-            echo "pluginName=${plugin_name}" >> $GITHUB_OUTPUT
-          fi
-
-  macos-build:
-    name: Build for macOS 🍏
-    runs-on: macos-15
-    needs: check-event
-    defaults:
-      run:
-        shell: zsh --no-rcs --errexit --pipefail {0}
-    steps:
-      - uses: actions/checkout@v4
-        with:
-          submodules: recursive
-          fetch-depth: 0
-
-      - name: Set Up Environment 🔧
-        id: setup
-        run: |
-          : Set Up Environment 🔧
-          if (( ${+RUNNER_DEBUG} )) setopt XTRACE
-
-          print '::group::Enable Xcode 16.1'
-          sudo xcode-select --switch /Applications/Xcode_16.1.0.app/Contents/Developer
-          print '::endgroup::'
-
-          print '::group::Clean Homebrew Environment'
-          local -a unwanted_formulas=()
-          local -a remove_formulas=()
-          for formula (${unwanted_formulas}) {
-            if [[ -d ${HOMEBREW_PREFIX}/Cellar/${formula} ]] remove_formulas+=(${formula})
-          }
-
-          if (( #remove_formulas )) brew uninstall --ignore-dependencies ${remove_formulas}
-          print '::endgroup::'
-
-          local product_name
-          local product_version
-          read -r product_name product_version <<< \
-            "$(jq -r '. | {name, version} | join(" ")' buildspec.json)"
-
-          print "pluginName=${product_name}" >> $GITHUB_OUTPUT
-          print "pluginVersion=${product_version}" >> $GITHUB_OUTPUT
-
-      - uses: actions/cache/restore@v4
-        id: ccache-cache
-        with:
-          path: ${{ github.workspace }}/.ccache
-          key: ${{ runner.os }}-ccache-${{ needs.check-event.outputs.config }}
-          restore-keys: |
-            ${{ runner.os }}-ccache-
-
-      - name: Set Up Codesigning 🔑
-        uses: ./.github/actions/setup-macos-codesigning
-        if: fromJSON(needs.check-event.outputs.codesign)
-        id: codesign
-        with:
-          codesignIdentity: ${{ secrets.MACOS_SIGNING_APPLICATION_IDENTITY }}
-          installerIdentity: ${{ secrets.MACOS_SIGNING_INSTALLER_IDENTITY }}
-          codesignCertificate: ${{ secrets.MACOS_SIGNING_CERT }}
-          certificatePassword: ${{ secrets.MACOS_SIGNING_CERT_PASSWORD }}
-          keychainPassword: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }}
-          provisioningProfile: ${{ secrets.MACOS_SIGNING_PROVISIONING_PROFILE }}
-          notarizationUser: ${{ secrets.MACOS_NOTARIZATION_USERNAME }}
-          notarizationPassword: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }}
-
-      - name: Build Plugin 🧱
-        uses: ./.github/actions/build-plugin
-        with:
-          target: macos-universal
-          config: ${{ needs.check-event.outputs.config }}
-          codesign: ${{ fromJSON(needs.check-event.outputs.codesign) }}
-          codesignIdent: ${{ steps.codesign.outputs.codesignIdent }}
-
-      - name: Package Plugin 📀
-        uses: ./.github/actions/package-plugin
-        with:
-          target: macos-universal
-          config: ${{ needs.check-event.outputs.config }}
-          package: ${{ fromJSON(needs.check-event.outputs.package) }}
-          codesign: ${{ fromJSON(needs.check-event.outputs.codesign) && fromJSON(steps.codesign.outputs.haveCodesignIdent) }}
-          codesignIdent: ${{ steps.codesign.outputs.codesignIdent }}
-          installerIdent: ${{ steps.codesign.outputs.installerIdent }}
-          codesignTeam: ${{ steps.codesign.outputs.codesignTeam }}
-          notarize: ${{ fromJSON(needs.check-event.outputs.notarize) && fromJSON(steps.codesign.outputs.haveNotarizationUser) }}
-          codesignUser: ${{ secrets.MACOS_NOTARIZATION_USERNAME }}
-          codesignPass: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }}
-
-      - name: Upload Artifacts 📡
-        uses: actions/upload-artifact@v4
-        with:
-          name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-universal-${{ needs.check-event.outputs.commitHash }}
-          path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-universal.*
-
-      - name: Upload Debug Symbol Artifacts 🪲
-        uses: actions/upload-artifact@v4
-        if: ${{ needs.check-event.outputs.config == 'Release' }}
-        with:
-          name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-universal-${{ needs.check-event.outputs.commitHash }}-dSYMs
-          path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-universal-dSYMs.*
-
-      - uses: actions/cache/save@v4
-        if: github.event_name != 'pull_request' && steps.ccache-cache.outputs.cache-hit != 'true'
-        with:
-          path: ${{ github.workspace }}/.ccache
-          key: ${{ runner.os }}-ccache-${{ needs.check-event.outputs.config }}
-
-  ubuntu-build:
-    name: Build for Ubuntu 🐧
-    strategy:
-      matrix:
-        os: [ubuntu-24.04]
-    runs-on: ${{ matrix.os }}
-    needs: check-event
-    defaults:
-      run:
-        shell: bash
-    steps:
-      - uses: actions/checkout@v4
-        with:
-          submodules: recursive
-          fetch-depth: 0
-
-      - name: Set Up Environment 🔧
-        id: setup
-        run: |
-          : Set Up Environment 🔧
-          if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
-
-          read -r product_name product_version <<< \
-            "$(jq -r '. | {name, version} | join(" ")' buildspec.json)"
-
-          echo "pluginName=${product_name}" >> $GITHUB_OUTPUT
-          echo "pluginVersion=${product_version}" >> $GITHUB_OUTPUT
-
-      - uses: actions/cache/restore@v4
-        id: ccache-cache
-        with:
-          path: ${{ github.workspace }}/.ccache
-          key: ${{ runner.os }}-${{ matrix.os }}-ccache-x86_64-${{ needs.check-event.outputs.config }}
-          restore-keys: |
-            ${{ runner.os }}-${{ matrix.os }}-ccache-x86_64-
-
-      - name: Build Plugin 🧱
-        uses: ./.github/actions/build-plugin
-        with:
-          target: x86_64
-          config: ${{ needs.check-event.outputs.config }}
-
-      - name: Package Plugin 📀
-        uses: ./.github/actions/package-plugin
-        with:
-          target: x86_64
-          config: ${{ needs.check-event.outputs.config }}
-          package: ${{ fromJSON(needs.check-event.outputs.package) }}
-
-      - name: Upload Source Tarball 🗜️
-        uses: actions/upload-artifact@v4
-        with:
-          name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-${{ matrix.os }}-sources-${{ needs.check-event.outputs.commitHash }}
-          path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-source.*
-
-      - name: Upload Artifacts 📡
-        uses: actions/upload-artifact@v4
-        with:
-          name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-${{ matrix.os }}-x86_64-${{ needs.check-event.outputs.commitHash }}
-          path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-x86_64*.*
-
-      - name: Upload debug symbol artifacts 🪲
-        uses: actions/upload-artifact@v4
-        if: ${{ fromJSON(needs.check-event.outputs.package) }}
-        with:
-          name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-${{ matrix.os }}-x86_64-${{ needs.check-event.outputs.commitHash }}-dbgsym
-          path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-x86_64*-dbgsym.ddeb
-
-      - uses: actions/cache/save@v4
-        if: github.event_name != 'pull_request' && steps.ccache-cache.outputs.cache-hit != 'true'
-        with:
-          path: ${{ github.workspace }}/.ccache
-          key: ${{ runner.os }}-${{ matrix.os }}-ccache-x86_64-${{ needs.check-event.outputs.config }}
-
-  windows-build:
-    name: Build for Windows 🪟
-    runs-on: windows-2022
-    needs: check-event
-    defaults:
-      run:
-        shell: pwsh
-    steps:
-      - uses: actions/checkout@v4
-        with:
-          submodules: recursive
-          fetch-depth: 0
-
-      - name: Set Up Environment 🔧
-        id: setup
-        run: |
-          # Set Up Environment 🔧
-          if ( $Env:RUNNER_DEBUG -ne $null ) {
-            Set-PSDebug -Trace 1
-          }
-
-          $BuildSpec = Get-Content -Path buildspec.json -Raw | ConvertFrom-Json
-          $ProductName = $BuildSpec.name
-          $ProductVersion = $BuildSpec.version
-
-          "pluginName=${ProductName}" >> $env:GITHUB_OUTPUT
-          "pluginVersion=${ProductVersion}" >> $env:GITHUB_OUTPUT
-
-      - name: Build Plugin 🧱
-        uses: ./.github/actions/build-plugin
-        with:
-          target: x64
-          config: ${{ needs.check-event.outputs.config }}
-
-      - name: Package Plugin 📀
-        uses: ./.github/actions/package-plugin
-        with:
-          target: x64
-          config: ${{ needs.check-event.outputs.config }}
-          package: ${{ fromJSON(needs.check-event.outputs.package) }}
-
-      - name: Upload Artifacts 📡
-        uses: actions/upload-artifact@v4
-        with:
-          name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-windows-x64-${{ needs.check-event.outputs.commitHash }}
-          path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-windows-x64*.*

+ 0 - 27
.github/workflows/check-format.yaml

@@ -1,27 +0,0 @@
-name: Check Code Formatting 🛠️
-on:
-  workflow_call:
-jobs:
-  clang-format:
-    runs-on: ubuntu-24.04
-    steps:
-      - uses: actions/checkout@v4
-        with:
-          fetch-depth: 0
-      - name: clang-format check 🐉
-        id: clang-format
-        uses: ./.github/actions/run-clang-format
-        with:
-          failCondition: error
-
-  gersemi:
-    runs-on: ubuntu-24.04
-    steps:
-      - uses: actions/checkout@v4
-        with:
-          fetch-depth: 0
-      - name: gersemi Check 🎛️
-        id: gersemi
-        uses: ./.github/actions/run-gersemi
-        with:
-          failCondition: error

+ 0 - 18
.github/workflows/dispatch.yaml

@@ -1,18 +0,0 @@
-name: Dispatch
-run-name: Dispatched Repository Actions - ${{ inputs.job }} ⌛️
-on:
-  workflow_dispatch:
-    inputs:
-      job:
-        description: Dispatch job to run
-        required: true
-        type: choice
-        options:
-          - build
-permissions:
-  contents: write
-jobs:
-  check-and-build:
-    if: inputs.job == 'build'
-    uses: ./.github/workflows/build-project.yaml
-    secrets: inherit

+ 0 - 27
.github/workflows/pr-pull.yaml

@@ -1,27 +0,0 @@
-name: Pull Request
-run-name: ${{ github.event.pull_request.title }} pull request run 🚀
-on:
-  workflow_dispatch:
-  pull_request:
-    paths-ignore:
-      - '**.md'
-    branches: [master, main]
-    types: [ opened, synchronize, reopened ]
-permissions:
-  contents: read
-concurrency:
-  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
-  cancel-in-progress: true
-jobs:
-  check-format:
-    name: Check Formatting 🔍
-    uses: ./.github/workflows/check-format.yaml
-    permissions:
-      contents: read
-
-  build-project:
-    name: Build Project 🧱
-    uses: ./.github/workflows/build-project.yaml
-    secrets: inherit
-    permissions:
-      contents: read

+ 0 - 119
.github/workflows/push.yaml

@@ -1,119 +0,0 @@
-name: Push
-run-name: ${{ github.ref_name }} push run 🚀
-on:
-  push:
-    branches:
-      - master
-      - main
-      - 'release/**'
-    tags:
-      - '*'
-permissions:
-  contents: write
-jobs:
-  check-format:
-    name: Check Formatting 🔍
-    if: github.ref_name == 'master' || github.ref_name == 'main'
-    uses: ./.github/workflows/check-format.yaml
-    permissions:
-      contents: read
-
-  build-project:
-    name: Build Project 🧱
-    uses: ./.github/workflows/build-project.yaml
-    secrets: inherit
-    permissions:
-      contents: read
-
-  create-release:
-    name: Create Release 🛫
-    if: github.ref_type == 'tag'
-    runs-on: ubuntu-24.04
-    needs: build-project
-    defaults:
-      run:
-        shell: bash
-    steps:
-      - name: Check Release Tag ☑️
-        id: check
-        run: |
-          : Check Release Tag ☑️
-          if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
-          shopt -s extglob
-
-          case "${GITHUB_REF_NAME}" in
-            +([0-9]).+([0-9]).+([0-9]) )
-              echo 'validTag=true' >> $GITHUB_OUTPUT
-              echo 'prerelease=false' >> $GITHUB_OUTPUT
-              echo "version=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT
-              ;;
-            +([0-9]).+([0-9]).+([0-9])-@(beta|rc)*([0-9]) )
-              echo 'validTag=true' >> $GITHUB_OUTPUT
-              echo 'prerelease=true' >> $GITHUB_OUTPUT
-              echo "version=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT
-              ;;
-            *) echo 'validTag=false' >> $GITHUB_OUTPUT ;;
-          esac
-
-      - name: Download Build Artifacts 📥
-        uses: actions/download-artifact@v4
-        if: fromJSON(steps.check.outputs.validTag)
-        id: download
-
-      - name: Rename Files 🏷️
-        if: fromJSON(steps.check.outputs.validTag)
-        run: |
-          : Rename Files 🏷️
-          if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
-          shopt -s extglob
-          shopt -s nullglob
-
-          root_dir="$(pwd)"
-          commit_hash="${GITHUB_SHA:0:9}"
-
-          variants=(
-            'windows-x64;zip|exe'
-            'macos-universal;tar.xz|pkg'
-            'ubuntu-24.04-x86_64;tar.xz|deb|ddeb'
-            'sources;tar.xz'
-          )
-
-          for variant_data in "${variants[@]}"; do
-            IFS=';' read -r variant suffix <<< "${variant_data}"
-
-            candidates=(*-${variant}-${commit_hash}/@(*|*-dbgsym).@(${suffix}))
-
-            for candidate in "${candidates[@]}"; do
-              mv "${candidate}" "${root_dir}"
-            done
-          done
-
-      - name: Generate Checksums 🪪
-        if: fromJSON(steps.check.outputs.validTag)
-        run: |
-          : Generate Checksums 🪪
-          if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
-          shopt -s extglob
-
-          echo "### Checksums" > ${{ github.workspace }}/CHECKSUMS.txt
-          for file in ${{ github.workspace }}/@(*.exe|*.deb|*.ddeb|*.pkg|*.tar.xz|*.zip); do
-            echo "    ${file##*/}: $(sha256sum "${file}" | cut -d " " -f 1)" >> ${{ github.workspace }}/CHECKSUMS.txt
-          done
-
-      - name: Create Release 🛫
-        if: fromJSON(steps.check.outputs.validTag)
-        id: create_release
-        uses: softprops/action-gh-release@9d7c94cfd0a1f3ed45544c887983e9fa900f0564
-        with:
-          draft: true
-          prerelease: ${{ fromJSON(steps.check.outputs.prerelease) }}
-          tag_name: ${{ steps.check.outputs.version }}
-          name: ${{ needs.build-project.outputs.pluginName }} ${{ steps.check.outputs.version }}
-          body_path: ${{ github.workspace }}/CHECKSUMS.txt
-          files: |
-            ${{ github.workspace }}/*.exe
-            ${{ github.workspace }}/*.zip
-            ${{ github.workspace }}/*.pkg
-            ${{ github.workspace }}/*.deb
-            ${{ github.workspace }}/*.ddeb
-            ${{ github.workspace }}/*.tar.xz