Skip to content
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

Update buildpack output #60

Merged
merged 7 commits into from
Nov 5, 2024
Merged

Update buildpack output #60

merged 7 commits into from
Nov 5, 2024

Conversation

colincasey
Copy link
Contributor

@colincasey colincasey commented Oct 16, 2024

Changed the output to use bullet_stream which required a bit of restructuring for how data gets passed around but, overall, I think this newer format is an improvement.

Sample output

# Heroku .deb Packages (v0.0.1)

- Distribution Info
  - Name: ubuntu
  - Version: 24.04
  - Codename: noble
  - Architecture: amd64

## Creating package index

- Package sources
  - http://archive.ubuntu.com/ubuntu noble [main, universe]
  - http://archive.ubuntu.com/ubuntu noble-updates [main, universe]
  - http://security.ubuntu.com/ubuntu noble-security [main, universe]
  - Updating .................................................................................................... (1m 38s)
  - Downloaded release file http://security.ubuntu.com/ubuntu/dists/noble-security/InRelease
  - Downloaded package index http://security.ubuntu.com/ubuntu/dists/noble-security/main/binary-amd64/by-hash/SHA256/025d63f18731808063b54828d296b4e3703641eeebe1e7190c0ce3b908d51ae8
  - Downloaded package index http://security.ubuntu.com/ubuntu/dists/noble-security/universe/binary-amd64/by-hash/SHA256/f69d7e6f99da216f4ea40001faf008802d62a7169c17badad0c3a9113a9902f5
  - Downloaded release file http://archive.ubuntu.com/ubuntu/dists/noble-updates/InRelease
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble-updates/main/binary-amd64/by-hash/SHA256/e0c9b15dfb6b1102ce75d2a303b9f53bd428078b73cf342bffbfde7815725eb9
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble-updates/universe/binary-amd64/by-hash/SHA256/e00cd814cff3e32dde502d05231e93652a773bcc71dbe2771938252de94470da
  - Downloaded release file http://archive.ubuntu.com/ubuntu/dists/noble/InRelease
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble/main/binary-amd64/by-hash/SHA256/e0d7e4cbb09d2aa7f9e104a1488817417bc9d85f3e5d9a21156a52ec641ae531
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble/universe/binary-amd64/by-hash/SHA256/ce57756edcce0a5f7993ceb89057e1510148e04e3b85a066d780e4bc00485c8a
- Building package index
  - Processing package files ..... (2.6s)
  - Indexed 81275 packages

## Determining packages to install

- Collecting system install information
- Determining install requirements for requested package `libgwenhywfar79`
  - Adding `[email protected]`
  - Adding `[email protected]` [from libgwenhywfar79t64]
- Determining install requirements for requested package `libgwenhywfar-data`
  - Nothing to add
- Determining install requirements for requested package `xmlsec1`
  - Adding `[email protected]`
- Determining install requirements for requested package `wget`
  - Nothing to add
- Determining install requirements for requested package `libvips`
  - Nothing to add

! Virtual package `libgwenhywfar79` is provided by `[email protected]` (consider replacing `libgwenhywfar79` with `libgwenhywfar79t64` in your project.toml configuration for this buildpack)

! Skipping `libgwenhywfar-data` because `[email protected]` was already installed as a dependency of `libgwenhywfar79t64` (consider removing `libgwenhywfar-data` from your project.toml configuration for this buildpack)

! Skipping `wget` because `[email protected]` is already installed on the system (consider removing `wget` from your project.toml configuration for this buildpack)

! Virtual package `libvips` is provided by `[email protected]` (consider replacing `libvips` with `libvips42t64` in your project.toml configuration for this buildpack)

! Skipping `libvips42t64` because `[email protected]` is already installed on the system (consider removing `libvips42t64` from your project.toml configuration for this buildpack)

## Installing packages

- Requesting packages
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgwenhywfar/libgwenhywfar79t64_5.10.2-2.1build4_amd64.deb
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgwenhywfar/libgwenhywfar-data_5.10.2-2.1build4_all.deb
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/main/x/xmlsec1/xmlsec1_1.2.39-5build2_amd64.deb
  - Downloading ..... (2.5s)
- Installation complete
  - Layer file listing

      /layers/heroku_deb-packages/packages/usr/bin/xmlsec1
      /layers/heroku_deb-packages/packages/usr/share/locale/de/LC_MESSAGES/gwenhywfar.mo
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/struct_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_bindata.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/tree_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint16_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_multicache_type.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint16_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_list2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode_list2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint32_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_buffer.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char_ptr.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_multicache.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/list2_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint32_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/double_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_stringlist2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint64_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint8_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_idlist64.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/double.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_date.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode_list.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_tree.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/list1_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_list.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_db_node.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/tree2_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/idmap_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_time.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint8_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_message.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_progress.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_showbox.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_input.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/tm2builder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/staticlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/tmplib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/sharedlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/app.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cxxapp.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cxxbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/module.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/msgfmt.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/tm2builder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/staticlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/tmplib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/sharedlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/app.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cxxapp.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cxxbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/module.gwb
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar-data/copyright
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar-data/changelog.Debian.gz
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar79t64/copyright
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar79t64/changelog.Debian.gz
      /layers/heroku_deb-packages/packages/usr/share/doc/xmlsec1/copyright
      /layers/heroku_deb-packages/packages/usr/share/man/man1/xmlsec1.1.gz
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/project.tmpl
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/module.tmpl
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/convlib.tmpl
      /layers/heroku_deb-packages/packages/usr/share/lintian/overrides/libgwenhywfar79t64
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/libgwengui-cpp.so.79.10.2
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/libgwenhywfar.so.79.10.2
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/configmgr/dir.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/configmgr/dir.so
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/ct/ohbci.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/ct/ohbci.so
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/olddb.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/olddb.so.0.0.1
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/csv.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/xmldb.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/xmldb.so.0.0.1
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/csv.so.0.0.1

  - Done (< 0.1s)
