@@ -547,7 +547,7 @@ jobs:
547547 - name : Checkout
548548 uses : actions/checkout@v4
549549
550- - name : Fix python
550+ - name : Fix homebrew python
551551 if : matrix.os_name == 'macos' && matrix.os_version == '13'
552552 run : |
553553 rm '/usr/local/bin/2to3'
@@ -562,7 +562,14 @@ jobs:
562562 rm '/usr/local/bin/python3.12-config'
563563 brew install python
564564
565+ - name : Setup python
566+ id : python
567+ uses : actions/setup-python@v5
568+ with :
569+ python-version : ' 3.11'
570+
565571 - name : Configure formula
572+ id : configure-formula
566573 run : |
567574 # variables for formula
568575 branch="${{ github.head_ref }}"
@@ -598,6 +605,8 @@ jobs:
598605 echo "Clone URL: ${clone_url}"
599606 echo "Tag: ${tag}"
600607
608+ echo "build-version=${build_version}" >> $GITHUB_OUTPUT
609+
601610 mkdir -p build
602611 cmake \
603612 -B build \
@@ -652,6 +661,42 @@ jobs:
652661 token : ${{ secrets.GH_BOT_TOKEN }}
653662 validate : true
654663
664+ - name : Generate gcov report
665+ # any except canceled or skipped
666+ if : >-
667+ always() &&
668+ matrix.release != true &&
669+ (steps.test.outcome == 'success' || steps.test.outcome == 'failure')
670+ id : test_report
671+ run : |
672+ cd $(brew --prefix)/Cellar/sunshine/${{ steps.configure-formula.outputs.build_version }}/bin
673+
674+ ${{ steps.python.outputs.python-path }} -m pip install gcovr
675+ sudo ${{ steps.python.outputs.python-path }} -m gcovr . -r ${{ github.workspace }}/src \
676+ --exclude-noncode-lines \
677+ --exclude-throw-branches \
678+ --exclude-unreachable-branches \
679+ --gcov-object-directory $(pwd) \
680+ --verbose \
681+ --xml-pretty \
682+ -o ${{ github.workspace }}/build/coverage.xml
683+
684+ - name : Upload coverage
685+ # any except canceled or skipped
686+ if : >-
687+ always() &&
688+ matrix.release != true &&
689+ (steps.test_report.outcome == 'success') &&
690+ startsWith(github.repository, 'LizardByte/')
691+ uses : codecov/codecov-action@v5
692+ with :
693+ disable_search : true
694+ fail_ci_if_error : true
695+ files : ./build/coverage.xml
696+ flags : ${{ matrix.os_name }}-${{ matrix.os_version }} (Homebrew)
697+ token : ${{ secrets.CODECOV_TOKEN }}
698+ verbose : true
699+
655700 - name : Create/Update GitHub Release
656701 if : >-
657702 matrix.release &&
@@ -701,261 +746,6 @@ jobs:
701746 token : ${{ secrets.GH_BOT_TOKEN }}
702747 validate : false
703748
704- build_mac_port :
705- needs : [setup_release]
706- strategy :
707- fail-fast : false # false to test all, true to fail entire job if any fail
708- matrix :
709- include :
710- # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories
711- # while GitHub has larger macOS runners, they are not available for our repos :(
712- - os_version : " 13"
713- release : true
714- - os_version : " 14"
715- name : Macports (macOS-${{ matrix.os_version }})
716- runs-on : macos-${{ matrix.os_version }}
717-
718- steps :
719- - name : Checkout
720- uses : actions/checkout@v4
721-
722- - name : Checkout ports
723- uses : actions/checkout@v4
724- with :
725- repository : macports/macports-ports
726- fetch-depth : 64
727- path : ports
728-
729- - name : Checkout mpbb
730- uses : actions/checkout@v4
731- with :
732- repository : macports/mpbb
733- path : mpbb
734-
735- - name : Setup Dependencies Macports
736- run : |
737- # install dependencies using homebrew
738- brew install cmake
739-
740- - name : Setup python
741- id : python
742- uses : actions/setup-python@v5
743- with :
744- python-version : ' 3.11'
745-
746- - name : Configure Portfile
747- run : |
748- # variables for Portfile
749- branch="${{ github.head_ref }}"
750- commit=${{ needs.setup_release.outputs.release_commit }}
751-
752- # check the branch variable
753- if [ -z "$branch" ]
754- then
755- echo "This is a PUSH event"
756- branch="${{ github.ref_name }}"
757- build_version=${{ needs.setup_release.outputs.release_tag }}
758- clone_url=${{ github.event.repository.clone_url }}
759- else
760- echo "This is a PR event"
761- clone_url=${{ github.event.pull_request.head.repo.clone_url }}
762- fi
763- echo "Commit: ${commit}"
764- echo "Clone URL: ${clone_url}"
765-
766- mkdir -p build
767- cmake \
768- -B build \
769- -S . \
770- -DBUILD_VERSION=${build_version} \
771- -DGITHUB_BRANCH=${branch} \
772- -DGITHUB_COMMIT=${commit} \
773- -DGITHUB_CLONE_URL=${clone_url} \
774- -DSUNSHINE_CONFIGURE_PORTFILE=ON \
775- -DSUNSHINE_CONFIGURE_ONLY=ON
776-
777- # copy Portfile to artifacts
778- mkdir -p artifacts
779- cp -f ./build/Portfile ./artifacts/
780-
781- # copy Portfile to ports
782- mkdir -p ./ports/multimedia/Sunshine
783- cp -f ./build/Portfile ./ports/multimedia/Sunshine/Portfile
784-
785- # testing
786- cat ./artifacts/Portfile
787-
788- - name : Bootstrap MacPorts
789- run : |
790- . ports/.github/workflows/bootstrap.sh
791-
792- # Add getopt, mpbb and the MacPorts paths to $PATH for the subsequent steps.
793- echo "/opt/mports/bin" >> $GITHUB_PATH
794- echo "${PWD}/mpbb" >> $GITHUB_PATH
795- echo "/opt/local/bin" >> $GITHUB_PATH
796- echo "/opt/local/sbin" >> $GITHUB_PATH
797-
798- - name : Run port lint
799- run : |
800- port -q lint "Sunshine"
801-
802- - name : Build port
803- env :
804- subportlist : ${{ steps.subportlist.outputs.subportlist }}
805- id : build
806- run : |
807- subport="Sunshine"
808-
809- workdir="/tmp/mpbb/$subport"
810- mkdir -p "$workdir/logs"
811-
812- echo "::group::Installing dependencies"
813- sudo mpbb \
814- --work-dir "$workdir" \
815- install-dependencies \
816- "$subport"
817- echo "::endgroup::"
818-
819- echo "::group::Installing ${subport}"
820- sudo mpbb \
821- --work-dir "$workdir" \
822- install-port \
823- --source \
824- "$subport"
825- echo "::endgroup::"
826-
827- - name : Build Logs
828- if : always()
829- run : |
830- logfile="/opt/local/var/macports/logs/_Users_runner_work_Sunshine_Sunshine_ports_multimedia_Sunshine/Sunshine/main.log"
831- cat "$logfile"
832- sudo mv "${logfile}" "${logfile}.bak"
833-
834- - name : Upload Artifacts
835- if : ${{ matrix.release }}
836- uses : actions/upload-artifact@v4
837- with :
838- name : sunshine-macports
839- path : artifacts/
840-
841- - name : Fix permissions
842- run : |
843- # https://apple.stackexchange.com/questions/362865/macos-list-apps-authorized-for-full-disk-access
844- # https://github.com/actions/runner-images/issues/9529
845- # https://github.com/actions/runner-images/pull/9530
846-
847- # function to execute sql query for each value
848- function execute_sql_query {
849- local value=$1
850- local dbPath=$2
851-
852- echo "Executing SQL query for value: $value"
853- sudo sqlite3 "$dbPath" "INSERT OR IGNORE INTO access VALUES($value);"
854- }
855-
856- # Find all provisioner paths and store them in an array
857- readarray -t provisioner_paths < <(sudo find /opt /usr -name provisioner)
858- echo "Provisioner paths: ${provisioner_paths[@]}"
859-
860- # Create an empty array
861- declare -a values=()
862-
863- # Loop through the provisioner paths and add them to the values array
864- for p_path in "${provisioner_paths[@]}"; do
865- # Adjust the service name and other parameters as needed
866- values+=("'kTCCServiceAccessibility','${p_path}',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,NULL,1592919552")
867- values+=("'kTCCServiceScreenCapture','${p_path}',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159")
868- done
869-
870- echo "Values: ${values[@]}"
871-
872- if [[ "${{ matrix.os_version }}" == "14" ]]; then
873- # TCC access table in Sonoma has extra 4 columns: pid, pid_version, boot_uuid, last_reminded
874- for i in "${!values[@]}"; do
875- values[$i]="${values[$i]},NULL,NULL,'UNUSED',${values[$i]##*,}"
876- done
877- fi
878-
879- # system and user databases
880- dbPaths=(
881- "/Library/Application Support/com.apple.TCC/TCC.db"
882- "$HOME/Library/Application Support/com.apple.TCC/TCC.db"
883- )
884-
885- for value in "${values[@]}"; do
886- for dbPath in "${dbPaths[@]}"; do
887- echo "Column names for $dbPath"
888- echo "-------------------"
889- sudo sqlite3 "$dbPath" "PRAGMA table_info(access);"
890- echo "Current permissions for $dbPath"
891- echo "-------------------"
892- sudo sqlite3 "$dbPath" "SELECT * FROM access WHERE service='kTCCServiceScreenCapture';"
893- execute_sql_query "$value" "$dbPath"
894- echo "Updated permissions for $dbPath"
895- echo "-------------------"
896- sudo sqlite3 "$dbPath" "SELECT * FROM access WHERE service='kTCCServiceScreenCapture';"
897- done
898- done
899-
900- - name : Run tests
901- id : test
902- timeout-minutes : 10
903- working-directory :
904- /opt/local/var/macports/build/_Users_runner_work_Sunshine_Sunshine_ports_multimedia_Sunshine/Sunshine/work/build/tests
905- run : |
906- sudo ./test_sunshine --gtest_color=yes
907-
908- - name : Generate gcov report
909- # any except canceled or skipped
910- if : always() && (steps.test.outcome == 'success' || steps.test.outcome == 'failure')
911- id : test_report
912- working-directory :
913- /opt/local/var/macports/build/_Users_runner_work_Sunshine_Sunshine_ports_multimedia_Sunshine/Sunshine/work
914- run : |
915- base_dir=$(pwd)
916- build_dir=${base_dir}/build
917-
918- # get the directory name that starts with Sunshine-*
919- dir=$(ls -d Sunshine-*)
920-
921- cd ${build_dir}
922- ${{ steps.python.outputs.python-path }} -m pip install gcovr
923- sudo ${{ steps.python.outputs.python-path }} -m gcovr . -r ../${dir}/src \
924- --exclude-noncode-lines \
925- --exclude-throw-branches \
926- --exclude-unreachable-branches \
927- --gcov-object-directory $(pwd) \
928- --verbose \
929- --xml-pretty \
930- -o ${{ github.workspace }}/build/coverage.xml
931-
932- - name : Upload coverage
933- # any except canceled or skipped
934- if : >-
935- always() &&
936- (steps.test_report.outcome == 'success') &&
937- startsWith(github.repository, 'LizardByte/')
938- uses : codecov/codecov-action@v5
939- with :
940- disable_search : true
941- fail_ci_if_error : false # todo: re-enable this when action is fixed
942- files : ./build/coverage.xml
943- flags : ${{ runner.os }}-${{ matrix.os_version }}
944- token : ${{ secrets.CODECOV_TOKEN }}
945- verbose : true
946-
947- - name : Create/Update GitHub Release
948- if : ${{ needs.setup_release.outputs.publish_release == 'true' }}
949- uses :
LizardByte/[email protected] 950- with :
951- allowUpdates : true
952- body : ${{ needs.setup_release.outputs.release_body }}
953- generateReleaseNotes : ${{ needs.setup_release.outputs.release_generate_release_notes }}
954- name : ${{ needs.setup_release.outputs.release_tag }}
955- prerelease : true
956- tag : ${{ needs.setup_release.outputs.release_tag }}
957- token : ${{ secrets.GH_BOT_TOKEN }}
958-
959749 build_win :
960750 name : Windows
961751 runs-on : windows-2019
0 commit comments