Mercurial > octave
view .github/workflows/make.yaml @ 29581:def7cbcf85ed
Add rule for continuous integration tests on GitHub.
* .github/workflow/make.yaml: Add file that defines which actions to run on
GitHub-hosted runners on each push.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Fri, 30 Apr 2021 19:46:23 +0200 |
parents | |
children | 8f142a26a343 |
line wrap: on
line source
name: make on: [push] jobs: ubuntu: runs-on: ${{ matrix.os }} strategy: matrix: # For available GitHub-hosted runners, see: # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners os: [ubuntu-20.04, ubuntu-18.04] compiler: [gcc, clang] include: - compiler: gcc compiler-pkgs: "g++ gcc" cc: "gcc" cxx: "g++" - compiler: clang compiler-pkgs: "clang" cc: "clang" cxx: "clang++" steps: - uses: actions/checkout@v2 - name: install dependencies env: COMPILER_PKGS: ${{ matrix.compiler-pkgs }} run: | sudo apt -qq update sudo apt install -y $COMPILER_PKGS autoconf automake bison ccache \ dvipng epstool fig2dev flex gfortran gnuplot-x11 gperf gzip \ icoutils libarpack2-dev libblas-dev libcurl4-gnutls-dev \ libfftw3-dev libfltk1.3-dev libfontconfig1-dev libfreetype6-dev \ libgl1-mesa-dev libgl2ps-dev libglpk-dev libgraphicsmagick++1-dev \ libhdf5-dev liblapack-dev libosmesa6-dev libpcre3-dev \ libqhull-dev libqscintilla2-qt5-dev libqrupdate-dev \ libreadline-dev librsvg2-bin libsndfile1-dev libsuitesparse-dev \ libsundials-dev libtool libxft-dev llvm-dev make openjdk-8-jdk \ perl portaudio19-dev pstoedit qtbase5-dev qttools5-dev \ qttools5-dev-tools rsync tar texinfo texlive-latex-extra xvfb \ zlib1g-dev - name: prepare ccache # create human readable timestamp id: ccache_cache_timestamp run: | echo "::set-output name=TIMESTAMP::$(date +"%Y-%m-%d_%H-%M-%S")" - name: setup ccache # setup the github cache used to maintain the ccache from one job to the next uses: actions/cache@v2 with: path: /home/runner/.ccache key: ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ github.ref }}:${{ steps.ccache_cache_timestamp.outputs.timestamp }}:${{ github.sha }} restore-keys: | ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ github.ref }} ccache:${{ matrix.os }}:${{ matrix.compiler }} - name: configure ccache run: | test -d /home/runner/.ccache || mkdir /home/runner/.ccache echo "max_size = 3G" >> /home/runner/.ccache/ccache.conf ccache -s - name: bootstrap run: ./bootstrap - name: configure env: MY_CC: ${{ matrix.cc }} MY_CXX: ${{ matrix.cxx }} run: | echo $MY_CC --version $MY_CC --version echo $MY_CXX --version $MY_CXX --version mkdir .build cd .build && ../configure \ CC="ccache $MY_CC" \ CXX="ccache $MY_CXX" \ F77="ccache gfortran" \ CPPFLAGS="-I/usr/include/hdf5/serial -I/usr/include/suitesparse" \ LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)/hdf5/serial" - name: build env: XDG_RUNTIME_DIR: "/home/runner/tmp" # Parallel make seems to fail intermittently when creating the figures # for the manual. The error message says it fails to connect to a # display. Maybe an xvfb issue? # Use single job make for now which seems to work more reliably. run: | test -d $XDG_RUNTIME_DIR || mkdir $XDG_RUNTIME_DIR xvfb-run -a make -C ./.build all V=1 - name: ccache status run: ccache -s - name: check # Continuing on error in this step means that jobs will be "green" even # if the test suite crashes. But if we don't continue, we'll loose the # ccache and other jobs will be cancelled. # It would be nice if we could mark the job as "yellow" (and continue) # in that case. # It would also be nice if we could analyze the test suite results # automatically. continue-on-error: true env: XDG_RUNTIME_DIR: "/home/runner/tmp" run: xvfb-run -a make -C ./.build check V=1 macos: runs-on: ${{ matrix.os }} strategy: matrix: # For available GitHub-hosted runners, see: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners os: [macos-10.15] # Most (or all) homebrew packages are compiled with clang and link # against libc++. So we also use clang to avoid issues with symbols # that don't match. # compiler: [real-gcc, clang] compiler: [clang] include: # - compiler: real-gcc # cc: "/usr/local/bin/gcc-10" # cxx: "/usr/local/bin/g++-10" # cppflags: "-I/usr/local/opt/hdf5/include -I/usr/local/opt/gl2ps/include -I/usr/local/opt/glpk/include -I/usr/local/opt/pcre/include -I/usr/local/opt/qscintilla2/include -I/usr/local/opt/suite-sparse/include -I/usr/local/opt/sundials/include" # ldflags: "-L/usr/local/opt/hdf5/lib -L/usr/local/opt/gl2ps/lib -L/usr/local/opt/glpk/lib -L/usr/local/opt/pcre/lib -L/usr/local/opt/qscintilla2/lib -L/usr/local/opt/suite-sparse/lib -L/usr/local/opt/sundials/lib" - compiler: clang cc: "clang" cxx: "clang++" env: MY_PATH: "/usr/local/opt/gnu-sed/libexec/gnubin:/usr/local/opt/bison/bin:/usr/local/opt/texinfo/bin:/usr/local/opt/qt@5/bin:/Library/TeX/texbin" steps: - uses: actions/checkout@v2 - name: install dependencies # It looks like "gfortran" isn't working correctly unless it is # re-installed as part of "gcc". # See also: https://formulae.brew.sh/formula/octave#default # The packages are listed in (alphabetically sorted) blocks: # The first block is for "direct" dependencies. # The second block is for additional dependencies needed when building from a release tarball. # The third block is for additional dependencies needed when building from a repository checkout. run: | brew update brew uninstall gfortran brew install arpack epstool fftw fig2dev fltk fontconfig freetype \ gcc ghostscript gl2ps glpk gnuplot graphicsmagick hdf5 libsndfile \ libtool openblas pcre portaudio pstoedit qhull qrupdate \ qscintilla2 qt@5 readline suite-sparse sundials texinfo \ ccache gnu-sed openjdk pkg-config \ automake autoconf bison gettext icoutils librsvg mactex-no-gui eval "$(/usr/libexec/path_helper)" - name: prepare ccache # create human readable timestamp id: ccache_cache_timestamp run: | echo "::set-output name=TIMESTAMP::$(date +"%Y-%m-%d_%H-%M-%S")" - name: setup ccache # setup the github cache used to maintain the ccache from one job to the next uses: actions/cache@v2 with: path: /Users/runner/Library/Caches/ccache key: ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ github.ref }}:${{ steps.ccache_cache_timestamp.outputs.timestamp }}:${{ github.sha }} restore-keys: | ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ github.ref }} ccache:${{ matrix.os }}:${{ matrix.compiler }} - name: configure ccache # The cache doesn't seem to compress well on macOS. Is it already compressed? # Limit the maximum size to avoid exceeding the total cache limits. run: | test -d /Users/runner/Library/Preferences/ccache || mkdir /Users/runner/Library/Preferences/ccache echo "max_size = 1.5G" >> /Users/runner/Library/Preferences/ccache/ccache.conf ccache -s - name: bootstrap run: | export PATH="$MY_PATH:$PATH" ./bootstrap - name: configure env: MY_CC: ${{ matrix.cc }} MY_CXX: ${{ matrix.cxx }} MY_CPPFLAGS: ${{ matrix.cppflags }} MY_LDFLAGS: ${{ matrix.ldflags }} # This is a hodgepodge of configure flags put together from the # buildbot rules: # https://hg.octave.org/octave-buildbot/file/tip/master.cfg#l543 # And the homebrew formula: # https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/octave.rb # Amended with additional flags that seem to be needed. # Not all of those might be needed needed or be correct. run: | export PATH="$MY_PATH:$PATH" echo $PATH echo $MY_CC --version $MY_CC --version echo $MY_CXX --version $MY_CXX --version mkdir .build cd .build && ../configure \ CC="ccache $MY_CC" \ CXX="ccache $MY_CXX" \ F77="ccache gfortran" \ CPPFLAGS="-I/usr/local/opt/gettext/include -I/usr/local/opt/icu4c/include -I/usr/local/opt/qt@5/include -I/usr/local/opt/readline/include -I/usr/local/opt/sqlite/include $MY_CPPFLAGS" \ CXXFLAGS="-O2 -g -std=c++11" \ LDFLAGS="-L/usr/local/lib -L/usr/local/opt/bison/lib -L/usr/local/opt/gettext/lib -L/usr/local/opt/icu4c/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/sqlite/lib $MY_LDFLAGS" \ PKG_CONFIG_PATH="/usr/local/opt/openblas/lib/pkgconfig:/usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/qt@5/lib/pkgconfig" \ QCOLLECTIONGENERATOR="qhelpgenerator" \ --enable-link-all-dependencies \ --disable-lib-visibility-flags \ --with-x=no \ --with-blas="-L/usr/local/opt/openblas/lib -lopenblas" \ --with-java-homedir="/usr/local/opt/openjdk" - name: build run: | export PATH="$MY_PATH:$PATH" make -C ./.build all -j3 V=1 - name: ccache status run: ccache -s - name: check # Continuing on error in this step means that jobs will be "green" even # if the test suite crashes. But if we don't continue, we'll loose the # ccache and other jobs will be cancelled, too. # It would be nice if we could mark the job as "yellow" (and continue) # in that case. # It would also be nice if we could analyze the test suite results # automatically. continue-on-error: true run: make -C ./.build check V=1