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 } ] } 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 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 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 |