1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-07-03 14:41:21 +00:00
QB64-PE/.github/workflows/build-process.yml
Matthew Kilgore 2deac87b60 Fix Linux build agent audio problems
It's still not entirely clear what the underlying issue is, but the ALSA
device provided by pulseaudio stops working after so many tests use it.
I've tried various approaches, but simply restarting pulseaudio after
every test is a bruteforce but successful solution. In practice it also
doesn't have any noticeable performance penalty, so it seems like a file
solution.

The `CI_TESTING` environment variable is used to avoid restarting
pulseaudio if the tests aren't being run in the CI environment (we don't
want to restart your pulseaudio instance if you're running them locally!)
2022-09-17 02:41:22 -04:00

130 lines
3.9 KiB
YAML

name: QB64-PE Build Process
on:
workflow_call:
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
platform: x64
prefix: lnx
- os: macos-latest
platform: x64
prefix: osx
- os: windows-latest
platform: x64
prefix: win
- os: windows-latest
platform: x86
prefix: win
runs-on: ${{ matrix.os }}
env:
PLATFORM: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
# A deploy key is setup so that the potential push of ./internal/source can
# trigger a new build. Care is taken to make sure loops cannot happen.
- uses: webfactory/ssh-agent@v0.5.4
if: ${{ github.event_name == 'push' && matrix.os == 'ubuntu-latest' }}
with:
ssh-private-key: ${{ secrets.ACTION_DEPLOY_KEY }}
- name: Install dependencies
if: ${{ matrix.os == 'ubuntu-latest' }}
run: sudo apt update && sudo apt install build-essential x11-utils mesa-common-dev libglu1-mesa-dev libasound2-dev zlib1g-dev pulseaudio dbus-x11 libportaudio2
# Pulseaudio puts a dummy ALSA device in place, which allows us to do
# audio testing on Linux
- name: Start Pulseaudio
if: ${{ matrix.os == 'ubuntu-latest' }}
run: dbus-launch pulseaudio --start
- name: Calculate Version
shell: bash
run: .ci/calculate_version.sh
- name: Read version for artifacts
shell: bash
run: echo "version=$(.ci/read-version.sh)" >> $GITHUB_ENV
- name: Bootstrap compiler Linux/OSX
if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' }}
run: .ci/bootstrap.sh ${{ matrix.prefix }}
- name: Bootstrap compiler Windows
if: ${{ matrix.os == 'windows-latest' }}
run: .ci/bootstrap.bat
- name: Compile Linux/OSX
if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' }}
run: .ci/compile.sh ${{ matrix.prefix }}
- name: Compile Windows
if: ${{ matrix.os == 'windows-latest' }}
run: .ci/compile.bat
- name: Test libqb
shell: bash
run: tests/run_c_tests.sh
- name: Print QB64-PE Version
run: ./qb64pe -?
- name: Test
shell: bash
env:
CI_TESTING: y
run: tests/run_tests.sh
- name: Create QB64-PE Artifact
shell: bash
run: .ci/make-dist.sh ${{ matrix.os }} "${{ env.version }}"
# Note that compiling programs in dist does modify the ./dist and make it
# dirty, but that's ok because we've already create the .7z or .tar.gz
# artifacts in the previous step
- name: Test QB64-PE Artifact
shell: bash
run: tests/run_dist_tests.sh ./dist/qb64pe ${{ matrix.prefix }}
# Only update ./internal/source if we're building on Linux, building on
# the main branch, and building a Pull request merge. Otherwise the repo
# is left alone.
- name: Update ./internal/source
if: ${{ github.event_name == 'push' && matrix.os == 'ubuntu-latest' && github.ref == 'refs/heads/main' && contains(github.event.head_commit.message, 'Merge pull request') }}
run: .ci/push-internal-source.sh
- uses: actions/upload-artifact@v3
if: always()
with:
name: qb64pe-${{ matrix.prefix }}${{ matrix.prefix == 'win' && format('-{0}', matrix.platform) || '' }}-${{ env.version }}
path: |
tests/results/
qb64pe_win-x86*.7z
qb64pe_win-x64*.7z
qb64pe_lnx*.tar.gz
qb64pe_osx*.tar.gz
- name: Create release
if: startsWith(github.ref, 'refs/tags/v')
uses: softprops/action-gh-release@v1
with:
draft: true
files: |
qb64pe_win-x86*.7z
qb64pe_win-x64*.7z
qb64pe_lnx*.tar.gz
qb64pe_osx*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}