Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
5a53158
Port Gurobi code from issue1199
TravisRiveraPetit Jul 28, 2026
e4c2d5d
Update Gurobi backend
TravisRiveraPetit Jul 28, 2026
a948f77
Style
TravisRiveraPetit Jul 28, 2026
f076988
set gurobi's lp algorithm to default
gutodelazeri Jul 29, 2026
485d07d
remove unnecessary sense update on rr constraints; remove unnecessary…
gutodelazeri Jul 30, 2026
a02a7f9
add support to gurobi in ubuntu CI
gutodelazeri Jul 31, 2026
5e616a9
update ubuntu ci
gutodelazeri Jul 31, 2026
be8977f
update documentation
gutodelazeri Jul 31, 2026
80ea6ca
Fix gurobi
TravisRiveraPetit Jul 31, 2026
3055535
Update git actions
TravisRiveraPetit Jul 31, 2026
184f3eb
New mac github actions
TravisRiveraPetit Jul 31, 2026
6c0595a
mac
TravisRiveraPetit Jul 31, 2026
6a1b8d4
no soplex bye
TravisRiveraPetit Jul 31, 2026
97bb525
Fix
TravisRiveraPetit Jul 31, 2026
d9113c9
asjdkfl
TravisRiveraPetit Jul 31, 2026
a351fe6
update macos CI workflow
gutodelazeri Aug 7, 2026
4940fd6
update macos CI workflow (add gmp paths to env variables)
gutodelazeri Aug 7, 2026
7520506
update macos CI workflow (update soplex patch version)
gutodelazeri Aug 7, 2026
ace4ef4
update macos CI workflow (fix gurobi installation, update macos test …
gutodelazeri Aug 7, 2026
e23f6f4
update CI workflows (add to gurobi license check
gutodelazeri Aug 7, 2026
6085129
update ubuntu and macos CI workflows (hide gurobi_cl output)
gutodelazeri Aug 7, 2026
777c003
add vibe-coded windows CI workflow for gurobi
gutodelazeri Aug 7, 2026
221579f
make windows CI workflow run in this branch
gutodelazeri Aug 7, 2026
c9c5c58
add vibe-coded soplex workflow on windows
gutodelazeri Aug 7, 2026
63000c0
fix soplex workflow on windows
gutodelazeri Aug 7, 2026
dfeb268
update soplex interface to disable windows macro ERROR
gutodelazeri Aug 7, 2026
e48b35c
add commands to build a debug version of soplex when fast downward is…
gutodelazeri Aug 7, 2026
168e19a
disable CI for ubuntu and macos in this branch
gutodelazeri Aug 7, 2026
93b0704
add macos CI workflow for cplex
gutodelazeri Aug 7, 2026
b16e7a7
fix cplex paths on macos ci workflow
gutodelazeri Aug 7, 2026
e054495
fix cplex path on macos
gutodelazeri Aug 9, 2026
2ce9857
add restore step to cplex workflow
gutodelazeri Aug 9, 2026
479edd3
update style
gutodelazeri Aug 9, 2026
f0b2ea2
update documentation; add gurobi header to ignore list; fix cmake
gutodelazeri Aug 9, 2026
c36912a
remove working branch from macOS CI tests
gutodelazeri Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
188 changes: 174 additions & 14 deletions .github/workflows/mac.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,27 @@ on:
branches: [main, release-*]

jobs:
test:
name: Compile and test planner
compile:
name: Compile planner
timeout-minutes: 60
runs-on: ${{ matrix.version.macos }}
strategy:
matrix:
version:
- {macos: macos-14, python: '3.14'}
- {macos: macos-15, python: '3.14'}
- {macos: macos-15, python: '3.10', run_tox_tests: true}
- {macos: macos-26, python: '3.10', run_tox_tests: true}
runs-on: ${{ matrix.version.macos }}
env:
GUROBI_URL: ${{ secrets.GUROBI1302_OSX_URL }}
GUROBI_LICENSE_URL: ${{ secrets.GUROBI_LICENSE_URL }}
GRB_LICENSE_FILE: /Users/runner/gurobi.lic
GUROBI_HOME: /Users/runner/lib/gurobi1302/macos_universal2
DYLD_LIBRARY_PATH: /Users/runner/lib/gurobi1302/macos_universal2/lib:/Applications/CPLEX_Studio222/cplex/bin/arm64_osx
soplex_DIR: /Users/runner/lib/soplex-7.1.6
SOPLEX_LIB: /Users/runner/lib/soplex-7.1.6/lib/
SOPLEX_INCLUDE: /Users/runner/lib/soplex-7.1.6/include/
CPLEX_URL: ${{ secrets.CPLEX2220_OSX_URL }}
cplex_DIR: /Applications/CPLEX_Studio222/cplex
CPLEX_LIB: /Applications/CPLEX_Studio222/cplex/bin/arm64_osx/libcplex2220.dylib
steps:
- name: Clone repository
uses: actions/checkout@v3
Expand All @@ -26,33 +38,181 @@ jobs:
with:
python-version: ${{ matrix.version.python }}

- name: Install dependencies
run: |
brew install coreutils gmp

- name: Install Gurobi
if: ${{ env.GUROBI_URL != 0 }}
run: |
wget -O "$RUNNER_TEMP/gurobi.pkg" "$GUROBI_URL" &> /dev/null
sudo installer -pkg "$RUNNER_TEMP/gurobi.pkg" -target /
mkdir -p "$HOME/lib/gurobi1302"
cp -R /Library/gurobi1302/macos_universal2 "$HOME/lib/gurobi1302/"
rm "$RUNNER_TEMP/gurobi.pkg"
test -f "$GUROBI_HOME/include/gurobi_c.h"
test -d "$GUROBI_HOME/lib"

- name: Check Gurobi license
if: ${{ env.GUROBI_URL != 0 }}
run: |
wget -O "$GRB_LICENSE_FILE" "$GUROBI_LICENSE_URL" &> /dev/null
chmod 600 "$GRB_LICENSE_FILE"
if ! "$GUROBI_HOME/bin/gurobi_cl" --license &> /dev/null; then
echo "Gurobi license is invalid or expired. Please contact gustavo.delazeri@unibas.ch"
exit 1
fi
echo "Gurobi license check passed."

- name: Install SoPlex
run: |
git clone https://github.com/scipopt/soplex.git
cd soplex
git checkout release-716
cd ..
cmake -S soplex -B build
cmake --build build
cmake --install build --prefix "${soplex_DIR}"
rm -rf soplex build

- name: Install CPLEX
if: ${{ env.CPLEX_URL != 0 }}
run: |
wget -O "$RUNNER_TEMP/cplex.pkg" "$CPLEX_URL" &> /dev/null
sudo installer -pkg "$RUNNER_TEMP/cplex.pkg" -target /
rm "$RUNNER_TEMP/cplex.pkg"
test -f "${cplex_DIR}/include/ilcplex/cplex.h"
test -f "$CPLEX_LIB"

- name: Compile planner
run: |
export CXXFLAGS="-Werror" # Treat compilation warnings as errors.
./build.py
gmp_prefix="$(brew --prefix gmp)"
export CXXFLAGS="-Werror -I${gmp_prefix}/include"
export LDFLAGS="-L${gmp_prefix}/lib"
./build.py --debug
./build.py

- name: Archive required files
if: ${{ matrix.version.run_tox_tests }}
run: |
files_to_archive="fast-downward.py driver misc src builds/debug/bin/ builds/release/bin/ ${SOPLEX_LIB} ${SOPLEX_INCLUDE}"
if [[ -n "${GUROBI_URL}" ]]; then
files_to_archive="${files_to_archive} ${GUROBI_HOME}/lib"
fi
if [[ -n "${CPLEX_URL}" ]]; then
mkdir -p "$HOME/lib/cplex2220"
cp "$CPLEX_LIB" "$HOME/lib/cplex2220/"
files_to_archive="${files_to_archive} $HOME/lib/cplex2220/libcplex2220.dylib"
fi
tar czf archive.tar.gz -C "$HOME" $(grealpath --relative-to="$HOME" $files_to_archive)

- name: Upload archive
if: ${{ matrix.version.run_tox_tests }}
uses: actions/upload-artifact@v4.4.0
with:
name: compiled-planner-${{ matrix.version.macos }}
path: archive.tar.gz
retention-days: 1

run_tox_tests:
name: Test planner
needs: compile # TODO: this only depends on the compile step with the gcc version we test
strategy:
matrix:
version:
- {macos: macos-15, python: '3.10'}
- {macos: macos-26, python: '3.10'}
runs-on: ${{ matrix.version.macos }}
env:
GUROBI_URL: ${{ secrets.GUROBI1302_OSX_URL }}
GUROBI_LICENSE_URL: ${{ secrets.GUROBI_LICENSE_URL }}
GRB_LICENSE_FILE: /Users/runner/gurobi.lic
GUROBI_HOME: /Users/runner/lib/gurobi1302/macos_universal2
DYLD_LIBRARY_PATH: /Users/runner/lib/gurobi1302/macos_universal2/lib:/Applications/CPLEX_Studio222/cplex/bin/arm64_osx
CPLEX_URL: ${{ secrets.CPLEX2220_OSX_URL }}
CPLEX_LIB: /Applications/CPLEX_Studio222/cplex/bin/arm64_osx/libcplex2220.dylib
CPLEX_ARCHIVE_LIB: /Users/runner/lib/cplex2220/libcplex2220.dylib
steps:
- name: Download archive
uses: actions/download-artifact@v4.1.8
with:
name: compiled-planner-${{ matrix.version.macos }}

- name: Install tox
- name: Delete artifact (ignore if not found)
uses: geekyeggo/delete-artifact@v2
continue-on-error: true
with:
name: compiled-planner-${{ matrix.version.macos }}

- name: Install Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.version.python }}

