From a77a8d167bdaff55eb544c18fcdbb04d875995a8 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 13:53:28 -0500 Subject: [PATCH 01/17] Spack submodule. --- .gitmodules | 3 +++ Buildsystem/spack/spack | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 Buildsystem/spack/spack diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..f2538be8a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "Buildsystem/spack/spack"] + path = Buildsystem/spack/spack + url = https://github.com/spack/spack.git diff --git a/Buildsystem/spack/spack b/Buildsystem/spack/spack new file mode 160000 index 000000000..ba52c4f05 --- /dev/null +++ b/Buildsystem/spack/spack @@ -0,0 +1 @@ +Subproject commit ba52c4f05dcf06513957adfe039facd82c6b3387 From 700698af8d174e0f074d4dca13ade55464512063 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 15:29:43 -0500 Subject: [PATCH 02/17] Locally added Gridkit Spack package to the submodule. --- Buildsystem/spack/spack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Buildsystem/spack/spack b/Buildsystem/spack/spack index ba52c4f05..3e08a7dcc 160000 --- a/Buildsystem/spack/spack +++ b/Buildsystem/spack/spack @@ -1 +1 @@ -Subproject commit ba52c4f05dcf06513957adfe039facd82c6b3387 +Subproject commit 3e08a7dcc2859bec25b3c8a970844bb9dace8dac From ebbe2b827703982b0e64c9d750a97a013ab11e52 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 15:42:40 -0500 Subject: [PATCH 03/17] Attempt at adapting Re::Solve's Github action for a basic build and test. --- .github/workflows/spack_default_build.yaml | 161 +++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 .github/workflows/spack_default_build.yaml diff --git a/.github/workflows/spack_default_build.yaml b/.github/workflows/spack_default_build.yaml new file mode 100644 index 000000000..568c9a4cc --- /dev/null +++ b/.github/workflows/spack_default_build.yaml @@ -0,0 +1,161 @@ +# https://spack.readthedocs.io/en/latest/binary_caches.html#spack-build-cache-for-github-actions +name: Spack Ubunutu x86_64 Buildcache + +env: + SPACK_COLOR: always + REGISTRY: ghcr.io/ornl + # Our repo name contains upper case characters, so we can't use ${{ github.repository }} + IMAGE_NAME: gridkit + USERNAME: gridkit-bot + BASE_VERSION: ubuntu-22.04-fortran-v0.1.0 + +# Until we remove the need to clone submodules to build, this should on be in PRs +on: [pull_request] + +jobs: + base_image_build: + name: Build base image + runs-on: ubuntu-22.04 + permissions: + contents: read + packages: write + steps: + # No GHCR base image with skopeo, so this will do... + - name: "Set up skopeo" + uses: warjiang/setup-skopeo@v0.1.3 + with: + version: latest + + # Use skopeo to check for image for convenience + - name: Check for existing base images + run: | + set -e + CONTAINER_TAG=${{ env.BASE_VERSION }} + OCI_URL="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.BASE_VERSION }}" + echo Checking for CONTAINER_TAG $CONTAINER_TAG + skopeo inspect \ + docker://$OCI_URL \ + --raw \ + --creds "${{ env.USERNAME }}:${{ secrets.GITHUB_TOKEN }}" \ + > /dev/null && echo "Image already exists. Please bump version." && exit 0 + echo "IMAGE_EXISTS=false" >> $GITHUB_ENV + + # https://docs.github.com/en/actions/publishing-packages/publishing-docker-images + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ env.USERNAME }} + password: ${{ secrets.GITHUB_TOKEN }} + + # Need to build custom base image with gfortran + - name: Create Dockerfile heredoc + if: ${{ env.IMAGE_EXISTS == 'false' }} + run: | + cat << EOF > Dockerfile + FROM ubuntu:22.04 + RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + software-properties-common \ + gpg-agent \ + openssh-client \ + openssh-server \ + && rm -rf /var/lib/apt/lists/* + RUN add-apt-repository ppa:ubuntu-toolchain-r/test && \ + apt-get install -y --no-install-recommends \ + gcc \ + libstdc++6 \ + && rm -rf /var/lib/apt/lists/* + EOF + + - name: Extract metadata (tags, labels) for Docker + if: ${{ env.IMAGE_EXISTS == 'false' }} + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + labels: org.opencontainers.image.version=${{ env.BASE_VERSION }} + + - name: Build and push Docker base image + if: ${{ env.IMAGE_EXISTS == 'false' }} + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.BASE_VERSION }} + labels: ${{ steps.meta.outputs.labels }} + + gridkit_spack_builds: + needs: base_image_build + runs-on: ubuntu-22.04 + permissions: + packages: write + contents: read + + strategy: + matrix: + # Minimal Build(s) - GHCR mirror speeds these up a lot! + spack_spec: + - gridkit@develop + + name: Build gridkit with Spack + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + # Once we move submodule deps into spack, we can do some more builds + # Also need to change build script to use spack from base image + submodules: true + + - name: Setup Spack + run: echo "$PWD/buildsystem/spack/spack/bin" >> "$GITHUB_PATH" + + - name: Create heredoc spack.yaml + run: | + cat << EOF > spack.yaml + spack: + specs: + - ${{ matrix.spack_spec }} target=x86_64_v2 + concretizer: + reuse: dependencies + config: + install_tree: + root: /opt/spack + padded_length: 128 + mirrors: + local-buildcache: oci://${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + spack: https://binaries.spack.io/develop + EOF + + - name: Configure GHCR mirror + run: spack -e . mirror set --oci-username ${{ env.USERNAME }} --oci-password "${{ secrets.GITHUB_TOKEN }}" local-buildcache + + - name: Trust keys + run: spack -e . buildcache keys --install --trust + + - name: Find external packages + run: spack -e . external find --all + + - name: Spack develop gridkit + run: spack -e . develop --path=$(pwd) gridkit@develop + + - name: Concretize + run: spack -e . concretize + + - name: Install dependencies + run: spack -e . install --no-check-signature --only dependencies + + - name: Install package + run: spack -e . install --keep-stage --no-check-signature --no-cache --fresh + + - name: Test Build + run: cd $(spack -e . location --build-dir gridkit@develop) && ctest -VV + + - name: Test Installation + run: cd $(spack -e . location --build-dir gridkit@develop) && make test_install + + # Push with force to override existing binaries... + - name: Push to binaries to buildcache + run: | + spack -e . buildcache push --force --base-image ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.BASE_VERSION }} --unsigned --update-index local-buildcache + if: ${{ !cancelled() }} From db3b7b13de5e3a04171d3be4ab61d52e318a4147 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 15:55:20 -0500 Subject: [PATCH 04/17] Point Spack submodule to my fork, so it can be cloned in CI. --- .gitmodules | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitmodules b/.gitmodules index f2538be8a..a3f32b76a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,5 @@ [submodule "Buildsystem/spack/spack"] path = Buildsystem/spack/spack url = https://github.com/spack/spack.git +[submodule "https://github.com/nkoukpaizan/spack.git"] + url = Buildsystem/spack/spack/ From 77143be8e7218218cd501b09185bb0046316b770 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 16:06:55 -0500 Subject: [PATCH 05/17] Fix incorrect setup of Spack submodule. --- .gitmodules | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index a3f32b76a..66dd18b30 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,5 +1,4 @@ [submodule "Buildsystem/spack/spack"] path = Buildsystem/spack/spack - url = https://github.com/spack/spack.git -[submodule "https://github.com/nkoukpaizan/spack.git"] - url = Buildsystem/spack/spack/ + url = https://github.com/nkoukpaizan/spack.git + branch = Gridkit-package-dev From 600ccf7a7f7695fdbfa18e8e5f5b7eb25df4a3b4 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 17:01:50 -0500 Subject: [PATCH 06/17] Temporarily build the nicholson/buildsystem branch in CI, rather than develop. --- .github/workflows/spack_default_build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack_default_build.yaml b/.github/workflows/spack_default_build.yaml index 568c9a4cc..0cc2b1be6 100644 --- a/.github/workflows/spack_default_build.yaml +++ b/.github/workflows/spack_default_build.yaml @@ -96,7 +96,7 @@ jobs: matrix: # Minimal Build(s) - GHCR mirror speeds these up a lot! spack_spec: - - gridkit@develop + - gridkit@buildsystem name: Build gridkit with Spack steps: From 197cae79cf4d5a10dccc17ba9952b9ec55937001 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 17:05:23 -0500 Subject: [PATCH 07/17] Fix Spack path in Github action configuration file. --- .github/workflows/spack_default_build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack_default_build.yaml b/.github/workflows/spack_default_build.yaml index 0cc2b1be6..66e510b99 100644 --- a/.github/workflows/spack_default_build.yaml +++ b/.github/workflows/spack_default_build.yaml @@ -108,7 +108,7 @@ jobs: submodules: true - name: Setup Spack - run: echo "$PWD/buildsystem/spack/spack/bin" >> "$GITHUB_PATH" + run: echo "$PWD/Buildsystem/spack/spack/bin" >> "$GITHUB_PATH" - name: Create heredoc spack.yaml run: | From a8d92d7035868e8afc048fddbb317496c45f6122 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 17:22:59 -0500 Subject: [PATCH 08/17] Back to building gridkit@develop. Hack is done within the Spack package. --- .github/workflows/spack_default_build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack_default_build.yaml b/.github/workflows/spack_default_build.yaml index 66e510b99..2968bc7fc 100644 --- a/.github/workflows/spack_default_build.yaml +++ b/.github/workflows/spack_default_build.yaml @@ -96,7 +96,7 @@ jobs: matrix: # Minimal Build(s) - GHCR mirror speeds these up a lot! spack_spec: - - gridkit@buildsystem + - gridkit@develop name: Build gridkit with Spack steps: From 86f02e6f76eb6ea4780b53bed04a5b6ec58642c4 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 18:12:48 -0500 Subject: [PATCH 09/17] Explicitly set ipopt+mumps~coinhsl in Github action configuration. --- .github/workflows/spack_default_build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack_default_build.yaml b/.github/workflows/spack_default_build.yaml index 2968bc7fc..c403de858 100644 --- a/.github/workflows/spack_default_build.yaml +++ b/.github/workflows/spack_default_build.yaml @@ -96,7 +96,7 @@ jobs: matrix: # Minimal Build(s) - GHCR mirror speeds these up a lot! spack_spec: - - gridkit@develop + - gridkit@develop ^ipopt+mumps~coinhsl name: Build gridkit with Spack steps: From 4958e236a48fad3001d85d36854b00fab09c9886 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 18:27:53 -0500 Subject: [PATCH 10/17] Temporarilly 'spack clean ipopt' in Github actions. --- .github/workflows/spack_default_build.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/spack_default_build.yaml b/.github/workflows/spack_default_build.yaml index c403de858..4dcf4b12b 100644 --- a/.github/workflows/spack_default_build.yaml +++ b/.github/workflows/spack_default_build.yaml @@ -139,6 +139,10 @@ jobs: - name: Spack develop gridkit run: spack -e . develop --path=$(pwd) gridkit@develop + # Remove before merging + - name: Spack clean ipopt spec + run spack -e . clean ipopt + - name: Concretize run: spack -e . concretize From 180b11895d6cec7dd2a58c7300b4ef3acc87c518 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 18:30:27 -0500 Subject: [PATCH 11/17] Github actions configuration bug fix. --- .github/workflows/spack_default_build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack_default_build.yaml b/.github/workflows/spack_default_build.yaml index 4dcf4b12b..bf43ea0e4 100644 --- a/.github/workflows/spack_default_build.yaml +++ b/.github/workflows/spack_default_build.yaml @@ -141,7 +141,7 @@ jobs: # Remove before merging - name: Spack clean ipopt spec - run spack -e . clean ipopt + run: spack -e . clean ipopt - name: Concretize run: spack -e . concretize From d039bc1c1494c3263540d52c95cc0398f365fd45 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 18:54:16 -0500 Subject: [PATCH 12/17] Update local Spack submodule. --- Buildsystem/spack/spack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Buildsystem/spack/spack b/Buildsystem/spack/spack index 3e08a7dcc..50c1aba41 160000 --- a/Buildsystem/spack/spack +++ b/Buildsystem/spack/spack @@ -1 +1 @@ -Subproject commit 3e08a7dcc2859bec25b3c8a970844bb9dace8dac +Subproject commit 50c1aba4158c6496979c774fc379699f6dbc0bc3 From 4a156e0210cb0a42022228a9370bccf04078a725 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 18:59:10 -0500 Subject: [PATCH 13/17] Setting ipopt spec in Gridkit Spack package should be sufficient if correctly updated. --- .github/workflows/spack_default_build.yaml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/spack_default_build.yaml b/.github/workflows/spack_default_build.yaml index bf43ea0e4..2968bc7fc 100644 --- a/.github/workflows/spack_default_build.yaml +++ b/.github/workflows/spack_default_build.yaml @@ -96,7 +96,7 @@ jobs: matrix: # Minimal Build(s) - GHCR mirror speeds these up a lot! spack_spec: - - gridkit@develop ^ipopt+mumps~coinhsl + - gridkit@develop name: Build gridkit with Spack steps: @@ -139,10 +139,6 @@ jobs: - name: Spack develop gridkit run: spack -e . develop --path=$(pwd) gridkit@develop - # Remove before merging - - name: Spack clean ipopt spec - run: spack -e . clean ipopt - - name: Concretize run: spack -e . concretize From da4ee4b8cda2bf4dfca47a36143b3a6e8b669c05 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 19:02:58 -0500 Subject: [PATCH 14/17] Update local Spack submodule. --- Buildsystem/spack/spack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Buildsystem/spack/spack b/Buildsystem/spack/spack index 50c1aba41..780e99d57 160000 --- a/Buildsystem/spack/spack +++ b/Buildsystem/spack/spack @@ -1 +1 @@ -Subproject commit 50c1aba4158c6496979c774fc379699f6dbc0bc3 +Subproject commit 780e99d574a48698800ef977e445bd466936d48c From 43878d0720cecfd8f5a4c010f3e5813863b2c73c Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Wed, 11 Dec 2024 19:31:15 -0500 Subject: [PATCH 15/17] Update local Spack submodule. --- Buildsystem/spack/spack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Buildsystem/spack/spack b/Buildsystem/spack/spack index 780e99d57..bb4ca5ad4 160000 --- a/Buildsystem/spack/spack +++ b/Buildsystem/spack/spack @@ -1 +1 @@ -Subproject commit 780e99d574a48698800ef977e445bd466936d48c +Subproject commit bb4ca5ad45c437b504e9542577010f4318414836 From 2c0708dbc3a43a92b75a3a8643df714becbaa26c Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Tue, 17 Dec 2024 10:06:21 -0500 Subject: [PATCH 16/17] Temporarilly commented out ScaleMicrogrid test. --- Examples/ScaleMicrogrid/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/ScaleMicrogrid/CMakeLists.txt b/Examples/ScaleMicrogrid/CMakeLists.txt index d1822c587..0ac810128 100644 --- a/Examples/ScaleMicrogrid/CMakeLists.txt +++ b/Examples/ScaleMicrogrid/CMakeLists.txt @@ -9,5 +9,5 @@ target_link_libraries(scalemicrogrid GRIDKIT::powerelec_disgen GRIDKIT::solvers_dyn GRIDKIT::powerelec_mircobusdq) -add_test(NAME ScaleMicrogrid COMMAND $) +#add_test(NAME ScaleMicrogrid COMMAND $) install(TARGETS scalemicrogrid RUNTIME DESTINATION bin) From 290c20b30b8cc51604601a2b94bc7f3548be6b96 Mon Sep 17 00:00:00 2001 From: Nicholson Koukpaizan Date: Tue, 17 Dec 2024 10:18:57 -0500 Subject: [PATCH 17/17] Removed test_install step from Github actions. --- .github/workflows/spack_default_build.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/spack_default_build.yaml b/.github/workflows/spack_default_build.yaml index 2968bc7fc..55dc44a24 100644 --- a/.github/workflows/spack_default_build.yaml +++ b/.github/workflows/spack_default_build.yaml @@ -151,9 +151,6 @@ jobs: - name: Test Build run: cd $(spack -e . location --build-dir gridkit@develop) && ctest -VV - - name: Test Installation - run: cd $(spack -e . location --build-dir gridkit@develop) && make test_install - # Push with force to override existing binaries... - name: Push to binaries to buildcache run: |