name: Reusable macOS Hosts on: workflow_call: inputs: arch: required: true type: string runs-on: required: true type: string permissions: contents: read env: CMAKE_BUILD_TYPE: ${{ vars.CMAKE_BUILD_TYPE || 'RelWithDebInfo' }} jobs: build: runs-on: ${{ inputs.runs-on }} steps: - name: checkout repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: uname -a run: uname -a - name: install required packages with MacPorts # Homebrew dropped Intel support if: inputs.arch == 'amd64' run: | curl -fsSL https://github.com/macports/macports-base/releases/download/v2.12.6/MacPorts-2.12.6-15-Sequoia.pkg -o "$RUNNER_TEMP/MacPorts.pkg" sudo installer -pkg "$RUNNER_TEMP/MacPorts.pkg" -target / echo /opt/local/bin >> "$GITHUB_PATH" echo /opt/local/sbin >> "$GITHUB_PATH" export PATH=/opt/local/bin:/opt/local/sbin:$PATH sudo port selfupdate sudo port install vulkan-loader vulkan-headers MoltenVK ImageMagick7 chafa lua quickjs-ng jq - name: install required packages with Homebrew if: inputs.arch == 'aarch64' run: | HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew update HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install --overwrite vulkan-loader vulkan-headers molten-vk imagemagick chafa lua quickjs-ng jq - name: configure project run: | if [ "${{ inputs.arch }}" = "amd64" ]; then export CMAKE_PREFIX_PATH=/opt/local export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH} fi 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 --structure-disabled vulkan:bluetooth:bluetoothradio --stat false - name: run fastfetch --format json run: | { time -p ./fastfetch -c presets/ci.jsonc --structure-disabled vulkan:bluetooth:bluetoothradio --format json > fastfetch.raw.json 2> fastfetch.error; } 2> fastfetch.time sed -n '/^[[:space:]]*\[/,$p' fastfetch.raw.json > fastfetch.json cat fastfetch.json cat fastfetch.error >&2 cat fastfetch.time >&2 - name: prepare benchmark data run: | real_seconds=$(awk '$1 == "real" { print $2 }' fastfetch.time) jq -e 'type == "array"' fastfetch.json > /dev/null jq --arg platform "macos" --arg arch "${{ inputs.arch }}" --argjson real_seconds "$real_seconds" ' map(select(.stat | type == "number") | { name: ("fastfetch " + $platform + " " + $arch + " module " + .type), unit: "ms", value: .stat }) + [{ name: ("fastfetch " + $platform + " " + $arch + " total process time"), unit: "ms", value: ($real_seconds * 1000) }] ' fastfetch.json > benchmark.json cat benchmark.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@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: fastfetch-macos-${{ inputs.arch }} path: ./fastfetch-*.* - name: upload benchmark data uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: benchmark-macos-${{ inputs.arch }} path: benchmark.json