- name: Install dependencies
run: |
pip3 install tox
brew install gmp

- name: Install VAL
run: |
brew install gnu-sed
git clone https://github.com/KCL-Planning/VAL.git
cd VAL
git checkout a5565396007eee73ac36527fbf904142b3077c74
make clean # Remove old build artifacts and binaries.
gsed -i 's/-Werror //g' Makefile # Ignore warnings.
sed -i '' 's/-Werror //g' Makefile # Ignore warnings.
make -j2
mv validate ../
cd ../
rm -rf VAL
echo "$PWD" >> "$GITHUB_PATH" # Add VAL to path of subsequent steps.

- name: Extract archive
# We need to make sure that library paths are the same as
# during compilation.
run: |
tar xfz archive.tar.gz -C "$HOME"

# Fast Downward's binary records Gurobi's installation path under /Library/gurobi1302/macos_universal2
# This step copies the archived Gurobi to the right place

- name: Restore Gurobi library path
if: ${{ env.GUROBI_URL != 0 }}
run: |
sudo mkdir -p /Library/gurobi1302
sudo cp -R "$GUROBI_HOME" /Library/gurobi1302/
test -f /Library/gurobi1302/macos_universal2/lib/libgurobi130.dylib

# Ditto for cplex
- name: Restore CPLEX library path
if: ${{ env.CPLEX_URL != 0 }}
run: |
sudo mkdir -p "$(dirname "$CPLEX_LIB")"
sudo cp "$CPLEX_ARCHIVE_LIB" "$CPLEX_LIB"
sudo chmod 755 "$CPLEX_LIB"
test -r "$CPLEX_LIB"

