Files
2026-04-02 14:11:14 +02:00

148 lines
4.5 KiB
YAML

name: Automatic Build
permissions:
actions: write
on:
push:
branches:
- "main"
paths:
- "src/**"
- "CMakeLists.txt"
- ".github/workflows/build.yml"
pull_request:
paths:
- "src/**"
- "CMakeLists.txt"
- ".github/workflows/build.yml"
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name }}
cancel-in-progress: true
jobs:
build:
strategy:
matrix:
include:
- name: linux
runner: ubuntu-latest
dependencies: libboost-dev libboost-regex-dev libboost-json-dev libhunspell-dev build-essential cmake libgtk-3-dev libcurl4-openssl-dev
wx_version: v3.3.1
# the amount of cores on runners can be found here:
# https://docs.github.com/en/actions/reference/runners/github-hosted-runners#standard-github-hosted-runners-for-public-repositories
cores: 4
name: ${{matrix.name}} build
runs-on: ${{matrix.runner}}
env:
CCACHE_DIR: ${{github.workspace}}/ccache/${{matrix.name}}
CCACHE_SIZE: 1G
WXWIDGETS_DIR: ${{github.workspace}}/wxwidgets/${{matrix.name}}
CORES: ${{matrix.cores}}
steps:
- name: install deps
shell: bash
env:
DEPS: ${{matrix.dependencies}}
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends ccache $DEPS
- name: get wxwidgets cache
id: wxwidgets-cache
uses: actions/cache/restore@v5
with:
path: ${{env.WXWIDGETS_DIR}}
key: wxwidgets-${{matrix.wx_version}}-${{matrix.name}}
restore-keys: wxwidgets-${{matrix.wx_version}}-${{matrix.name}}
- name: checkout wxwidgets ${{matrix.wx_version}}
if: steps.wxwidgets-cache.outputs.cache-hit != 'true'
uses: actions/checkout@v6
with:
repository: wxWidgets/wxWidgets
ref: ${{matrix.wx_version}}
path: wxWidgets
- name: compile wxwidgets
if: steps.wxwidgets-cache.outputs.cache-hit != 'true'
shell: bash
run: |
cd wxWidgets
echo "::group::submodules"
git submodule update --init src/expat src/stc/scintilla src/stc/lexilla 3rdparty/catch 3rdparty/nanosvg 3rdparty/libwebp
echo "::endgroup::"
mkdir buildgtk
cd buildgtk
mkdir -p $WXWIDGETS_DIR
echo "::group::cmake"
cmake .. -DCMAKE_INSTALL_PREFIX=$WXWIDGETS_DIR
echo "::endgroup::"
echo "::group::compile"
make -j $CORES
echo "::endgroup::"
echo "::group::install to $WXWIDGETS_DIR"
make install
echo "::endgroup::"
- name: upload wxwidgets cache
if: steps.wxwidgets-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: ${{env.WXWIDGETS_DIR}}
key: ${{steps.wxwidgets-cache.outputs.cache-primary-key}}
- name: get ccache
id: ccache
uses: actions/cache/restore@v5
with:
path: ${{env.CCACHE_DIR}}
key: ccache-${{matrix.name}}-${{github.ref_name}}
restore-keys: ccache-${{matrix.name}}-
- name: checkout
uses: actions/checkout@v6
with:
path: project
- name: compile
shell: bash
run: |
cd project
mkdir build
cd build
wxcmake="$WXWIDGETS_DIR/lib/cmake/wxWidgets"
echo "::group::cmake"
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$wxcmake" -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
echo "::endgroup::"
echo "::group::ccache stats"
ccache --max-size "$CCACHE_SIZE"
echo "ccache dir is at $CCACHE_DIR"
ccache --show-stats --verbose
echo "::endgroup::"
echo "::group::compile"
make -j $CORES
echo "::endgroup::"
echo "::group::ccache stats after"
ccache --show-stats --verbose
echo "::endgroup::"
- name: delete old ccache to save space
if: github.ref == 'refs/heads/main' && steps.ccache.outputs.cache-hit == 'true'
env:
GH_TOKEN: ${{github.token}}
REPO: ${{github.repository}}
KEY: ${{steps.ccache.outputs.cache-primary-key}}
run: |
gh cache delete --repo "$REPO" "$KEY"
- name: upload new ccache
if: github.ref == 'refs/heads/main'
uses: actions/cache/save@v5
with:
path: ${{env.CCACHE_DIR}}
key: ${{steps.ccache.outputs.cache-primary-key}}