From bfba1d7e733135131fece3e34d881f6fb8520b8e Mon Sep 17 00:00:00 2001 From: Karl Rister Date: Fri, 27 Mar 2026 09:44:20 -0500 Subject: [PATCH 1/4] update README with collectors table and usage documentation Expand the minimal README with project purpose, standalone usage example, and a table describing all 14 parallel data collectors. Co-Authored-By: Claude Opus 4.6 (1M context) --- README.md | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 12b476c..eb79bae 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,39 @@ # packrat -A project to facilitate collection of information that describes a system and it's environment +[![CI Actions Status](https://github.com/perftool-incubator/packrat/workflows/crucible-ci/badge.svg)](https://github.com/perftool-incubator/packrat/actions) + +A system information collection utility for the [crucible](https://github.com/perftool-incubator/crucible) performance testing framework. + +## Purpose + +Packrat captures comprehensive system and environment data from test endpoints during benchmark execution. This ensures reproducibility by documenting the exact hardware and software configuration at the time of testing. + +## Usage + +Packrat runs automatically as part of crucible's engine execution phase via rickshaw. It can also be run standalone: + +``` +./packrat +``` + +This creates a `packrat-archive/` subdirectory containing all collected data, compressed with xz. + +## Data Collected + +Packrat runs 14 parallel collectors: + +| Collector | Data | +|-----------|------| +| distro | OS release, tuned profiles | +| package_manager | Installed RPM packages | +| env | Environment variables, hostname, virtualization type | +| cpu | lscpu, /proc/cpuinfo, intel_pstate settings | +| device | lspci, interrupt assignments | +| system | dmidecode, lstopo | +| kernel | dmesg, uname, lsmod, sysctl, SELinux, module parameters, clocksource, IOMMU | +| block | lsblk, device-mapper, LVM, block queue settings | +| memory | meminfo, slabinfo, hugepages, transparent hugepage, NUMA node info | +| net | ifconfig, bridge, nmcli, ethtool, network device sysfs | +| cgroup | cpuset and cpu cgroup configuration | +| libvirt | virsh sysinfo, capabilities, domains, networks, pools | +| firewall | iptables, ebtables, nft, firewall-cmd | +| container | podman info, images, version | From be364c5f8923dc3fae885d32129bb507f6d9ce3c Mon Sep 17 00:00:00 2001 From: Karl Rister Date: Fri, 27 Mar 2026 09:44:44 -0500 Subject: [PATCH 2/4] update CLAUDE.md with collector list and branch note Add list of 14 parallel collectors, note primary branch is master, and clarify xz compression of collected data. Co-Authored-By: Claude Opus 4.6 (1M context) --- CLAUDE.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..3880f79 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,24 @@ +# Packrat - System Information Collector + +## Purpose +Collects system information from test endpoints for reproducibility. Gathers hardware, OS, kernel, and configuration details that may affect benchmark results. + +## Language +Bash — single script `packrat` (~715 lines) + +## Key Files +| File | Purpose | +|------|---------| +| `packrat` | Main collection script — runs on each endpoint during a test | +| `rickshaw.json` | Declares integration with rickshaw (roles, parameters) | +| `workshop.json` | Engine image build requirements (packrat runs on engines/endpoints, not the controller) | + +## Collectors +14 parallel collectors: distro, package_manager, env, cpu, device, system, kernel, block, memory, net, cgroup, libvirt, firewall, container + +## Conventions +- Primary branch is `master` +- Creates a `packrat-archive/` directory containing collected data, compressed with xz +- Logs activity to `packrat.log` +- Runs as part of the engine script execution phase during a benchmark +- Uses standard Bash modelines and 4-space indentation From 0c47f021b9c7843863f8f596bc2e819e9e46254f Mon Sep 17 00:00:00 2001 From: Karl Rister Date: Fri, 27 Mar 2026 09:46:13 -0500 Subject: [PATCH 3/4] feat: merge real/faux crucible-ci workflows into single unified file Replace separate real and faux workflow files with a unified workflow that uses tj-actions/changed-files for docs-only detection. Adds a changes job, conditional real/faux jobs, a completion gate with failure/cancellation checking, concurrency group, and workflow_dispatch support with docs-only bypass. Also aligns secret configuration with other core subprojects. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/crucible-ci.yaml | 53 ++++++++++++++++++++----- .github/workflows/faux-crucible-ci.yaml | 16 -------- 2 files changed, 44 insertions(+), 25 deletions(-) delete mode 100644 .github/workflows/faux-crucible-ci.yaml diff --git a/.github/workflows/crucible-ci.yaml b/.github/workflows/crucible-ci.yaml index 7e7beeb..9e66dee 100644 --- a/.github/workflows/crucible-ci.yaml +++ b/.github/workflows/crucible-ci.yaml @@ -3,21 +3,56 @@ name: crucible-ci on: pull_request: branches: [ master ] - paths-ignore: - - LICENSE - - '**.md' - - '.github/rulesets/**' - - .github/workflows/run-crucible-tracking.yaml - - .github/workflows/faux-crucible-ci.yaml - - 'docs/**' workflow_dispatch: +concurrency: + group: ${{ github.ref }}/crucible-ci + cancel-in-progress: true + jobs: - call-core-crucible-ci: + changes: + runs-on: ubuntu-latest + outputs: + only-docs: ${{ steps.filter.outputs.only_changed }} + steps: + - uses: actions/checkout@v4 + - id: filter + uses: tj-actions/changed-files@v47 + with: + files: | + LICENSE + *.md + **/*.md + .github/rulesets/** + .github/workflows/run-crucible-tracking.yaml + .github/workflows/crucible-ci.yaml + docs/** + + call-real-core-crucible-ci: + needs: changes + if: ${{ github.event_name == 'workflow_dispatch' || needs.changes.outputs.only-docs != 'true' }} uses: perftool-incubator/crucible-ci/.github/workflows/core-crucible-ci.yaml@main with: ci_target: "packrat" ci_target_branch: "${{ github.ref }}" github_workspace: "$GITHUB_WORKSPACE" secrets: - registry_auth: ${{ secrets.CRUCIBLE_CI_ENGINES_REGISTRY_AUTH }} + ci_registry_auth: ${{ secrets.CRUCIBLE_CI_ENGINES_REGISTRY_AUTH }} + quay_oauth_token: ${{ secrets.CRUCIBLE_QUAYIO_OAUTH_TOKEN }} + + call-faux-core-crucible-ci: + needs: changes + if: ${{ github.event_name != 'workflow_dispatch' && needs.changes.outputs.only-docs == 'true' }} + uses: perftool-incubator/crucible-ci/.github/workflows/faux-core-crucible-ci.yaml@main + + crucible-ci-complete: + needs: [ call-real-core-crucible-ci, call-faux-core-crucible-ci ] + if: always() + runs-on: ubuntu-latest + steps: + - name: Check Results + if: >- + contains(needs.*.result, 'failure') || + contains(needs.*.result, 'cancelled') + run: exit 1 + - run: echo "crucible-ci complete" diff --git a/.github/workflows/faux-crucible-ci.yaml b/.github/workflows/faux-crucible-ci.yaml deleted file mode 100644 index 38f5ada..0000000 --- a/.github/workflows/faux-crucible-ci.yaml +++ /dev/null @@ -1,16 +0,0 @@ -name: faux-crucible-ci - -on: - pull_request: - branches: [ master ] - paths: - - LICENSE - - '**.md' - - '.github/rulesets/**' - - .github/workflows/run-crucible-tracking.yaml - - .github/workflows/faux-crucible-ci.yaml - - 'docs/**' - -jobs: - call-core-crucible-ci: - uses: perftool-incubator/crucible-ci/.github/workflows/faux-core-crucible-ci.yaml@main From 03f7e0194452f83cf1c00bec92ed74909dac38b3 Mon Sep 17 00:00:00 2001 From: Karl Rister Date: Fri, 27 Mar 2026 14:11:08 -0500 Subject: [PATCH 4/4] update default-branch ruleset backup Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/rulesets/branches/default-branch.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/rulesets/branches/default-branch.json b/.github/rulesets/branches/default-branch.json index cf3d3c7..352699d 100644 --- a/.github/rulesets/branches/default-branch.json +++ b/.github/rulesets/branches/default-branch.json @@ -25,6 +25,7 @@ "parameters": { "required_approving_review_count": 1, "dismiss_stale_reviews_on_push": true, + "required_reviewers": [], "require_code_owner_review": false, "require_last_push_approval": false, "required_review_thread_resolution": true, @@ -40,7 +41,8 @@ "do_not_enforce_on_create": false, "required_status_checks": [ { - "context": "call-core-crucible-ci / core-crucible-ci-complete" + "context": "crucible-ci-complete", + "integration_id": 15368 } ] }