- Done (finished in 1m 43s)

Fixes #50

Changed the output to use `bullet_stream` which required a bit of restructuring for how data gets passed around but, overall, I think this newer format is an improvement.

### Sample output

```sh
# Heroku .deb Packages (v0.0.1)

- Distribution Info
  - Name: ubuntu
  - Version: 24.04
  - Codename: noble
  - Architecture: amd64

## Creating package index

- Package sources
  - http://archive.ubuntu.com/ubuntu noble [main, universe]
  - http://archive.ubuntu.com/ubuntu noble-updates [main, universe]
  - http://security.ubuntu.com/ubuntu noble-security [main, universe]
  - Updating .................................................................................................... (1m 38s)
  - Downloaded release file http://security.ubuntu.com/ubuntu/dists/noble-security/InRelease
  - Downloaded package index http://security.ubuntu.com/ubuntu/dists/noble-security/main/binary-amd64/by-hash/SHA256/025d63f18731808063b54828d296b4e3703641eeebe1e7190c0ce3b908d51ae8
  - Downloaded package index http://security.ubuntu.com/ubuntu/dists/noble-security/universe/binary-amd64/by-hash/SHA256/f69d7e6f99da216f4ea40001faf008802d62a7169c17badad0c3a9113a9902f5
  - Downloaded release file http://archive.ubuntu.com/ubuntu/dists/noble-updates/InRelease
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble-updates/main/binary-amd64/by-hash/SHA256/e0c9b15dfb6b1102ce75d2a303b9f53bd428078b73cf342bffbfde7815725eb9
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble-updates/universe/binary-amd64/by-hash/SHA256/e00cd814cff3e32dde502d05231e93652a773bcc71dbe2771938252de94470da
  - Downloaded release file http://archive.ubuntu.com/ubuntu/dists/noble/InRelease
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble/main/binary-amd64/by-hash/SHA256/e0d7e4cbb09d2aa7f9e104a1488817417bc9d85f3e5d9a21156a52ec641ae531
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble/universe/binary-amd64/by-hash/SHA256/ce57756edcce0a5f7993ceb89057e1510148e04e3b85a066d780e4bc00485c8a
- Building package index
  - Processing package files ..... (2.6s)
  - Indexed 81275 packages

## Determining packages to install

- Collecting system install information
- Determining install requirements for requested package `libgwenhywfar79`
  - Adding `[email protected]`
  - Adding `[email protected]` [from libgwenhywfar79t64]
- Determining install requirements for requested package `libgwenhywfar-data`
  - Nothing to add
- Determining install requirements for requested package `xmlsec1`
  - Adding `[email protected]`
- Determining install requirements for requested package `wget`
  - Nothing to add
- Determining install requirements for requested package `libvips`
  - Nothing to add

! Virtual package `libgwenhywfar79` is provided by `[email protected]` (consider replacing `libgwenhywfar79` with `libgwenhywfar79t64` in your project.toml configuration for this buildpack)

! Skipping `libgwenhywfar-data` because `[email protected]` was already installed as a dependency of `libgwenhywfar79t64` (consider removing `libgwenhywfar-data` from your project.toml configuration for this buildpack)

! Skipping `wget` because `[email protected]` is already installed on the system (consider removing `wget` from your project.toml configuration for this buildpack)

! Virtual package `libvips` is provided by `[email protected]` (consider replacing `libvips` with `libvips42t64` in your project.toml configuration for this buildpack)

! Skipping `libvips42t64` because `[email protected]` is already installed on the system (consider removing `libvips42t64` from your project.toml configuration for this buildpack)

## Installing packages

- Requesting packages
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgwenhywfar/libgwenhywfar79t64_5.10.2-2.1build4_amd64.deb
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgwenhywfar/libgwenhywfar-data_5.10.2-2.1build4_all.deb
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/main/x/xmlsec1/xmlsec1_1.2.39-5build2_amd64.deb
  - Downloading ..... (2.5s)
- Installation complete
  - Layer file listing

      /layers/heroku_deb-packages/packages/usr/bin/xmlsec1
      /layers/heroku_deb-packages/packages/usr/share/locale/de/LC_MESSAGES/gwenhywfar.mo
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/struct_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_bindata.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/tree_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint16_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_multicache_type.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint16_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_list2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode_list2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint32_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_buffer.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char_ptr.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_multicache.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/list2_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint32_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/double_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_stringlist2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint64_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint8_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_idlist64.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/double.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_date.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode_list.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_tree.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/list1_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_list.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_db_node.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/tree2_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/idmap_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_time.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint8_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_message.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_progress.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_showbox.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_input.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/tm2builder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/staticlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/tmplib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/sharedlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/app.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cxxapp.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cxxbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/module.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/msgfmt.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/tm2builder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/staticlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/tmplib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/sharedlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/app.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cxxapp.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cxxbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/module.gwb
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar-data/copyright
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar-data/changelog.Debian.gz
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar79t64/copyright
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar79t64/changelog.Debian.gz
      /layers/heroku_deb-packages/packages/usr/share/doc/xmlsec1/copyright
      /layers/heroku_deb-packages/packages/usr/share/man/man1/xmlsec1.1.gz
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/project.tmpl
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/module.tmpl
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/convlib.tmpl
      /layers/heroku_deb-packages/packages/usr/share/lintian/overrides/libgwenhywfar79t64
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/libgwengui-cpp.so.79.10.2
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/libgwenhywfar.so.79.10.2
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/configmgr/dir.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/configmgr/dir.so
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/ct/ohbci.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/ct/ohbci.so
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/olddb.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/olddb.so.0.0.1
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/csv.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/xmldb.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/xmldb.so.0.0.1
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/csv.so.0.0.1

  - Done (< 0.1s)
- Done (finished in 1m 43s)
```
@colincasey colincasey self-assigned this Oct 16, 2024
Changed the output to use `bullet_stream` which required a bit of restructuring for how data gets passed around but, overall, I think this newer format is an improvement.

