Skip to content

feat: setup build and splash screen (#2) #64

feat: setup build and splash screen (#2)

feat: setup build and splash screen (#2) #64

Workflow file for this run

---
name: CI
on:
pull_request:
branches:
- master
types:
- opened
- synchronize
- reopened
push:
branches:
- master
concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true
jobs:
setup_release:
name: Setup Release
outputs:
publish_release: ${{ steps.setup_release.outputs.publish_release }}
release_body: ${{ steps.setup_release.outputs.release_body }}
release_commit: ${{ steps.setup_release.outputs.release_commit }}
release_generate_release_notes: ${{ steps.setup_release.outputs.release_generate_release_notes }}
release_tag: ${{ steps.setup_release.outputs.release_tag }}
release_version: ${{ steps.setup_release.outputs.release_version }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Release
id: setup_release
uses: LizardByte/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
build:
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
shell: "bash"
- os: ubuntu-latest
shell: "bash"
- os: windows-latest
shell: "msys2 {0}"
name: Build (${{ matrix.os }})
needs: setup_release
runs-on: ${{ matrix.os }}
defaults:
run:
shell: ${{ matrix.shell }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Dependencies Linux
if: runner.os == 'Linux'
run: |
dependencies=(
"bison"
"build-essential"
"clang"
"cmake"
"flex"
"git"
"lld"
"llvm"
)
sudo apt-get update
sudo apt-get install --no-install-recommends -y "${dependencies[@]}"
- name: Setup Dependencies macOS
if: runner.os == 'macOS'
run: |
dependencies=(
"cmake"
"coreutils"
"lld"
"llvm"
)
brew install "${dependencies[@]}"
- name: Setup Dependencies Windows
if: runner.os == 'Windows'
uses: msys2/setup-msys2@v2
with:
msystem: MINGW64
update: true
install: >-
make
cmake
git
bison
flex
mingw-w64-x86_64-gcc
mingw-w64-x86_64-llvm
mingw-w64-x86_64-clang
mingw-w64-x86_64-lld
- name: Setup python
id: setup-python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Python Path
id: python-path
run: |
if [ "${{ runner.os }}" = "Windows" ]; then
# replace backslashes with double backslashes
python_path=$(echo "${{ steps.setup-python.outputs.python-path }}" | sed 's/\\/\\\\/g')
else
python_path=${{ steps.setup-python.outputs.python-path }}
fi
# step output
echo "python-path=${python_path}"
echo "python-path=${python_path}" >> $GITHUB_OUTPUT
- name: Build
run: |
export NXDK_DIR="$(pwd)/third-party/nxdk"
eval "$(${NXDK_DIR}/bin/activate -s)"
cd "${NXDK_DIR}"
make NXDK_ONLY=y
make tools
cd "${GITHUB_WORKSPACE}"
mkdir -p build
# the main target needs to be cross compiled
echo "--- Building ALL ---"
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE="${NXDK_DIR}/share/toolchain-nxdk.cmake"
cmake --build build
# TODO: Tests are not building properly...
# the tests target should not be cross compiled, so we can run it on the runner
# https://stackoverflow.com/a/64335131/11214013
# echo "--- Building tests ---"
# cmake \
# -B build/tests \
# -S . \
# -DBUILD_TESTS=ON
# cmake --build build/tests --target test_moonlight
# recursively list all files in build directory
ls -R build
# move artifacts
mkdir -p artifacts
tar -czf ./artifacts/Moonlight.tar.gz ./build/xbe
mv ./Moonlight.iso ./artifacts
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: moonlight-${{ runner.os }}
path: artifacts/
- name: Run tests
id: test
if: false
working-directory: build/tests
run: |
./test_moonlight --gtest_color=yes
- name: Generate gcov report
# any except canceled or skipped
if: always() && (steps.test.outcome == 'success' || steps.test.outcome == 'failure')
id: test_report
working-directory: build
run: |
${{ steps.python-path.outputs.python-path }} -m pip install gcovr
${{ steps.python-path.outputs.python-path }} -m gcovr . -r ../src \
--exclude-noncode-lines \
--exclude-throw-branches \
--exclude-unreachable-branches \
--verbose \
--xml-pretty \
-o coverage.xml
- name: Debug coverage file
if: >-
always() &&
steps.test_report.outcome == 'success'
run: |
cat build/coverage.xml
# todo: upload coverage in separate job similar to LizardByte/libdisplaydevice
- name: Upload coverage
# any except canceled or skipped
if: >-
always() &&
steps.test_report.outcome == 'success' &&
startsWith(github.repository, 'LizardByte/')
uses: codecov/codecov-action@v4
with:
disable_search: true
fail_ci_if_error: true
files: ./build/coverage.xml
flags: "${{ runner.os }}"
token: ${{ secrets.CODECOV_TOKEN }}
verbose: true
- name: Create/Update GitHub Release
# only publish release on ubuntu-latest, is there any difference between the different builds?
if: ${{ needs.setup_release.outputs.publish_release == 'true' && matrix.os == 'ubuntu-latest' }}
uses: LizardByte/[email protected]
with:
allowUpdates: true
body: ${{ needs.setup_release.outputs.release_body }}
generateReleaseNotes: ${{ needs.setup_release.outputs.release_generate_release_notes }}
name: ${{ needs.setup_release.outputs.release_tag }}
prerelease: true
tag: ${{ needs.setup_release.outputs.release_tag }}
token: ${{ secrets.GH_BOT_TOKEN }}