- name: Run driver, translator and search tests
run: |
export PATH="$(pwd):$PATH" # Add VAL to path.
cd misc
tox -e driver,translator,search
cd misc/
tox -e driver,translator,search,parameters,generate-docs

...
- name: Run CPLEX tests
if: ${{ env.CPLEX_URL != 0 }}
run: |
cd misc/
tox -e cplex

- name: Run Gurobi tests
if: ${{ env.GUROBI_URL != 0 }}
run: |
# We redirect output of wget to hide the secret URL.
wget -O "$GRB_LICENSE_FILE" "$GUROBI_LICENSE_URL" &> /dev/null
chmod 600 "$GRB_LICENSE_FILE"
cd misc/
tox -e gurobi

- name: Run SoPlex tests
run: |
cd misc/
tox -e soplex
46 changes: 46 additions & 0 deletions .github/workflows/ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,18 @@ jobs:
env:
CC: ${{ matrix.version.cc }}
CXX: ${{ matrix.version.cxx }}

CPLEX_URL: ${{ secrets.CPLEX2211_LINUX_URL }}
cplex_DIR: /home/runner/lib/ibm/ILOG/CPLEX_Studio2211/cplex
CPLEX_LIB: /home/runner/lib/ibm/ILOG/CPLEX_Studio2211/cplex/bin/x86-64_linux/libcplex2211.so

