.github/workflows/ci.yml
# This is a basic workflow to help you get started with Actions
name: CI
# Controls when the action will run.
on:
push:
tags:
- '*'
branches: [ main ]
pull_request:
branches: [ main ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
build:
name: CI Check for ${{ matrix.build_name }}
strategy:
matrix:
build_name:
- Ubuntu
- Windows (MinGW Cross Build)
- Web (Emscripten)
- Mac OS X
include:
- build_name: Ubuntu
os: ubuntu-latest
config_file: build_configs/ci.rb
release_file: mruby/build/host/bin/mruby-carbuncle
release_name: mruby-carbuncle
- build_name: Windows (MinGW Cross Build)
os: ubuntu-latest
config_file: build_configs/mingw.rb
release_file: mruby/build/mingw/bin/mruby-carbuncle.exe
release_name: mruby-carbuncle.exe
- build_name: Web (Emscripten)
os: ubuntu-latest
config_file: build_configs/emscripten.rb
release_folder: mruby/build/web/bin
release_file: mruby-carbuncle.web.zip
release_name: mruby-carbuncle.web.zip
- build_name: Mac OS X
os: macos-latest
config_file: build_configs/clang.rb
release_folder: examples/distributables/osx.app
release_file: mruby-carbuncle.app.zip
release_name: mruby-carbuncle.app.zip
runs-on: ${{ matrix.os }}
env:
MRUBY_CONFIG: ${{ matrix.config_file }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2'
bundler-cache: true
- name: Setup CMake
uses: jwlawson/actions-setup-cmake@v1.6
with:
cmake-version: '3.16.x'
- if: matrix.build_name == 'Web (Emscripten)'
name: Setup Emscripten
uses: mymindstorm/setup-emsdk@v11
with:
version: 3.1.47
actions-cache-folder: 'emsdk-cache'
- if: matrix.os == 'macos-latest'
name: Install dependencies
run: |
brew install ruby bison
brew link bison --force
- if: matrix.build_name == 'Windows (MinGW Cross Build)'
name: Install packages
run: >
sudo apt-get install -y
build-essential git mingw-w64
- if: matrix.build_name == 'Ubuntu'
name: Install packages
run: >
sudo apt-get install -y
build-essential git libasound2-dev mesa-common-dev
libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev
libglu1-mesa-dev libgtk-3-dev
- name: Install all gems
run: gem install rubyzip
- name: Build mruby
run: rake
- if: matrix.build_name == 'Mac OS X'
name: Build .app file for Mac OS X
run: cp mruby/build/host/bin/mruby-carbuncle examples/distributables/osx.app/mruby-carbuncle
- if: matrix.build_name == 'Web (Emscripten)' || matrix.build_name == 'Mac OS X'
name: Zip Files
uses: vimtor/action-zip@v1.1
with:
files: ${{ matrix.release_folder }}
dest: ${{ matrix.release_file }}
- if: github.ref_type == 'tag'
name: Read RELEASE.md for tag body
shell: bash
run: |
r=$(cat RELEASE.md)
r="${r//'%'/'%25'}" # Multiline escape sequences for %
r="${r//$'\n'/'%0A'}" # Multiline escape sequences for '\n'
r="${r//$'\r'/'%0D'}" # Multiline escape sequences for '\r'
echo "RELEASE_BODY=$r" >> $GITHUB_OUTPUT # <--- Set environment variable
- if: github.ref_type == 'tag'
name: Publish Binaries Tag for ${{ matrix.build_name }}
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ matrix.release_file }}
asset_name: ${{ matrix.release_name }}
tag: ${{ github.ref }}
overwrite: true
body: |
${{ steps.read_release.outputs.RELEASE_BODY }} # <--- Use environment variables that was created earlier