- commits:
    - subject: Update dependency chai to v5
      hash: e9e3233ccc125dbf3a4aa3e0582e580fcb75390b
      body: |
        Update chai from 4.5.0 to 5.3.3
      footer:
        Change-type: patch
        change-type: patch
      author: balena-renovate[bot]
  version: 4.2.13
  title: ""
  date: 2026-06-11T02:42:36.598Z
- commits:
    - subject: Update docker Docker tag to v25
      hash: aa8197e08e2c572642ae3fce40df68dc89f88a3b
      body: |
        Update docker from 24.0.9 to 25.0.5
      footer:
        Change-type: patch
        change-type: patch
      author: balena-renovate[bot]
  version: 4.2.12
  title: ""
  date: 2026-06-11T01:38:11.110Z
- commits:
    - subject: Use Size - SharedSize for reclaim accounting
      hash: 03d80a0ae070df88829ed764f1a8f72f2ab39544
      body: |
        The Docker engine reports ImageInfo.Size as the sum of every layer in an
        image's chain, including layers shared with other images. When a shared
        base layer is 500MB and 100 images reference it, getImagesToRemove's
        `size += leaf.size` accumulator counts that 500MB a hundred times while
        removing any one image frees zero bytes of that layer.

        On a production builder worker we observed:

            count           = 51,836 images
            Size total      = 33.84 TB  (what GC sees today)
            SharedSize      = 33.08 TB  (97.8% shared)
            Size - Shared   = 0.755 TB
            engine deduped  = 2.245 TB  (per `system df`)

        GC was over-counting its per-image credit by ~15x vs actual on-disk
        usage, causing it to declare reclaim targets satisfied after removing
        only a fraction of the intended bytes. Combined with 409 conflicts on
        shared-layer images, this drives repeated GC runs that eventually reach
        newer images and produce 404 errors in concurrent builds.

        Request SharedSize from the engine via `shared-size=1` on listImages
        and credit `size - sharedSize` per removal. This is a conservative
        floor — cascading removals that free formerly-shared layers get their
        additional reclaim accounted for when the next image is popped.

        Older engines that don't implement shared-size return -1; we treat that
        as 0 so the accumulator falls back to full-chain size (pre-change
        behaviour) rather than silently under-counting.
      footer:
        Change-type: patch
        change-type: patch
        Signed-off-by: Kyle Harding <kyle@balena.io>
        signed-off-by: Kyle Harding <kyle@balena.io>
      author: Kyle Harding
  version: 4.2.11
  title: ""
  date: 2026-04-14T14:03:36.797Z
- commits:
    - subject: Update docker Docker tag to v24.0.9
      hash: 8acf2f20e820c69530db4f4e96d92a61c6883b18
      body: |
        Update docker from 24.0.5 to 24.0.9
      footer:
        Change-type: patch
        change-type: patch
      author: balena-renovate[bot]
  version: 4.2.10
  title: ""
  date: 2026-04-10T15:11:40.105Z
- commits:
    - subject: Treat 409 conflict errors as noop during image removal
      hash: 4fe66707807a4cab64cd3dde9ed67d1788dbf9c4
      body: |
        When the engine refuses to delete an image due to dependent child
        images (409 conflict), skip it instead of treating it as an error.
        The image tree built from ParentId doesn't capture layer-level
        dependencies, so GC can select images that the engine considers
        non-removable. Without this fix, 409 errors accumulate and GC
        reports failure despite having valid images to reclaim.
      footer:
        Change-type: patch
        change-type: patch
        Signed-off-by: Kyle Harding <kyle@balena.io>
        signed-off-by: Kyle Harding <kyle@balena.io>
      author: Kyle Harding
  version: 4.2.9
  title: ""
  date: 2026-04-10T14:56:01.312Z
- commits:
    - subject: Update dependency typescript to v6
      hash: 0050bda22bf2f95159ed7862a3b8d8c4a79860d4
      body: |
        Update typescript from 5.9.3 to 6.0.2
      footer:
        Change-type: patch
        change-type: patch
      author: balena-renovate[bot]
  version: 4.2.8
  title: ""
  date: 2026-04-10T13:46:20.080Z