### Sample output

```sh
# Heroku .deb Packages (v0.0.1)

- Distribution Info
  - Name: ubuntu
  - Version: 24.04
  - Codename: noble
  - Architecture: amd64

## Creating package index

- Package sources
  - http://archive.ubuntu.com/ubuntu noble [main, universe]
  - http://archive.ubuntu.com/ubuntu noble-updates [main, universe]
  - http://security.ubuntu.com/ubuntu noble-security [main, universe]
  - Updating .................................................................................................... (1m 38s)
  - Downloaded release file http://security.ubuntu.com/ubuntu/dists/noble-security/InRelease
  - Downloaded package index http://security.ubuntu.com/ubuntu/dists/noble-security/main/binary-amd64/by-hash/SHA256/025d63f18731808063b54828d296b4e3703641eeebe1e7190c0ce3b908d51ae8
  - Downloaded package index http://security.ubuntu.com/ubuntu/dists/noble-security/universe/binary-amd64/by-hash/SHA256/f69d7e6f99da216f4ea40001faf008802d62a7169c17badad0c3a9113a9902f5
  - Downloaded release file http://archive.ubuntu.com/ubuntu/dists/noble-updates/InRelease
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble-updates/main/binary-amd64/by-hash/SHA256/e0c9b15dfb6b1102ce75d2a303b9f53bd428078b73cf342bffbfde7815725eb9
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble-updates/universe/binary-amd64/by-hash/SHA256/e00cd814cff3e32dde502d05231e93652a773bcc71dbe2771938252de94470da
  - Downloaded release file http://archive.ubuntu.com/ubuntu/dists/noble/InRelease
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble/main/binary-amd64/by-hash/SHA256/e0d7e4cbb09d2aa7f9e104a1488817417bc9d85f3e5d9a21156a52ec641ae531
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble/universe/binary-amd64/by-hash/SHA256/ce57756edcce0a5f7993ceb89057e1510148e04e3b85a066d780e4bc00485c8a
- Building package index
  - Processing package files ..... (2.6s)
  - Indexed 81275 packages

## Determining packages to install

- Collecting system install information
- Determining install requirements for requested package `libgwenhywfar79`
  - Adding `[email protected]`
  - Adding `[email protected]` [from libgwenhywfar79t64]
- Determining install requirements for requested package `libgwenhywfar-data`
  - Nothing to add
- Determining install requirements for requested package `xmlsec1`
  - Adding `[email protected]`
- Determining install requirements for requested package `wget`
  - Nothing to add
- Determining install requirements for requested package `libvips`
  - Nothing to add

! Virtual package `libgwenhywfar79` is provided by `[email protected]` (consider replacing `libgwenhywfar79` with `libgwenhywfar79t64` in your project.toml configuration for this buildpack)

! Skipping `libgwenhywfar-data` because `[email protected]` was already installed as a dependency of `libgwenhywfar79t64` (consider removing `libgwenhywfar-data` from your project.toml configuration for this buildpack)

! Skipping `wget` because `[email protected]` is already installed on the system (consider removing `wget` from your project.toml configuration for this buildpack)

! Virtual package `libvips` is provided by `[email protected]` (consider replacing `libvips` with `libvips42t64` in your project.toml configuration for this buildpack)

! Skipping `libvips42t64` because `[email protected]` is already installed on the system (consider removing `libvips42t64` from your project.toml configuration for this buildpack)

## Installing packages

- Requesting packages
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgwenhywfar/libgwenhywfar79t64_5.10.2-2.1build4_amd64.deb
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgwenhywfar/libgwenhywfar-data_5.10.2-2.1build4_all.deb
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/main/x/xmlsec1/xmlsec1_1.2.39-5build2_amd64.deb
  - Downloading ..... (2.5s)
- Installation complete
  - Layer file listing

      /layers/heroku_deb-packages/packages/usr/bin/xmlsec1
      /layers/heroku_deb-packages/packages/usr/share/locale/de/LC_MESSAGES/gwenhywfar.mo
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/struct_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_bindata.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/tree_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint16_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_multicache_type.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint16_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_list2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode_list2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint32_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_buffer.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char_ptr.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_multicache.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/list2_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint32_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/double_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_stringlist2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint64_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint8_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_idlist64.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/double.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_date.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode_list.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_tree.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/list1_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_list.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_db_node.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/tree2_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/idmap_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_time.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint8_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_message.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_progress.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_showbox.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_input.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/tm2builder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/staticlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/tmplib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/sharedlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/app.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cxxapp.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cxxbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/module.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/msgfmt.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/tm2builder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/staticlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/tmplib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/sharedlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/app.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cxxapp.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cxxbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/module.gwb
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar-data/copyright
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar-data/changelog.Debian.gz
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar79t64/copyright
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar79t64/changelog.Debian.gz
      /layers/heroku_deb-packages/packages/usr/share/doc/xmlsec1/copyright
      /layers/heroku_deb-packages/packages/usr/share/man/man1/xmlsec1.1.gz
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/project.tmpl
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/module.tmpl
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/convlib.tmpl
      /layers/heroku_deb-packages/packages/usr/share/lintian/overrides/libgwenhywfar79t64
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/libgwengui-cpp.so.79.10.2
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/libgwenhywfar.so.79.10.2
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/configmgr/dir.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/configmgr/dir.so
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/ct/ohbci.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/ct/ohbci.so
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/olddb.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/olddb.so.0.0.1
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/csv.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/xmldb.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/xmldb.so.0.0.1
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/csv.so.0.0.1

  - Done (< 0.1s)
- Done (finished in 1m 43s)
```
Changed the output to use `bullet_stream` which required a bit of restructuring for how data gets passed around but, overall, I think this newer format is an improvement.

### Sample output

```sh
# Heroku .deb Packages (v0.0.1)

- Distribution Info
  - Name: ubuntu
  - Version: 24.04
  - Codename: noble
  - Architecture: amd64

## Creating package index

- Package sources
  - http://archive.ubuntu.com/ubuntu noble [main, universe]
  - http://archive.ubuntu.com/ubuntu noble-updates [main, universe]
  - http://security.ubuntu.com/ubuntu noble-security [main, universe]
  - Updating .................................................................................................... (1m 38s)
  - Downloaded release file http://security.ubuntu.com/ubuntu/dists/noble-security/InRelease
  - Downloaded package index http://security.ubuntu.com/ubuntu/dists/noble-security/main/binary-amd64/by-hash/SHA256/025d63f18731808063b54828d296b4e3703641eeebe1e7190c0ce3b908d51ae8
  - Downloaded package index http://security.ubuntu.com/ubuntu/dists/noble-security/universe/binary-amd64/by-hash/SHA256/f69d7e6f99da216f4ea40001faf008802d62a7169c17badad0c3a9113a9902f5
  - Downloaded release file http://archive.ubuntu.com/ubuntu/dists/noble-updates/InRelease
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble-updates/main/binary-amd64/by-hash/SHA256/e0c9b15dfb6b1102ce75d2a303b9f53bd428078b73cf342bffbfde7815725eb9
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble-updates/universe/binary-amd64/by-hash/SHA256/e00cd814cff3e32dde502d05231e93652a773bcc71dbe2771938252de94470da
  - Downloaded release file http://archive.ubuntu.com/ubuntu/dists/noble/InRelease
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble/main/binary-amd64/by-hash/SHA256/e0d7e4cbb09d2aa7f9e104a1488817417bc9d85f3e5d9a21156a52ec641ae531
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble/universe/binary-amd64/by-hash/SHA256/ce57756edcce0a5f7993ceb89057e1510148e04e3b85a066d780e4bc00485c8a
- Building package index
  - Processing package files ..... (2.6s)
  - Indexed 81275 packages

## Determining packages to install

- Collecting system install information
- Determining install requirements for requested package `libgwenhywfar79`
  - Adding `[email protected]`
  - Adding `[email protected]` [from libgwenhywfar79t64]
- Determining install requirements for requested package `libgwenhywfar-data`
  - Nothing to add
- Determining install requirements for requested package `xmlsec1`
  - Adding `[email protected]`
- Determining install requirements for requested package `wget`
  - Nothing to add
- Determining install requirements for requested package `libvips`
  - Nothing to add

! Virtual package `libgwenhywfar79` is provided by `[email protected]` (consider replacing `libgwenhywfar79` with `libgwenhywfar79t64` in your project.toml configuration for this buildpack)

! Skipping `libgwenhywfar-data` because `[email protected]` was already installed as a dependency of `libgwenhywfar79t64` (consider removing `libgwenhywfar-data` from your project.toml configuration for this buildpack)

! Skipping `wget` because `[email protected]` is already installed on the system (consider removing `wget` from your project.toml configuration for this buildpack)

! Virtual package `libvips` is provided by `[email protected]` (consider replacing `libvips` with `libvips42t64` in your project.toml configuration for this buildpack)

! Skipping `libvips42t64` because `[email protected]` is already installed on the system (consider removing `libvips42t64` from your project.toml configuration for this buildpack)

## Installing packages

- Requesting packages
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgwenhywfar/libgwenhywfar79t64_5.10.2-2.1build4_amd64.deb
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgwenhywfar/libgwenhywfar-data_5.10.2-2.1build4_all.deb
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/main/x/xmlsec1/xmlsec1_1.2.39-5build2_amd64.deb
  - Downloading ..... (2.5s)
- Installation complete
  - Layer file listing

      /layers/heroku_deb-packages/packages/usr/bin/xmlsec1
      /layers/heroku_deb-packages/packages/usr/share/locale/de/LC_MESSAGES/gwenhywfar.mo
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/struct_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_bindata.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/tree_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint16_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_multicache_type.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint16_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_list2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode_list2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint32_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_buffer.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char_ptr.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_multicache.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/list2_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint32_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/double_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_stringlist2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint64_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint8_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_idlist64.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/double.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_date.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode_list.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_tree.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/list1_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_list.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_db_node.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/tree2_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/idmap_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_time.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint8_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_message.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_progress.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_showbox.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_input.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/tm2builder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/staticlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/tmplib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/sharedlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/app.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cxxapp.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cxxbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/module.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/msgfmt.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/tm2builder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/staticlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/tmplib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/sharedlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/app.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cxxapp.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cxxbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/module.gwb
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar-data/copyright
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar-data/changelog.Debian.gz
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar79t64/copyright
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar79t64/changelog.Debian.gz
      /layers/heroku_deb-packages/packages/usr/share/doc/xmlsec1/copyright
      /layers/heroku_deb-packages/packages/usr/share/man/man1/xmlsec1.1.gz
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/project.tmpl
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/module.tmpl
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/convlib.tmpl
      /layers/heroku_deb-packages/packages/usr/share/lintian/overrides/libgwenhywfar79t64
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/libgwengui-cpp.so.79.10.2
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/libgwenhywfar.so.79.10.2
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/configmgr/dir.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/configmgr/dir.so
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/ct/ohbci.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/ct/ohbci.so
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/olddb.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/olddb.so.0.0.1
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/csv.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/xmldb.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/xmldb.so.0.0.1
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/csv.so.0.0.1

  - Done (< 0.1s)
- Done (finished in 1m 43s)
```
Changed the output to use `bullet_stream` which required a bit of restructuring for how data gets passed around but, overall, I think this newer format is an improvement.

### Sample output

```sh
# Heroku .deb Packages (v0.0.1)

- Distribution Info
  - Name: ubuntu
  - Version: 24.04
  - Codename: noble
  - Architecture: amd64

## Creating package index

- Package sources
  - http://archive.ubuntu.com/ubuntu noble [main, universe]
  - http://archive.ubuntu.com/ubuntu noble-updates [main, universe]
  - http://security.ubuntu.com/ubuntu noble-security [main, universe]
  - Updating .................................................................................................... (1m 38s)
  - Downloaded release file http://security.ubuntu.com/ubuntu/dists/noble-security/InRelease
  - Downloaded package index http://security.ubuntu.com/ubuntu/dists/noble-security/main/binary-amd64/by-hash/SHA256/025d63f18731808063b54828d296b4e3703641eeebe1e7190c0ce3b908d51ae8
  - Downloaded package index http://security.ubuntu.com/ubuntu/dists/noble-security/universe/binary-amd64/by-hash/SHA256/f69d7e6f99da216f4ea40001faf008802d62a7169c17badad0c3a9113a9902f5
  - Downloaded release file http://archive.ubuntu.com/ubuntu/dists/noble-updates/InRelease
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble-updates/main/binary-amd64/by-hash/SHA256/e0c9b15dfb6b1102ce75d2a303b9f53bd428078b73cf342bffbfde7815725eb9
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble-updates/universe/binary-amd64/by-hash/SHA256/e00cd814cff3e32dde502d05231e93652a773bcc71dbe2771938252de94470da
  - Downloaded release file http://archive.ubuntu.com/ubuntu/dists/noble/InRelease
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble/main/binary-amd64/by-hash/SHA256/e0d7e4cbb09d2aa7f9e104a1488817417bc9d85f3e5d9a21156a52ec641ae531
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble/universe/binary-amd64/by-hash/SHA256/ce57756edcce0a5f7993ceb89057e1510148e04e3b85a066d780e4bc00485c8a
- Building package index
  - Processing package files ..... (2.6s)
  - Indexed 81275 packages

## Determining packages to install

- Collecting system install information
- Determining install requirements for requested package `libgwenhywfar79`
  - Adding `[email protected]`
  - Adding `[email protected]` [from libgwenhywfar79t64]
- Determining install requirements for requested package `libgwenhywfar-data`
  - Nothing to add
- Determining install requirements for requested package `xmlsec1`
  - Adding `[email protected]`
- Determining install requirements for requested package `wget`
  - Nothing to add
- Determining install requirements for requested package `libvips`
  - Nothing to add

! Virtual package `libgwenhywfar79` is provided by `[email protected]` (consider replacing `libgwenhywfar79` with `libgwenhywfar79t64` in your project.toml configuration for this buildpack)

! Skipping `libgwenhywfar-data` because `[email protected]` was already installed as a dependency of `libgwenhywfar79t64` (consider removing `libgwenhywfar-data` from your project.toml configuration for this buildpack)

! Skipping `wget` because `[email protected]` is already installed on the system (consider removing `wget` from your project.toml configuration for this buildpack)

! Virtual package `libvips` is provided by `[email protected]` (consider replacing `libvips` with `libvips42t64` in your project.toml configuration for this buildpack)

! Skipping `libvips42t64` because `[email protected]` is already installed on the system (consider removing `libvips42t64` from your project.toml configuration for this buildpack)

## Installing packages

- Requesting packages
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgwenhywfar/libgwenhywfar79t64_5.10.2-2.1build4_amd64.deb
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgwenhywfar/libgwenhywfar-data_5.10.2-2.1build4_all.deb
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/main/x/xmlsec1/xmlsec1_1.2.39-5build2_amd64.deb
  - Downloading ..... (2.5s)
- Installation complete
  - Layer file listing

      /layers/heroku_deb-packages/packages/usr/bin/xmlsec1
      /layers/heroku_deb-packages/packages/usr/share/locale/de/LC_MESSAGES/gwenhywfar.mo
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/struct_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_bindata.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/tree_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint16_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_multicache_type.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint16_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_list2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode_list2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint32_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_buffer.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char_ptr.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_multicache.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/list2_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint32_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/double_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_stringlist2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint64_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint8_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_idlist64.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/double.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_date.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode_list.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_tree.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/list1_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_list.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_db_node.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/tree2_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/idmap_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_time.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint8_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_message.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_progress.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_showbox.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_input.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/tm2builder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/staticlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/tmplib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/sharedlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/app.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cxxapp.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cxxbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/module.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/msgfmt.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/tm2builder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/staticlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/tmplib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/sharedlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/app.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cxxapp.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cxxbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/module.gwb
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar-data/copyright
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar-data/changelog.Debian.gz
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar79t64/copyright
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar79t64/changelog.Debian.gz
      /layers/heroku_deb-packages/packages/usr/share/doc/xmlsec1/copyright
      /layers/heroku_deb-packages/packages/usr/share/man/man1/xmlsec1.1.gz
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/project.tmpl
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/module.tmpl
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/convlib.tmpl
      /layers/heroku_deb-packages/packages/usr/share/lintian/overrides/libgwenhywfar79t64
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/libgwengui-cpp.so.79.10.2
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/libgwenhywfar.so.79.10.2
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/configmgr/dir.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/configmgr/dir.so
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/ct/ohbci.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/ct/ohbci.so
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/olddb.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/olddb.so.0.0.1
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/csv.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/xmldb.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/xmldb.so.0.0.1
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/csv.so.0.0.1

  - Done (< 0.1s)
- Done (finished in 1m 43s)
```
Changed the output to use `bullet_stream` which required a bit of restructuring for how data gets passed around but, overall, I think this newer format is an improvement.

