vita3k: refactor app path, support other app partitions. #4722
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: C/C++ CI | |
on: [push, pull_request] | |
jobs: | |
format-check: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Format check | |
run: .github/format-check.sh | |
build: | |
needs: [format-check] | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
config: [Release] | |
version: [zip, appimage] | |
include: | |
- os: ubuntu-latest | |
version: appimage | |
cache_path: ~/.ccache | |
extra_cmake_args: -DLINUXDEPLOY_COMMAND=/usr/local/bin/linuxdeploy-x86_64.AppImage | |
cmake_preset: linux-ninja-clang15-appimage | |
- os: ubuntu-latest | |
version: zip | |
cache_path: ~/.ccache | |
cmake_preset: linux-ninja-clang15 | |
- os: windows-latest | |
version: zip | |
cache_path: | | |
C:\vcpkg\installed | |
C:\vcpkg\packages | |
C:\Users\runneradmin\AppData\Local\ccache | |
extra_cmake_args: -DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static-md | |
cmake_preset: windows-ninja | |
- os: macos-latest | |
version: zip | |
cache_path: ~/Library/Caches/ccache | |
extra_cmake_args: -DCMAKE_OSX_ARCHITECTURES="x86_64" -DFORCE_BUILD_OPENSSL_MAC=ON -DVITA3K_FORCE_CUSTOM_BOOST=ON | |
cmake_preset: macos-ninja | |
exclude: | |
- os: macos-latest | |
version: appimage | |
- os: windows-latest | |
version: appimage | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
submodules: recursive | |
- name: Set up build environment (macos-latest) | |
run: | | |
brew install ccache ninja create-dmg | |
echo "$(brew --prefix ccache)/libexec" >> $GITHUB_PATH | |
ccache --set-config=compiler_check=content | |
if: matrix.os == 'macos-latest' | |
- name: Set up build environment (ubuntu-latest) | |
run: | | |
sudo add-apt-repository -y ppa:mhier/libboost-latest | |
sudo add-apt-repository universe | |
sudo apt update | |
sudo apt -y install ccache libboost-filesystem1.83-dev libboost-program-options1.83-dev libboost-system1.83-dev libgtk-3-dev libsdl2-dev ninja-build libfuse2 | |
if: matrix.os == 'ubuntu-latest' | |
- uses: ilammy/msvc-dev-cmd@v1 | |
if: matrix.os == 'windows-latest' | |
- uses: actions/cache@v4 | |
with: | |
path: ${{ matrix.cache_path }} | |
key: cache-${{ matrix.os }}-${{ matrix.config }}-${{ github.sha }} | |
restore-keys: | | |
cache-${{ matrix.os }}-${{ matrix.config }}- | |
- name: Set up build environment (windows-latest) | |
run: | | |
vcpkg install zlib:x64-windows-static-md boost-system:x64-windows-static-md boost-filesystem:x64-windows-static-md boost-program-options:x64-windows-static-md boost-icl:x64-windows-static-md boost-variant:x64-windows-static-md curl:x64-windows-static-md openssl:x64-windows-static-md | |
choco install ccache | |
if: matrix.os == 'windows-latest' | |
- name: Set up SDL 2.30.7 (ubuntu-latest) | |
run: | | |
SDL2VER=2.30.7 | |
if [[ ! -e ~/.ccache ]]; then | |
mkdir ~/.ccache | |
fi | |
cd ~/.ccache | |
if [[ ! -e SDL2-${SDL2VER} ]]; then | |
curl -sLO https://libsdl.org/release/SDL2-${SDL2VER}.tar.gz | |
tar -xzf SDL2-${SDL2VER}.tar.gz | |
cd SDL2-${SDL2VER} | |
./configure --prefix=/usr/local | |
make && cd ../ | |
rm SDL2-${SDL2VER}.tar.gz | |
fi | |
sudo make -C SDL2-${SDL2VER} install | |
if: matrix.os == 'ubuntu-latest' | |
- name: Set up linuxdeploy (ubuntu-latest, appimage) | |
run: | | |
if [[ ! -e linuxdeploy-x86_64.AppImage ]]; then | |
curl -sLO https://github.com/linuxdeploy/linuxdeploy/releases/latest/download/linuxdeploy-x86_64.AppImage | |
fi | |
sudo cp -f linuxdeploy-x86_64.AppImage /usr/local/bin/ | |
sudo chmod +x /usr/local/bin/linuxdeploy-x86_64.AppImage | |
if: matrix.os == 'ubuntu-latest' && matrix.version == 'appimage' | |
- name: Ccache setup | |
run: ccache -z | |
- name: CMake | |
run: | | |
cmake ${{ matrix.extra_cmake_args }} --preset ${{ matrix.cmake_preset }} | |
cmake --build build/${{ matrix.cmake_preset }} --config ${{ matrix.config }} | |
- name: CTest | |
working-directory: build/${{ matrix.cmake_preset }} | |
run: ctest --build-config ${{ matrix.config }} --output-on-failure | |
- name: Compute git short sha | |
shell: bash | |
run: echo "git_short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_ENV | |
- name: Set Build Variable | |
shell: bash | |
run: echo "build_variable=$(git rev-list HEAD --count)" >> $GITHUB_ENV | |
if: matrix.os == 'ubuntu-latest' | |
- name: Bundle Shared Objects | |
id: bundle_shared_objects | |
run: | | |
cd build/${{ matrix.cmake_preset }}/bin/${{ matrix.config }} | |
cp /usr/lib/x86_64-linux-gnu/libssl.so.3 ./libssl.so.3 | |
cp /usr/lib/x86_64-linux-gnu/libcrypto.so.3 ./libcrypto.so.3 | |
if: matrix.os == 'ubuntu-latest' | |
- name: Ccache statistics | |
run: ccache -s | |
- name: Create DMG (macos-latest) | |
run: | | |
cd build/${{ matrix.cmake_preset }}/bin/${{ matrix.config }} | |
create-dmg \ | |
--volname "Vita3K Installer" \ | |
--volicon Vita3K.app/Contents/Resources/Vita3K.icns \ | |
--window-size 500 300 \ | |
--icon-size 100 \ | |
--icon Vita3K.app 120 115 \ | |
--app-drop-link 360 115 \ | |
vita3k-${{ env.git_short_sha }}-${{ matrix.version }}-${{ matrix.os }}.dmg \ | |
Vita3K.app | |
rm -rf Vita3K.app | |
if: matrix.os == 'macos-latest' | |
- name: Clean appimage build (ubuntu-latest, appimage) | |
run: | | |
cd build/${{ matrix.cmake_preset }}/bin/${{ matrix.config }} | |
cp -f *AppImage* ../ | |
rm -rf ./* | |
cp -f ../*AppImage* ./ | |
rm -f ../*AppImage* | |
if: matrix.os == 'ubuntu-latest' && matrix.version == 'appimage' | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: vita3k-${{ env.git_short_sha }}-${{ matrix.version }}-${{ matrix.os }} | |
# path is set up to be <binary_dir>/bin/<config_type> since that's how multi-config | |
# generators work on CMake | |
path: build/${{ matrix.cmake_preset }}/bin/${{ matrix.config }} | |
outputs: | |
BuildTag: ${{ env.build_variable }} | |
ShortSHA: ${{ env.git_short_sha }} | |
create-release: | |
needs: [build] | |
strategy: | |
fail-fast: false | |
matrix: | |
repo: [master, store] | |
runs-on: "ubuntu-20.04" | |
if: | | |
github.ref == 'refs/heads/master' && | |
github.repository == 'Vita3K/Vita3K' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download Artifacts | |
uses: actions/download-artifact@v4 | |
- name: Get Build Variable | |
run: echo "Build_Variable=${{ needs.build.outputs.BuildTag }}" >> $GITHUB_ENV | |
- name: Get Git Short SHA | |
run: echo "Short_SHA=${{ needs.build.outputs.ShortSHA }}" >> $GITHUB_ENV | |
- name: Get latest commit message | |
run: echo "Latest_Commit_Message=$(git log -1 --pretty=format:'%s')" >> $GITHUB_ENV | |
- name: Get last committer | |
run: | | |
COMMITTER_NAME=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
https://api.github.com/repos/Vita3K/Vita3K/commits/${{ github.sha }} \ | |
| jq -r '.commit.author.name') | |
echo "Commiter_Name=$COMMITTER_NAME" >> $GITHUB_ENV | |
- name: Upload | |
shell: bash | |
run: | | |
mkdir artifacts/ | |
files=$(find . -name "*latest") | |
for f in $files; do | |
if [[ $f == *macos-latest ]] | |
then | |
cp $(basename $f)/$(basename $f).dmg artifacts/macos-latest.dmg | |
else | |
if [[ $f == *ubuntu-latest ]] | |
then | |
if [[ $f == *appimage* ]] | |
then | |
cp $(basename $f)/*.AppImage* artifacts/ | |
else | |
rm -f $(basename $f)/*.AppImage* | |
echo "Compressing $f" | |
(cd $(basename $f) && zip -r ../artifacts/$(basename $f | cut -d "-" -f 4)-latest.zip *) | |
fi | |
else | |
echo "Compressing $f" | |
(cd $(basename $f) && zip -r ../artifacts/$(basename $f | cut -d "-" -f 4)-latest.zip *) | |
fi | |
fi | |
done | |
ls -al artifacts/ | |
wget -c https://github.com/tcnksm/ghr/releases/download/v0.16.2/ghr_v0.16.2_linux_amd64.tar.gz | |
tar xfv ghr_v0.16.2_linux_amd64.tar.gz | |
ghr_v0.16.2_linux_amd64/ghr -u Vita3K -r Vita3K -recreate -n 'Automatic CI builds' -b "$(printf "Corresponding commit: ${{ github.sha }}\nVita3K Build: ${{ env.Build_Variable }}")" continuous artifacts/ | |
if: matrix.repo == 'master' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Make release on store repository | |
shell: bash | |
run: | | |
mkdir artifacts/ | |
files=$(find . -name "*latest") | |
for f in $files; do | |
if [[ $f == *macos-latest ]] | |
then | |
cp $(basename $f)/$(basename $f).dmg artifacts/vita3k-${{ env.Build_Variable }}-${{ env.Short_SHA }}_macos.dmg | |
else | |
if [[ $f == *ubuntu-latest ]] | |
then | |
if [[ $f == *appimage* ]] | |
then | |
cp $(basename $f)/*.AppImage* artifacts/ | |
else | |
rm -f $(basename $f)/*.AppImage* | |
echo "Compressing $f" | |
7z a -mx=9 artifacts/vita3k-${{ env.Build_Variable }}-${{ env.Short_SHA }}_ubuntu.7z $(basename $f) | |
fi | |
else | |
echo "Compressing $f" | |
7z a -mx=9 artifacts/vita3k-${{ env.Build_Variable }}-${{ env.Short_SHA }}_windows.7z $(basename $f) | |
fi | |
fi | |
done | |
ls -al artifacts/ | |
wget -c https://github.com/tcnksm/ghr/releases/download/v0.16.2/ghr_v0.16.2_linux_amd64.tar.gz | |
tar xfv ghr_v0.16.2_linux_amd64.tar.gz | |
ghr_v0.16.2_linux_amd64/ghr -u Vita3K -r Vita3K-builds -n "Build: ${{ env.Build_Variable }}" -b "$(printf "Corresponding commit: [${{ env.Latest_Commit_Message }}](https://github.com/Vita3K/Vita3K/commit/${{ github.sha }}) (${{ env.Commiter_Name }})")" ${{ env.Build_Variable }} artifacts/ | |
if: matrix.repo == 'store' | |
env: | |
GITHUB_TOKEN: ${{ secrets.STORE_TOKEN }} |