Skip to content

Package Size Analyzer (AI-5021) #20128

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 71 commits into from
May 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
c39ed1a
basic status reporting
luciasanchezbella01 Mar 12, 2025
a9c824d
integration into ddev
luciasanchezbella01 Mar 20, 2025
b4d0f5f
clean commented code
luciasanchezbella01 Mar 20, 2025
79b0fa8
add diff mode
luciasanchezbella01 Mar 25, 2025
fefd6a3
add diff mode
luciasanchezbella01 Mar 25, 2025
76c1f09
final diff version
luciasanchezbella01 Mar 27, 2025
5aa1f49
final diff version
luciasanchezbella01 Mar 27, 2025
c64d2f9
Added timeline mode and uncompressed sizes (#5025)
luciasanchezbella01 Apr 15, 2025
846886d
Test ddev size status in GHA (by hijacking the slapr workflow)
nubtron Apr 15, 2025
a3aafc5
Timeline mode
luciasanchezbella01 Apr 15, 2025
09c7a05
Merge remote-tracking branch 'origin/luciaSanchez/package_size_analyz…
nubtron Apr 15, 2025
5a4e5d3
Try to fix job summaries
nubtron Apr 15, 2025
a4a00dd
Try fixing the job summaries again
nubtron Apr 15, 2025
ed1e372
CI size status integration on master
luciasanchezbella01 Apr 16, 2025
9cc7e5b
types added
luciasanchezbella01 Apr 21, 2025
0f7b09c
change --help
luciasanchezbella01 Apr 21, 2025
7064fd9
fix
luciasanchezbella01 Apr 21, 2025
8cc7710
fix typing
luciasanchezbella01 Apr 21, 2025
f1711cc
fix typing
luciasanchezbella01 Apr 21, 2025
b33a1fd
fix types
luciasanchezbella01 Apr 21, 2025
f16938b
fix types
luciasanchezbella01 Apr 21, 2025
4d2c8e9
fix typing
luciasanchezbella01 Apr 21, 2025
3d6a228
fix typing
luciasanchezbella01 Apr 21, 2025
d97854b
fix typing
luciasanchezbella01 Apr 21, 2025
f713097
fix typing
luciasanchezbella01 Apr 21, 2025
0d750b3
fix tests for Windows
luciasanchezbella01 Apr 22, 2025
06a2b5f
Fix tests
luciasanchezbella01 Apr 22, 2025
63137be
fix windows tests
luciasanchezbella01 Apr 22, 2025
1791728
Fix tests
luciasanchezbella01 Apr 22, 2025
c232868
Fix tests
luciasanchezbella01 Apr 22, 2025
b02658d
fix windows tests
luciasanchezbella01 Apr 22, 2025
0fcf162
Final visualizations
luciasanchezbella01 Apr 23, 2025
dc6a9db
Changelog
luciasanchezbella01 Apr 23, 2025
90d10e7
CI images integration and fixed typing
luciasanchezbella01 Apr 23, 2025
c97eaad
user errors and dep and int versions
luciasanchezbella01 Apr 25, 2025
6c4390d
user errors and dep and int versions
luciasanchezbella01 Apr 25, 2025
7f587e1
user errors and dep and int versions
luciasanchezbella01 Apr 25, 2025
d556d04
fix timeline error
luciasanchezbella01 Apr 28, 2025
91b68c9
Adding version, and json and markdown formats
luciasanchezbella01 May 5, 2025
192b718
Fix test
luciasanchezbella01 May 5, 2025
929adca
simplify code
luciasanchezbella01 May 9, 2025
837e9be
final fixes
luciasanchezbella01 May 9, 2025
40a0f8c
fix ddev windows
luciasanchezbella01 May 12, 2025
e941a1a
fix lint
luciasanchezbella01 May 12, 2025
5cd0a35
testing ddev tests on windows
luciasanchezbella01 May 12, 2025
e3964d7
test
luciasanchezbella01 May 12, 2025
f5c66f8
test
luciasanchezbella01 May 12, 2025
3e5b26b
test
luciasanchezbella01 May 12, 2025
cf51e8e
test
luciasanchezbella01 May 12, 2025
06563cd
test
luciasanchezbella01 May 12, 2025
da01a1f
test
luciasanchezbella01 May 12, 2025
6a8df22
test
luciasanchezbella01 May 12, 2025
d863e62
test
luciasanchezbella01 May 12, 2025
ea855e3
test
luciasanchezbella01 May 12, 2025
b7a145b
test
luciasanchezbella01 May 12, 2025
c0c92d1
test
luciasanchezbella01 May 12, 2025
5864501
test
luciasanchezbella01 May 12, 2025
2561a83
fixes
luciasanchezbella01 May 14, 2025
3f6a040
test gha
luciasanchezbella01 May 14, 2025
1399bff
test gha
luciasanchezbella01 May 14, 2025
b1990f7
test gha
luciasanchezbella01 May 14, 2025
d18e593
fixes
luciasanchezbella01 May 14, 2025
adcdca2
fixes
luciasanchezbella01 May 14, 2025
c5794b6
fix
luciasanchezbella01 May 14, 2025
47af6df
correct comments
luciasanchezbella01 May 16, 2025
a695625
correct comments
luciasanchezbella01 May 16, 2025
464d0e6
Change comments
luciasanchezbella01 May 16, 2025
c22b8d7
Change number to constant
luciasanchezbella01 May 19, 2025
01e272a
Fix a comment
luciasanchezbella01 May 19, 2025
1b58523
Rerun checks
luciasanchezbella01 May 19, 2025
61a70b1
Fix versions
luciasanchezbella01 May 21, 2025
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
125 changes: 125 additions & 0 deletions .github/workflows/measure-disk-usage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
name: Measure Disk Usage

on:
push:
branches:
- master
env:
PYTHON_VERSION: "3.12"

jobs:
measure-disk-usage:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
- name: Set up Python ${{ env.PYTHON_VERSION }}
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Install ddev
run: |
pip install -e ./datadog_checks_dev[cli]
pip install -e ./ddev

- name: Configure ddev
run: |
ddev config set repos.core .
ddev config set repo core
- name: Measure disk usage (uncompressed)
run: |
mkdir -p status_visualizations
ddev size status --csv > size-uncompressed.csv
ddev size status --save_to_png_path status_visualizations/uncompressed.png > size-uncompressed.txt
cat size-uncompressed.txt
echo "# Size (uncompressed)" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat size-uncompressed.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY

- name: Measure disk usage (compressed)
run: |
mkdir -p status_visualizations
ddev size status --csv --compressed > size-compressed.csv
ddev size status --compressed --save_to_png_path status_visualizations/compressed.png > size-compressed.txt
cat size-compressed.txt
echo "# Size (compressed)" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat size-compressed.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY


- name: Measure disk usage differences from last commit (uncompressed)
if: false # Disabled for now: size difference can be misleading due to dependencies not being built in the same PR
run: |
mkdir -p diff_visualizations
BEFORE=$(git rev-parse HEAD^)
AFTER=$(git rev-parse HEAD)
ddev size diff $BEFORE $AFTER --csv > diff-uncompressed.csv
ddev size diff $BEFORE $AFTER --save_to_png_path diff_visualizations/diff-uncompressed-linux.png > diff-uncompressed.txt
cat diff-uncompressed.txt
echo "# Size diff (uncompressed)" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat diff-uncompressed.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY

- name: Measure disk usage differences from last commit (compressed)
if: false # Disabled for now: size difference can be misleading due to dependencies not being built in the same PR
run: |
mkdir -p diff_visualizations
BEFORE=$(git rev-parse HEAD^)
AFTER=$(git rev-parse HEAD)
ddev size diff $BEFORE $AFTER --compressed --csv > diff-compressed.csv
ddev size diff $BEFORE $AFTER --compressed --save_to_png_path diff_visualizations/diff-compressed-linux.png > diff-compressed.txt
cat diff-compressed.txt
echo "# Size diff (compressed)" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat diff-compressed.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY

- name: Upload file sizes (uncompressed)
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: size-uncompressed.csv
path: size-uncompressed.csv
if-no-files-found: error

- name: Upload file sizes (compressed)
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: size-compressed.csv
path: size-compressed.csv
if-no-files-found: error

- name: Upload file sizes diff (uncompressed)
if: false # Disabled for now: size difference can be misleading due to dependencies not being built in the same PR
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: diff-uncompressed.csv
path: diff-uncompressed.csv
if-no-files-found: error

- name: Upload file sizes diff (compressed)
if: false # Disabled for now: size difference can be misleading due to dependencies not being built in the same PR
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: diff-compressed.csv
path: diff-compressed.csv
if-no-files-found: error

- name: Upload status PNGs
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: size-visuals
path: status_visualizations/
if-no-files-found: error

- name: Upload diff PNGs
if: false # Disabled for now: size difference can be misleading due to dependencies not being built in the same PR
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: diff-visuals
path: diff_visualizations/
if-no-files-found: error

2 changes: 1 addition & 1 deletion .github/workflows/slapr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ jobs:
SLAPR_EMOJI_APPROVED: "approved2"
SLAPR_EMOJI_CHANGES_REQUESTED: "changes_requested"
SLAPR_EMOJI_MERGED: "merged"
SLAPR_EMOJI_CLOSED: "closed"
SLAPR_EMOJI_CLOSED: "closed"
4 changes: 4 additions & 0 deletions ddev/changelog.d/20128.added
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Added new commands to track and analyze size changes in integrations and dependencies:
- **`ddev size status`**: Shows current sizes of all modules.
- **`ddev size diff [COMMIT_BEFORE] [COMMIT_AFTER]`**: Compares size changes between two commits.
- **`ddev size timeline {integration | dependency} [INTEGRATION_NAME/DEPENDENCY_NAME]`**: Visualizes the size evolution of a module over time.
3 changes: 3 additions & 0 deletions ddev/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ dependencies = [
"tomli-w",
"tomlkit",
"tqdm",
"requests",
"matplotlib",
"squarify"
]
dynamic = ["version"]

Expand Down
2 changes: 2 additions & 0 deletions ddev/src/ddev/cli/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from ddev.cli.env import env
from ddev.cli.meta import meta
from ddev.cli.release import release
from ddev.cli.size import size
from ddev.cli.status import status
from ddev.cli.test import test
from ddev.cli.validate import validate
Expand Down Expand Up @@ -149,6 +150,7 @@ def ddev(
ddev.add_command(status)
ddev.add_command(test)
ddev.add_command(validate)
ddev.add_command(size)

__management_command = os.environ.get('PYAPP_COMMAND_NAME', '')
if __management_command:
Expand Down
30 changes: 30 additions & 0 deletions ddev/src/ddev/cli/size/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# (C) Datadog, Inc. 2022-present
# All rights reserved
# Licensed under a 3-clause BSD style license (see LICENSE)

import click

from ddev.cli.size.diff import diff
from ddev.cli.size.status import status
from ddev.cli.size.timeline import timeline


@click.group()
def size():
"""
Analyze the download size of integrations and dependencies in various modes.

This command provides tools to inspect the current status, compare commits and monitor size changes of modules
across different commits, platforms, and Python versions.

"""

pass


size.add_command(status)
size.add_command(diff)
size.add_command(timeline)

if __name__ == "__main__":
size()
Loading
Loading