mirror of
https://github.com/giongto35/cloud-game.git
synced 2026-07-19 01:24:26 +00:00
* Follow Go standard for naming constants * Use reformatted pixFormats for Libretro cores * Use OpenGL 2.1 Core profile bindings for render instead 4.1 * Cleanup the code * SDL attributes should be set before the sdl.Init call * Use simple vertical frame flip function instead imaging lib with OpenGL renderer * Use the separate control flow for the macOS OpenGL context handling * Add OpenGL pixel type/format switch based on cores callback * Use unified log instead of fmt * Clean code * Remove unnecessary SDL init flag * Printout errors with SDL / OpenGL functions * Add CGO Libretro logging output * Use main thread lock for windows and OpenGL context * Remove Darwin OS switch * Add extended OpenGL version info print * Update Libretro cores info print * Add game library module (#232) * Add game library * Add missing local game lib files * Add missing return statement * Use v2 suffix * Bump the dependencies * Update Libretro modules to support headless test runners * Port old savestates tests as example for Libretro cores runner testing * Add n64 core example game and a test * Update room tests for various games * Add frame dump support for CI builds * Add frame rendering to image output for core testing * Update ROM frame exporter in tests * Disable Docker image publishing * Add frame rendering output for non-gl cores for CI * Add auto GL context override for headless, gpu-less machines (e.g. Github CI Xeon) * Add Windows CI headless cores frame render config * Add missing Mesa OpenGL drivers to Ubuntu CI * Add mupen n64 core download into CI tests * Add Linux, macOS, Windows core frame render tests into CI * Remove unnecessary var * Add some comments * Revert Y flip * Move OpenGL into a separate package * Add SDL package * Update modules
210 lines
7.1 KiB
Text
Vendored
210 lines
7.1 KiB
Text
Vendored
# ------------------------------------------------------------------------
|
|
# Release workflow for multiple OSes (Linux x64, macOS x64, Windows x64)
|
|
# ------------------------------------------------------------------------
|
|
# +---------------+ +---------------+
|
|
# | BUILD | +---------------+ | PUBLISH |
|
|
# +---------------+ | RELEASE | +---------------+
|
|
# | compile | +---------------+ | upload build |
|
|
# | | | | | | | |
|
|
# | nix ---> | -> | get release | -> | <-- nix |
|
|
# | mac ------> | | (use old) | | <--- mac |
|
|
# | win ----> | | | <- | <---- win |
|
|
# +---------------+ +---------------+ +---------------+
|
|
# ------------------------------------------------------------------------
|
|
# Usage:
|
|
# This workflow adds multi-os application builds when v-prefixed tags
|
|
# pushed into the repository, e.g. git tag v9001 & git push --tags or
|
|
# a new Github release is created with such tags.
|
|
# ------------------------------------------------------------------------
|
|
|
|
name: release
|
|
# run only when pushing v-prefixed SemVer tags (e.g. v1.0.0, v2.0.1, and etc.)
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
env:
|
|
go-version: 1.15
|
|
app-name: cloud-game
|
|
app-arch: x86_64
|
|
jobs:
|
|
# run app build for each OS in parallel
|
|
build:
|
|
name: Build
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
runs-on: ${{ matrix.os }}
|
|
env:
|
|
release-dir: _release
|
|
steps:
|
|
- name: Get the source
|
|
uses: actions/checkout@v2
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v2
|
|
with:
|
|
go-version: ${{ env.go-version }}
|
|
|
|
- name: Get Linux dev libraries and tools
|
|
if: matrix.os == 'ubuntu-latest'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y make pkg-config libvpx-dev libopus-dev libopusfile-dev libsdl2-dev
|
|
|
|
- name: Get MacOS dev libraries and tools
|
|
if: matrix.os == 'macos-latest'
|
|
run: |
|
|
brew install libvpx pkg-config opus opusfile sdl2
|
|
|
|
- name: Get Windows dev libraries and tools
|
|
if: matrix.os == 'windows-latest'
|
|
uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: MINGW64
|
|
path-type: inherit
|
|
update: true
|
|
|
|
- name: Load Go modules maybe?
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: ~/go/pkg/mod
|
|
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-go-
|
|
|
|
- name: Build Windows app
|
|
if: matrix.os == 'windows-latest'
|
|
shell: msys2 {0}
|
|
run: >
|
|
pacman -S --noconfirm --needed make
|
|
mingw-w64-x86_64-gcc
|
|
mingw-w64-x86_64-pkg-config
|
|
mingw-w64-x86_64-dlfcn
|
|
mingw-w64-x86_64-libvpx
|
|
mingw-w64-x86_64-opusfile
|
|
mingw-w64-x86_64-SDL2
|
|
|
|
make release RELEASE_DIR=${{ env.release-dir }} DLIB_SEARCH_PATTERN=/mingw.*dll CORE_EXT=*.dll
|
|
|
|
- name: Build Linux app
|
|
if: matrix.os == 'ubuntu-latest'
|
|
run: |
|
|
make release RELEASE_DIR=${{ env.release-dir }} DLIB_SEARCH_PATTERN=/usr/lib.*\\\\s CORE_EXT=*_libretro.so
|
|
|
|
- name: Build macOS app
|
|
if: matrix.os == 'macos-latest'
|
|
run: |
|
|
# skip copy libs due to outrageous otool behaviour, depend on sys install
|
|
# should be recursive + paths rewritten to @executable_path
|
|
# lddx seems to be working ok
|
|
go get github.com/jtanx/lddx
|
|
make release RELEASE_DIR=${{ env.release-dir }} DLIB_ALTER=true DLIB_TOOL="lddx -r -c" CORE_EXT=*.dylib
|
|
|
|
- name: Save built app for upload
|
|
uses: actions/upload-artifact@v1
|
|
with:
|
|
name: ${{ runner.os }}
|
|
path: ${{ env.release-dir }}
|
|
|
|
release:
|
|
name: Create or find Github release
|
|
needs: build
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Trying to find existing release
|
|
uses: actions/github-script@0.9.0
|
|
id: release_search
|
|
with:
|
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
|
result-encoding: string
|
|
script: |
|
|
try {
|
|
const release = await github.repos.getReleaseByTag({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
tag: context.ref.replace('refs/tags/', '')
|
|
});
|
|
return release.data.upload_url;
|
|
} catch (ignored) {}
|
|
return '';
|
|
- name: Create new release maybe?
|
|
id: create_release
|
|
if: steps.release_search.outputs.result == ''
|
|
uses: actions/create-release@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
tag_name: ${{ github.ref }}
|
|
release_name: ${{ github.ref }}
|
|
draft: false
|
|
prerelease: false
|
|
# pass assets upload url of existing or new release
|
|
# between jobs (VMs) through txt files
|
|
- name: Get release upload URL
|
|
run: |
|
|
echo '${{ steps.create_release.outputs.upload_url }}${{ steps.release_search.outputs.result }}' > upload_url
|
|
- name: Save release upload URL
|
|
uses: actions/upload-artifact@v1
|
|
with:
|
|
name: upload_url
|
|
path: ./
|
|
|
|
publish:
|
|
name: Publish
|
|
needs: release
|
|
strategy:
|
|
matrix:
|
|
# should be same as runner.os
|
|
target-os: [Linux, macOS, Windows]
|
|
include:
|
|
- target-os: Linux
|
|
compress: tar -zcf
|
|
archive-ext: tar.gz
|
|
archive-mime: tar
|
|
- target-os: macOS
|
|
compress: tar -zcf
|
|
archive-ext: tar.gz
|
|
archive-mime: tar
|
|
- target-os: Windows
|
|
compress: zip -qq -r
|
|
archive-ext: zip
|
|
archive-mime: zip
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Get version tag
|
|
id: get_version
|
|
run: |
|
|
echo ::set-output name=version::${GITHUB_REF#refs/tags/}
|
|
- name: Get release upload url
|
|
uses: actions/download-artifact@v1
|
|
with:
|
|
name: upload_url
|
|
- name: Read release upload url
|
|
id: upload_url
|
|
run: |
|
|
value=`cat upload_url/upload_url`
|
|
echo "::set-output name=url::$value"
|
|
- name: Get the build
|
|
uses: actions/download-artifact@v1
|
|
with:
|
|
name: ${{ matrix.target-os }}
|
|
- name: Compress the build
|
|
id: compress
|
|
# compress all the files without a parent dir
|
|
# (cd into arch dir -> make archive in its parent -> go back)
|
|
run: |
|
|
cd ./${{ matrix.target-os }}
|
|
archive='${{ env.app-name }}-${{ steps.get_version.outputs.version }}-${{ matrix.target-os }}-${{ env.app-arch }}'
|
|
compress='${{ matrix.compress }} ../${archive,,}.${{ matrix.archive-ext }} *'
|
|
eval $compress
|
|
cd ../
|
|
echo ::set-output name=archive_name::${archive,,}.${{ matrix.archive-ext }}
|
|
- name: Upload release asset
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.upload_url.outputs.url }}
|
|
asset_path: ./${{ steps.compress.outputs.archive_name }}
|
|
asset_name: ${{ steps.compress.outputs.archive_name }}
|
|
asset_content_type: application/${{ matrix.archive-mime }}
|