### Sample output

```sh
# Heroku .deb Packages (v0.0.1)

- Distribution Info
  - Name: ubuntu
  - Version: 24.04
  - Codename: noble
  - Architecture: amd64

## Creating package index

- Package sources
  - http://archive.ubuntu.com/ubuntu noble [main, universe]
  - http://archive.ubuntu.com/ubuntu noble-updates [main, universe]
  - http://security.ubuntu.com/ubuntu noble-security [main, universe]
  - Updating .................................................................................................... (1m 38s)
  - Downloaded release file http://security.ubuntu.com/ubuntu/dists/noble-security/InRelease
  - Downloaded package index http://security.ubuntu.com/ubuntu/dists/noble-security/main/binary-amd64/by-hash/SHA256/025d63f18731808063b54828d296b4e3703641eeebe1e7190c0ce3b908d51ae8
  - Downloaded package index http://security.ubuntu.com/ubuntu/dists/noble-security/universe/binary-amd64/by-hash/SHA256/f69d7e6f99da216f4ea40001faf008802d62a7169c17badad0c3a9113a9902f5
  - Downloaded release file http://archive.ubuntu.com/ubuntu/dists/noble-updates/InRelease
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble-updates/main/binary-amd64/by-hash/SHA256/e0c9b15dfb6b1102ce75d2a303b9f53bd428078b73cf342bffbfde7815725eb9
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble-updates/universe/binary-amd64/by-hash/SHA256/e00cd814cff3e32dde502d05231e93652a773bcc71dbe2771938252de94470da
  - Downloaded release file http://archive.ubuntu.com/ubuntu/dists/noble/InRelease
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble/main/binary-amd64/by-hash/SHA256/e0d7e4cbb09d2aa7f9e104a1488817417bc9d85f3e5d9a21156a52ec641ae531
  - Downloaded package index http://archive.ubuntu.com/ubuntu/dists/noble/universe/binary-amd64/by-hash/SHA256/ce57756edcce0a5f7993ceb89057e1510148e04e3b85a066d780e4bc00485c8a
- Building package index
  - Processing package files ..... (2.6s)
  - Indexed 81275 packages

## Determining packages to install

- Collecting system install information
- Determining install requirements for requested package `libgwenhywfar79`
  - Adding `[email protected]`
  - Adding `[email protected]` [from libgwenhywfar79t64]
- Determining install requirements for requested package `libgwenhywfar-data`
  - Nothing to add
- Determining install requirements for requested package `xmlsec1`
  - Adding `[email protected]`
- Determining install requirements for requested package `wget`
  - Nothing to add
- Determining install requirements for requested package `libvips`
  - Nothing to add

! Virtual package `libgwenhywfar79` is provided by `[email protected]` (consider replacing `libgwenhywfar79` with `libgwenhywfar79t64` in your project.toml configuration for this buildpack)

! Skipping `libgwenhywfar-data` because `[email protected]` was already installed as a dependency of `libgwenhywfar79t64` (consider removing `libgwenhywfar-data` from your project.toml configuration for this buildpack)

! Skipping `wget` because `[email protected]` is already installed on the system (consider removing `wget` from your project.toml configuration for this buildpack)

! Virtual package `libvips` is provided by `[email protected]` (consider replacing `libvips` with `libvips42t64` in your project.toml configuration for this buildpack)

! Skipping `libvips42t64` because `[email protected]` is already installed on the system (consider removing `libvips42t64` from your project.toml configuration for this buildpack)

## Installing packages

- Requesting packages
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgwenhywfar/libgwenhywfar79t64_5.10.2-2.1build4_amd64.deb
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgwenhywfar/libgwenhywfar-data_5.10.2-2.1build4_all.deb
  - `[email protected]` from http://archive.ubuntu.com/ubuntu/pool/main/x/xmlsec1/xmlsec1_1.2.39-5build2_amd64.deb
  - Downloading ..... (2.5s)
- Installation complete
  - Layer file listing

      /layers/heroku_deb-packages/packages/usr/bin/xmlsec1
      /layers/heroku_deb-packages/packages/usr/share/locale/de/LC_MESSAGES/gwenhywfar.mo
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/struct_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_bindata.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/tree_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint16_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_multicache_type.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint16_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_list2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode_list2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint32_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_buffer.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char_ptr.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_multicache.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/list2_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint32_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/double_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_stringlist2.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint64_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint8_t.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_idlist64.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/char_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/double.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_date.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode_list.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/int_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_tree.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_xmlnode.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/list1_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param_list.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_param.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_db_node.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/tree2_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/idmap_base.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/gwen_time.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/typemaker2/c/uint8_t_array.tm2
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_message.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_progress.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_showbox.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/dialogs/dlg_input.dlg
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/tm2builder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/staticlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/tmplib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/sharedlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/app.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cxxapp.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/cxxbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/module.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/posix/msgfmt.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/tm2builder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/staticlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/tmplib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/sharedlib.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/app.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cxxapp.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/cxxbuilder.gwb
      /layers/heroku_deb-packages/packages/usr/share/gwenhywfar/gwenbuild/builders/windows/module.gwb
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar-data/copyright
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar-data/changelog.Debian.gz
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar79t64/copyright
      /layers/heroku_deb-packages/packages/usr/share/doc/libgwenhywfar79t64/changelog.Debian.gz
      /layers/heroku_deb-packages/packages/usr/share/doc/xmlsec1/copyright
      /layers/heroku_deb-packages/packages/usr/share/man/man1/xmlsec1.1.gz
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/project.tmpl
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/module.tmpl
      /layers/heroku_deb-packages/packages/usr/share/gwenbuild/templates/convlib.tmpl
      /layers/heroku_deb-packages/packages/usr/share/lintian/overrides/libgwenhywfar79t64
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/libgwengui-cpp.so.79.10.2
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/libgwenhywfar.so.79.10.2
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/configmgr/dir.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/configmgr/dir.so
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/ct/ohbci.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/ct/ohbci.so
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/olddb.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/olddb.so.0.0.1
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/csv.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/xmldb.xml
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/xmldb.so.0.0.1
      /layers/heroku_deb-packages/packages/usr/lib/x86_64-linux-gnu/gwenhywfar/plugins/79/dbio/csv.so.0.0.1

  - Done (< 0.1s)
- Done (finished in 1m 43s)
```
@colincasey colincasey marked this pull request as ready for review October 16, 2024 15:51
@colincasey colincasey requested a review from a team as a code owner October 16, 2024 15:51
@runesoerensen
Copy link

