name: Build on: push: branches: ["*"] pull_request: workflow_dispatch: env: BUILD_TYPE: Release jobs: # Windows build win: runs-on: windows-2022 name: 🪟 Windows MINGW64 defaults: run: shell: msys2 {0} env: CCACHE_DIR: "${{ github.workspace }}/.ccache" CCACHE_MAXSIZE: "1000M" CCACHE_COMPRESS: "true" steps: - name: 🧰 Checkout uses: actions/checkout@v3 with: submodules: recursive - name: 📜 Prepare Cache id: prep-ccache shell: bash run: | mkdir -p "${CCACHE_DIR}" echo "::set-output name=dir::$CCACHE_DIR" - name: 📜 Restore ccache uses: actions/cache@v3 id: cache-ccache with: path: | ${{ steps.prep-ccache.outputs.dir }} key: ${{ runner.os }}-${{ secrets.CACHE_VERSION }}-build-${{ github.run_id }} restore-keys: ${{ runner.os }}-${{ secrets.CACHE_VERSION }}-build - name: 📜 Restore CMakeCache uses: actions/cache@v3 with: path: | build/CMakeCache.txt key: ${{ runner.os }}-${{ secrets.CACHE_VERSION }}-build-${{ hashFiles('**/CMakeLists.txt') }} - name: 🟦 Install msys2 uses: msys2/setup-msys2@v2 with: msystem: mingw64 pacboy: >- gcc:p lld:p cmake:p make:p ccache:p glfw:p file:p mbedtls:p python:p freetype:p dlfcn:p - name: ⬇️ Install dependencies run: | curl --proto '=https' --tlsv1.2 -sSf https://win.rustup.rs > rustup-init.exe ./rustup-init.exe -y --default-host=x86_64-pc-windows-gnu --default-toolchain=none rm rustup-init.exe $USERPROFILE/.cargo/bin/rustup.exe target add x86_64-pc-windows-gnu $USERPROFILE/.cargo/bin/rustup.exe default nightly # Windows cmake build - name: 🛠️ Build run: | mkdir -p build cd build # Get path to mingw python library PYTHON_LIB_NAME=$(pkg-config --libs-only-l python3 | sed 's/^-l//' | sed 's/ //') PYTHON_LIB_PATH=$(cygpath -m $(which lib${PYTHON_LIB_NAME}.dll)) cmake -G "MinGW Makefiles" \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ -DCMAKE_INSTALL_PREFIX="$PWD/install" \ -DCREATE_PACKAGE=ON \ -DPython_LIBRARY="$PYTHON_LIB_PATH" \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_C_FLAGS="-fuse-ld=lld" \ -DCMAKE_CXX_FLAGS="-fuse-ld=lld" \ -DRUST_PATH="$USERPROFILE/.cargo/bin/" \ -DIMHEX_PATTERNS_PULL_MASTER=ON \ .. mingw32-make -j4 install cpack echo "ImHex checks for the existence of this file to determine if it is running in portable mode. You should not delete this file" > $PWD/install/PORTABLE - name: ⬆️ Upload Windows Installer uses: actions/upload-artifact@v3 with: name: Windows Installer path: | build/*.msi - name: ⬆️ Upload Portable ZIP uses: actions/upload-artifact@v3 with: name: Windows Portable path: | build/install/* - name: ⬇️ Download Mesa3D for NoGPU version shell: bash run: | echo "NoGPU version Powered by Mesa 3D : https://fdossena.com/?p=mesa%2Findex.frag" > build/install/MESA.md curl https://downloads.fdossena.com/geth.php?r=mesa64-latest -L -o mesa.7z 7z e mesa.7z mv opengl32.dll build/install - name: ⬆️ Upload NoGPU Portable ZIP uses: actions/upload-artifact@v3 with: name: Windows Portable NoGPU path: | build/install/* # MacOS build macos: runs-on: macos-11 strategy: matrix: include: - suffix: "-NoGPU" custom_glfw: true - suffix: "" custom_glfw: false name: 🍎 macOS 11.0${{matrix.suffix}} steps: - name: 🧰 Checkout uses: actions/checkout@v3 with: submodules: recursive - name: 📜 Set version variable run: | echo "IMHEX_VERSION=`cat VERSION`" >> $GITHUB_ENV - name: 📜 Restore ccache uses: actions/cache@v3 with: path: | ~/Library/Caches/ccache key: ${{ runner.os }}-${{ matrix.suffix }}-${{ secrets.CACHE_VERSION }}-build-${{ github.run_id }} restore-keys: ${{ runner.os }}-${{ secrets.CACHE_VERSION }}-build - name: 📜 Restore CMakeCache uses: actions/cache@v3 with: path: | build/CMakeCache.txt key: ${{ runner.os }}-${{ matrix.suffix }}-${{ secrets.CACHE_VERSION }}-build-${{ hashFiles('**/CMakeLists.txt') }} - name: ⬇️ Install dependencies run: | brew bundle --no-lock --file dist/Brewfile - name: ⬇️ Install classic glfw if: ${{! matrix.custom_glfw}} run: | brew install glfw - name: 🧰 Checkout glfw if: ${{matrix.custom_glfw}} uses: actions/checkout@v3 with: repository: glfw/glfw path: glfw - name: ⬇️ Patch and install custom glfw if: ${{matrix.custom_glfw}} run: | cd glfw git apply ../dist/macOS/0001-glfw-SW.patch mkdir build cd build cmake \ -DBUILD_SHARED_LIBS=ON \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_OBJC_COMPILER_LAUNCHER=ccache \ -DCMAKE_OBJCXX_COMPILER_LAUNCHER=ccache \ .. make -j 4 install # MacOS cmake build - name: 🛠️ Build run: | mkdir -p build cd build CC=$(brew --prefix gcc@12)/bin/gcc-12 \ CXX=$(brew --prefix gcc@12)/bin/g++-12 \ OBJC=$(brew --prefix llvm)/bin/clang \ OBJCXX=$(brew --prefix llvm)/bin/clang++ \ PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig":"$(brew --prefix)/lib/pkgconfig" \ MACOSX_DEPLOYMENT_TARGET="10.10" \ cmake \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ -DCREATE_BUNDLE=ON \ -DCREATE_PACKAGE=ON \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_OBJC_COMPILER_LAUNCHER=ccache \ -DCMAKE_OBJCXX_COMPILER_LAUNCHER=ccache \ -DIMHEX_PATTERNS_PULL_MASTER=ON \ -DCMAKE_OSX_DEPLOYMENT_TARGET="10.10" \ -DCPACK_PACKAGE_FILE_NAME="imhex-${{env.IMHEX_VERSION}}-macOS${{matrix.suffix}}" \ .. make -j4 package - name: ⬆️ Upload DMG uses: actions/upload-artifact@v3 with: name: macOS DMG${{matrix.suffix}} path: build/*.dmg # Ubuntu build ubuntu: runs-on: ubuntu-22.04 name: 🐧 Ubuntu 22.04 steps: - name: 🧰 Checkout uses: actions/checkout@v3 with: submodules: recursive - name: 📜 Restore ccache uses: actions/cache@v3 with: path: | ~/.cache/ccache key: ${{ runner.os }}-${{ secrets.CACHE_VERSION }}-build-${{ github.run_id }} restore-keys: ${{ runner.os }}-${{ secrets.CACHE_VERSION }}-build - name: 📜 Restore other caches uses: actions/cache@v3 with: path: | build/CMakeCache.txt build-appimage/CMakeCache.txt .flatpak-builder key: ${{ runner.os }}-${{ secrets.CACHE_VERSION }}-build-${{ hashFiles('**/CMakeLists.txt') }} - name: ⬇️ Install dependencies run: | sudo rm -rf /usr/share/dotnet sudo rm -rf /opt/ghc sudo rm -rf "/usr/local/share/boost" sudo rm -rf "$AGENT_TOOLSDIRECTORY" sudo apt update sudo bash dist/get_deps_debian.sh sudo apt install -y python3-pip python3-setuptools desktop-file-utils libgdk-pixbuf2.0-dev fuse sudo wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage -O /usr/local/bin/appimagetool sudo chmod +x /usr/local/bin/appimagetool sudo pip3 install appimage-builder==1.0.0 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup-init.sh sh rustup-init.sh -y --default-toolchain none rm rustup-init.sh $HOME/.cargo/bin/rustup install nightly $HOME/.cargo/bin/rustup target add x86_64-unknown-linux-gnu $HOME/.cargo/bin/rustup default nightly # Ubuntu cmake build - name: 🛠️ Build run: | mkdir -p build cd build CC=gcc-12 CXX=g++-12 cmake \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ -DCMAKE_INSTALL_PREFIX="/usr" \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_C_FLAGS="-fuse-ld=lld" \ -DCMAKE_CXX_FLAGS="-fuse-ld=lld" \ -DRUST_PATH="$HOME/.cargo/bin/" \ -DIMHEX_PATTERNS_PULL_MASTER=ON \ .. make -j 4 install DESTDIR=DebDir - name: 📜 Set version variable run: | echo "IMHEX_VERSION=`cat VERSION`" >> $GITHUB_ENV #- name: 📦 Bundle Flatpak # run: | # sudo apt install flatpak flatpak-builder # flatpak --user remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo # flatpak --user install -y flathub org.freedesktop.Platform//20.08 # flatpak --user install -y flathub org.freedesktop.Sdk//20.08 # flatpak-builder --jobs=4 --repo=imhex _flatpak dist/net.werwolv.ImHex.yaml --ccache --keep-build-dirs # flatpak build-bundle imhex imhex.flatpak net.werwolv.ImHex stable - name: 📦 Bundle DEB run: | cp -r build/DEBIAN build/DebDir dpkg-deb -Zgzip --build build/DebDir mv build/DebDir.deb imhex-${{env.IMHEX_VERSION}}-Ubuntu-22.04.deb # AppImage cmake build - name: 🛠️ Reconfigure build for AppImage run: | mkdir -p build-appimage cd build-appimage CC=gcc-12 CXX=g++-12 cmake \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ -DCMAKE_INSTALL_PREFIX="/usr" \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_C_FLAGS="-fuse-ld=lld" \ -DCMAKE_CXX_FLAGS="-fuse-ld=lld" \ -DRUST_PATH="$HOME/.cargo/bin/" \ -DIMHEX_PATTERNS_PULL_MASTER=ON \ -DIMHEX_PLUGINS_IN_SHARE=ON \ -DIMHEX_USE_BUNDLED_CA=ON \ .. make -j 4 install DESTDIR=AppDir - name: 📦 Bundle AppImage run: | cd build-appimage export VERSION=${{env.IMHEX_VERSION}} appimage-builder --recipe ../dist/AppImageBuilder.yml cd .. #- name: ⬆️ Upload Flatpak # uses: actions/upload-artifact@v3 # with: # name: Linux Flatpak # path: | # imhex.flatpak - name: ⬆️ Upload DEB uses: actions/upload-artifact@v3 with: name: Ubuntu 22.04 DEB path: '*.deb' - name: ⬆️ Upload AppImage uses: actions/upload-artifact@v3 with: name: Linux AppImage path: 'build-appimage/*.AppImage' - name: ⬆️ Upload AppImage zsync uses: actions/upload-artifact@v3 with: name: Linux AppImage zsync path: 'build-appimage/*.AppImage.zsync' # ArchLinux build archlinux-build: name: 🐧 ArchLinux runs-on: ubuntu-latest container: image: archlinux:base-devel steps: - name: ⬇️ Update all packages run: | pacman -Syyu --noconfirm - name: ⬇️ Install setup dependencies run: | pacman -Syu git ccache --noconfirm - name: 🧰 Checkout uses: actions/checkout@v3 with: submodules: recursive - name: ⬇️ Install ImHex dependencies run: | dist/get_deps_archlinux.sh --noconfirm - name: 📜 Restore ccache uses: actions/cache@v3 with: path: | ~/.cache/ccache key: archlinux-${{ secrets.CACHE_VERSION }}-build-${{ github.run_id }} restore-keys: archlinux-${{ secrets.CACHE_VERSION }}-build - name: 📜 Restore CMakeCache uses: actions/cache@v3 with: path: | build/CMakeCache.txt key: archlinux-${{ secrets.CACHE_VERSION }}-build-${{ hashFiles('**/CMakeLists.txt') }} # ArchLinux cmake build - name: 🛠️ Build run: | mkdir -p build cd build CC=gcc CXX=g++ cmake \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ -DCMAKE_INSTALL_PREFIX="/usr" \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_C_FLAGS="-fuse-ld=lld" \ -DCMAKE_CXX_FLAGS="-fuse-ld=lld" \ -DUSE_SYSTEM_CURL=ON \ -DUSE_SYSTEM_FMT=ON \ -DUSE_SYSTEM_YARA=ON \ -DUSE_SYSTEM_NLOHMANN_JSON=ON \ -DUSE_SYSTEM_CAPSTONE=OFF \ -DIMHEX_PATTERNS_PULL_MASTER=ON \ .. make -j 4 install DESTDIR=installDir - name: 📜 Set version variable run: | echo "IMHEX_VERSION=`cat VERSION`" >> $GITHUB_ENV - name: ✒️ Prepare PKGBUILD run: | cp dist/Arch/PKGBUILD build sed -i 's/%version%/${{env.IMHEX_VERSION}}/g' build/PKGBUILD # makepkg doesn't want to run as root, so I had to chmod 777 all over - name: 📦 Package ArchLinux .pkg.tar.zst run: | cd build # the name is a small trick to make makepkg recognize it as the source # else, it would try to download the file from the release tar -cvf imhex-${{env.IMHEX_VERSION}}-ArchLinux.pkg.tar.zst -C installDir . chmod -R 777 . sudo -u nobody makepkg # Replace the old file rm imhex-${{env.IMHEX_VERSION}}-ArchLinux.pkg.tar.zst mv *.pkg.tar.zst imhex-${{env.IMHEX_VERSION}}-ArchLinux.pkg.tar.zst - name: ⬆️ Upload imhex-archlinux.pkg.tar.zst uses: actions/upload-artifact@v3 with: name: ArchLinux .pkg.tar.zst path: | build/imhex-${{env.IMHEX_VERSION}}-ArchLinux.pkg.tar.zst # Fedora build fedora-build: strategy: matrix: include: - docker_image: fedora:latest release: Latest - docker_image: fedora:rawhide release: Rawhide name: 🐧 Fedora ${{ matrix.release }} runs-on: ubuntu-latest container: image: "${{ matrix.docker_image }}" steps: - name: ⬇️ Update all packages run: | dnf upgrade -y - name: ⬇️ Install setup dependencies run: | dnf install -y \ ccache \ desktop-file-utils \ fmt-devel \ git \ json-devel \ libcurl-devel \ llvm-devel \ mbedtls-devel \ python3-devel \ rpm-build \ yara-devel - name: 🧰 Checkout uses: actions/checkout@v3 with: submodules: recursive - name: ⬇️ Install ImHex dependencies run: | dist/get_deps_fedora.sh - name: 📜 Restore ccache uses: actions/cache@v3 with: path: | ~/.cache/ccache key: fedora-${{ matrix.release }}-${{ secrets.CACHE_VERSION }}-build-${{ github.run_id }} restore-keys: fedora-${{ matrix.release }}-${{ secrets.CACHE_VERSION }}-build - name: 📜 Set version variable run: | echo "IMHEX_VERSION=`cat VERSION`" >> $GITHUB_ENV # Fedora cmake build (in imhex.spec) - name: 📦 Build RPM run: | rpmbuild -ba --define "_version ${{env.IMHEX_VERSION}}" --define "_src_path $GITHUB_WORKSPACE" --define "_build_type $BUILD_TYPE" $GITHUB_WORKSPACE/dist/rpm/imhex.spec mv ~/rpmbuild/RPMS/x86_64/*.rpm imhex-${{env.IMHEX_VERSION}}-Fedora-${{matrix.release}}.rpm - name: ⬆️ Upload RPM uses: actions/upload-artifact@v3 with: name: Fedora ${{ matrix.release }} RPM path: | imhex-${{env.IMHEX_VERSION}}-Fedora-${{matrix.release}}.rpm