Skip to content

overrideFeatureInstallOrder gets confused when higher-priority features have dependencies #1200

@dgholz

Description

@dgholz

I wanted to install features in a specific order, and used overrideFeatureInstallOrder to do that. I was surprised when the feature I wanted to install last installed first!

I have a minimal reproduction at https://github.com/dgholz/devcontainer-install-override

In the devcontainer.json file, I have:

{
    "image": "mcr.microsoft.com/devcontainers/base:trixie",
    "features": {
        "./features/use-tr": {},
        "./features/remove-tr": {}
    },
    "overrideFeatureInstallOrder": [
      "./features/use-tr",
      "./features/remove-tr"
    ]
}

But use-tr has a dependency on the common feature, and remove-tr does not. So when computeDependsOnInstallationOrder runs, it gets tripped up by

// If the node has no hard/soft dependencies, the node can always be installed.

use-tr gets excluded, and remove-tr has round priority 1 so gets installed before common (which has round priority 0)

The fix is to either set the round priority transitively (so common would get round priority 2 from use-tr); or to reverse the calculated priority ordering, so features with no dependencies would be installed first.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions