From 0eac76ee1be6123257d6306ed06ec73f66edf9e6 Mon Sep 17 00:00:00 2001 From: odow Date: Fri, 4 Apr 2025 16:13:47 +1300 Subject: [PATCH 1/8] Refactor solver-tests.yml to simplify secret management --- .github/workflows/solver-tests.yml | 114 +++++++++-------------------- 1 file changed, 34 insertions(+), 80 deletions(-) diff --git a/.github/workflows/solver-tests.yml b/.github/workflows/solver-tests.yml index 93bac64478..f6b40b9848 100644 --- a/.github/workflows/solver-tests.yml +++ b/.github/workflows/solver-tests.yml @@ -11,10 +11,6 @@ jobs: runs-on: ubuntu-latest env: PACKAGE: ${{ matrix.package }} - XPRESS_JL_SKIP_LIB_CHECK: "true" - # It's okay to share this secret with other packages because it is the public - # community-xpauth.xpr and not something confidential to JuMP-dev. - XPAUTH_XPR: ${{ secrets.XPAUTH_XPR }} strategy: fail-fast: false matrix: @@ -22,21 +18,21 @@ jobs: - package: 'JuMP' - package: 'Convex' - package: 'AmplNLWriter' - # - package: 'BARON' # Requires license + - package: 'BARON' - package: 'Cbc' - package: 'Clp' - # - package: 'CPLEX' # See below + - package: 'CPLEX' - package: 'CSDP' - package: 'DiffOpt' - package: 'DSDP' - package: 'Dualization' - package: 'ECOS' - package: 'GLPK' - # - package: 'Gurobi' # See below + - package: 'Gurobi' - package: 'HiGHS' - package: 'Hypatia' - package: 'Ipopt' - # - package: 'KNITRO' # See below + - package: 'KNITRO' - package: 'MiniZinc' - package: 'MosekTools' - package: 'MultiObjectiveAlgorithms' @@ -49,7 +45,7 @@ jobs: - package: 'PolyJuMP' - package: 'SCS' - package: 'SDPA' - # - package: 'SDPLR' # Requires MATLAB + - package: 'SDPLR' # - package: 'SDPNAL' # Requires MATLAB # - package: 'SDPT3' # Requires MATLAB # - package: 'SeduMi' # Requires MATLAB @@ -96,84 +92,42 @@ jobs: version: '1' - uses: julia-actions/cache@v2 - uses: julia-actions/julia-buildpkg@v1 - - name: Test - shell: julia --color=yes {0} + # Setup BARON.jl + - name: Add BARON secrets + if: ${{ matrix.package == "BARON" }} run: | - import Pkg - Pkg.develop(Pkg.PackageSpec(; path = pwd())) - if ENV["PACKAGE"] == "Xpress" - write("/opt/xpauth.xpr", ENV["XPAUTH_XPR"]) - ENV["XPAUTH_PATH"] = "/opt/xpauth.xpr" - ENV["XPRESS_JL_SKIP_LIB_CHECK"] = true - end - Pkg.develop(ENV["PACKAGE"]) - Pkg.build(ENV["PACKAGE"]) - Pkg.test(ENV["PACKAGE"]) - test-cplex: - name: CPLEX - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: julia-actions/setup-julia@v2 - with: - version: '1' - - uses: julia-actions/cache@v2 - - uses: julia-actions/julia-buildpkg@v1 - - name: Test - shell: julia --color=yes {0} - env: - CPLEX_VERSION: '2210' - SECRET_CPLEX_URL_2210: ${{ secrets.SECRET_CPLEX_URL_2210 }} + echo "SECRET_BARON_LICENSE=${{ secrets.BARON_LICENSE }}" >> $GITHUB_ENV + # Setup CPLEX.jl + - name: Add CPLEX secrets + if: ${{ matrix.package == "CPLEX" }} run: | - import Pkg - Pkg.develop(Pkg.PackageSpec(; path = pwd())) - Pkg.develop("CPLEX") - Pkg.test("CPLEX") - test-gurobi: - name: Gurobi - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: julia-actions/setup-julia@v2 - with: - version: '1' - - uses: julia-actions/cache@v2 - - shell: bash - env: - WLSLICENSE: ${{ secrets.WLSLICENSE }} + echo "CPLEX_VERSION=2210" >> $GITHUB_ENV + echo "CPLEX_URL_2210=${{ secrets.CPLEX_URL_2210 }}" >> $GITHUB_ENV + # Setup Gurobi.jl + - name: Add Gurobi secrets + if: ${{ matrix.package == "Gurobi" }} run: | mkdir -p /opt/gurobi - echo "$WLSLICENSE" > /opt/gurobi/gurobi.lic - - uses: julia-actions/julia-buildpkg@v1 - - name: Test - shell: julia --color=yes {0} + echo "${{ secrets.WLSLICENSE }}" > /opt/gurobi/gurobi.lic + # Setup KNITRO.jl + - name: Add KNITRO secrets + if: ${{ matrix.package == "KNITRO" }} run: | - import Pkg - Pkg.develop(Pkg.PackageSpec(; path = pwd())) - Pkg.develop("Gurobi") - Pkg.test("Gurobi") - test-knitro: - name: KNITRO - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: julia-actions/setup-julia@v2 - with: - version: '1' - - uses: julia-actions/cache@v2 - - shell: bash - env: - ARTELYS_LIC_JUMP_DEV: ${{ secrets.ARTELYS_LIC_8326_JUMP_DEV_2023_11_02 }} + echo "${{ secrets.ARTELYS_LIC_8326_JUMP_DEV_2023_11_02 }}" > ~/artelys_lic.txt + echo "SECRET_KNITRO_URL=${{ secrets.SECRET_KNITRO_URL }}" >> $GITHUB_ENV + echo "SECRET_KNITRO_LIBIOMP5=${{ secrets.SECRET_KNITRO_LIBIOMP5 }}" >> $GITHUB_ENV + # Setup Xpress.jl + - name: Add Xpress secrets + if: ${{ matrix.package == "Xpress" }} run: | - echo "$ARTELYS_LIC_JUMP_DEV" > ~/artelys_lic.txt - - name: Test + echo "XPRESS_JL_SKIP_LIB_CHECK=true" >> $GITHUB_ENV + echo "XPAUTH_PATH=/opt/xpauth.xpr" >> $GITHUB_ENV + echo "${{ secrets.XPRESS_LICENSE }}" > /opt/xpauth.xpr + - name: Run tests shell: julia --color=yes {0} - env: - SECRET_KNITRO_URL: ${{ secrets.SECRET_KNITRO_URL }} - SECRET_KNITRO_LIBIOMP5: ${{ secrets.SECRET_KNITRO_LIBIOMP5 }} run: | import Pkg Pkg.develop(Pkg.PackageSpec(; path = pwd())) - Pkg.develop("KNITRO") - Pkg.build("KNITRO") - Pkg.test("KNITRO") + Pkg.develop(ENV["PACKAGE"]) + Pkg.build(ENV["PACKAGE"]) + Pkg.test(ENV["PACKAGE"]) From 7947d2e347d2c72c884991787fd5a8dfd8ba9255 Mon Sep 17 00:00:00 2001 From: odow Date: Fri, 4 Apr 2025 16:26:10 +1300 Subject: [PATCH 2/8] Update --- .github/workflows/solver-tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/solver-tests.yml b/.github/workflows/solver-tests.yml index f6b40b9848..761a00deae 100644 --- a/.github/workflows/solver-tests.yml +++ b/.github/workflows/solver-tests.yml @@ -113,9 +113,9 @@ jobs: - name: Add KNITRO secrets if: ${{ matrix.package == "KNITRO" }} run: | - echo "${{ secrets.ARTELYS_LIC_8326_JUMP_DEV_2023_11_02 }}" > ~/artelys_lic.txt - echo "SECRET_KNITRO_URL=${{ secrets.SECRET_KNITRO_URL }}" >> $GITHUB_ENV - echo "SECRET_KNITRO_LIBIOMP5=${{ secrets.SECRET_KNITRO_LIBIOMP5 }}" >> $GITHUB_ENV + echo "${{ secrets.KNITRO_LICENSE }}" > ~/artelys_lic.txt + echo "SECRET_KNITRO_URL=${{ secrets.KNITRO_URL }}" >> $GITHUB_ENV + echo "SECRET_KNITRO_LIBIOMP5=${{ secrets.KNITRO_LIBIOMP5 }}" >> $GITHUB_ENV # Setup Xpress.jl - name: Add Xpress secrets if: ${{ matrix.package == "Xpress" }} From f1a9ff617fabeb567dd896cea932d8ec424d97eb Mon Sep 17 00:00:00 2001 From: odow Date: Fri, 4 Apr 2025 16:37:40 +1300 Subject: [PATCH 3/8] Update --- .github/workflows/solver-tests.yml | 43 +++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/.github/workflows/solver-tests.yml b/.github/workflows/solver-tests.yml index 761a00deae..b8eccd7329 100644 --- a/.github/workflows/solver-tests.yml +++ b/.github/workflows/solver-tests.yml @@ -91,38 +91,57 @@ jobs: with: version: '1' - uses: julia-actions/cache@v2 + with: + key: julia-${{ matrix.package }} - uses: julia-actions/julia-buildpkg@v1 # Setup BARON.jl - name: Add BARON secrets - if: ${{ matrix.package == "BARON" }} + if: ${{ matrix.package == 'BARON' }} + env: + SECRET_BARON_LICENSE: ${{ secrets.BARON_LICENSE }} + shell: bash run: | - echo "SECRET_BARON_LICENSE=${{ secrets.BARON_LICENSE }}" >> $GITHUB_ENV + echo "SECRET_BARON_LICENSE=$SECRET_BARON_LICENSE" >> $GITHUB_ENV # Setup CPLEX.jl - name: Add CPLEX secrets - if: ${{ matrix.package == "CPLEX" }} + if: ${{ matrix.package == 'CPLEX' }} + env: + SECRET_CPLEX_URL_2210: ${{ secrets.CPLEX_URL_2210 }} + shell: bash run: | + echo "CPLEX_URL_2210=$SECRET_CPLEX_URL_2210" >> $GITHUB_ENV echo "CPLEX_VERSION=2210" >> $GITHUB_ENV - echo "CPLEX_URL_2210=${{ secrets.CPLEX_URL_2210 }}" >> $GITHUB_ENV # Setup Gurobi.jl - name: Add Gurobi secrets - if: ${{ matrix.package == "Gurobi" }} + if: ${{ matrix.package == 'Gurobi' }} + env: + SECRET_GUROBI_LICENSE: ${{ secrets.WLSLICENSE }} + shell: bash run: | mkdir -p /opt/gurobi - echo "${{ secrets.WLSLICENSE }}" > /opt/gurobi/gurobi.lic + echo "$SECRET_GUROBI_LICENSE" > /opt/gurobi/gurobi.lic # Setup KNITRO.jl - name: Add KNITRO secrets - if: ${{ matrix.package == "KNITRO" }} + if: ${{ matrix.package == 'KNITRO' }} + env: + SECRET_KNITRO_LICENSE: ${{ secrets.KNITRO_LICENSE }} + SECRET_KNITRO_URL: ${{ secrets.KNITRO_URL }} + SECRET_KNITRO_LIBIOMP5: ${{ secrets.KNITRO_LIBIOMP5 }} + shell: bash run: | - echo "${{ secrets.KNITRO_LICENSE }}" > ~/artelys_lic.txt - echo "SECRET_KNITRO_URL=${{ secrets.KNITRO_URL }}" >> $GITHUB_ENV - echo "SECRET_KNITRO_LIBIOMP5=${{ secrets.KNITRO_LIBIOMP5 }}" >> $GITHUB_ENV + echo "$SECRET_KNITRO_LICENSE" > ~/artelys_lic.txt + echo "SECRET_KNITRO_URL=$SECRET_KNITRO_URL" >> $GITHUB_ENV + echo "SECRET_KNITRO_LIBIOMP5=$SECRET_KNITRO_LIBIOMP5" >> $GITHUB_ENV # Setup Xpress.jl - name: Add Xpress secrets - if: ${{ matrix.package == "Xpress" }} + if: ${{ matrix.package == 'Xpress' }} + env: + SECRET_XPRESS_LICENSE: ${{ secrets.XPRESS_LICENSE }} + shell: bash run: | + echo "$SECRET_XPRESS_LICENSE" > /opt/xpauth.xpr echo "XPRESS_JL_SKIP_LIB_CHECK=true" >> $GITHUB_ENV echo "XPAUTH_PATH=/opt/xpauth.xpr" >> $GITHUB_ENV - echo "${{ secrets.XPRESS_LICENSE }}" > /opt/xpauth.xpr - name: Run tests shell: julia --color=yes {0} run: | From b3cf31255b096a75e2f37aef78d753ed89be8219 Mon Sep 17 00:00:00 2001 From: odow Date: Fri, 4 Apr 2025 17:46:18 +1300 Subject: [PATCH 4/8] Update --- .github/workflows/solver-tests.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/solver-tests.yml b/.github/workflows/solver-tests.yml index b8eccd7329..e001ef0be5 100644 --- a/.github/workflows/solver-tests.yml +++ b/.github/workflows/solver-tests.yml @@ -91,8 +91,6 @@ jobs: with: version: '1' - uses: julia-actions/cache@v2 - with: - key: julia-${{ matrix.package }} - uses: julia-actions/julia-buildpkg@v1 # Setup BARON.jl - name: Add BARON secrets @@ -109,13 +107,13 @@ jobs: SECRET_CPLEX_URL_2210: ${{ secrets.CPLEX_URL_2210 }} shell: bash run: | - echo "CPLEX_URL_2210=$SECRET_CPLEX_URL_2210" >> $GITHUB_ENV + echo "SECRET_CPLEX_URL_2210=$SECRET_CPLEX_URL_2210" >> $GITHUB_ENV echo "CPLEX_VERSION=2210" >> $GITHUB_ENV # Setup Gurobi.jl - name: Add Gurobi secrets if: ${{ matrix.package == 'Gurobi' }} env: - SECRET_GUROBI_LICENSE: ${{ secrets.WLSLICENSE }} + SECRET_GUROBI_LICENSE: ${{ secrets.GUROBI_LICENSE }} shell: bash run: | mkdir -p /opt/gurobi From b2faaece5d0b8d07af6d0d59fe5c9c60264ea3a8 Mon Sep 17 00:00:00 2001 From: odow Date: Fri, 4 Apr 2025 19:57:30 +1300 Subject: [PATCH 5/8] Update --- .github/workflows/solver-tests.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/.github/workflows/solver-tests.yml b/.github/workflows/solver-tests.yml index e001ef0be5..32c169c01a 100644 --- a/.github/workflows/solver-tests.yml +++ b/.github/workflows/solver-tests.yml @@ -95,11 +95,9 @@ jobs: # Setup BARON.jl - name: Add BARON secrets if: ${{ matrix.package == 'BARON' }} - env: - SECRET_BARON_LICENSE: ${{ secrets.BARON_LICENSE }} shell: bash run: | - echo "SECRET_BARON_LICENSE=$SECRET_BARON_LICENSE" >> $GITHUB_ENV + echo "SECRET_BARON_LICENSE=${{ secrets.BARON_LICENSE }}" >> $GITHUB_ENV # Setup CPLEX.jl - name: Add CPLEX secrets if: ${{ matrix.package == 'CPLEX' }} @@ -107,7 +105,7 @@ jobs: SECRET_CPLEX_URL_2210: ${{ secrets.CPLEX_URL_2210 }} shell: bash run: | - echo "SECRET_CPLEX_URL_2210=$SECRET_CPLEX_URL_2210" >> $GITHUB_ENV + echo "SECRET_CPLEX_URL_2210=${SECRET_CPLEX_URL_2210}" >> $GITHUB_ENV echo "CPLEX_VERSION=2210" >> $GITHUB_ENV # Setup Gurobi.jl - name: Add Gurobi secrets @@ -117,7 +115,7 @@ jobs: shell: bash run: | mkdir -p /opt/gurobi - echo "$SECRET_GUROBI_LICENSE" > /opt/gurobi/gurobi.lic + echo "${SECRET_GUROBI_LICENSE}" > /opt/gurobi/gurobi.lic # Setup KNITRO.jl - name: Add KNITRO secrets if: ${{ matrix.package == 'KNITRO' }} @@ -127,9 +125,9 @@ jobs: SECRET_KNITRO_LIBIOMP5: ${{ secrets.KNITRO_LIBIOMP5 }} shell: bash run: | - echo "$SECRET_KNITRO_LICENSE" > ~/artelys_lic.txt - echo "SECRET_KNITRO_URL=$SECRET_KNITRO_URL" >> $GITHUB_ENV - echo "SECRET_KNITRO_LIBIOMP5=$SECRET_KNITRO_LIBIOMP5" >> $GITHUB_ENV + echo "${SECRET_KNITRO_LICENSE}" > ~/artelys_lic.txt + echo "SECRET_KNITRO_URL=${SECRET_KNITRO_URL}" >> $GITHUB_ENV + echo "SECRET_KNITRO_LIBIOMP5=${SECRET_KNITRO_LIBIOMP5}" >> $GITHUB_ENV # Setup Xpress.jl - name: Add Xpress secrets if: ${{ matrix.package == 'Xpress' }} @@ -137,7 +135,7 @@ jobs: SECRET_XPRESS_LICENSE: ${{ secrets.XPRESS_LICENSE }} shell: bash run: | - echo "$SECRET_XPRESS_LICENSE" > /opt/xpauth.xpr + echo "${SECRET_XPRESS_LICENSE}" > /opt/xpauth.xpr echo "XPRESS_JL_SKIP_LIB_CHECK=true" >> $GITHUB_ENV echo "XPAUTH_PATH=/opt/xpauth.xpr" >> $GITHUB_ENV - name: Run tests From e33ad8010e54cd5f2be2b42bc49d4c80c018032f Mon Sep 17 00:00:00 2001 From: odow Date: Sat, 5 Apr 2025 09:02:54 +1300 Subject: [PATCH 6/8] Update --- .github/workflows/solver-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/solver-tests.yml b/.github/workflows/solver-tests.yml index 32c169c01a..a9fc7f0c52 100644 --- a/.github/workflows/solver-tests.yml +++ b/.github/workflows/solver-tests.yml @@ -97,7 +97,7 @@ jobs: if: ${{ matrix.package == 'BARON' }} shell: bash run: | - echo "SECRET_BARON_LICENSE=${{ secrets.BARON_LICENSE }}" >> $GITHUB_ENV + echo "SECRET_BARON_LICENSE='${{ secrets.BARON_LICENSE }}'" >> $GITHUB_ENV # Setup CPLEX.jl - name: Add CPLEX secrets if: ${{ matrix.package == 'CPLEX' }} From c8d39cad63135489384530bad8d10bf7daa2ae08 Mon Sep 17 00:00:00 2001 From: odow Date: Sat, 5 Apr 2025 10:31:16 +1300 Subject: [PATCH 7/8] Update --- .github/workflows/solver-tests.yml | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/.github/workflows/solver-tests.yml b/.github/workflows/solver-tests.yml index a9fc7f0c52..9f1f69c160 100644 --- a/.github/workflows/solver-tests.yml +++ b/.github/workflows/solver-tests.yml @@ -96,8 +96,27 @@ jobs: - name: Add BARON secrets if: ${{ matrix.package == 'BARON' }} shell: bash + # Writing a multiline string is hard. GitHub says: + # https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#multiline-strings + # + # For multiline strings, you may use a delimiter with the following syntax. + # + # {name}<<{delimiter} + # {value} + # {delimiter} + # + # Their example goes on to use 'EOF' as the delimiter, which works so + # long as 'EOF' does not appear in the string. If you get the error: + # + # Run echo "SECRET_BARON_LICENSE='*** + # Error: Unable to process file command 'env' successfully. + # Error: Invalid format '***' + # + # This is the most likely culprit. run: | - echo "SECRET_BARON_LICENSE='${{ secrets.BARON_LICENSE }}'" >> $GITHUB_ENV + echo "SECRET_BARON_LICENSE<> $GITHUB_ENV + echo "EOF>>" >> $GITHUB_ENV # Setup CPLEX.jl - name: Add CPLEX secrets if: ${{ matrix.package == 'CPLEX' }} From bfb04a7456488ae4d0cac60d3c35d08774d4cea7 Mon Sep 17 00:00:00 2001 From: odow Date: Sat, 5 Apr 2025 12:16:01 +1300 Subject: [PATCH 8/8] Fix BARON --- .github/workflows/solver-tests.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/solver-tests.yml b/.github/workflows/solver-tests.yml index 9f1f69c160..bf6c7c0e20 100644 --- a/.github/workflows/solver-tests.yml +++ b/.github/workflows/solver-tests.yml @@ -114,9 +114,11 @@ jobs: # # This is the most likely culprit. run: | - echo "SECRET_BARON_LICENSE<> $GITHUB_ENV - echo "EOF>>" >> $GITHUB_ENV + { + echo "SECRET_BARON_LICENSE<> $GITHUB_ENV # Setup CPLEX.jl - name: Add CPLEX secrets if: ${{ matrix.package == 'CPLEX' }}