- commits:
    - subject: Add info about the size and mtime of images being removed
      hash: 0e2677170713319d1b67075237c30c0174f99475
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 4.2.7
  title: ""
  date: 2026-04-10T10:14:22.686Z
- commits:
    - subject: Switch mtime tracking from timeNano to time (seconds)
      hash: 5fae42375f4c756571726934f890c98f526d4615
      body: |
        timeNano values exceed Number.MAX_SAFE_INTEGER, causing precision
        loss when converted to JavaScript numbers. The event stream now
        reads the `time` field (unix seconds) which fits safely in a JS
        number. This eliminates mixed string/number comparisons throughout
        the mtime tracking and sorting pipeline.
      footer:
        Change-type: patch
        change-type: patch
        Signed-off-by: Kyle Harding <kyle@balena.io>
        signed-off-by: Kyle Harding <kyle@balena.io>
      author: Kyle Harding
    - subject: Fix cascading deletion ordering in getImagesToRemove
      hash: 3fd35ea58ca217ba9b3890b56ad5e1fe0c3d0330
      body: |
        Move leaf.removed=true before the parent candidate check so parent
        nodes correctly see their child as removed and cascade within a
        single GC run instead of requiring multiple runs.
      footer:
        Change-type: patch
        change-type: patch
        Signed-off-by: Kyle Harding <kyle@balena.io>
        signed-off-by: Kyle Harding <kyle@balena.io>
      author: Kyle Harding
    - subject: Fix getMtime resolution across ID and tag keys
      hash: 998c4a2cbe38f692724c03d6b46efb3bd00e1753
      body: |
        getMtime used nullish coalescing (??) to fall through from ID to tag
        to digest lookup. But parseEventStream initializes all image IDs to
        mtime=0, and 0 is not nullish. Container events with from=tag store
        mtime under the tag key, but getMtime found 0 under the ID key first
        and returned it — silently discarding the more recent tag-keyed value.

        Fix by collecting mtime candidates from all keys (ID, tags, digests)
        and returning the maximum (most recent) value. This ensures container
        events recorded under any key format are correctly reflected.
      footer:
        Change-type: patch
        change-type: patch
        Signed-off-by: Kyle Harding <kyle@balena.io>
        signed-off-by: Kyle Harding <kyle@balena.io>
      author: Kyle Harding
  version: 4.2.6
  title: ""
  date: 2026-04-07T13:19:52.886Z
- commits:
    - subject: Fix tests for containerized cross-platform execution
      hash: 5ecc8b426587122368894616b7861268649e42cc
      body: |
        - Replace alpine:3.1, debian:squeeze, ubuntu:lucid with multi-arch
          equivalents that work on both arm64 and amd64
        - Discover NONE_TAG_IMAGES dynamically via a before() hook that
          resolves digest refs for the current platform, with guards for
          undefined digests and ID mismatch
        - Fix afterEach to await cleanup with Promise.all instead of
          returning a bare array of promises
        - Add DOCKER_OPTS helper that parses DOCKER_HOST so tests work both
          locally and in containers
        - Filter catch blocks to only swallow 404/409, surface real errors
      footer:
        Change-type: patch
        change-type: patch
        Signed-off-by: Kyle Harding <kyle@balena.io>
        signed-off-by: Kyle Harding <kyle@balena.io>
      author: Kyle Harding
  version: 4.2.5
  title: ""
  date: 2026-04-02T23:45:15.445Z
- commits:
    - subject: Persist mtimes across stream restarts
      hash: 9abe0827e8fd6ff49b9360e1393b54f8b2e34689
      body: |
        Pass existing mtimes through on stream restart so known mtimes are
        preserved, also check for and clean up stale entries. If we don't
        preserve known mtimes, all image mtimes would be set to 0 making
        them appear old and cause GC to remove them even if they were
        recently used.
      footer:
        Change-type: patch
        change-type: patch
      author: joshbwlng
  version: 4.2.4
  title: ""
  date: 2026-04-02T01:07:37.277Z
- commits:
    - subject: Use a `Map` for storing the layer mtimes
      hash: 47693421c1c4cfafdb74c04c43bdab4a8bdcbea2
      body: |
        This should perform better considering the layer mtimes can potentially
        get fairly large
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 4.2.3
  title: ""
  date: 2026-04-01T16:28:03.869Z
- commits:
    - subject: Treat already removed images as a noop
      hash: 8737ea0f7b1ceefdef2cee60aa7f7a523832fb6d
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: joshbwlng
  version: 4.2.2
  title: ""
  date: 2026-03-21T03:35:48.740Z
- commits:
    - subject: "Add id-token: write permission for NPM OIDC publishing"
      hash: 935ab3b28eca27bba13d66d04f3d41f23da50188
      body: ""
      footer:
        Change-type: patch
        change-type: patch
        Signed-off-by: Kyle Harding <kyle@balena.io>
        signed-off-by: Kyle Harding <kyle@balena.io>
      author: Kyle Harding
  version: 4.2.1
  title: ""
  date: 2026-02-23T21:39:05.631Z
- commits:
    - subject: Add public method to destroy mtime stream
      hash: d0aed14669a0318e4a83dee5b78b0ee24054e3db
      body: ""
      footer:
        Change-type: minor
        change-type: minor
      author: joshbwlng
  version: 4.2.0
  title: ""
  date: 2025-12-13T07:45:39.491Z
- commits:
    - subject: Switch from `es.pipeline` to native `pipeline`
      hash: cc00659e44368febbd53f1c3839881162f889caf
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
    - subject: Switch from `es.mapSync` to native `Transform` stream
      hash: d7a7097e210da0f0bf539fdfc3388403c2fa48cd
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 4.1.7
  title: ""
  date: 2025-10-13T09:21:51.527Z
- commits:
    - subject: Update dependencies
      hash: f47845450dac6d68994b1343b8e86fe150face84
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 4.1.6
  title: ""
  date: 2025-10-10T11:52:03.261Z
- commits:
    - subject: Update dependency mocha to v11
      hash: 71a263730e22eb96ee8804797edfd45ce96055b5
      body: |
        Update mocha from 10.8.2 to 11.1.0
      footer:
        Change-type: patch
        change-type: patch
      author: balena-renovate[bot]
  version: 4.1.5
  title: ""
  date: 2025-04-02T14:03:44.664Z
- commits:
    - subject: Update @balena/lint to 9.x
      hash: 2477ef0c98ac92a9a0ba61ee0fe0b424547f21ae
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 4.1.4
  title: ""
  date: 2025-03-25T17:06:08.012Z
- commits:
    - subject: Update dependencies and fix lint warnings
      hash: e29f5cf40b682ef953afc7a2a87c367508de9b26
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 4.1.3
  title: ""
  date: 2024-07-23T10:15:45.731Z
- commits:
    - subject: Retry reconnecting the mtime stream with an exponential backoff
      hash: db39fe8688e89267f2f46f8253313fd2f5ff3909
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 4.1.2
  title: ""
  date: 2024-07-23T00:21:38.799Z
- commits:
    - subject: Listen for errors on the mtime stream and set it back up as necessary
      hash: f9ef13a27f6759bbec093c458430dc5874525f28
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 4.1.1
  title: ""
  date: 2024-07-09T14:36:04.429Z
- commits:
    - subject: Use partial updates for rebuilding the removal candidate list
      hash: 7e4cbd837aae0246586e86a517e2b53132cf2728
      body: |
        This means that we now check only the parent of the node we're removing
        to see if it is now a valid candidate and can avoid rebuilding, and
        sorting, the full list from scratch every time. This removes
        significant work in rebuilding/sorting the list on every iteration and
        also reduces allocations/garbage collection overhead related to that
      footer:
        Change-type: minor
        change-type: minor
      author: Pagan Gazzard
  version: 4.1.0
  title: ""
  date: 2024-03-08T15:05:26.868Z
- commits:
    - subject: Update dependencies
      hash: 16ce94acabffdd775fe302330592947f39746816
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 4.0.4
  title: ""
  date: 2024-03-07T14:54:58.532Z
- commits:
    - subject: Remove unnecessary await
      hash: 5c6e956056c17a1ec83781447e40f8e751279b4a
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 4.0.3
  title: ""
  date: 2023-12-08T16:13:08.052Z
- commits:
    - subject: Remove dependency on bluebird
      hash: 943922d916cf5dccff6cc94ed497f3b4e29a6c07
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
    - subject: Remove dependency on lodash
      hash: 4354905941a3696024ae035528e2afbaf81e9fa2
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
    - subject: Remove unnecessary check before deleting layer mtime info
      hash: 5cc423ddf93e6f953dba90924dad8f9e1224ac9e
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
    - subject: Make it clear that `getImagesToRemove` mutates the passed in tree
      hash: ab023bacab8b2b74fdbd3448353079f46ecbb960
      body: |
        The function was already mutating everything other than the root level
        and as we do not re-use the tree anywhere it is safe to keep the
        mutation but this helps avoid issues being caused by future refactoring
        that might not consider that
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 4.0.2
  title: ""
  date: 2023-12-07T13:58:54.904Z
- commits:
    - subject: Use native promises with dockerode
      hash: e437d1b00cbde9984187cd4fcf055c307df7fcde
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
    - subject: Convert to async/await
      hash: e257c65cc92e0524ed7bf08465099c18c2248724
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 4.0.1
  title: ""
  date: 2023-12-05T22:27:53.958Z
- commits:
    - subject: Update to dockerode 3.x
      hash: c6b5416ef2026eba121414cbd349d0717a6d3a68
      body: ""
      footer:
        Change-type: major
        change-type: major
      author: Pagan Gazzard
    - subject: Convert to typescript
      hash: cb4d9a210d5ab04c04757065c126c22ebe2f8f0c
      body: ""
      footer:
        Change-type: major
        change-type: major
      author: Pagan Gazzard
  version: 4.0.0
  title: ""
  date: 2023-12-04T17:45:37.011Z
- commits:
    - subject: Update event-stream to 4.x
      hash: 5d60200c8c776fff5b93d3750df8603e64db3ebf
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 3.5.12
  title: ""
  date: 2023-12-04T16:03:37.996Z
- commits:
    - subject: Remove unused `@balena/node-metrics-gatherer` dependency
      hash: a1ab3e61619839799a32b629d425c67360e5fb8b
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 3.5.11
  title: ""
  date: 2023-12-04T15:39:55.351Z
- commits:
    - subject: Optimize `getMtimeFrom`
      hash: e898db2d4abf0ef7cf30311391339fcee40b2868
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 3.5.10
  title: ""
  date: 2023-11-30T21:51:49.391Z
- commits:
    - subject: Fix exported typings
      hash: f3e088e5853025e80baaf58bbdc965074020a95f
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 3.5.9
  title: ""
  date: 2023-11-29T16:51:28.257Z
- commits:
    - subject: Update to eventemitter3 v5
      hash: 6d40753d7643460e8736d8b5f0672d8dd9f84f4f
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 3.5.8
  title: ""
  date: 2023-11-29T14:46:22.453Z
- commits:
    - subject: Import bluebird as `Bluebird` instead of `Promise`
      hash: f97bfe4be10415ff3a74709d1c158eb847a280d1
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 3.5.7
  title: ""
  date: 2023-11-28T22:13:16.460Z
- commits:
    - subject: Remove unused `mz` dependency
      hash: b39c411f82f69b7aa980364bce04e8b398a343da
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 3.5.6
  title: ""
  date: 2023-11-28T20:47:13.918Z
- commits:
    - subject: add support for arm32 architecture
      hash: d308f7ad8e13c0d34960328c58e18715acb70aaf
      body: ""
      footer:
        change-type: patch
      author: Anton Belodedenko
  version: 3.5.5
  title: ""
  date: 2023-10-16T18:55:08.049Z
- commits:
    - subject: Run tests using dind to avoid interactions with existing images
      hash: ee161f87df98729d935c47c7c2a9f20d72a39e46
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
    - subject: Only default the mtime to "now" for unrecognized images rather than old
      hash: 134083f6655449470bc92438a94e79b11b6c1461
      body: |
        This avoids issues where images that existed before the garbage
        collector was attached would always have their mtime set to "now" and
        be avoided for removal. Instead we now only do it for images we haven't
        seen which should only be the case for newly added images which haven't
        yet had an mtime added but shortly will do, in which case `now` is a
        good approximation
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 3.5.4
  title: ""
  date: 2023-08-01T13:43:27.228Z
- commits:
    - subject: Add typings
      hash: 15a645990da1f763088a843c9a8876b4b5cddff8
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 3.5.3
  title: ""
  date: 2023-03-27T16:36:50.392Z
- commits:
    - subject: Replace balenaCI with flowzone
      hash: 1f5029fed1b1d7713665274949f2c8badb6d4f0f
      body: ""
      footer:
        Change-type: patch
        change-type: patch
      author: Pagan Gazzard
  version: 3.5.2
  title: ""
  date: 2023-03-27T16:32:29.520Z
- version: 3.5.1
  date: 2021-06-25T14:19:00Z
  commits:
    - hash: 429eb83cfa378657928925b3946ea8c564c12678
      author: Paulo Castro
      footers:
        change-type: patch
      subject: Added package-lock=false to .npmrc (libs should not use package-lock)
      body: null
    - hash: 0f637203bb3841fa56b59bdaa336103c5b621037
      author: Paulo Castro
      footers:
        change-type: patch
      subject: Add .resinci.yml (don't run tests that will fail anyway)
      body: null
    - hash: 2228ede8404f92be344435f075ac4816c4d2daa6
      author: Paulo Castro
      footers:
        change-type: patch
      subject: Update dependencies (docker-progress)
      body: Update docker-progress from 4.0.1 to 5.0.0
- version: 3.5.0
- date: 2020-07-01T15:46:00Z
- commits:
    - hash: 46068c4674e065ce6e4a9e6aace91ba2f060032a
- commits:
    - author: Tomás Tormo
- commits:
    - footers:
        change-type: minor
- commits:
    - footers:
        signed-off-by: Tomás Tormo <tomast@balena.io>
- commits:
    - subject: Improve image removal logging
- commits:
    - body: null
- version: 3.4.0
- date: 2020-06-25T16:52:32Z
- commits:
    - hash: ccd9cab74f400a665c0cf7905f928bb935c39a70
- commits:
    - author: Tomás Tormo
- commits:
    - footers:
        change-type: minor
- commits:
    - footers:
        signed-off-by: Tomás Tormo <tomast@balena.io>
- commits:
    - subject: Don't consider images in use
- commits:
    - body: null
- version: 3.3.2
- date: 2020-05-15T15:11:04Z
- commits:
    - hash: 0dc8c27e47ef931e515afe26beed6cd6236a08a7
- commits:
    - author: Tomás Tormo
- commits:
    - footers:
        change-type: patch
- commits:
    - footers:
        signed-off-by: Tomás Tormo <tomast@balena.io>
- commits:
    - subject: Emit removal metrics
- commits:
    - body: null
- commits:
    - hash: 7884f8ace324ac52a9ac9fc29105500dae2080e8
- commits:
    - author: Tomás Tormo
- commits:
    - footers:
        change-type: patch
- commits:
    - footers:
        signed-off-by: Tomás Tormo <tomast@balena.io>
- commits:
    - subject: Emit image removal metrics
- commits:
    - body: null
- version: 3.3.1
- date: 2020-05-15T07:29:10Z
- commits:
    - hash: 827e4b87980507b85af6aeae3dbc41ba5ad1e6e0
- commits:
    - author: Tomás Tormo
- commits:
    - footers:
        change-type: patch
- commits:
    - footers:
        signed-off-by: Tomás Tormo <tomast@balena.io>
- commits:
    - subject: Emit image removal metrics
- commits:
    - body: null
- version: 3.3.0
- date: 2020-05-14T09:35:22Z
- commits:
    - hash: 9b3785f9f294362de24048335b08ae6dac407a51
- commits:
    - author: Tomás Tormo
- commits:
    - footers:
        change-type: minor
- commits:
    - footers:
        signed-off-by: Tomás Tormo <tomast@balena.io>
- commits:
    - subject: Add image removal metrics
- commits:
    - body: null
- version: 3.2.0
- date: 2020-05-01T12:56:32Z
- commits:
    - hash: 1674373b4d68410ed1a8c322ca3cf9e754891523
- commits:
    - author: Tomás Tormo
- commits:
    - footers:
        change-type: minor
- commits:
    - footers:
        signed-off-by: Tomás Tormo <tomast@balena.io>
- commits:
    - subject: Enable removing images by digest
- commits:
    - body: null
- version: 3.1.1
- date: 2020-03-20T17:50:47Z
- commits:
    - hash: a9a534cdfeb59156774bfb823b2afb55002897f7
- commits:
    - author: Pagan Gazzard
- commits:
    - footers:
        change-type: patch
- commits:
    - subject: Fix checking if an image has repoTags
- commits:
    - body: null
- version: 3.1.0
- date: 2020-03-20T17:20:07Z
- commits:
    - hash: 40fe8d3c15e6679385989de777c2405dc343322e
- commits:
    - author: Pagan Gazzard
- commits:
    - footers:
        change-type: minor
- commits:
    - subject: Add option to attempt all garbage collection before throwing an error
- commits:
    - body: null
- version: 3.0.1
- date: 2020-03-20T14:09:45Z
- commits:
    - hash: 30c13f74fe41e7aa9ff8ffe28c7f82f2284e2d4b
- commits:
    - author: Pagan Gazzard
- commits:
    - footers:
        change-type: patch
- commits:
    - subject: Fix setting default mtimes for existing images at startup
- commits:
    - body: null
- version: 3.0.0
- date: 2020-03-17T15:48:23Z
- commits:
    - hash: 2162c7defd3dfb7a2e60fe5ad52e2be4a7fe8f3e
- commits:
    - author: Pagan Gazzard
- commits:
    - footers:
        change-type: major
- commits:
    - subject: Default existing images to an mtime of 0 when setting up mtime stream
- commits:
    - body: null
- version: 2.3.1
- date: 2020-03-17T14:56:58Z
- commits:
    - hash: 73716a293770e824125b6c075cb7a02b13705ce6
- commits:
    - author: Pagan Gazzard
- commits:
    - footers:
        change-type: patch
- commits:
    - subject: Add linting
- commits:
    - body: null
- commits:
    - hash: 09f51af96d49c73d5312a0167276cc72eaecaa78
- commits:
    - author: Pagan Gazzard
- commits:
    - subject: "CI: Switch to node 8 for tests"
- commits:
    - body: null
- version: 2.3.0
- date: 2020-03-17T14:10:46Z
- commits:
    - hash: 1d3fb063d867d8aedb5de36331b495d3947600ee
- commits:
    - author: Pagan Gazzard
- commits:
    - footers:
        change-type: minor
- commits:
    - subject: Publish compiled javascript rather than relying on runtime compilation
- commits:
    - body: null
- version: 2.2.0
- date: 2019-10-02T19:15:15Z
- commits:
    - hash: 4ae8b3ee37a8e923f2ba918531731ee711ceb1ef
- commits:
    - author: Pagan Gazzard
- commits:
    - footers:
        change-type: minor
- commits:
    - subject: Update docker-progress
- commits:
    - body: null
- version: 2.1.1
- date: 2018-04-18T11:51:59Z
- commits:
    - hash: f3a2d5055312001b82e950dec625c56661e20712
- commits:
    - author: Alexis Svinartchouk
- commits:
    - footers:
        change-type: patch
- commits:
    - subject: "Add follow: true to container.logs call"
- commits:
    - body: |-
        This makes it return a stream (which was the default behaviour before
        https://github.com/apocas/dockerode/commit/d9727f736e13ce33228a6ddb920e911bc1a9ee2a
        Connects-To: #21
- version: 2.1.0
- date: 2018-02-23T18:16:28Z
- commits:
    - hash: 5a446b5926a891f9c011d5138f42f49dede04b95
- commits:
    - author: Alexis Svinartchouk
- commits:
    - footers:
        change-type: minor
- commits:
    - subject: Remove images by their repoTags if they have some.
- commits:
    - body: "Connects-To: #19"
- version: 2.0.0
- date: 2018-02-23T16:09:10Z
- commits:
    - hash: 59b931ee85e9160676d9da0301e98cac198e4010
- commits:
    - author: Alexis Svinartchouk
- commits:
    - footers:
        change-type: patch
- commits:
    - subject: Update lodash
- commits:
    - body: "Connects-To: #17"
- commits:
    - hash: ea0dddbd973409287bb6d8f4e1b4f5eeba9d625e
- commits:
    - author: Alexis Svinartchouk
- commits:
    - footers:
        change-type: patch
- commits:
    - subject: Factorize GC tests, pull images sequentially
- commits:
    - body: "Connects-To: #17"
- commits:
    - hash: d0140e2da52e14afc82d7643e7e2295930a6a21c
- commits:
    - author: Alexis Svinartchouk
- commits:
    - footers:
        change-type: major
- commits:
    - subject: Match images with events by image ids and tags
- commits:
    - body: |-
        * dockerImageTree now has a second parameter: mtimes
        * annotateTree is removed
        * createTree always returns annotated trees
        Connects-To: #17
- commits:
    - hash: 80b058e8da34cb32057dc4a3e44e61ce2c99a54b
- commits:
    - author: Alexis Svinartchouk
- commits:
    - footers:
        change-type: patch
- commits:
    - subject: Remove the container we create to run `df`
- commits:
    - body: "Connects-To: #17"
- commits:
    - hash: d2a9606afb0380bcd08b22f00e45f18b91b12ae5
- commits:
    - author: Alexis Svinartchouk
- commits:
    - footers:
        change-type: major
- commits:
    - subject: Change garbageCollect logic
- commits:
    - body: |-
        The list of images to delete is created by:
        * getting all the leafs of the images tree
        * excluding the images being used by a container
        * sorting leafs by mtime asc and size desc
        * removing the first leaf image
        * repeat until the desired space is reclaimed
        garbageCollect changes:
        * no longer returns a boolean
        * throws an exception on the first image it can't remove
        The caller will need to restart garbageCollect if it throws (some images
        may have been added or deleted and the image tree needs to be fetched
        again).
        Connects-To: #17
- commits:
    - hash: 1827e54f5d5f28843143e710305ff519c690f4f7
- commits:
    - author: Alexis Svinartchouk
- commits:
    - footers:
        change-type: patch
- commits:
    - subject: Use nanoseconds
- commits:
    - body: "Connects-To: #17"
- version: 1.2.0
- date: 2017-11-03T20:27:42Z
- commits:
    - hash: 225363b4a25895ec6a63b43e8f4a34ca81028222
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: minor
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Probe for remote host architecture and use specific base image
- commits:
    - body: null
- version: 1.1.3
- date: 2017-11-03T17:33:14Z
- commits:
    - hash: df957e8cc9f6d4d9eaadff77ad044bd29617c445
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: patch
- commits:
    - footers:
        connects-to: "#13"
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Use docker-progress to pull requisite images
- commits:
    - body: |-
        The current method of pulling images did not always work in a production
        setting, meaning that remote docker hosts could not be probed for free
        space. This commit switches that method with docker-progress which is a
        lot more reliable than the old method.
- commits:
    - hash: e54924a2fb84ec96775d762b82c439d97fd44367
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: patch
- commits:
    - footers:
        connects-to: "#13"
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Don't version alpine image to ensure arch-specific image can be pulled
- commits:
    - body: null
- version: 1.1.2
- date: 2017-10-31T11:29:10Z
- commits:
    - hash: 82533f342ac6b7897cd8ed0736ab64bef18eaf5c
- commits:
    - author: Alexis Svinartchouk
- commits:
    - footers:
        change-type: patch
- commits:
    - subject: Use Bluebird as Promise for created Dockerode objects.
- commits:
    - body: "Connects-To: #11"
- version: 1.1.1
- date: 2017-10-26T13:24:20Z
- commits:
    - hash: f5dd31c0ee3a0b6cd1599b23af825a666b6b449c
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: patch
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Report size in bytes, and fix total space reporting
- commits:
    - body: null
- version: 1.1.0
- date: 2017-10-26T12:24:17Z
- commits:
    - hash: 1f89990ea3cb02ea827f7d2fe4f23e61983696a6
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: minor
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Add a disk usage method which will work on remote hosts
- commits:
    - body: |-
        It works by running a command on the alpine image, which checks
        the free space on the `/` filesystem.
- version: 1.0.0
- date: 2017-10-26T10:04:00Z
- commits:
    - hash: 0eaa799c278fffcb728863e44bbc4e4979b4f2fc
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: major
- commits:
    - footers:
        connects-to: "#7"
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Export garbage collection as a class to allow multiple instances
- commits:
    - body: |-
        This means that the garbage collector can be used with several docker
        daemons in parallel, without worrying about interaction between the two.
- version: 0.1.0
- date: 2017-07-26T11:49:20Z
- commits:
    - hash: a0aeccea1f717852337aa4938c622c94c9b1f76a
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: patch
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Expose garbageCollect function to callers
- commits:
    - body: null
- commits:
    - hash: 932c639287dcf462530894c764a34360e87e1859
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: patch
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Report when image failed to be removed
- commits:
    - body: null
- commits:
    - hash: 1471ed738614d4bff4d0db5f1e161656c534fef1
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: patch
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Fix bug where undefined error would occur if no images were present
- commits:
    - body: |-
        The tree was undefined in the case where there was no images, this
        commit fixes that.
- commits:
    - hash: ccd3736d2553fcf28dfc0df3ea44d1136fc0ef7e
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: patch
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Add garbageCollect tests
- commits:
    - body: |-
        * Also add docker-progress as devDependency
        * Also add circle.yml file
- commits:
    - hash: ec06eab570732d29caf43215581e8f7ec88d4b71
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: patch
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Use dockerode's inbuilt promise interface
- commits:
    - body: Also propagate CircleCI connection info
- commits:
    - hash: 635d8693bc5fe55298c2ac9e3fba447143abedae
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: minor
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Switch to v2 of circleCI
- commits:
    - body: null
- commits:
    - hash: 12d8833a4cc892f2d6be2b0f68b5c2bfb75ffd21
- commits:
    - author: Cameron Diver
- commits:
    - subject: v0.1.0
- commits:
    - body: null
- version: 0.0.2
- date: 2017-07-13T20:38:56Z
- commits:
    - hash: ac91be58cbcab53ea533fa18608ee63055d3b610
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: patch
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Minor bugfixes for initial release
- commits:
    - body: |-
        * Fix typo in garbageCollect function
        * Also add undefined check to saneRepoTags
        * Also fixed incorrect usage of `docker` module
- version: 0.0.1
- date: 2017-07-12T14:54:29Z
- commits:
    - hash: 271c7048753f8636018b5036ec5b55795c3fda02
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        signed-off-by: Cameron Diver <cameron@resin.io>
- commits:
    - subject: Add CHANGELOG for versionbot integration
- commits:
    - body: null
- commits:
    - hash: c543b6ecf4133934fd1f79d04a9b22009d0ca865
- commits:
    - author: Cameron Diver
- commits:
    - footers:
        change-type: patch
- commits:
    - subject: Implement garbageCollect function and fix typos
- commits:
    - body: |-
        The garbageCollect function now, given a list of candidate images,
        selects and removes the LRU images to regain the desired amount of
        space. Fix typos in function calls.
- commits:
    - hash: 54a31ae8fd32bd1b9b9241e3a1a0bddc3f5bcaf4
- commits:
    - author: Petros Angelatos
- commits:
    - footers:
        signed-off-by: Petros Angelatos <petrosagg@gmail.com>
- commits:
    - subject: move docker initialisation in its own module
- commits:
    - body: null
