name: CI on: - push - pull_request env: CMAKE_BUILD_TYPE: ${{ vars.CMAKE_BUILD_TYPE || 'RelWithDebInfo' }} jobs: spellcheck: runs-on: ubuntu-latest steps: - name: checkout repository uses: actions/checkout@v5 - name: Install codespell shell: bash run: | sudo apt-get update || true sudo apt-get install -y codespell - name: Run Spellchecker run: codespell no-features-test: name: No-features-test runs-on: ubuntu-latest permissions: security-events: write contents: read steps: - name: checkout repository uses: actions/checkout@v5 - name: uname -a run: uname -a - name: configure project run: cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DCMAKE_INSTALL_PREFIX=/usr . -DENABLE_VULKAN=OFF -DENABLE_WAYLAND=OFF -DENABLE_XCB_RANDR=OFF -DENABLE_XCB=OFF -DENABLE_XRANDR=OFF -DENABLE_X11=OFF -DENABLE_DRM=OFF -DENABLE_DRM_AMDGPU=OFF -DENABLE_GIO=OFF -DENABLE_DCONF=OFF -DENABLE_DBUS=OFF -DENABLE_SQLITE3=OFF -DENABLE_RPM=OFF -DENABLE_IMAGEMAGICK7=OFF -DENABLE_IMAGEMAGICK6=OFF -DENABLE_CHAFA=OFF -DENABLE_ZLIB=OFF -DENABLE_EGL=OFF -DENABLE_GLX=OFF -DENABLE_OPENCL=OFF -DENABLE_FREETYPE=OFF -DENABLE_PULSE=OFF -DENABLE_DDCUTIL=OFF -DENABLE_ELF=OFF -DENABLE_DIRECTX_HEADERS=OFF -DENABLE_THREADS=OFF - name: build project run: cmake --build . --target package --verbose -j4 - name: list features run: ./fastfetch --list-features - name: run fastfetch run: time ./fastfetch -c presets/ci.jsonc --stat false - name: run fastfetch --format json run: time ./fastfetch -c presets/ci.jsonc --format json - name: run flashfetch run: time ./flashfetch - name: print dependencies run: ldd fastfetch - name: run tests run: ctest --output-on-failure linux-hosts: name: Linux-${{ matrix.arch }} runs-on: ${{ matrix.runs-on }} permissions: security-events: write contents: read strategy: matrix: include: - arch: amd64 runs-on: ubuntu-22.04 - arch: aarch64 runs-on: ubuntu-22.04-arm outputs: ffversion: ${{ steps.ffversion.outputs.ffversion }} steps: - name: checkout repository uses: actions/checkout@v5 - name: uname -a run: uname -a - name: cat /etc/os-release run: cat /etc/os-release - name: cat /proc/cpuinfo run: cat /proc/cpuinfo - name: install required packages run: sudo apt-get update && sudo apt-get install -y libvulkan-dev libwayland-dev libxrandr-dev libxcb-randr0-dev libdconf-dev libdbus-1-dev libmagickcore-dev libsqlite3-dev librpm-dev libegl-dev libglx-dev ocl-icd-opencl-dev libpulse-dev libdrm-dev libelf-dev libddcutil-dev libchafa-dev directx-headers-dev rpm ninja-build - name: install linuxbrew packages run: | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" /home/linuxbrew/.linuxbrew/bin/brew install imagemagick --ignore-dependencies - name: Initialize CodeQL if: matrix.arch == 'amd64' uses: github/codeql-action/init@v3 with: languages: c - name: configure project run: PKG_CONFIG_PATH=/home/linuxbrew/.linuxbrew/lib/pkgconfig:$PKG_CONFIG_PATH cmake -GNinja -DSET_TWEAK=Off -DBUILD_TESTS=On -DENABLE_EMBEDDED_PCIIDS=On -DENABLE_EMBEDDED_AMDGPUIDS=On -DCMAKE_INSTALL_PREFIX=/usr . - name: build project run: cmake --build . --target package --verbose -j4 - name: perform CodeQL analysis if: matrix.arch == 'amd64' uses: github/codeql-action/analyze@v3 - name: list features run: ./fastfetch --list-features - name: run fastfetch run: time ./fastfetch -c presets/ci.jsonc --stat false - name: run fastfetch --format json run: time ./fastfetch -c presets/ci.jsonc --format json - name: run flashfetch run: time ./flashfetch - name: print dependencies run: ldd fastfetch - name: run tests run: ctest --output-on-failure - name: get fastfetch version id: ffversion run: echo "ffversion=$(./fastfetch --version-raw)" >> $GITHUB_OUTPUT - name: upload artifacts uses: actions/upload-artifact@v4 with: name: fastfetch-linux-${{ matrix.arch }} path: ./fastfetch-*.* linux-armv7l: name: Linux-armv7l runs-on: ubuntu-24.04 permissions: security-events: write contents: read steps: - name: checkout repository uses: actions/checkout@v5 - name: run VM uses: uraimo/run-on-arch-action@v3 id: runcmd with: arch: armv7 distro: ubuntu20.04 githubToken: ${{ github.token }} run: | uname -a apt-get update && apt-get install -y ca-certificates gpg curl curl -L https://apt.kitware.com/keys/kitware-archive-latest.asc | gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ focal main' | tee /etc/apt/sources.list.d/kitware.list >/dev/null echo -e 'Acquire::https::Verify-Peer "false";\nAcquire::https::Verify-Host "false";' >> /etc/apt/apt.conf.d/99ignore-certificates apt-get update && apt-get install -y cmake make g++ libvulkan-dev libwayland-dev libxrandr-dev libxcb-randr0-dev libdconf-dev libdbus-1-dev libmagickcore-dev libsqlite3-dev librpm-dev libegl-dev libglx-dev ocl-icd-opencl-dev libpulse-dev libdrm-dev libelf-dev rpm cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DCMAKE_INSTALL_PREFIX=/usr . cmake --build . --target package --verbose -j4 ./fastfetch --list-features time ./fastfetch -c presets/ci.jsonc --stat false time ./fastfetch -c presets/ci.jsonc --format json time ./flashfetch ldd fastfetch ctest --output-on-failure - name: upload artifacts uses: actions/upload-artifact@v4 with: name: fastfetch-linux-armv7l path: ./fastfetch-*.* linux-armv6l: name: Linux-armv6l runs-on: ubuntu-24.04 permissions: security-events: write contents: read steps: - name: checkout repository uses: actions/checkout@v5 - name: run VM uses: uraimo/run-on-arch-action@v3 id: runcmd with: arch: armv6 distro: bookworm githubToken: ${{ github.token }} run: | uname -a apt-get update && apt-get install -y wget apt-get install -y cmake make g++ libvulkan-dev libwayland-dev libxrandr-dev libxcb-randr0-dev libdconf-dev libdbus-1-dev libmagickcore-dev libsqlite3-dev librpm-dev libegl-dev libglx-dev ocl-icd-opencl-dev libpulse-dev libdrm-dev libelf-dev rpm cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DCMAKE_INSTALL_PREFIX=/usr . cmake --build . --target package --verbose -j4 ./fastfetch --list-features time ./fastfetch -c presets/ci.jsonc --stat false time ./fastfetch -c presets/ci.jsonc --format json time ./flashfetch ldd fastfetch ctest --output-on-failure - name: upload artifacts uses: actions/upload-artifact@v4 with: name: fastfetch-linux-armv6l path: ./fastfetch-*.* linux-vms: name: Linux-${{ matrix.arch }} runs-on: ubuntu-latest permissions: security-events: write contents: read strategy: matrix: include: - arch: riscv64 - arch: ppc64le - arch: s390x steps: - name: checkout repository uses: actions/checkout@v5 - name: run VM uses: uraimo/run-on-arch-action@v3 id: runcmd with: arch: ${{ matrix.arch }} distro: ubuntu20.04 githubToken: ${{ github.token }} run: | uname -a apt-get update && apt-get install -y cmake make g++ libvulkan-dev libwayland-dev libxrandr-dev libxcb-randr0-dev libdconf-dev libdbus-1-dev libmagickcore-dev libsqlite3-dev librpm-dev libegl-dev libglx-dev ocl-icd-opencl-dev libpulse-dev libdrm-dev libchafa-dev libelf-dev rpm cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DCMAKE_INSTALL_PREFIX=/usr . cmake --build . --target package --verbose -j4 ./fastfetch --list-features time ./fastfetch -c presets/ci.jsonc --stat false time ./fastfetch -c presets/ci.jsonc --format json time ./flashfetch ldd fastfetch ctest --output-on-failure - name: upload artifacts uses: actions/upload-artifact@v4 with: name: fastfetch-linux-${{ matrix.arch }} path: ./fastfetch-*.* musl-amd64: name: Musl-amd64 runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: setup alpine linux uses: jirutka/setup-alpine@master - name: install dependencies run: | cat /etc/alpine-release uname -a apk add cmake samurai vulkan-loader-dev libxcb-dev libxrandr-dev rpm-dev wayland-dev libdrm-dev dconf-dev imagemagick-dev chafa-dev zlib-dev dbus-dev mesa-dev opencl-dev sqlite-dev networkmanager-dev pulseaudio-dev ddcutil-dev elfutils-dev gcc g++ shell: alpine.sh --root {0} - name: build run: | cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DCMAKE_INSTALL_PREFIX=/usr -DIS_MUSL=ON -DENABLE_EMBEDDED_PCIIDS=On -DENABLE_EMBEDDED_AMDGPUIDS=On -GNinja . cmake --build . --target package --verbose -j4 shell: alpine.sh {0} - name: run run: | ./fastfetch --list-features time ./fastfetch -c presets/ci.jsonc --stat false time ./fastfetch -c presets/ci.jsonc --format json time ./flashfetch ldd fastfetch ctest --output-on-failure shell: alpine.sh {0} - name: upload artifacts uses: actions/upload-artifact@v4 with: name: fastfetch-musl-amd64 path: ./fastfetch-*.* macos-hosts: name: macOS-${{ matrix.arch }} runs-on: ${{ matrix.runs-on }} permissions: security-events: write contents: read strategy: matrix: include: - arch: amd64 runs-on: macos-13 - arch: aarch64 runs-on: macos-latest steps: - name: checkout repository uses: actions/checkout@v5 - name: uname -a run: uname -a - name: install required packages run: | HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install --overwrite vulkan-loader vulkan-headers molten-vk imagemagick chafa - name: configure project run: cmake -DSET_TWEAK=Off -DBUILD_TESTS=On . - name: build project run: cmake --build . --target package --verbose -j4 - name: list features run: ./fastfetch --list-features - name: run fastfetch run: time ./fastfetch -c presets/ci.jsonc --stat false - name: run fastfetch --format json run: time ./fastfetch -c presets/ci.jsonc --format json - name: run flashfetch run: time ./flashfetch - name: print dependencies run: otool -L fastfetch - name: run tests run: ctest --output-on-failure - name: upload artifacts uses: actions/upload-artifact@v4 with: name: fastfetch-macos-${{ matrix.arch }} path: ./fastfetch-*.* sunos-amd64: runs-on: ubuntu-latest name: SunOS-amd64 steps: - name: checkout repository uses: actions/checkout@v5 - name: run VM uses: vmactions/omnios-vm@v1 with: usesh: true prepare: | uname -a pkg install pkg:/package/pkg pkg update --accept pkg install gcc14 cmake git pkg-config glib2 dbus sqlite-3 imagemagick run: | cmake -DSET_TWEAK=Off -DBUILD_TESTS=On . cmake --build . --target package --verbose -j4 ./fastfetch --list-features time ./fastfetch -c presets/ci.jsonc --stat false time ./fastfetch -c presets/ci.jsonc --format json time ./flashfetch ldd fastfetch ctest --output-on-failure cpack - name: upload artifacts uses: actions/upload-artifact@v4 with: name: fastfetch-sunos-amd64 path: ./fastfetch-*.* freebsd-amd64: name: FreeBSD-amd64 runs-on: ubuntu-latest permissions: security-events: write contents: read steps: - name: checkout repository uses: actions/checkout@v5 - name: run VM uses: cross-platform-actions/action@master with: operating_system: freebsd architecture: x86-64 cpu_count: 4 shell: bash version: '14.3' run: | uname -a sudo pkg update sudo pkg install -y cmake git pkgconf binutils wayland vulkan-headers vulkan-loader libxcb libXrandr libX11 libdrm glib dconf dbus sqlite3-tcl egl opencl ocl-icd v4l_compat chafa cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DENABLE_EMBEDDED_PCIIDS=On -DENABLE_EMBEDDED_AMDGPUIDS=On . cmake --build . --target package --verbose -j4 ./fastfetch --list-features time ./fastfetch -c presets/ci.jsonc --stat false time ./fastfetch -c presets/ci.jsonc --format json time ./flashfetch ldd fastfetch ctest --output-on-failure - name: upload artifacts uses: actions/upload-artifact@v4 with: name: fastfetch-freebsd-amd64 path: ./fastfetch-*.* openbsd-amd64: name: OpenBSD-amd64 runs-on: ubuntu-latest permissions: security-events: write contents: read steps: - name: checkout repository uses: actions/checkout@v5 - name: run VM uses: cross-platform-actions/action@master with: operating_system: openbsd architecture: x86-64 cpu_count: 4 shell: bash version: '7.7' run: | uname -a sudo pkg_add -r cmake git pkgconf wayland vulkan-headers vulkan-loader glib2 dconf dbus sqlite3 imagemagick chafa cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DENABLE_EMBEDDED_PCIIDS=On -DENABLE_EMBEDDED_AMDGPUIDS=On . cmake --build . --target package --verbose -j4 ./fastfetch --list-features time ./fastfetch -c presets/ci.jsonc --stat false time ./fastfetch -c presets/ci.jsonc --format json time ./flashfetch ldd fastfetch ctest --output-on-failure - name: upload artifacts uses: actions/upload-artifact@v4 with: name: fastfetch-openbsd-amd64 path: ./fastfetch-*.* netbsd-amd64: name: NetBSD-amd64 runs-on: ubuntu-latest permissions: security-events: write contents: read steps: - name: checkout repository uses: actions/checkout@v5 - name: run VM uses: cross-platform-actions/action@master with: operating_system: netbsd architecture: x86-64 cpu_count: 4 shell: bash version: '10.1' run: | uname -a sudo pkgin -y install cmake git pkgconf wayland vulkan-headers dconf dbus sqlite3 ImageMagick cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DENABLE_EMBEDDED_PCIIDS=On -DENABLE_EMBEDDED_AMDGPUIDS=On . cmake --build . --target package --verbose -j4 ./fastfetch --list-features time ./fastfetch -c presets/ci.jsonc --stat false time ./fastfetch -c presets/ci.jsonc --format json time ./flashfetch ldd fastfetch ctest --output-on-failure - name: upload artifacts uses: actions/upload-artifact@v4 with: name: fastfetch-netbsd-amd64 path: ./fastfetch-*.* dragonfly-amd64: name: DragonFly-amd64 runs-on: ubuntu-latest permissions: security-events: write contents: read steps: - name: checkout repository uses: actions/checkout@v5 - name: run VM uses: vmactions/dragonflybsd-vm@v1 with: usesh: yes prepare: | uname -a pkg update pkg install -y cmake git pkgconf binutils wayland vulkan-headers vulkan-loader libxcb libXrandr libX11 libdrm glib dconf dbus sqlite3-tcl egl opencl ocl-icd v4l_compat chafa libelf run: | cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DENABLE_EMBEDDED_PCIIDS=On -DENABLE_EMBEDDED_AMDGPUIDS=On . cmake --build . --target package --verbose -j4 ./fastfetch --list-features time ./fastfetch -c presets/ci.jsonc --stat false time ./fastfetch -c presets/ci.jsonc --format json time ./flashfetch ldd fastfetch ctest --output-on-failure - name: upload artifacts uses: actions/upload-artifact@v4 with: name: fastfetch-dragonfly-amd64 path: ./fastfetch-*.* haiku-amd64: name: Haiku-amd64 runs-on: ubuntu-latest permissions: security-events: write contents: read steps: - name: checkout repository uses: actions/checkout@v5 - name: run VM uses: cross-platform-actions/action@master with: operating_system: haiku version: 'r1beta5' architecture: x86-64 cpu_count: 4 shell: bash run: | uname -a pkgman install -y git dbus_devel mesa_devel libelf_devel imagemagick_devel opencl_headers ocl_icd_devel vulkan_devel zlib_devel chafa_devel cmake gcc make pkgconfig python3.10 || pkgman install -y git dbus_devel mesa_devel libelf_devel imagemagick_devel opencl_headers ocl_icd_devel vulkan_devel zlib_devel chafa_devel cmake gcc make pkgconfig python3.10 cmake -DSET_TWEAK=Off -DBUILD_TESTS=On -DENABLE_EMBEDDED_PCIIDS=On -DENABLE_EMBEDDED_AMDGPUIDS=On . cmake --build . --target package --verbose -j4 ./fastfetch --list-features time ./fastfetch -c presets/ci.jsonc --stat false time ./fastfetch -c presets/ci.jsonc --format json time ./flashfetch ctest --output-on-failure - name: upload artifacts uses: actions/upload-artifact@v4 with: name: fastfetch-haiku-amd64 path: ./fastfetch-*.* windows-hosts: name: Windows-${{ matrix.arch }} runs-on: ${{ matrix.runs-on }} permissions: security-events: write contents: read strategy: matrix: include: - arch: amd64 runs-on: windows-latest msystem: CLANG64 msystem-lower: clang64 msys-arch: x86_64 - arch: aarch64 runs-on: windows-11-arm msystem: CLANGARM64 msystem-lower: clangarm64 msys-arch: aarch64 defaults: run: shell: msys2 {0} steps: - name: checkout repository uses: actions/checkout@v5 - name: setup-msys2 uses: msys2/setup-msys2@v2 with: msystem: ${{ matrix.msystem }} update: true install: git mingw-w64-clang-${{ matrix.msys-arch }}-7zip mingw-w64-clang-${{ matrix.msys-arch }}-cmake mingw-w64-clang-${{ matrix.msys-arch }}-clang mingw-w64-clang-${{ matrix.msys-arch }}-vulkan-loader mingw-w64-clang-${{ matrix.msys-arch }}-vulkan-headers mingw-w64-clang-${{ matrix.msys-arch }}-opencl-icd mingw-w64-clang-${{ matrix.msys-arch }}-opencl-headers mingw-w64-clang-${{ matrix.msys-arch }}-cppwinrt mingw-w64-clang-${{ matrix.msys-arch }}-imagemagick - name: print msys version run: uname -a - name: configure project run: env PKG_CONFIG_PATH=/${{ matrix.msystem-lower }}/lib/pkgconfig/:$PKG_CONFIG_PATH cmake -DSET_TWEAK=Off -DBUILD_TESTS=On . - name: build project run: cmake --build . --verbose -j4 - name: copy necessary dlls run: cp /${{ matrix.msystem-lower }}/bin/{OpenCL,vulkan-1}.dll . - name: list features run: ./fastfetch --list-features - name: run fastfetch run: time ./fastfetch -c presets/ci.jsonc --stat false - name: run fastfetch --format json run: time ./fastfetch -c presets/ci.jsonc --format json - name: run flashfetch run: time ./flashfetch - name: print dependencies run: ldd fastfetch - name: run tests run: ctest --output-on-failure - name: create zip archive run: 7z a -tzip -mx9 -bd -y fastfetch-windows-${{ matrix.arch }}.zip LICENSE *.dll fastfetch.exe flashfetch.exe presets - name: create 7z archive run: 7z a -t7z -mx9 -bd -y fastfetch-windows-${{ matrix.arch }}.7z LICENSE *.dll fastfetch.exe flashfetch.exe presets - name: upload artifacts uses: actions/upload-artifact@v4 with: name: fastfetch-windows-${{ matrix.arch }} path: ./fastfetch-windows-${{ matrix.arch }}.* release: if: github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository == 'fastfetch-cli/fastfetch' name: Release runs-on: ubuntu-latest needs: - linux-hosts - linux-armv7l - linux-armv6l - linux-vms - musl-amd64 - macos-hosts - freebsd-amd64 - openbsd-amd64 - netbsd-amd64 - dragonfly-amd64 - sunos-amd64 - haiku-amd64 - windows-hosts permissions: contents: write steps: - name: get latest release version id: get_version_release uses: pozetroninc/github-action-get-latest-release@master with: repository: ${{ github.repository }} - name: download artifacts if: needs.linux-amd64.outputs.ffversion != steps.get_version_release.outputs.release uses: actions/download-artifact@v5 - name: create release if: needs.linux-amd64.outputs.ffversion != steps.get_version_release.outputs.release uses: ncipollo/release-action@v1 with: tag: ${{ needs.linux-amd64.outputs.ffversion }} commit: ${{ github.sha }} artifactErrorsFailBuild: true artifacts: fastfetch-*/fastfetch-* body: "Please refer to [CHANGELOG.md](https://github.com/${{ github.repository }}/blob/${{ needs.linux-amd64.outputs.ffversion }}/CHANGELOG.md) for details." - name: download source tarballs if: needs.linux-amd64.outputs.ffversion != steps.get_version_release.outputs.release run: | for i in 1 2 3 4 5; do curl -L --remote-name-all --output-dir fastfetch-source --create-dirs https://github.com/${{ github.repository }}/archive/refs/tags/${{ needs.linux-amd64.outputs.ffversion }}.{tar.gz,zip} && break || sleep 5; done ls fastfetch-*/* - name: generate release notes if: needs.linux-amd64.outputs.ffversion != steps.get_version_release.outputs.release run: | echo "Please refer to [CHANGELOG.md](https://github.com/${{ github.repository }}/blob/${{ needs.linux-amd64.outputs.ffversion }}/CHANGELOG.md) for details." > fastfetch-release-notes.md echo -e "\n---\n\n
SHA256SUMs
\n\n\`\`\`" >> fastfetch-release-notes.md sha256sum fastfetch-*/* >> fastfetch-release-notes.md echo -e "\`\`\`\n
" >> fastfetch-release-notes.md echo -e "\n
SHA512SUMs
\n\n\`\`\`" >> fastfetch-release-notes.md sha512sum fastfetch-*/* >> fastfetch-release-notes.md echo -e "\`\`\`\n
" >> fastfetch-release-notes.md - name: update release body if: needs.linux-amd64.outputs.ffversion != steps.get_version_release.outputs.release uses: ncipollo/release-action@v1 with: tag: ${{ needs.linux-amd64.outputs.ffversion }} commit: ${{ github.sha }} bodyFile: fastfetch-release-notes.md allowUpdates: true