Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
9850247
badge: update to personal repo
sdimitro Nov 11, 2024
e59594c
actions: remove deprecated delphix actions
sdimitro Dec 2, 2024
fffba95
continuity: update old delphix links
sdimitro Dec 2, 2024
8275a7f
logo: init
sdimitro Dec 2, 2024
6082ce7
code-of-conduct: init
sdimitro Dec 2, 2024
5b5e5f1
logo: enable dark mode
sdimitro Dec 9, 2024
51e0dac
actions: source reference cores from gDrive
sdimitro Dec 9, 2024
1271dc2
actions: update install-libkdumpfile.sh with new dependency
sdimitro Dec 22, 2024
118c66c
actions: move to 24.04
sdimitro Dec 3, 2025
956e060
actions: temporarily disable mypy and pytest
sdimitro Dec 3, 2025
9666d6e
actions: re-enable unit tests
sdimitro Dec 3, 2025
2a30669
mypy: upgrade everything mypy
sdimitro Dec 3, 2025
1032222
ruff: intro
sdimitro Dec 4, 2025
586b17b
pytest: reenable first regression dump
sdimitro Dec 4, 2025
b1cf934
pytest: reenable second regression dump
sdimitro Dec 4, 2025
bca6479
ruff: add toml
sdimitro Dec 4, 2025
355798f
claude: modernize repo
sdimitro Jan 9, 2026
c253449
fix(README.md): pypi link
sdimitro Jan 9, 2026
efbffc6
fix(pypi): release workflow edits
sdimitro Jan 9, 2026
7671e9b
fix(readme): no preference in installation method
sdimitro Jan 9, 2026
ad5702e
update(pypi): project status to stable
sdimitro Jan 9, 2026
19d9e20
update(readme): logo renders on PyPI
sdimitro Jan 9, 2026
e72c99f
docs(publishing): reorg
sdimitro Jan 9, 2026
7e64e0f
Add MDB compatibility syntax preprocessing for SDB
sdimitro Jan 9, 2026
99b3d65
fix(setup): editable error
sdimitro Jan 9, 2026
cccf72d
fix(tests): regression between Python versions for ::spa - just disab…
sdimitro Jan 9, 2026
6fdef6b
update(gitignore): another AI agent file
sdimitro Jan 10, 2026
026cc2a
DLPX-90487 sdb stacks appears to loop resulting in many repeated stac…
mmaybee Jan 15, 2025
779c2fc
Fix lint and formatting for commit aaf6d3b
sdimitro Jan 10, 2026
22f381f
Fix 0x0x formatting bug in stacks frame_info
sdimitro Jan 10, 2026
5e226b3
Update regression output for stacks frame aggregation (aaf6d3b)
sdimitro Jan 10, 2026
c06ccbc
DLPX-84435 Support printing local variables (#352)
mmaybee Nov 14, 2025
1c134c2
Fix lint and formatting for commit 3950641 (local variables support)
sdimitro Jan 10, 2026
0258770
Update regression output for commit 3950641 (local variables support …
sdimitro Jan 10, 2026
005402e
DLPX-95958 sdb stacks command doesn't always work
dbjwhs-perforce Nov 18, 2025
cf987b8
DLPX-95965 _framestr() parsing is fragile - should use drgn StackFram…
dbjwhs-perforce Nov 18, 2025
610a9c5
Fix formatting for commit c0a6d03 (_framestr API refactor)
sdimitro Jan 10, 2026
00bf52d
refactor(stacks): remove duplicate find_module_memory_segment() call
sdimitro Jan 10, 2026
22b3120
refactor(threads): remove unused TraceContext/FrameContext variables
sdimitro Jan 10, 2026
ecf1b9e
refactor(threads): use os.path.basename for cross-platform compatibility
sdimitro Jan 10, 2026
7add961
refactor(threads): extract CMDLINE_MAX_WIDTH constant
sdimitro Jan 10, 2026
aaf9c00
refactor(threads): simplify no_input() methods
sdimitro Jan 10, 2026
cf43efe
refactor(threads): use f-string formatting for frame index padding
sdimitro Jan 10, 2026
d7af67f
fix(types): add missing return type annotations to help_text methods
sdimitro Jan 10, 2026
c8ed43d
style(threads): standardize error message quoting
sdimitro Jan 10, 2026
7cffd16
Fix yapf google style formatting and pylint issues
sdimitro Jan 10, 2026
2e1df91
fix(lint): resolve pylint warnings from cherry-picked code
sdimitro Jan 10, 2026
4ac0398
fix(lint): resolve remaining pylint warnings
sdimitro Jan 10, 2026
de5051e
build: stop tracking auto-generated _version.py
sdimitro Jan 10, 2026
e22043a
test: add regression tests for new trace/frame/locals/registers commands
sdimitro Jan 10, 2026
8d76329
cli: add --version flag to display version and commit hash
sdimitro Jan 10, 2026
abdb246
refactor(slabs): use drgn slab helpers for more accurate statistics
sdimitro Jan 10, 2026
9d5c824
session: Add session recording & replay functionality
sdimitro Jan 19, 2026
c70761d
session: Fix typedef type size resolution in capture_object
sdimitro Jan 20, 2026
d9f90a7
session: Add thread stack trace recording with local variable support
sdimitro Jan 21, 2026
ad3c4ba
session: Add %session record-memory command for explicit memory capture
sdimitro Jan 21, 2026
84fbdc1
session: fix KASLR offset handling for replay mode
sdimitro Jan 21, 2026
c41724d
session: add stacks replay tests and session_type metadata
sdimitro Jan 21, 2026
1fef318
session: improve replay stack pipelines
sdimitro Jan 21, 2026
5aff3ca
ci: relax pylint rules and drop inline disables
sdimitro Jan 21, 2026
68cb29d
tests: add stacks regression outputs
sdimitro Jan 25, 2026
50d41f4
ci: update GitHub workflows for codecov and release improvements
claude Jan 29, 2026
ba1cc31
docs: add Codecov badge to README
claude Jan 29, 2026
8c47b84
refactor: integrate kdumpling for session recording
claude Jan 30, 2026
eeb4393
tests: update session tests for kdumpling integration
claude Jan 30, 2026
9f58a8b
feat: add vmcore format and compression options
claude Jan 30, 2026
5881b58
ci: install sdb package to get kdumpling dependency
claude Jan 30, 2026
bc5a696
fix: resolve pylint errors in session and repl modules
claude Jan 30, 2026
b60d241
tests: fix remaining pylint warnings
claude Jan 30, 2026
cac6332
tests: fix pylint use-implicit-booleaness-not-comparison warning
sdimitro Mar 6, 2026
024ab85
feat: add plugin loader and library API for external integrations
sdimitro Mar 6, 2026
7bfd090
style: fix yapf formatting in sample command fixtures
sdimitro Mar 6, 2026
fe1601d
docs: add ReadTheDocs documentation site
sdimitro Mar 6, 2026
6e692ac
docs: remove inline table-of-contents directives
sdimitro Mar 6, 2026
5085c37
fix: add missing `pip install .` to release workflow
sdimitro Mar 6, 2026
c21425b
feat: add AI agent discoverability, CLI enhancements, and programmati…
claude Mar 8, 2026
1cc153f
feat: add PrettyPrinter JSON bypass and stacks aggregated JSON output
claude Mar 8, 2026
8857bad
refactor: add PrettyPrinter.to_json_aggregate() for clean aggregate JSON
claude Mar 9, 2026
6964729
fix(repl): point to new repo
sdimitro Mar 9, 2026
f69f794
feat: add lsmod, lspci, kcmdline, and serial_number commands
sdimitro Mar 9, 2026
3790627
fix: remove redundant json regression baselines
sdimitro Mar 9, 2026
989ebcb
fix: resolve pylint and mypy errors in new commands
sdimitro Mar 9, 2026
348f7d6
ci: restrict push trigger to main/develop to avoid duplicate PR runs
sdimitro Mar 9, 2026
fe814fa
Merge upstream sdimitro/develop into delphix/sdb
prakashsurya May 5, 2026
118a3de
Restore .whitesource (Mend security scanning config)
prakashsurya May 5, 2026
cd6fe75
Restore Delphix PR template
prakashsurya May 5, 2026
a4f9323
Add Delphix-downstream disclaimer to README
prakashsurya May 5, 2026
42cfef8
Replace debian/ with dh-virtualenv packaging
prakashsurya May 5, 2026
3a78e6b
Add python3-setuptools-scm to Build-Depends
prakashsurya May 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/scripts/download-dumps-from-gdrive.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash -eux

#
# Download all the reference core dumps from the public gDrive folder
# and place them in the root directory.
#
python3 -m pip install gdown
gdown --folder 1fdPVuGXbxNKcMEVwhuda04hZTPCcYJms
mv SDB-Public/* .
rmdir SDB-Public
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#
# Assumptions for this to work:
# [1] This script is executed from the root of the SDB repo
# [2] The archive downloaded from S3 has one of the following profiles:
# [2] The archive downloaded from gdrive has one of the following profiles:
# Profile A - It is lzma-compressed and has the following file structure:
# dump-data
# ├── dump.201912060006
Expand Down Expand Up @@ -33,12 +33,8 @@ if [ ! -d $DATA_DIR ]; then
exit 1
fi

if [ -f "$1" ]; then
echo "Found $1 locally, skip download ..."
else
echo "downloading of $1 from S3 ..."
wget https://sdb-testing-bucket.s3.us-west-2.amazonaws.com/$1
[ $? -eq 0 ] || exit 1
if [ ! -f "$1" ]; then
echo "error: $1: file not found"
fi

if [[ $1 == *.tar.lzma ]]; then
Expand Down
5 changes: 4 additions & 1 deletion .github/scripts/install-drgn.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@
sudo apt update
sudo apt install bison flex libelf-dev libdw-dev libomp5 libomp-dev

# Install setuptools for Python 3.12+ compatibility
python3 -m pip install --upgrade pip setuptools wheel

git clone https://github.com/osandov/drgn.git

cd drgn
python3 setup.py install
python3 -m pip install .
cd -
10 changes: 4 additions & 6 deletions .github/scripts/install-libkdumpfile.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,13 @@

#
# These are build requirements of "libkdumpfile"; if we don't install these,
# the build/install of "libkdumpfile" will fail below. Note that we install
# all version of python3.X-dev so the Github actions jobs can install
# libkdumpfile with the right version.
# the build/install of "libkdumpfile" will fail below. We install python3-dev
# which will work with whatever Python version is set up by actions/setup-python.
#
sudo apt update
sudo apt install autoconf automake liblzo2-dev libsnappy1v5 libtool pkg-config zlib1g-dev
sudo apt install python3.8-dev python3.9-dev
sudo apt install autoconf automake liblzo2-dev libsnappy-dev libtool pkg-config zlib1g-dev binutils-dev python3-dev

git clone https://github.com/ptesarik/libkdumpfile.git
git clone https://codeberg.org/ptesarik/libkdumpfile.git

cd libkdumpfile
autoreconf -fi
Expand Down
67 changes: 67 additions & 0 deletions .github/workflows/cut-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#
# Cut Release workflow - manually create and push a version tag
#
# This workflow:
# 1. Validates the version format
# 2. Checks if the tag already exists
# 3. Creates and pushes the tag
#
# After running this, the Release workflow will automatically trigger.
#
name: Cut Release

on:
workflow_dispatch:
inputs:
version:
description: 'Version to release (e.g., v0.2.0 or v0.2.0-beta1)'
required: true
type: string

permissions:
contents: write

jobs:
cut-release:
name: Cut Release
runs-on: ubuntu-24.04

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Validate version format
run: |
VERSION="${{ github.event.inputs.version }}"
if [[ ! "$VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?$ ]]; then
echo "Error: Version must be in format v0.0.0 or v0.0.0-suffix"
echo "Got: $VERSION"
exit 1
fi
echo "VERSION=$VERSION" >> $GITHUB_ENV

- name: Check if tag already exists
run: |
if git rev-parse "$VERSION" >/dev/null 2>&1; then
echo "Error: Tag $VERSION already exists"
exit 1
fi

- name: Configure git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

- name: Create and push tag
run: |
git tag -a "$VERSION" -m "Release $VERSION"
git push origin "$VERSION"

- name: Summary
run: |
echo "## Tag $VERSION created!" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "The **Release** workflow should now trigger automatically." >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "You can monitor it at [Actions → Release](/${{ github.repository }}/actions/workflows/release.yml)" >> $GITHUB_STEP_SUMMARY
139 changes: 88 additions & 51 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
on:
push:
branches:
- main
- develop
tags-ignore:
- 'v*'
pull_request:
schedule:
- cron: '0 0 * * *'
Expand All @@ -9,16 +14,17 @@ jobs:
# Verify the build and installation of SDB.
#
install:
runs-on: ubuntu-20.04
runs-on: ubuntu-24.04
strategy:
matrix:
python-version: [3.8, 3.9]
python-version: ['3.10', '3.12']
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v1
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- run: python3 setup.py install
- run: python3 -m pip install --upgrade pip setuptools wheel
- run: python3 -m pip install .
#
# The statement below is used for debugging the Github job.
#
Expand All @@ -31,91 +37,122 @@ jobs:
# the "drgn" from source (there's no package currently available).
#
pylint:
runs-on: ubuntu-20.04
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v1
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.8'
python-version: '3.10'
- run: ./.github/scripts/install-drgn.sh
- run: python3 -m pip install pylint pytest
- run: pylint -d duplicate-code -d invalid-name sdb
- run: pylint -d duplicate-code -d invalid-name tests
- run: python3 -m pip install .
- run: pylint -d duplicate-code -d invalid-name -d missing-docstring -d import-outside-toplevel -d too-many-branches -d missing-module-docstring -d missing-function-docstring sdb
- run: pylint -d duplicate-code -d invalid-name -d missing-docstring -d import-outside-toplevel -d too-many-branches -d missing-module-docstring -d missing-function-docstring tests
#
# Verify "pytest" runs successfully.
# Verify "pytest" runs successfully on unit tests.
#
# Note, we need to have "drgn" installed in order to "pytest". Thus,
# Note, we need to have "drgn" installed in order to run "pytest". Thus,
# prior to running "pytest" we have to clone, build, and install the
# "drgn" from source (there's no package currently available). In
# addition, we install "libkdumpfile" in the same way beforehand
# (there's no package currently for libkdumpfile either) so "drgn"
# can open kdump-compressed crash dumps for the integration tests.
# "drgn" from source (there's no package currently available).
#
pytest:
runs-on: ubuntu-20.04
pytest-unit:
runs-on: ubuntu-24.04
strategy:
matrix:
python-version: [3.8, 3.9]
dump: [dump.201912060006.tar.lzma, dump.202303131823.tar.gz]
python-version: ['3.10', '3.12']
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- run: python3 -m pip install pytest pytest-cov
- run: ./.github/scripts/install-drgn.sh
- run: python3 -m pip install .
- run: pytest -v --cov sdb --cov-report xml tests/unit
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./coverage.xml
fail_ci_if_error: false
verbose: true
#
# Verify "pytest" runs successfully on integration tests with crash dumps.
#
# Note, we need to have "drgn" and "libkdumpfile" installed to run pytest
# with crash dumps. We download both reference dumps for full integration testing.
#
pytest-integration:
runs-on: ubuntu-24.04
strategy:
matrix:
python-version: ['3.10', '3.12']
env:
AWS_DEFAULT_REGION: 'us-west-2'
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v1
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- run: python3 -m pip install aws python-config pytest pytest-cov
- run: python3 -m pip install pytest pytest-cov
- run: ./.github/scripts/install-libkdumpfile.sh
- run: ./.github/scripts/install-drgn.sh
- run: ./.github/scripts/download-dump-from-s3.sh ${{ matrix.dump }}
- run: pytest -v --cov sdb --cov-report xml tests
- uses: codecov/codecov-action@v1
- run: python3 -m pip install .
- run: ./.github/scripts/download-dumps-from-gdrive.sh
- run: ./.github/scripts/extract-dump.sh dump.201912060006.tar.lzma
- run: ./.github/scripts/extract-dump.sh dump.202303131823.tar.gz
- run: pytest -v --cov sdb --cov-report xml tests/integration
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./coverage.xml
fail_ci_if_error: false
verbose: true
#
# Verify "yapf" runs successfully.
#
yapf:
runs-on: ubuntu-20.04
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v1
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.8'
python-version: '3.10'
- run: python3 -m pip install yapf
- run: yapf --diff --style google --recursive sdb
- run: yapf --diff --style google --recursive tests
#
# Verify "ruff" runs successfully.
#
ruff:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- run: python3 -m pip install ruff
- run: ruff check sdb tests
#
# Verify "mypy" runs successfully.
#
# Note, we need to have "drgn" installed in order to run "mypy".
# Thus, prior to running "mypy" we have to clone, build, and install
# the "drgn" from source (there's no package currently available).
#
# Also note the following 2 things specific to mypy:
# [1] We expicitly install version 0.730 as the default version that
# comes with Ubuntu is 0.75 which has a couple of bugs triggered
# by our codebase (they've been resolved on trunk though so we
# may want to change this soon).
# [2] We supply --ignore-missing-imports to the tests package because
# pytest doesn't provide stubs on typeshed.
# Also note that we supply --ignore-missing-imports to the tests package
# because pytest doesn't provide stubs on typeshed.
#
mypy:
runs-on: ubuntu-20.04
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v1
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.8'
python-version: '3.10'
- run: ./.github/scripts/install-drgn.sh
- run: python3 -m pip install mypy==0.730
- run: python3 -m pip install mypy pytest
- run: python3 -m pip install .
- run: python3 -m mypy --strict --show-error-codes -p sdb
- run: python3 -m mypy --strict --ignore-missing-imports --show-error-codes -p tests
#
# Verify that "shfmt" ran successfully against our shell scripts.
#
shfmt:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: delphix/actions/shfmt@master
Loading
Loading