cloud-game/.github/workflows/release.yml.disabled
sergystepanov bd6e146e64
Fix errors/misuse with OpenGL-based core API (#237)
* 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
2020-11-04 18:59:12 +08:00

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 }}