GUROBI_URL: ${{ secrets.GUROBI1302_LINUX_URL }}
GUROBI_LICENSE_URL: ${{ secrets.GUROBI_LICENSE_URL }}
GRB_LICENSE_FILE: /home/runner/gurobi.lic
GUROBI_HOME: /home/runner/lib/gurobi1302/linux64
GUROBI_LIB: /home/runner/lib/gurobi1302/linux64/lib
LD_LIBRARY_PATH: /home/runner/lib/gurobi1302/linux64/lib

soplex_DIR: /home/runner/lib/soplex-7.1.0
SOPLEX_LIB: /home/runner/lib/soplex-7.1.0/lib/
SOPLEX_INCLUDE: /home/runner/lib/soplex-7.1.0/include/
Expand Down Expand Up @@ -70,6 +79,27 @@ jobs:
./cplex_installer -DLICENSE_ACCEPTED=TRUE -DUSER_INSTALL_DIR="$(dirname "${cplex_DIR}")" -i silent
rm cplex_installer

# Only install Gurobi if its URL/secret is set.
- name: Install Gurobi
if: ${{ env.GUROBI_URL != 0 }}
run: |
# We redirect output of wget to hide the secret URL.
wget -O gurobi.tar.gz $GUROBI_URL &> /dev/null
tar xfz gurobi.tar.gz -C /home/runner/lib
rm gurobi.tar.gz

- name: Check Gurobi license
if: ${{ env.GUROBI_URL != 0 }}
run: |
# We redirect output of wget to hide the secret URL.
wget -O "$GRB_LICENSE_FILE" "$GUROBI_LICENSE_URL" &> /dev/null
chmod 600 "$GRB_LICENSE_FILE"
if ! "$GUROBI_HOME/bin/gurobi_cl" --license &> /dev/null; then
echo "Gurobi license is invalid or expired. Please contact gustavo.delazeri@unibas.ch"
exit 1
fi
echo "Gurobi license check passed."

# Always install SoPlex
- name: Install SoPlex
run: |
Expand Down Expand Up @@ -98,6 +128,9 @@ jobs:
if [[ ! -z "${CPLEX_URL}" ]]; then
files_to_archive="${files_to_archive} ${CPLEX_LIB}"
fi
if [[ ! -z "${GUROBI_URL}" ]]; then
files_to_archive="${files_to_archive} ${GUROBI_LIB}"
fi
tar cfz archive.tar.gz -C "/home/runner" $(realpath --relative-to="/home/runner" $files_to_archive)

- name: Upload archive
Expand All @@ -120,6 +153,10 @@ jobs:
- {ubuntu: ubuntu-24.04, python: '3.10'}
env:
CPLEX_URL: ${{ secrets.CPLEX2211_LINUX_URL }}
GUROBI_URL: ${{ secrets.GUROBI1302_LINUX_URL }}
GUROBI_LICENSE_URL: ${{ secrets.GUROBI_LICENSE_URL }}
GRB_LICENSE_FILE: /home/runner/gurobi.lic
LD_LIBRARY_PATH: /home/runner/lib/gurobi1302/linux64/lib
steps:
- name: Download archive
uses: actions/download-artifact@v4.1.8
Expand Down Expand Up @@ -172,6 +209,15 @@ jobs:
cd misc/
tox -e cplex

- name: Run Gurobi tests
if: ${{ env.GUROBI_URL != 0 }}
run: |
# We redirect output of wget to hide the secret URL.
wget -O "$GRB_LICENSE_FILE" $GUROBI_LICENSE_URL &> /dev/null
chmod 600 "$GRB_LICENSE_FILE"
cd misc/
tox -e gurobi

- name: Run SoPlex tests
run: |
cd misc/
Expand Down
Loading
Loading