runesoerensen commented Oct 23, 2024

So this PR changes the log output order when determining packages to install, in a way that doesn't immediately seem better. In particular the warnings were previously written immediately after/before the package for which the warning is emitted, e.g. like so:

## Determining packages to install

  ! Virtual package libgwenhywfar79 is provided by [email protected] (consider replacing libgwenhywfar79 for libgwenhywfar79t64 in your project.toml configuration for this buildpack)
  Adding [email protected]
  Adding [email protected] [from libgwenhywfar79t64]
  ! Skipping libgwenhywfar-data because [email protected] was already installed as a dependency of libgwenhywfar79t64 (consider removing libgwenhywfar-data from your project.toml configuration for this buildpack)
  Adding [email protected]
  ! Skipping wget because [email protected] is already installed on the system (consider removing wget from your project.toml configuration for this buildpack)
  ! Virtual package libvips is provided by [email protected] (consider replacing libvips for libvips42t64 in your project.toml configuration for this buildpack)
  ! Skipping libvips42t64 because [email protected] is already installed on the system (consider removing libvips42t64 from your project.toml configuration for this buildpack)

Curious to hear your thoughts on this -- it seems by printing all the warnings in one big block, the output loses some context and ends up becoming more verbose?

I'm also not sure it's helpful to display warnings so prominently (in a yellow, unindented "! some warning" line). I tried playing around with the logic here, changing it to:

