Skip to content

Updates readme

Updates readme #348

name: Build and test UEDGE - write wheel files if tests pass
on: [push, pull_request]
jobs:
check-requests:
name: Checks whether tests and/or wheels are requested
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set UBUNTU tags env variables.
if: runner.os == 'Linux'
run: |
# Set "checking" variable to false by default.
# Get your last commit message, not the merge commit.
text=$(git log -1 --no-merges --pretty=%B)
# Read the commit message into an array split by "#".
readarray -d "#" -t commit_message <<< "$text"
# Sanity check.
echo "Tags are: ${commit_message[1]}"
# Add tags and overwrite "checking" variable to true if there are tags.
if [[ "${commit_message[1]}" == *"@notest"* ]]; then
echo "Seting test flags to FALSE"
echo "test=FALSE" >> $GITHUB_OUTPUT
else
echo "Seting test flags to TRUE"
echo "test=TRUE" >> $GITHUB_OUTPUT
fi
if [[ "${commit_message[1]}" == *"@nowheel"* ]]; then
echo "Seting wheel flags to FALSE"
echo "wheel=FALSE" >> $GITHUB_OUTPUT
else
echo "Seting wheel flags to TRUE"
echo "wheel=TRUE" >> $GITHUB_OUTPUT
fi
run-all-tests:
name: Runs test ${{ matrix.tests }}
runs-on: ubuntu-latest
needs: check-requests
if: needs.check-requests.outputs.test != 'TRUE'
strategy:
fail-fast: false
matrix:
python-version: [3.11]
tests: [fulltests, unittests/D+C, unittests/D_mols, unittests/D_only, unittests/slab_D_only]
steps:
- uses: actions/checkout@v4
- name: Check branch and define test branch
env:
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
run: |
echo "Branch is:", $BRANCH_NAME
if [[ ${BRANCH_NAME} == *"master"* ]]; then
echo "testbranch=pytests" >> $GITHUB_ENV
echo "Using pytests test branch"
else
echo "testbranch=pytests-develop" >> $GITHUB_ENV
echo "Using pytests-develop test branch"
fi
- name: Echo test branch name
run: |
echo ${{ env.testbranch }}
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install pip dependencies
run: |
python -m pip install --upgrade pip
python -m pip install forthon>=0.10.7 numpy==1.26.4 h5py
python -m pip install flake8
python -m pip install pytest-isolate pytest-xdist
- name: Build UEDGE
run: |
python -m pip install . -C "--build-option=--serial"
- name: Switch to pytests branch
uses: actions/checkout@v4
with:
ref: ${{ env.testbranch }}
repository: LLNL/UEDGE
- name: Test with pytest
run: |
# Create a clean UEDGE instance for every test
pytest --isolate --tb=long pytests/${{ matrix.tests }} -s
build_wheels:
name: Build wheels on ${{ matrix.os }} for Python ${{ matrix.pyver }}
needs: [run-all-tests, check-requests]
if: needs.check-requests.outputs.wheels != 'TRUE'
runs-on: ${{ matrix.os }}
continue-on-error: true
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-13, macos-14]
pyver: [cp38, cp39, cp310, cp311, cp312]
steps:
- name: Checks out repo
uses: actions/checkout@v4
- name: Set up macOS-specific paths and libraries
if: runner.os == 'macOS'
run: |
# Symlink the correct gfortran compiler
ln -s $(brew --prefix)/bin/gfortran-13 $(brew --prefix)/bin/gfortran
# Install OMP libraries
brew install libomp
# Link environments to env for later us with cibuildwheel
echo "LIBOMPPATH=$(brew --prefix libomp)" >> $GITHUB_ENV
echo "LLVMCLANG=$(brew --prefix llvm@15)" >> $GITHUB_ENV
- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_BUILD: ${{matrix.pyver}}-*
CIBW_SKIP: "pp37-* cp37-* *-win32 *-manylinux_i686"
CIBW_ARCHS_LINUX: auto
CIBW_BEFORE_BUILD: pip install numpy 'forthon>=0.10.7' 'build<0.10.0'
CC: ${{ env.LLVMCLANG }}/bin/clang
LDFLAGS: "-L${{env.LIBOMPPATH }}/lib"
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: cibw-wheels-${{ matrix.os }}-${{ matrix.pyver }}-${{ strategy.job-index }}
path: ./wheelhouse/*.whl
build_wheels_pypy:
name: Build PyPy wheels on ${{ matrix.os }}
if: false
# if: github.event_name == 'pull_request'
needs: run-all-tests
runs-on: ${{ matrix.os }}
continue-on-error: true
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-13, macos-14]
steps:
- name: Checks out repo
uses: actions/checkout@v4
- name: Set up macOS-specific paths and libraries
if: runner.os == 'macOS'
run: |
# Symlink the correct gfortran compiler
ln -s $(brew --prefix)/bin/gfortran-13 $(brew --prefix)/bin/gfortran
# Install OMP libraries
brew install libomp
# Link environments to env for later us with cibuildwheel
echo "LIBOMPPATH=$(brew --prefix libomp)" >> $GITHUB_ENV
echo "LLVMCLANG=$(brew --prefix llvm@15)" >> $GITHUB_ENV
- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_BUILD: pp*
CIBW_SKIP: "pp37-* cp37-* *-win32 *-manylinux_i686"
CIBW_BEFORE_BUILD: pip install numpy 'forthon>=0.10.7' 'build<0.10.0'
CC: ${{ env.LLVMCLANG }}/bin/clang
LDFLAGS: "-L${{env.LIBOMPPATH }}/lib"
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: cibw-wheels-pyp-${{ matrix.os }}-${{ strategy.job-index }}
path: ./wheelhouse/*.whl
build_wheels_cross:
name: Build Linux cross-wheels
if: false
needs: run-all-tests
runs-on: ubuntu-latest
continue-on-error: true
strategy:
fail-fast: false
matrix:
pyver: [cp38, cp39, cp310, cp311, cp312]
arch: [aarch64, ppc64le]
steps:
- name: Checks out repo
uses: actions/checkout@v4
- name: Set up QEMU for multi-arch build
uses: docker/setup-qemu-action@v2
- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_BUILD: ${{matrix.pyver}}-*
IBW_SKIP: cp37-*
CIBW_ARCHS: ${{matrix.arch}}
CIBW_BEFORE_BUILD: pip install numpy 'forthon>=0.10.7' 'build<0.10.0'
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: cibw-cross-wheels-${{ matrix.arch }}-${{ matrix.pyver }}-${{ strategy.job-index }}
path: ./wheelhouse/*.whl
build_wheels_cross_pypy:
name: Build Linux PyPy cross-wheels
if: false
needs: run-all-tests
runs-on: ubuntu-latest
continue-on-error: true
strategy:
fail-fast: false
steps:
- name: Checks out repo
uses: actions/checkout@v4
- name: Set up QEMU for multi-arch build
uses: docker/setup-qemu-action@v2
- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_BUILD: pp*
CIBW_SKIP: "pp37-* cp37-* *-win32 *-manylinux_i686"
CIBW_BEFORE_BUILD: pip install numpy 'forthon>=0.10.7' 'build<0.10.0'
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: cibw-cross-wheels-pypy-${{ strategy.job-index }}
path: ./wheelhouse/*.whl
gather_wheels:
name: Gather built wheels
needs: [build_wheels] #, build_wheels_pypy]
# if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Download all Artifacts and merges them
uses: actions/download-artifact@v4
with:
path: wheels
merge-multiple: true
- name: Upload all Artifacts in a single Archive
uses: actions/upload-artifact@v4
with:
name: all_wheels
path: wheels