Skip to content

Latest commit

 

History

History
68 lines (45 loc) · 2.25 KB

VAR-TRANSFORMS.md

File metadata and controls

68 lines (45 loc) · 2.25 KB

Variable Transformations

Using var-transforms: in a melange config gives the ability to create a new variable from an existing one using regular expressions.

This can be useful when say an upstream project version that's used to fetch a tag or tarball is a nonstandard version format.

If you are using expand in the replace string, $1 or ${1}, your regex need to match all from left to right. If your package.version can be 1.2.3.4 or 1.2.3.4-1 your regex need to contemplate .* right characters.

Example:

In the case of Java, the OpenJDK project includes a + in the version see here.

Using one of these tags as an example: jdk-17.0.7+5

This version cannot be used by apk to resolve, as the + is classed as build information.

So the OpenJDK melange package.version should not contain the +, i.e.

package:
  name: openjdk-17
  version: 17.0.7.5

However, as we want to reuse the version as a variable when fetching the tarball, we need to transform this version to include the +.

For this we can use var-transforms:

var-transforms:
  - from: ${{package.version}}
    match: \.(\d+)$
    replace: +$1
    to: mangled-package-version

This instructs melange at build time to take the package.version variable, using a regex expression to match the third occurrence of . with +, and use the new value in a new variable called mangled-package-version.

We can now use the new variable in our fetch.

pipeline:
  - uses: fetch
    with:
      uri: https://github.com/openjdk/jdk17u/archive/refs/tags/jdk-${{vars.mangled-package-version}}.tar.gz

Other example:

In some case, you need to join two or more regex match subgroups with _. Here you must use ${1} instead of $1. More information here

If you like to change package.version from "1.3.6.8" to "1.3.6_8", a possible var-transform definition is:

var-transforms:
  - from: ${{package.version}}
    match: ^(\d+\.\d+\.\d+).(\d+).*
    replace: "${1}_${2}"
    to: mangled-version-binary

Using regular expressions can be difficult, here are some helpful sites when you create one: