hermit icon indicating copy to clipboard operation
hermit copied to clipboard

First class support for package variants

Open alecthomas opened this issue 2 years ago • 0 comments

Sometimes we want to create a variant of a package, with different envars, deps, etc. eg.

The mainline package:

platform amd64 {
  source = "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-${version}-${os}-x86_64.tar.gz"
}

platform arm64 {
  source = "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-${version}-${os}-arm.tar.gz"
}

version "369.0.0" {
  requires = ["python3"]
  env = {
    "CLOUDSDK_PYTHON": "python3",
  }
}

The variant, where we have to override source because ${version} will contain the semver metadata:

version "369.0.0+mlmt" {
  platform amd64 {
    source = "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-369.0.0-${os}-x86_64.tar.gz"
  }

  platform arm64 {
    source = "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-369.0.0-${os}-arm.tar.gz"
  }
}

This is not great.

I propose adding an optional variant attribute that will be appended to the version as semver metadata after interpolation. eg.

version "369.0.0" {
  variant = "mlmt"
}

alecthomas avatar Feb 14 '22 23:02 alecthomas