holywyvern/carbuncle

View on GitHub
.github/workflows/ci.yml

Summary

Maintainability
Test Coverage
# 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