build #1915
This file contains 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: | |
schedule: | |
- cron: "35 9 * * 2" | |
push: | |
branches: | |
- master | |
- '1.0' | |
tags: | |
- v** | |
pull_request: | |
workflow_dispatch: | |
inputs: | |
type: | |
description: 'Build type (`debug` or `release`)' | |
default: 'debug' | |
required: true | |
# Tip: Use below action to debug with SSH. | |
# - name: Setup upterm session | |
# uses: lhotari/action-upterm@v1 | |
# On Windows: | |
# - name: Setup tmate session | |
# uses: mxschmitt/action-tmate@v3 | |
jobs: | |
prelude: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix-windows: ${{ steps.set-matrix-windows.outputs.matrix_windows }} | |
matrix-others: ${{ steps.set-matrix-others.outputs.matrix_others }} | |
steps: | |
- name: Create Build Matrix (Windows) | |
id: set-matrix-windows | |
run: | | |
if [[ '${{ github.event_name }}' == "schedule" || '${{ github.event.inputs.type }}' == "release" || '${{ github.ref }}' == "refs/tags/v"* ]]; then | |
matrix="{deps: ['standard'], arch: ['x86_64'], configuration: ['Release']}" | |
else | |
matrix="{deps: ['debug'], arch: ['x86_64'], configuration: ['Debug']}" | |
fi | |
echo "matrix_windows=$matrix" >> $GITHUB_OUTPUT | |
- name: Create Build Matrix (Linux/macOS) | |
id: set-matrix-others | |
run: | | |
if [[ '${{ github.event_name }}' == "schedule" || '${{ github.event.inputs.type }}' == "release" || '${{ github.ref }}' == "refs/tags/v"* ]]; then | |
matrix="{os: ['ubuntu-latest', 'macos-12', 'macos-14'], deps: ['standard', 'headless'], configuration: ['Release']}" | |
else | |
matrix="{os: ['ubuntu-latest', 'macos-12', 'macos-14'], deps: ['debug'], configuration: ['Debug']}" | |
fi | |
echo "matrix_others=$matrix" >> $GITHUB_OUTPUT | |
- name: Remove Release (scheduled build only) | |
if: github.event_name == 'schedule' || github.event.inputs.type == 'release' | |
uses: dev-drprasad/delete-tag-and-release@v0.2.1 | |
with: | |
delete_release: true | |
tag_name: weekly-release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
upload-source-code: | |
runs-on: ubuntu-latest | |
needs: prelude | |
steps: | |
- name: Checkout GDL | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Compress Source Code Distribution | |
id: step-compress-source-code | |
run: | | |
RELEASE_NAME= | |
if [[ '${{ github.event_name }}' == "schedule" || '${{ github.event.inputs.type }}' == "release" ]]; then | |
RELEASE_NAME="unstable-${GITHUB_SHA:0:7}" | |
elif [[ '${{ github.ref }}' == "refs/tags/v"* ]]; then | |
RELEASE_NAME="${GITHUB_REF_NAME}" | |
fi | |
if [[ ! -z "${RELEASE_NAME}" ]]; then | |
cp -r $PWD /tmp/gdl-${RELEASE_NAME} | |
cmake -D SRC=/tmp/gdl-${RELEASE_NAME}/src/version.hpp.in -D DST=/tmp/gdl-${RELEASE_NAME}/src/version.hpp -D GIT_EXECUTABLE=git -P /tmp/gdl-${RELEASE_NAME}/CMakeModules/GenerateVersionHeader.cmake | |
rm -rf /tmp/gdl-${RELEASE_NAME}/.git | |
cd /tmp | |
rm /tmp/gdl-${RELEASE_NAME}/src/version.hpp.in | |
tar czf "/tmp/gdl-${RELEASE_NAME}.tar.gz" gdl-${RELEASE_NAME} | |
echo "released=true" >> "$GITHUB_OUTPUT" | |
fi | |
- name: Upload Release Assets (unstable) | |
if: (github.event_name == 'schedule' || github.event.inputs.type == 'release') && steps.step-compress-source-code.outputs.released == 'true' | |
uses: ncipollo/release-action@v1 | |
with: | |
artifacts: "/tmp/gdl-*.tar.gz" | |
name: Weekly Binary Release (unstable) | |
body: Weekly Binary Release (unstable) | |
prerelease: true | |
allowUpdates: true | |
replacesArtifacts: true | |
commit: ${{ github.sha }} | |
tag: weekly-release | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Upload Release Assets (stable) | |
if: startsWith(github.ref, 'refs/tags/v') && steps.step-compress-source-code.outputs.released == 'true' | |
uses: ncipollo/release-action@v1 | |
with: | |
artifacts: "/tmp/gdl-*.tar.gz" | |
name: ${{ github.event.release.tag_name }} | |
prerelease: false | |
allowUpdates: true | |
replacesArtifacts: true | |
commit: ${{ github.sha }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
build-linux-macos: | |
runs-on: ${{ matrix.os }} | |
needs: prelude | |
strategy: | |
fail-fast: false | |
matrix: ${{ fromJson(needs.prelude.outputs.matrix-others) }} | |
env: | |
DEPS: ${{ matrix.deps }} | |
Configuration: ${{ matrix.configuration }} | |
ROOT_DIR: ${{ github.workspace }}/.. | |
steps: | |
- name: Checkout GDL | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Install Dependencies | |
run: | | |
scripts/build_gdl.sh prep | |
- name: Set HDF path on macOS usin brew | |
# https://stackoverflow.com/questions/66741778/how-to-install-h5py-needed-for-keras-on-macos-with-m1 | |
if: contains(matrix.os, 'macos') | |
run: echo HDF5_DIR="$(brew --prefix hdf5)" >> $GITHUB_ENV | |
- name: Disable OpenMP for Apple Silicon (FIXME!) | |
if: matrix.os == 'macos-14' | |
run: echo WITH_OPENMP=OFF >> $GITHUB_ENV | |
- name: Build GDL | |
run: | | |
scripts/build_gdl.sh configure | |
scripts/build_gdl.sh build | |
- name: Package GDL | |
run: | | |
scripts/build_gdl.sh install | |
scripts/build_gdl.sh pack | |
scripts/build_gdl.sh prep_deploy | |
- name: Upload Build Artifacts | |
if: contains(matrix.os, 'macos') | |
uses: actions/upload-artifact@v4 | |
with: | |
path: gdl-*-${{ matrix.deps }}.dmg | |
name: GDL (${{ matrix.os }}, ${{ matrix.deps }}, ${{ matrix.configuration }}) | |
- name: Upload Build Artifacts | |
if: "!contains(matrix.os, 'macos')" | |
uses: actions/upload-artifact@v4 | |
with: | |
path: gdl-*-${{ matrix.deps }}.zip | |
name: GDL (${{ matrix.os }}, ${{ matrix.deps }}, ${{ matrix.configuration }}) | |
- name: Upload Release Assets (unstable) | |
if: (github.event_name == 'schedule' || github.event.inputs.type == 'release') && startsWith(matrix.os, 'macos-') | |
uses: ncipollo/release-action@v1 | |
with: | |
artifacts: "gdl-*-${{ matrix.deps }}.dmg" | |
name: Weekly Binary Release (unstable) | |
body: Weekly Binary Release (unstable) | |
prerelease: true | |
allowUpdates: true | |
replacesArtifacts: true | |
commit: ${{ github.sha }} | |
tag: weekly-release | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Upload Release Assets (stable) | |
if: startsWith(github.ref, 'refs/tags/v') | |
uses: ncipollo/release-action@v1 | |
with: | |
artifacts: "gdl-*-${{ matrix.deps }}.zip" | |
name: ${{ github.event.release.tag_name }} | |
prerelease: false | |
allowUpdates: true | |
replacesArtifacts: true | |
commit: ${{ github.sha }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Test GDL | |
run: | | |
scripts/build_gdl.sh check | |
build-windows: | |
runs-on: windows-latest | |
needs: prelude | |
strategy: | |
fail-fast: false | |
matrix: ${{ fromJson(needs.prelude.outputs.matrix-windows) }} | |
env: | |
DEPS: ${{ matrix.deps }} | |
WORKSPACE: ${{ github.workspace }} | |
Platform: ${{ matrix.arch }} | |
Configuration: ${{ matrix.configuration }} | |
steps: | |
- name: Setup MSYS2 | |
uses: msys2/setup-msys2@v2.22.0 | |
with: | |
msystem: MSYS | |
update: false | |
release: false | |
install: >- | |
mingw-w64-${{ matrix.arch }}-toolchain | |
mingw-w64-${{ matrix.arch }}-cmake | |
mingw-w64-${{ matrix.arch }}-nsis | |
zip | |
unzip | |
tar | |
zstd | |
make | |
patch | |
git | |
rsync | |
patch | |
- name: Checkout GDL | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Cache Dependencies | |
if: matrix.arch == 'x86_64' | |
id: cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
C:\msys64\cache | |
key: cache-gdl-deps-windows-msys2-${{ matrix.arch }}-v9 | |
- name: Install MSMPI | |
if: matrix.deps == 'debug' || matrix.deps == 'headless' | |
run: | | |
Invoke-WebRequest -Uri https://download.microsoft.com/download/a/5/2/a5207ca5-1203-491a-8fb8-906fd68ae623/msmpisetup.exe -OutFile MSMpiSetup.exe | |
.\MSMpiSetup.exe -unattend | |
- name: Install Dependencies | |
if: steps.cache.outputs.cache-hit != 'true' | |
shell: msys2 {0} | |
run: | | |
pacman -Q | tr ' ' '-' | sort > ~/snapshot1.txt | |
scripts/build_gdl.sh prep | |
ls MINGW-packages/mingw-w64-graphicsmagick/ | |
mv MINGW-packages/mingw-w64-graphicsmagick/mingw-w64-*-graphicsmagick-*.tar.* /var/cache/pacman/pkg | |
ls MINGW-packages/mingw-w64-plplot/ | |
mv MINGW-packages/mingw-w64-plplot/mingw-w64-*-plplot-*.tar.* /var/cache/pacman/pkg | |
pacman -Q | tr ' ' '-' | sort > ~/snapshot2.txt | |
echo "Setting up cache..." | |
mkdir -p /cache | |
for package in $(comm -13 ~/snapshot1.txt ~/snapshot2.txt); do | |
echo "Caching ${package}..." | |
fn=`ls /var/cache/pacman/pkg/${package}-*.tar.{gz,bz2,xz,zst} 2> /dev/null || true` | |
tar xf $fn -C /cache | |
done | |
ADDTIONAL_FILES=( /mingw*/bin/mgwxdr-0.dll | |
/mingw*/lib/libbsdxdr.* | |
/mingw*/include/rpc/types.h | |
/mingw*/include/rpc/xdr.h ) | |
for fn in ${ADDTIONAL_FILES[@]}; do | |
cp --parents ${fn} /cache | |
done | |
- name: Restore Cache | |
if: steps.cache.outputs.cache-hit == 'true' | |
shell: msys2 {0} | |
run: | | |
rsync -rt --no-t --inplace /cache/ / | |
- name: Setup Python (64 bit) | |
id: setup-python-64 | |
uses: actions/setup-python@v5 | |
if: matrix.arch == 'x86_64' | |
with: | |
python-version: '3.x' | |
architecture: x64 | |
- name: Setup Python (32 bit) | |
id: setup-python-32 | |
uses: actions/setup-python@v5 | |
if: matrix.arch == 'i686' | |
with: | |
python-version: '3.x' | |
architecture: x86 | |
- name: Install Numpy | |
run: pip install numpy | |
- name: Build GDL | |
shell: msys2 {0} | |
run: | | |
export PATH=`cygpath "${pythonLocation}"`:$PATH | |
export PYTHON_EXECUTABLE=`cygpath "${pythonLocation}"`/python | |
if [[ -n "${{ steps.setup-python-32.outputs.python-version }}" ]]; then | |
export PYTHONVERSION="${{ steps.setup-python-32.outputs.python-version }}" | |
else | |
export PYTHONVERSION="${{ steps.setup-python-64.outputs.python-version }}" | |
fi | |
scripts/build_gdl.sh configure | |
scripts/build_gdl.sh build | |
scripts/build_gdl.sh install | |
- name: Package GDL | |
shell: msys2 {0} | |
run: | | |
export GDLDE_VERSION=$(git ls-remote --refs --tags https://github.com/gnudatalanguage/gdlde | tail -n1 | cut -d '/' -f3) | |
scripts/build_gdl.sh pack | |
scripts/build_gdl.sh prep_deploy | |
- name: Upload GDL Installer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: GDL Installer (${{ matrix.deps }}, ${{ matrix.arch }}, ${{ matrix.configuration }}) | |
path: gdlsetup-*-${{ matrix.deps }}.exe | |
# DO NOT export .zip as artifact: due to necessary use of a precise location for our customized plplot drivers, | |
# only an installer can be used (sets the correct environment variables) | |
# - name: Upload Build Artifacts | |
# uses: actions/upload-artifact@v4 | |
# with: | |
# name: GDL (windows-latest, ${{ matrix.deps }}, ${{ matrix.arch }}, ${{ matrix.configuration }}) | |
# path: gdl-*-${{ matrix.deps }}.zip | |
- name: Upload Release Windows Installer (unstable) | |
if: github.event_name == 'schedule' || github.event.inputs.type == 'release' | |
uses: ncipollo/release-action@v1 | |
with: | |
artifacts: "gdlsetup-*-${{ matrix.deps }}.exe,gdl-*-${{ matrix.deps }}.zip" | |
name: Weekly Release (unstable) | |
prerelease: true | |
allowUpdates: true | |
replacesArtifacts: true | |
tag: weekly-release | |
token: ${{ secrets.GITHUB_TOKEN }} | |
# supressed, same reason as above | |
# - name: Upload Release Assets (stable) | |
# if: startsWith(github.ref, 'refs/tags/v') | |
# uses: ncipollo/release-action@v1 | |
# with: | |
# artifacts: "gdlsetup-*-${{ matrix.deps }}.exe,gdl-*-${{ matrix.deps }}.zip" | |
# name: ${{ github.event.release.tag_name }} | |
# prerelease: false | |
# allowUpdates: true | |
# replacesArtifacts: true | |
# commit: ${{ github.sha }} | |
# token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Test GDL | |
shell: msys2 {0} | |
run: | | |
export PATH=`cygpath "${pythonLocation}"`:$PATH | |
scripts/build_gdl.sh check |