let mut system_install_details = IndexMap::new();
for requested_package in requested_packages {
    let mut warnings = Vec::new();
    let mut install_log = log.bullet(format!(
        "Determining install requirements for requested package {package}",
        package = style::value(requested_package.name.as_str())
    ));
    let mut visit_stack = IndexSet::new();
    let mut package_install_details = IndexMap::new();

    visit(
        requested_package.name.as_str(),
        requested_package.skip_dependencies,
        &mut visit_stack,
        &mut package_install_details,
        &system_install_details,
        &mut warnings,
        &system_packages,
        package_index,
    )?;

    for warning in &warnings {
        install_log = install_log.sub_bullet(format!("{warning}"));
    }

    if package_install_details.is_empty() {
        if warnings.is_empty() {
            // Not sure if this condition is likely to happen? But when there are warnings, it might be sufficient to
            // just print those to the output - and only print the following when there are no warnings?
            install_log = install_log.sub_bullet("Nothing to add");
        }
    } else {
        for (name, install_record) in package_install_details {
            install_log = install_log.sub_bullet(install_record.to_string());
            system_install_details.insert(name, install_record);
        }
    }

    log = install_log.done();
}

This changes the output so:

  • Warnings are written in the context of the package being installed.
  • Warnings are printed before any of the install_log messages.
  • "Nothing to add" is only printed when there are no warnings.
  • Warnings are printed just like regular output (e.g. no change in indentation, color, or with the "! " prefix).

Here's the resulting output with that change:

## Determining packages to install

- Collecting system install information
- Determining install requirements for requested package `libgwenhywfar79`
  - Virtual package `libgwenhywfar79` is provided by `[email protected]` (consider replacing `libgwenhywfar79` with `libgwenhywfar79t64` in your project.toml configuration for this buildpack)
  - Adding `[email protected]`
  - Adding `[email protected]` [from libgwenhywfar79t64]
- Determining install requirements for requested package `libgwenhywfar-data`
  - Skipping `libgwenhywfar-data` because `[email protected]` was already installed as a dependency of `libgwenhywfar79t64` (consider removing `libgwenhywfar-data` from your project.toml configuration for this buildpack)
- Determining install requirements for requested package `xmlsec1`
  - Adding `[email protected]`
- Determining install requirements for requested package `wget`
  - Skipping `wget` because `[email protected]` is already installed on the system (consider removing `wget` from your project.toml configuration for this buildpack)
- Determining install requirements for requested package `libvips`
  - Virtual package `libvips` is provided by `[email protected]` (consider replacing `libvips` with `libvips42t64` in your project.toml configuration for this buildpack)
  - Skipping `libvips42t64` because `[email protected]` is already installed on the system (consider removing `libvips42t64` from your project.toml configuration for this buildpack)

This seems cleaner to me - what do you think?

Btw -- I got this output by building tests/fixtures/general_usage. It seems the last log line is a bit off (it recommends removing libvips42t64 from project.toml, but libvips42t64 isn't included in that file (though it looks like that what libvips resolves to based on the preceding message):

Skipping `libvips42t64` because `[email protected]` is already installed on the system (consider removing `libvips42t64` from your project.toml configuration for this buildpack)

@colincasey
Copy link
Contributor Author

@runesoerensen I think that's a good suggestion regarding the warnings. I had moved them to be reported at the end of the dependency actions mostly because using the bullet_stream warning method enforces that ! {message}\n style. I had not considered just making them regular output messages.

…cation`

This allows for recording all notifiable events that happen during dependency resolution to be captured and reported to the user.

Also introduces `SystemPackage` to act as an easier struct to work with than `Control` and `PackageMarkedForInstall` to record install actions.
@colincasey colincasey requested a review from joshwlewis October 25, 2024 14:06
@colincasey
Copy link
Contributor Author

@joshwlewis I disabled the file listing for the default output. It can be re-enabled if BP_LOG_LEVEL is set to DEBUG (as suggested by @schneems). This is verified in the integration tests + I've added documentation on this environment variable to README.md.

@colincasey colincasey merged commit 1d803c3 into main Nov 5, 2024
6 checks passed
@colincasey colincasey deleted the update_buildpack_output branch November 5, 2024 13:33
colincasey added a commit that referenced this pull request Nov 5, 2024
This was added in #60 but not mentioned in the changelog entry.
colincasey added a commit that referenced this pull request Nov 5, 2024
* Update CHANGELOG.md to mention `BP_LOG_LEVEL`

This was added in #60 but not mentioned in the changelog entry.
heroku-linguist bot added a commit that referenced this pull request Nov 6, 2024
## heroku/deb-packages

### Added

- Support the `force` option when declaring a package to install so the user can control if, when the package is already
  on the system, it should be skipped or forcibly installed. ([#66](#66))
- Support for `BP_LOG_LEVEL` environment variable to control verbosity of buildpack output.
  ([#60](#60))

### Changed

- Updated the buildpack display name and keywords to be more consistent with our other
  CNBs. ([#59](#59))
- Modified the buildpack output format to align with our other
  CNBs. ([#60](#60))
@heroku-linguist heroku-linguist bot mentioned this pull request Nov 6, 2024
heroku-linguist bot added a commit to heroku/cnb-builder-images that referenced this pull request Nov 7, 2024
## heroku/deb-packages

### Added

- Support the `force` option when declaring a package to install so the user can control if, when the package is already
  on the system, it should be skipped or forcibly installed. ([#66](heroku/buildpacks-deb-packages#66))
- Support for `BP_LOG_LEVEL` environment variable to control verbosity of buildpack output.
  ([#60](heroku/buildpacks-deb-packages#60))

### Changed

- Updated the buildpack display name and keywords to be more consistent with our other
  CNBs. ([#59](heroku/buildpacks-deb-packages#59))
- Modified the buildpack output format to align with our other
  CNBs. ([#60](heroku/buildpacks-deb-packages#60))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Log when cache cleared and why
4 participants