From 41343f62c0549248f3fa4ff1b381c2196c2c82d2 Mon Sep 17 00:00:00 2001 From: Pepijn de Vos Date: Wed, 15 Oct 2025 13:16:39 +0200 Subject: [PATCH 1/3] build xyce appimage --- .github/workflows/build.yml | 11 +++++ Dockerfile | 37 +++++++++++++-- build.sh | 14 ++++-- data/AppImageBuilder.yml | 60 ++++++++++++++++++++++++ data/Xyce.desktop | 10 ++++ data/xyce.png | Bin 0 -> 7436 bytes scripts/build-appimage-docker.sh | 22 +++++++++ scripts/build-appimage.sh | 78 +++++++++++++++++++++++++++++++ 8 files changed, 225 insertions(+), 7 deletions(-) create mode 100644 data/AppImageBuilder.yml create mode 100644 data/Xyce.desktop create mode 100644 data/xyce.png create mode 100755 scripts/build-appimage-docker.sh create mode 100755 scripts/build-appimage.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 92910f6..dbdd57a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -112,12 +112,23 @@ jobs: run: ./build.sh -r continue-on-error: true + - name: Build AppImage + if: contains(matrix.os, 'ubuntu') + run: ./build.sh -a + - name: Upload installation as artifact uses: actions/upload-artifact@v4 with: name: xyce-${{ matrix.os }} path: _install + - name: Upload AppImage as artifact + if: contains(matrix.os, 'ubuntu') + uses: actions/upload-artifact@v4 + with: + name: xyce-appimage-${{ matrix.os }} + path: _build_*/Xyce-*.AppImage + - name: Upload regression results as artifact uses: actions/upload-artifact@v4 with: diff --git a/Dockerfile b/Dockerfile index b499da8..8c6edac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -115,7 +115,36 @@ RUN ls -la _install_Linux/bin/ && \ RUN ls -laR . > file.list -#FROM scratch -#COPY --from=build /home/builder/_build_Linux /_build_Linux -#COPY --from=build /home/builder/_install_Linux /_install_Linux -#COPY --from=build /home/builder/file.list /file.list +#-------------------------- +# Build AppImage +#-------------------------- +FROM xyce AS appimage + +COPY --chown=builder:builder scripts/build-appimage.sh /home/builder/scripts/build-appimage.sh +COPY --chown=builder:builder data/AppImageBuilder.yml /home/builder/data/AppImageBuilder.yml +COPY --chown=builder:builder data/Xyce.desktop /home/builder/data/Xyce.desktop +COPY --chown=builder:builder data/xyce.png /home/builder/data/xyce.png + +USER builder +WORKDIR /home/builder + +# Install appimage-builder and dependencies +USER root +RUN apt-get update && apt-get install -y python3-pip python3-venv gtk-update-icon-cache squashfs-tools && rm -rf /var/lib/apt/lists/* +USER builder + +# Create virtual environment and install appimage-builder +RUN python3 -m venv /home/builder/appimage-env +RUN /home/builder/appimage-env/bin/pip install appimage-builder + +RUN --mount=type=cache,target=/ccache,uid=1001 ./build.sh -a + +# Verify the AppImage was created +RUN ls -lh _build_Linux/Xyce-*.AppImage || echo "AppImage build completed" + +#-------------------------- +# Export stage for easy artifact extraction +#-------------------------- +FROM scratch AS export +COPY --from=appimage /home/builder/_build_Linux/Xyce-*.AppImage / +COPY --from=appimage /home/builder/_install_Linux /install/ diff --git a/build.sh b/build.sh index a671f7c..303a641 100755 --- a/build.sh +++ b/build.sh @@ -9,7 +9,7 @@ Help() # Display Help echo "Xyce build script for Ubuntu, Windows and macOS, 64 bit x86_64 or aarch64" echo - echo "Syntax: $0 [-h] [-s] [-d] [-t] [-x] [-i install-dir] [-- []]" + echo "Syntax: $0 [-h] [-s] [-d] [-t] [-x] [-i install-dir] [-a] [-- []]" echo "options:" echo " -d: Debug build" echo " -s: Fetch source" @@ -18,6 +18,7 @@ Help() echo " -x: Build Xyce" echo " -i: Install XDM and Xyce in the given directory" echo " -r: Run the regression suite" + echo " -a: Build AppImage (requires Xyce to be installed)" echo " -h: Display this help" echo " : Arbitary options to pass to ./configure :" echo @@ -45,12 +46,13 @@ unset BUILD_XDM unset BUILD_XYCE unset RUN_REGRESSION unset INSTALL_XYCE +unset BUILD_APPIMAGE ############################################################ # Process the input options. Add options as needed. # ############################################################ # Get the options -while getopts ":hdtxmsri:" option; do +while getopts ":hdtxmsrai:" option; do case $option in h) # display Help Help @@ -80,6 +82,10 @@ while getopts ":hdtxmsri:" option; do RUN_REGRESSION=1 option_passed=1 ;; + a) # Build AppImage + BUILD_APPIMAGE=1 + option_passed=1 + ;; i) # Install INSTALL_XYCE=1 INSTALL_DIR=${OPTARG} @@ -273,4 +279,6 @@ if [ -n "$INSTALL_XYCE" ]; then ./scripts/install-xdm.sh || exit 1 fi - +if [ -n "$BUILD_APPIMAGE" ]; then + ./scripts/build-appimage.sh || exit 1 +fi diff --git a/data/AppImageBuilder.yml b/data/AppImageBuilder.yml new file mode 100644 index 0000000..c2b5a7d --- /dev/null +++ b/data/AppImageBuilder.yml @@ -0,0 +1,60 @@ +version: 1 + +script: + - mkdir -p $TARGET_APPDIR/usr + - cp -r _install_Linux/* $TARGET_APPDIR/usr/ + - mkdir -p $TARGET_APPDIR/usr/share/icons/hicolor/256x256/apps/ + - cp data/xyce.png $TARGET_APPDIR/usr/share/icons/hicolor/256x256/apps/xyce.png + - mkdir -p $TARGET_APPDIR/usr/share/applications/ + - cp data/Xyce.desktop $TARGET_APPDIR/usr/share/applications/org.sandia.xyce.desktop + +AppDir: + path: ./AppDir + app_info: + id: org.sandia.xyce + name: Xyce + icon: xyce + version: 1.0.0 + exec: usr/bin/Xyce + exec_args: $@ + + apt: + arch: amd64 + sources: + - sourceline: 'deb http://archive.ubuntu.com/ubuntu/ jammy main universe' + key_url: 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x871920D1991BC93C' + include: + # Xyce dependencies + - libblas3 + - liblapack3 + - libfftw3-3 + - libsuitesparseconfig5 + - libsuitesparse-dev + - libboost-python1.74.0 + # OpenMPI for parallel circuit simulation + - openmpi-bin + - libopenmpi3 + # Additional runtime dependencies + - libgomp1 + - libgfortran5 + - libgcc-s1 + - libc6 + - libstdc++6 + exclude: + # Exclude development packages to reduce size + - libopenmpi-dev + - libblas-dev + - liblapack-dev + + runtime: + env: + # OpenMPI configuration for AppImage environment + OPAL_PREFIX: '$APPDIR/usr' + OMPI_MCA_prefix: '$APPDIR/usr' + path_mappings: + # Map OpenMPI paths to AppDir locations + - /usr/share/openmpi:$APPDIR/usr/share/openmpi + - /etc/openmpi:$APPDIR/etc/openmpi + +AppImage: + arch: x86_64 diff --git a/data/Xyce.desktop b/data/Xyce.desktop new file mode 100644 index 0000000..17b12a0 --- /dev/null +++ b/data/Xyce.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Name=Xyce +GenericName=Circuit Simulator +Comment=Parallel Electronic Circuit Simulator +Exec=Xyce +Icon=xyce +Terminal=true +Categories=Science;Engineering;Electronics; +Keywords=circuit;simulation;spice;electronics; diff --git a/data/xyce.png b/data/xyce.png new file mode 100644 index 0000000000000000000000000000000000000000..e4a81c7267fad5bd748ea7c1d806315da40dcdae GIT binary patch literal 7436 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 KM)@_D$o~MDNu@df literal 0 HcmV?d00001 diff --git a/scripts/build-appimage-docker.sh b/scripts/build-appimage-docker.sh new file mode 100755 index 0000000..211dc6a --- /dev/null +++ b/scripts/build-appimage-docker.sh @@ -0,0 +1,22 @@ +#!/bin/bash +set -e + +echo "Building Xyce AppImage using Docker..." +echo "This will build all stages and extract the AppImage to the current directory." +echo + +# Determine output directory +OUTPUT_DIR="${1:-.}" +mkdir -p "$OUTPUT_DIR" + +echo "Building Docker image (this may take a while)..." +docker build --target export --output "$OUTPUT_DIR" . + +echo +echo "Build complete! AppImage extracted to:" +ls -lh "$OUTPUT_DIR"/Xyce-*.AppImage + +echo +echo "To run the AppImage:" +echo " chmod +x $OUTPUT_DIR/Xyce-*.AppImage" +echo " $OUTPUT_DIR/Xyce-*.AppImage --version" diff --git a/scripts/build-appimage.sh b/scripts/build-appimage.sh new file mode 100755 index 0000000..c208251 --- /dev/null +++ b/scripts/build-appimage.sh @@ -0,0 +1,78 @@ +#!/bin/bash +set -e +set -o pipefail + +echo "Building Xyce AppImage using appimage-builder..." + +# Ensure we're in the correct directory +if [ -z "$ROOT" ]; then + ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +fi + +cd "$ROOT" + +# Ensure INSTALL_PATH is set +if [ -z "$INSTALL_PATH" ]; then + echo "ERROR: INSTALL_PATH must be set" + exit 1 +fi + +# Check if Xyce is installed +if [ ! -f "$INSTALL_PATH/bin/Xyce" ]; then + echo "ERROR: Xyce not found at $INSTALL_PATH/bin/Xyce" + exit 1 +fi + +# Check if AppImageBuilder recipe exists +if [ ! -f "data/AppImageBuilder.yml" ]; then + echo "ERROR: data/AppImageBuilder.yml not found" + exit 1 +fi + +# Set version from Xyce binary if available +VERSION="unknown" +if [ -f "$INSTALL_PATH/bin/Xyce" ]; then + VERSION=$("$INSTALL_PATH/bin/Xyce" --version 2>&1 | head -n1 | grep -oP '\d+\.\d+(\.\d+)?' || echo "unknown") +fi + +echo "Building AppImage for Xyce version: $VERSION" + +# Export version for AppImageBuilder +export VERSION="$VERSION" + +# Clean any existing AppDir +rm -rf AppDir + +# Create the AppImage using appimage-builder +echo "Running appimage-builder..." +/home/builder/appimage-env/bin/appimage-builder --recipe data/AppImageBuilder.yml + +# Find any Xyce AppImage file +echo "Looking for Xyce AppImage file..." +APPIMAGE_OUTPUT="" + +# Look for Xyce AppImage files +for appimage_file in Xyce*.AppImage; do + if [ -f "$appimage_file" ]; then + APPIMAGE_OUTPUT="$appimage_file" + break + fi +done + +if [ -n "$APPIMAGE_OUTPUT" ] && [ -f "$APPIMAGE_OUTPUT" ]; then + echo "AppImage created successfully: $APPIMAGE_OUTPUT" + ls -lh "$APPIMAGE_OUTPUT" + + # Move to build directory if it exists + if [ -n "$BUILDDIR" ] && [ -d "$ROOT/$BUILDDIR" ]; then + mv "$APPIMAGE_OUTPUT" "$ROOT/$BUILDDIR/" + echo "AppImage moved to: $ROOT/$BUILDDIR/$(basename "$APPIMAGE_OUTPUT")" + fi +else + echo "ERROR: AppImage was not created" + echo "Checking for any AppImage files in current directory:" + ls -la *.AppImage 2>/dev/null || echo "No AppImage files found" + exit 1 +fi + +echo "AppImage build completed successfully!" From 078489e9d51a4422b0ab10503c62c5bdd5970ff7 Mon Sep 17 00:00:00 2001 From: Pepijn de Vos Date: Wed, 15 Oct 2025 16:24:45 +0200 Subject: [PATCH 2/3] try to fix ci --- .github/workflows/build.yml | 11 ++++------- Dockerfile | 8 ++------ build.sh | 7 +++---- scripts/build-appimage.sh | 4 +++- 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dbdd57a..cabc43e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -107,20 +107,19 @@ jobs: if: ${{ ! contains(matrix.os, 'windows') }} run: ./build.sh -s -t -m -x -i + - name: Build AppImage + if: contains(matrix.os, 'ubuntu') + run: ./build.sh -a - name: Run Regression run: ./build.sh -r continue-on-error: true - - name: Build AppImage - if: contains(matrix.os, 'ubuntu') - run: ./build.sh -a - - name: Upload installation as artifact uses: actions/upload-artifact@v4 with: name: xyce-${{ matrix.os }} - path: _install + path: _install_* - name: Upload AppImage as artifact if: contains(matrix.os, 'ubuntu') @@ -134,5 +133,3 @@ jobs: with: name: xyce-regression-${{ matrix.os }} path: _build_*/Xyce-Regression - - diff --git a/Dockerfile b/Dockerfile index 8c6edac..c38d451 100644 --- a/Dockerfile +++ b/Dockerfile @@ -93,7 +93,7 @@ RUN --mount=type=cache,target=/ccache,uid=1001 ./build.sh -x #-------------------------- # Install Xyce and XDM #-------------------------- -RUN --mount=type=cache,target=/ccache,uid=1001 ./build.sh -i _install +RUN --mount=type=cache,target=/ccache,uid=1001 ./build.sh -i #-------------------------- # Run regression tests @@ -130,13 +130,9 @@ WORKDIR /home/builder # Install appimage-builder and dependencies USER root -RUN apt-get update && apt-get install -y python3-pip python3-venv gtk-update-icon-cache squashfs-tools && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install -y wget gtk-update-icon-cache squashfs-tools && rm -rf /var/lib/apt/lists/* USER builder -# Create virtual environment and install appimage-builder -RUN python3 -m venv /home/builder/appimage-env -RUN /home/builder/appimage-env/bin/pip install appimage-builder - RUN --mount=type=cache,target=/ccache,uid=1001 ./build.sh -a # Verify the AppImage was created diff --git a/build.sh b/build.sh index 303a641..d98c563 100755 --- a/build.sh +++ b/build.sh @@ -9,14 +9,14 @@ Help() # Display Help echo "Xyce build script for Ubuntu, Windows and macOS, 64 bit x86_64 or aarch64" echo - echo "Syntax: $0 [-h] [-s] [-d] [-t] [-x] [-i install-dir] [-a] [-- []]" + echo "Syntax: $0 [-h] [-s] [-d] [-t] [-x] [-i] [-a] [-- []]" echo "options:" echo " -d: Debug build" echo " -s: Fetch source" echo " -t: Build Trilinos" echo " -m: Build XDM" echo " -x: Build Xyce" - echo " -i: Install XDM and Xyce in the given directory" + echo " -i: Install XDM and Xyce" echo " -r: Run the regression suite" echo " -a: Build AppImage (requires Xyce to be installed)" echo " -h: Display this help" @@ -52,7 +52,7 @@ unset BUILD_APPIMAGE # Process the input options. Add options as needed. # ############################################################ # Get the options -while getopts ":hdtxmsrai:" option; do +while getopts ":hdtxmsrai" option; do case $option in h) # display Help Help @@ -88,7 +88,6 @@ while getopts ":hdtxmsrai:" option; do ;; i) # Install INSTALL_XYCE=1 - INSTALL_DIR=${OPTARG} option_passed=1 ;; \?) # Invalid option diff --git a/scripts/build-appimage.sh b/scripts/build-appimage.sh index c208251..769a7ef 100755 --- a/scripts/build-appimage.sh +++ b/scripts/build-appimage.sh @@ -45,7 +45,9 @@ rm -rf AppDir # Create the AppImage using appimage-builder echo "Running appimage-builder..." -/home/builder/appimage-env/bin/appimage-builder --recipe data/AppImageBuilder.yml +wget -O appimage-builder-x86_64.AppImage https://github.com/AppImageCrafters/appimage-builder/releases/download/v1.1.0/appimage-builder-1.1.0-x86_64.AppImage +chmod +x appimage-builder-x86_64.AppImage +./appimage-builder-x86_64.AppImage --appimage-extract-and-run --recipe data/AppImageBuilder.yml # Find any Xyce AppImage file echo "Looking for Xyce AppImage file..." From 5247bc085e37e66984e30a90899f50dae9fd1d77 Mon Sep 17 00:00:00 2001 From: Pepijn de Vos Date: Thu, 23 Oct 2025 10:41:58 +0200 Subject: [PATCH 3/3] Remove broken macOS and Windows from CI matrix --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cabc43e..790d6da 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,7 +27,7 @@ jobs: # To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list. matrix: - os: [ubuntu-latest-large, windows-latest-large, macos-latest-large] # windows-11-arm doesnt have working msys2 yet + os: [ubuntu-latest-large] # windows-11-arm doesnt have working msys2 yet defaults: run: