Repository navigation
Merge pull request #61 from bonachea/ci-2026-08 #229
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build | |
| on: | |
| push: | |
| paths-ignore: &paths_ignore | |
| - 'doc/**' | |
| - '**.txt' | |
| - '**.md' | |
| pull_request: | |
| paths-ignore: *paths_ignore | |
| concurrency: | |
| # De-duplicate concurrent workflow runs on the same branch/ref | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }} | |
| cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} | |
| defaults: | |
| run: | |
| shell: bash --noprofile --norc -e -x -o pipefail {0} | |
| jobs: | |
| setup: # This job currently just exists to reduce cancelled job spam in PRs | |
| name: Ignore me | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Resolve job concurrency | |
| run: sleep 5 | |
| build: | |
| name: ${{ matrix.compiler }}-${{ matrix.version }} (${{ matrix.os }}) | |
| needs: setup | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ macos-14, macos-15, macos-15-intel, macos-26, macos-26-intel, ubuntu-24.04, ubuntu-26.04-arm ] | |
| compiler: [ gfortran ] | |
| version: [ 13, 14, 15, 16 ] # Julienne supports GFortran 13+ | |
| extra_flags: [ -g -O3 ] | |
| exclude: | |
| - compiler: gfortran # gfortran disabled for now | |
| include: | |
| # --- LLVM flang coverage --- | |
| - os: macos-14 | |
| compiler: flang | |
| version: 23 | |
| - os: macos-15 | |
| compiler: flang | |
| version: 23 | |
| - os: macos-26 | |
| compiler: flang | |
| version: 23 | |
| # - os: macos-15-intel | |
| # compiler: flang | |
| # version: 23 | |
| # - os: macos-26-intel | |
| # compiler: flang | |
| # version: 23 | |
| # https://hub.docker.com/r/snowstep/llvm/tags | |
| - os: ubuntu-24.04 | |
| compiler: flang | |
| version: latest | |
| container: snowstep/llvm:ubuntu-24.04-latest | |
| - os: ubuntu-22.04 | |
| compiler: flang | |
| version: latest | |
| container: snowstep/llvm:ubuntu-22.04-latest | |
| # https://hub.docker.com/r/phhargrove/llvm-flang/tags | |
| - os: ubuntu-24.04 | |
| compiler: flang | |
| version: 23 | |
| container: phhargrove/llvm-flang:23.1.0-latest | |
| - os: ubuntu-24.04 | |
| compiler: flang | |
| version: 22 | |
| container: phhargrove/llvm-flang:22.1.0-latest | |
| - os: ubuntu-24.04 | |
| compiler: flang | |
| version: 21 | |
| network: smp | |
| container: phhargrove/llvm-flang:21.1.0-latest | |
| - os: ubuntu-24.04 | |
| compiler: flang | |
| version: 20 | |
| container: phhargrove/llvm-flang:20.1.0-latest | |
| - os: ubuntu-24.04 | |
| compiler: flang | |
| version: 19 | |
| extra_flags: -g -mmlir -allow-assumed-rank -O3 | |
| container: phhargrove/llvm-flang:19.1.1-latest | |
| # --- Intel coverage --- | |
| # Julienne requires 2025.2.0 or later | |
| # ifx disabled for now | |
| # | |
| # # https://hub.docker.com/r/intel/oneapi-toolkit/tags | |
| # - os: ubuntu-24.04 | |
| # compiler: ifx | |
| # version: latest | |
| # container: intel/oneapi-toolkit:latest | |
| # | |
| # - os: ubuntu-24.04 | |
| # compiler: ifx | |
| # version: 2026.0.0 | |
| # container: intel/oneapi-toolkit:2026.0.0-devel-ubuntu24.04 | |
| # | |
| # # https://hub.docker.com/r/intel/fortran-essentials/tags | |
| # - os: ubuntu-24.04 | |
| # compiler: ifx | |
| # version: 2025.3.0 | |
| # container: intel/fortran-essentials:2025.3.0-0-devel-ubuntu24.04 | |
| # | |
| # - os: ubuntu-24.04 | |
| # compiler: ifx | |
| # version: 2025.2.2 | |
| # container: intel/fortran-essentials:2025.2.2-0-devel-ubuntu24.04 | |
| # | |
| # - os: ubuntu-24.04 | |
| # compiler: ifx | |
| # version: 2025.2.0 | |
| # container: intel/fortran-essentials:2025.2.0-0-devel-ubuntu24.04 | |
| # --- LFortran coverage --- | |
| # Formal now requires LFortran 0.64 or later | |
| # https://hub.docker.com/r/phhargrove/lfortran/tags | |
| #- os: ubuntu-24.04 | |
| # compiler: lfortran | |
| # version: 0.63.0 | |
| # container: phhargrove/lfortran:0.64.0-1 | |
| # https://github.com/lfortran/lfortran/pkgs/container/lfortran | |
| - os: ubuntu-22.04 | |
| compiler: lfortran | |
| version: 0.64.0 | |
| container: ghcr.io/lfortran/lfortran:v0.64.0 | |
| - os: ubuntu-22.04 | |
| compiler: lfortran | |
| version: 0.65.0 | |
| container: ghcr.io/lfortran/lfortran:v0.65.0 | |
| - os: ubuntu-22.04 | |
| compiler: lfortran | |
| version: latest | |
| container: ghcr.io/lfortran/lfortran:latest | |
| container: | |
| image: ${{ matrix.container }} | |
| env: | |
| COMPILER_VERSION: ${{ matrix.version }} | |
| FC: ${{ matrix.compiler }} | |
| FFLAGS: ${{ matrix.extra_flags }} | |
| FPM_FLAGS: --profile release --verbose | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| - name: Install Ubuntu Native Dependencies | |
| if: ${{ contains(matrix.os, 'ubuntu') && matrix.container == '' && matrix.compiler == 'gfortran' }} | |
| run: | | |
| sudo apt-get update | |
| #sudo apt list -a 'gfortran-*' | |
| sudo apt install -y build-essential | |
| if [[ ${COMPILER_VERSION} -lt 15 ]] ; then | |
| sudo apt install -y gfortran-${COMPILER_VERSION} | |
| else | |
| curl -L https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh -o install-homebrew.sh | |
| chmod +x install-homebrew.sh | |
| env CI=1 ./install-homebrew.sh | |
| HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew" | |
| ${HOMEBREW_PREFIX}/bin/brew install -v gcc@${COMPILER_VERSION} binutils | |
| ls -al ${HOMEBREW_PREFIX}/bin | |
| echo "PATH=${HOMEBREW_PREFIX}/bin:${PATH}" >> "$GITHUB_ENV" | |
| : Homebrew GCC@15 needs binutils 2.44+ | |
| HOMEBREW_BINUTILS=$(ls -d ${HOMEBREW_PREFIX}/Cellar/binutils/2.*/bin ) | |
| ls -al ${HOMEBREW_BINUTILS} | |
| echo "FFLAGS=$FFLAGS -B ${HOMEBREW_BINUTILS}" >> "$GITHUB_ENV" | |
| echo "CFLAGS=$CFLAGS -B ${HOMEBREW_BINUTILS}" >> "$GITHUB_ENV" | |
| echo "CXXFLAGS=$CXXFLAGS -B ${HOMEBREW_BINUTILS}" >> "$GITHUB_ENV" | |
| fi | |
| - name: Install Ubuntu Container Dependencies | |
| if: ${{ contains(matrix.os, 'ubuntu') && matrix.container != '' && !contains(matrix.container, 'phhargrove') }} | |
| run: | | |
| apt update | |
| apt install -y build-essential pkg-config make git curl | |
| # Add container lfortran to PATH: | |
| if test "$FC" = "lfortran"; then | |
| echo "/app/bin" >> "$GITHUB_PATH" | |
| ls -alh /app/bin | |
| ls -alh /app/share/lfortran/lib/ | |
| fi | |
| - name: Fix macOS Homebrew Configuration | |
| if: ${{ contains(matrix.os, 'macos') }} | |
| run: | | |
| # silence Homebrew tap trust warnings: | |
| (set +e ; brew untap -f aws/tap hashicorp/tap 2>&1 | perl -pe 's/#*.warning./warn: /' ; brew trust azure/bicep ) | |
| # set some Homebrew knobs to accelerate installation | |
| # but only when we are not simulating the user environment brew-via-install workflow | |
| if [[ -z "${{ matrix.brew_via_install }}" ]] ; then | |
| echo HOMEBREW_NO_ANALYTICS=1 >> "$GITHUB_ENV" | |
| echo HOMEBREW_NO_AUTO_UPDATE=1 >> "$GITHUB_ENV" | |
| echo HOMEBREW_NO_GITHUB_API=1 >> "$GITHUB_ENV" | |
| echo HOMEBREW_NO_INSTALL_CLEANUP=1 >> "$GITHUB_ENV" | |
| fi | |
| - name: Install macOS Dependencies | |
| if: contains(matrix.os, 'macos') | |
| run: | | |
| brew update | |
| # fpm binary distribution for macOS requires gfortran shared libraries from gcc@12 | |
| brew install gcc@12 | |
| if [[ ${{ matrix.compiler }} == 'gfortran' && ${COMPILER_VERSION} -gt 15 ]] ; then | |
| brew install gcc@${COMPILER_VERSION} | |
| fi | |
| - name: Install LLVM flang on macOS | |
| if: contains(matrix.os, 'macos') && matrix.compiler == 'flang' | |
| run: | | |
| brew install llvm@${COMPILER_VERSION} flang | |
| # workaround issue #228: clang cannot find homebrew flang's C header | |
| for p in /opt/homebrew /usr/local $(brew --prefix) ; do find $p/Cellar/flang -name ISO_Fortran_binding.h 2>/dev/null || true ; done | |
| echo "CFLAGS=-I$(dirname $(find $(brew --prefix)/Cellar/flang -name ISO_Fortran_binding.h | head -1)) ${CFLAGS}" >> "$GITHUB_ENV" | |
| # Prepend homebrew clang to PATH: | |
| echo "PATH=$(brew --prefix)/opt/llvm/bin:${PATH}" >> "$GITHUB_ENV" | |
| - name: Setup Compilers | |
| run: | | |
| if test "$FC" = "flang" ; then | |
| echo "FPM_FC=flang-new" >> "$GITHUB_ENV" | |
| elif [[ "$FC" =~ "ifx" ]] ; then | |
| echo "FPM_FC=ifx" >> "$GITHUB_ENV" | |
| echo "FFLAGS=-fpp -coarray -coarray-num-images=1 $FFLAGS" >> "$GITHUB_ENV" | |
| : ls -al /opt/intel/oneapi/compiler/2025.*/bin/ | |
| if type -p icpx ; then | |
| echo "FPM_CC=icx" >> "$GITHUB_ENV" | |
| echo "FPM_CXX=icpx" >> "$GITHUB_ENV" | |
| else | |
| echo "FPM_CC=gcc" >> "$GITHUB_ENV" | |
| echo "FPM_CXX=g++" >> "$GITHUB_ENV" | |
| fi | |
| elif test "$FC" = "lfortran" ; then | |
| echo "FPM_FC=lfortran" >> "$GITHUB_ENV" | |
| echo "FFLAGS=--cpp --realloc-lhs-arrays --separate-compilation $FFLAGS" >> "$GITHUB_ENV" | |
| echo "FPM_FLAGS=--profile debug --verbose" >> "$GITHUB_ENV" ; : fpm 0.13 workaround | |
| else | |
| echo "FPM_FC=gfortran-${COMPILER_VERSION}" >> "$GITHUB_ENV" | |
| echo "FFLAGS=-ffree-line-length-0 $FFLAGS" >> "$GITHUB_ENV" | |
| fi | |
| if [[ "${{ matrix.container }}" =~ "snowstep/llvm" ]] ; then | |
| echo "LD_LIBRARY_PATH=/usr/lib/llvm-22/lib:$LD_LIBRARY_PATH" >> "$GITHUB_ENV" | |
| fi | |
| - name: Setup FPM | |
| if: ${{ !(runner.os == 'Linux' && runner.arch == 'ARM64') }} | |
| uses: fortran-lang/setup-fpm@main | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| fpm-version: latest | |
| - name: Build FPM | |
| if: ${{ runner.os == 'Linux' && runner.arch == 'ARM64' }} | |
| run: | | |
| export FPM_VERSION=0.13.0 | |
| curl --retry 5 -LOsS https://github.com/fortran-lang/fpm/releases/download/v$FPM_VERSION/fpm-$FPM_VERSION.F90 | |
| mkdir fpm-temp | |
| gfortran-14 -o fpm-temp/fpm fpm-$FPM_VERSION.F90 | |
| echo "PATH=`pwd`/fpm-temp:${PATH}" >> "$GITHUB_ENV" | |
| - name: Version info | |
| run: | | |
| set +x | |
| if test -d .git && type -p git > /dev/null ; then | |
| git config --global --add safe.directory `pwd` | |
| echo == Commit Info == | |
| git log -n 1 ; echo ; echo | |
| fi | |
| echo == Platform version info == | |
| uname -a | |
| if test -r /etc/os-release ; then grep -e NAME -e VERSION /etc/os-release ; fi | |
| if test -x /usr/bin/sw_vers ; then /usr/bin/sw_vers ; fi | |
| echo | |
| echo PATH="$PATH" | |
| for tool in ${FPM_FC} ${FPM_CC} ${FPM_CXX} fpm ; do | |
| ( echo ; set -x ; w=$(which $tool) ; ls -al $w ; ls -alhL $w ; $tool --version ) | |
| done | |
| - name: Build and Test | |
| run: | | |
| echo "FPM_FLAGS=${FPM_FLAGS}" | |
| echo "FFLAGS=$FFLAGS" | |
| ls -lt | |
| fpm test ${FPM_FLAGS} --flag "$FFLAGS" |