Skip to content

Merge pull request #310 from GLVis/fixes-for-glvis-js #65

Merge pull request #310 from GLVis/fixes-for-glvis-js

Merge pull request #310 from GLVis/fixes-for-glvis-js #65

Workflow file for this run

# Copyright (c) 2010-2024, Lawrence Livermore National Security, LLC. Produced
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
# LICENSE and NOTICE for details. LLNL-CODE-443271.
#
# This file is part of the GLVis visualization tool and library. For more
# information and source code availability see https://glvis.org.
#
# GLVis is free software; you can redistribute it and/or modify it under the
# terms of the BSD-3 license. We welcome feedback and contributions, see file
# CONTRIBUTING.md for details.
# GLVis - an OpenGL visualization server based on the MFEM library
name: release
on:
push:
tags:
- v*
branches:
- master
workflow_dispatch:
env:
HYPRE_ARCHIVE: v2.19.0.tar.gz
HYPRE_TOP_DIR: hypre-2.19.0
METIS_ARCHIVE: metis-4.0.3.tar.gz
METIS_TOP_DIR: metis-4.0.3
MFEM_TOP_DIR: mfem
MFEM_BRANCH: master
jobs:
release-builds:
strategy:
matrix:
os: [macos-latest, windows-latest]
target: [opt]
mpi: [seq]
build-system: [cmake]
name: ${{ matrix.os }}-${{ matrix.build-system }}-${{ matrix.target }}-${{ matrix.mpi }}
runs-on: ${{ matrix.os }}
steps:
- name: get MPI (Linux)
if: matrix.os == 'ubuntu-latest' && matrix.mpi == 'par'
run: |
sudo apt-get update
sudo apt-get install mpich libmpich-dev
export MAKE_CXX_FLAG="MPICXX=mpic++"
# Keep the following section in case we need it again in the future,
# see: https://github.com/mfem/mfem/pull/3385#discussion_r1058013032
# - name: Set up Homebrew
# if: matrix.os == 'macos-latest' && matrix.mpi == 'par'
# uses: Homebrew/actions/setup-homebrew@master
- name: get MPI (MacOS)
if: matrix.os == 'macos-latest' && matrix.mpi == 'par'
run: |
export HOMEBREW_NO_INSTALL_CLEANUP=1
brew install openmpi
export MAKE_CXX_FLAG="MPICXX=mpic++"
# Get Hypre through cache, or build it.
# Install will only run on cache miss.
- name: cache hypre
if: matrix.mpi == 'par'
id: hypre-cache
uses: actions/cache@v4
with:
path: ${{ env.HYPRE_TOP_DIR }}
key: ${{ runner.os }}-build-${{ env.HYPRE_TOP_DIR }}-v2.2
- name: build hypre
if: steps.hypre-cache.outputs.cache-hit != 'true' && matrix.mpi == 'par'
uses: mfem/github-actions/build-hypre@v2.4
with:
archive: ${{ env.HYPRE_ARCHIVE }}
dir: ${{ env.HYPRE_TOP_DIR }}
build-system: make
# Get Metis through cache, or build it.
# Install will only run on cache miss.
- name: cache metis
if: matrix.mpi == 'par'
id: metis-cache
uses: actions/cache@v4
with:
path: ${{ env.METIS_TOP_DIR }}
key: ${{ runner.os }}-build-${{ env.METIS_TOP_DIR }}-v2.2
- name: build metis
if: steps.metis-cache.outputs.cache-hit != 'true' && matrix.mpi == 'par'
uses: mfem/github-actions/build-metis@v2.4
with:
archive: ${{ env.METIS_ARCHIVE }}
dir: ${{ env.METIS_TOP_DIR }}
# make generic links to libraries for MFEM install
# Those links are already created by build-mfem action, but not when the cache is used...
- name: configure links
if: matrix.mpi == 'par'
run: |
echo "Hypre symlink:"
ln -s $HYPRE_TOP_DIR hypre;
echo "Metis symlink:"
ln -s $METIS_TOP_DIR metis-4.0;
- name: MFEM ${{ env.MFEM_BRANCH }} commit
run: |
echo "MFEM_COMMIT=$(git ls-remote --heads https://github.com/mfem/mfem.git ${MFEM_BRANCH} | awk '{print $1;}')" >> $GITHUB_ENV
# Get MFEM through cache, or build it.
# Install will only run on cache miss.
- name: cache mfem
id: cache-mfem
uses: actions/cache@v4
with:
path: ${{ env.MFEM_TOP_DIR }}
key: ${{ runner.os }}-build-${{ env.MFEM_TOP_DIR }}-${{ env.MFEM_COMMIT }}-${{ matrix.target }}-${{ matrix.build-system}}-v2.2
# We are using the defaults of the MFEM action here, which is to use master
# branch. There is an implicit assumption here that mfem master hasn't
# changed since the 'MFEM master commit' step.
# Also, if we apply to MFEM build the same target as GLVis. This may be
# superfluous.
- name: build mfem
if: steps.cache-mfem.outputs.cache-hit != 'true'
uses: mfem/github-actions/build-mfem@v2.4
with:
os: ${{ matrix.os }}
target: ${{ matrix.target }}
hypre-dir: ${{ env.HYPRE_TOP_DIR }}
metis-dir: ${{ env.METIS_TOP_DIR }}
mfem-dir: ${{ env.MFEM_TOP_DIR }}
mfem-branch: ${{ env.MFEM_BRANCH }}
build-system: ${{ matrix.build-system }}
mpi: ${{ matrix.mpi }}
# Install GLVis dependencies with package manager
- name: get deps (Linux)
if: matrix.os == 'ubuntu-latest'
run: |
# We need to add a PPA for SDL 2.0.14 - fixes some initialization
# errors for X11
sudo add-apt-repository -y ppa:savoury1/multimedia
sudo apt-get update
sudo apt-get install libfontconfig1-dev libfreetype6-dev libsdl2-dev libglew-dev libglm-dev libpng-dev
# - name: Set up Homebrew
# if: matrix.os == 'macos-latest'
# uses: Homebrew/actions/setup-homebrew@master
- name: get deps (MacOS)
if: matrix.os == 'macos-latest'
run: |
export HOMEBREW_NO_INSTALL_CLEANUP=1
brew install fontconfig freetype sdl2 glew glm libpng
- name: cache deps (Windows)
id: cache-deps
uses: actions/cache@v4
with:
path: vcpkg_cache
key: ${{ runner.os }}-vcpkg-v1
- name: prepare binary cache location
if: steps.cache-deps.outputs.cache-hit != 'true'
run: |
mkdir -p vcpkg_cache
- name: checkout GLVis
uses: actions/checkout@v4
with:
path: glvis
submodules: recursive
- name: build GLVis (cmake)
if: matrix.build-system == 'cmake'
env:
VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/vcpkg_cache
run: |
build_type="Release"
[[ ${{ matrix.os }} == "windows-latest" ]] \
&& toolchain_file="${VCPKG_INSTALLATION_ROOT}\\scripts\\buildsystems\\vcpkg.cmake"
cd glvis && mkdir build && cd build
cmake \
-D CMAKE_TOOLCHAIN_FILE:STRING=${toolchain_file} \
-D CMAKE_BUILD_TYPE:STRING=${build_type} \
-D ENABLE_TESTS:BOOL=TRUE \
-D mfem_DIR:PATH=${GITHUB_WORKSPACE}/${MFEM_TOP_DIR}/build \
-D GLVIS_BASELINE_SYS=${{ matrix.os }} \
-D CMAKE_INSTALL_PREFIX=../install-${{ matrix.os }} \
..
cmake --build . --parallel 3 --config "${build_type}"
shell: bash
- name: package binary (Windows)
if: matrix.os == 'windows-latest'
env:
GLVIS_EXPORT_NAME: glvis-${{ github.ref_name }}-${{ runner.os }}-${{ runner.arch }}
run: |
cd glvis/build
Copy-Item -Path "Release" -Destination "${Env:GLVIS_EXPORT_NAME}" -Recurse
- name: package binary (Mac)
if: matrix.os == 'macos-latest'
env:
GLVIS_EXPORT_NAME: glvis-${{ github.ref_name }}-${{ runner.os }}-${{ runner.arch }}
run: |
cd glvis/build
make app
# Creates the actual relocatable bundle (copying system libraries)
sudo make install
# Fix permissions from running `make install` as root
cd ../install-${{ matrix.os }}
sudo chown -R ${USER} GLVis.app
# Go back to build directory
cd ../build
# Copy executable to a temporary directory
mkdir dmg_tmp
cp -a ../install-${{ matrix.os }}/GLVis.app dmg_tmp/GLVis.app
# Create DMG since actions/upload-artifact will clobber Unix permissions
hdiutil create -volname "GLVis macOS arm64" -srcfolder dmg_tmp -ov -format UDZO GLVis.dmg
mkdir ${GLVIS_EXPORT_NAME}
cp GLVis.dmg ${GLVIS_EXPORT_NAME}
- name: upload binary
uses: actions/upload-artifact@v4
env:
GLVIS_EXPORT_NAME: glvis-${{ github.ref_name }}-${{ runner.os }}-${{ runner.arch }}
with:
name: ${{ env.GLVIS_EXPORT_NAME }}
path: glvis/build/${{ env.GLVIS_EXPORT_NAME }}