View Source GitHubActions.Versions (GitHubActions v0.2.26)
Functions to select and filter lists and tables of versions.
The list of versions can have the following two forms.
- A simple list:
["1", "2.0", "2.1", "3", "3.1", "3.1.1"]
- A table as list of keyword lists with compatible versions:
[ [a: ["1.0.0"], b: ["1.0", "1.1", "1.2"]], [a: ["2.0.0"], b: ["1.2", "2.0"]] ]
Summary
Functions
Returns the versions of key
that are compatible with to
.
Returns true
if the given version1
is compatible to version2
.
Expands the given versions
.
Filters the list of versions
by the given requirement
.
Returns the versions from the config.
Returns all versions for key
from a list of compatible versions.
Returns the incompatible versions between versions1
and versions2
.
Returns true if versions1
has an intersection with versions2
.
Returns the latest version from the configured versions list.
Returns the latest version from the configured versions
table by the given
key
or from the given versions
list.
Returns the latest version from a versions
table by the given key
.
Returns the latest major versions from the configured versions list.
Returns the latest major versions from the configured versions
table by the
given key
or from the given versions
list.
Returns the latest major versions from a versions
table by the given key
.
Returns the latest minor versions from the configured versions list.
Returns the latest minor versions from the configured versions
table by the
given key
or from the given versions
list.
Returns the latest minor versions from a versions
table by the given key
.
Returns the versions matrix for the given requirements.
Returns true if versions
contains the given version
.
Sorts the given versions
.
Removes all duplicated versions.
Types
@type key() :: atom()
@type versions() :: versions_list() | versions_table()
@type versions_list() :: [GitHubActions.Version.version()]
@type versions_table() :: [keyword(GitHubActions.Version.version())]
Functions
@spec compatible(versions(), key(), [{key(), GitHubActions.Version.version()}]) :: [ GitHubActions.Version.t() ]
Returns the versions of key
that are compatible with to
.
Examples
iex> otp = Versions.compatible(:otp, elixir: "1.6.6")
iex> Enum.map(otp, &to_string/1)
["19.0", "19.1", "19.2", "19.3", "20.0", "20.1", "20.2", "20.3", "21.0",
"21.1", "21.2", "21.3"]
iex> elixir = Versions.compatible(:elixir, otp: "20.3")
iex> Enum.map(elixir, &to_string/1)
["1.4.5", "1.5.0", "1.5.1", "1.5.2", "1.5.3", "1.6.0", "1.6.1", "1.6.2",
"1.6.3", "1.6.4", "1.6.5", "1.6.6", "1.7.0", "1.7.1", "1.7.2", "1.7.3",
"1.7.4", "1.8.0", "1.8.1", "1.8.2", "1.9.0", "1.9.1", "1.9.2", "1.9.3",
"1.9.4"]
iex> :otp |> Versions.compatible(elixir: "1.10.0") |> Enum.count()
8
iex> :otp |> Versions.compatible(elixir: "1.10.0/4") |> Enum.count()
12
iex> :otp |> Versions.compatible(elixir: ["1.10.0/4", "1.11.0/4"]) |> Enum.count()
16
iex> Versions.compatible([], :otp, elixir: "1.6.6")
** (ArgumentError) compatible/3 expected a table of versions as first argument, got: []
@spec compatible?( versions(), [{key(), GitHubActions.Version.version()}] ) :: boolean()
Returns true
if the given version1
is compatible to version2
.
Examples
iex> Versions.compatible?(elixir: "1.12.3", otp: "24.0")
true
iex> Versions.compatible?(elixir: "1.6.0", otp: "24.0")
false
iex> versions = [
...> [a: ["1.0.0"], b: ["1.0", "1.1", "1.2"]],
...> [a: ["2.0.0"], b: ["1.2", "2.0"]]
...> ]
iex> Versions.compatible?(versions, a: "1", b: "1.2")
true
iex> Versions.compatible?(versions, a: "2", b: "1.2")
true
iex> Versions.compatible?(versions, a: "2", b: "1")
false
iex> Versions.compatible?([], a: "1", b: "2")
** (ArgumentError) compatible?/2 expected a table of versions as first argument, got: []
Expands the given versions
.
Examples
iex> versions = Versions.expand(["1.0/2"])
iex> Enum.map(versions, &to_string/1)
["1.0", "1.1", "1.2"]
iex> versions = Versions.expand([
...> [a: ["1.0/2"], b: ["1.0.0/2"]],
...> [a: ["1.1.0/1"], b: ["2.0.0/2"]]
...> ])
iex> versions |> Enum.at(1) |> Keyword.get(:a) |> Enum.map(&to_string/1)
["1.1.0", "1.1.1"]
iex> versions |> Enum.at(1) |> Keyword.get(:b) |> Enum.map(&to_string/1)
["2.0.0", "2.0.1", "2.0.2"]
iex> Versions.expand([:a])
** (ArgumentError) expand/1 expected a list of versions, or table of versions got: [:a]
@spec filter(versions_list(), String.t()) :: [GitHubActions.Version.t()]
Filters the list of versions
by the given requirement
.
Examples
iex> versions = ["1", "1.1.0/5", "1.2.0/1", "1.3", "2.0/1"]
iex> Versions.filter(versions, "~> 1.2")
[
%Version{major: 1, minor: 2, patch: 0},
%Version{major: 1, minor: 2, patch: 1},
%Version{major: 1, minor: 3}
]
iex> Versions.filter(versions, ">= 1.3.0")
[
%Version{major: 1, minor: 3},
%Version{major: 2, minor: 0},
%Version{major: 2, minor: 1}
]
iex> Versions.filter([:b, :a], "> 1.0.0")
** (ArgumentError) filter/2 expected a list of versions, got: [:b, :a]
iex> Versions.filter(["1", "2", "3"], "> 1")
** (Version.InvalidRequirementError) invalid requirement: "> 1"
@spec from_config() :: versions()
Returns the versions from the config.
@spec get(versions_table(), key()) :: [GitHubActions.Version.t()]
Returns all versions for key
from a list of compatible versions.
This function raises a GitHubActions.InvalidVersionError
for an invalid
version.
Examples
iex> versions = [
...> [a: ["1.0.0"], b: ["1.0", "1.1", "1.2"]],
...> [a: ["2.0.0"], b: ["1.2", "2.0"]]
...> ]
iex> versions = Versions.get(versions, :b)
iex> hd versions
%GitHubActions.Version{major: 1, minor: 0}
iex> Enum.map(versions, &to_string/1)
["1.0", "1.1", "1.2", "2.0"]
iex> Versions.get([a: "1"], :a)
** (ArgumentError) get/2 expected a table of versions, got: [a: "1"]
Returns the incompatible versions between versions1
and versions2
.
Examples
iex> versions = Versions.incompatible(
...> elixir: ["1.9.4", "1.10.4", "1.11.4", "1.12.3"],
...> otp: ["21.3", "22.3", "23.3", "24.0"]
...> )
iex> for [{k1, v1}, {k2, v2}] <- versions do
...> [{k1, to_string(v1)}, {k2, to_string(v2)}]
...> end
[
[elixir: "1.9.4", otp: "23.3"],
[elixir: "1.9.4", otp: "24.0"],
[elixir: "1.10.4", otp: "24.0"],
[elixir: "1.12.3", otp: "21.3"]
]
@spec intersection?(versions_list(), versions_list()) :: boolean()
Returns true if versions1
has an intersection with versions2
.
Examples
iex> Versions.intersection?(["1.0.0/5"], ["1.0.4/7"])
true
iex> Versions.intersection?(["1.0.0/5"], ["2.0.0/7"])
false
iex> Versions.intersection?(["1.0.0/5"], [:a])
** (ArgumentError) intersection?/2 expected two list of versions, got: ["1.0.0/5"], [:a]
@spec latest() :: GitHubActions.Version.t()
Returns the latest version from the configured versions list.
Examples
iex> Config.config(:versions, ["1.0.0/2", "1.1.0/3"])
iex> Versions.latest()
%GitHubActions.Version{major: 1, minor: 1, patch: 3}
@spec latest(versions() | key()) :: GitHubActions.Version.t()
Returns the latest version from the configured versions
table by the given
key
or from the given versions
list.
Examples
iex> Versions.latest(["1.0.0/2", "1.1.0/3"])
%GitHubActions.Version{major: 1, minor: 1, patch: 3}
iex> Config.config(:versions, [
...> [a: ["1.0.0/2", "1.1.0/3"], b: ["2.0/5"]],
...> [a: ["1.2.0/1", "1.3.0/4"], b: ["3.0/5"]]
...> ])
iex> Versions.latest(:a)
%GitHubActions.Version{major: 1, minor: 3, patch: 4}
iex> Versions.latest(["foo"])
** (GitHubActions.InvalidVersionError) invalid version: "foo"
iex> Versions.latest([a: "1"])
** (ArgumentError) latest/1 expected a list or table of versions or a key, got: [a: "1"]
iex> Versions.latest(:elixir)
%GitHubActions.Version{major: 1, minor: 17, patch: 3}
iex> Versions.latest(:otp)
%GitHubActions.Version{major: 27, minor: 2}
@spec latest(versions_table(), key()) :: GitHubActions.Version.t()
Returns the latest version from a versions
table by the given key
.
Examples
iex> Versions.latest([
...> [a: ["1.0.0/2"], b: ["1.0.0/3"]],
...> [a: ["1.1.0/3"], b: ["1.1.0/4"]]
...> ], :a)
%GitHubActions.Version{major: 1, minor: 1, patch: 3}
iex> Versions.latest([a: "1"], :a)
** (ArgumentError) latest/1 expected a table of versions, got: [a: "1"]
@spec latest_major() :: [GitHubActions.Version.t()]
Returns the latest major versions from the configured versions list.
Examples
iex> Config.config(:versions, ["1.0.0/2", "1.1.0/4", "2.0.0/3"])
iex> Versions.latest_major() |> Enum.map(&to_string/1)
["1.1.4", "2.0.3"]
@spec latest_major(versions_list() | key()) :: [GitHubActions.Version.t()]
Returns the latest major versions from the configured versions
table by the
given key
or from the given versions
list.
Examples
iex> major_versions = Versions.latest_major(["1.0.0/2", "1.1.0/3", "2.0.0/2"])
iex> Enum.map(major_versions, &to_string/1)
["1.1.3", "2.0.2"]
iex> Config.config(:versions, [
...> [a: ["1.0.0/2", "1.1.0/3"], b: ["2.0/5"]],
...> [a: ["2.2.0/1", "2.3.0/4"], b: ["3.0/5"]]
...> ])
iex> major_versions = Versions.latest_major(:a)
iex> Enum.map(major_versions, &to_string/1)
["1.1.3", "2.3.4"]
iex> Versions.latest_major(["foo"])
** (GitHubActions.InvalidVersionError) invalid version: "foo"
iex> Versions.latest_major([a: "1"])
** (ArgumentError) latest_major/1 expected a list or table of versions or a key, got: [a: "1"]
iex> major_versions = Versions.latest_major(:elixir)
iex> Enum.map(major_versions, &to_string/1)
["1.17.3"]
iex> major_versions = Versions.latest_major(:otp)
iex> Enum.map(major_versions, &to_string/1)
["17.5", "18.3", "19.3", "20.3", "21.3", "22.3", "23.3", "24.3", "25.3", "26.2", "27.2"]
@spec latest_major(versions_table(), key()) :: [GitHubActions.Version.t()]
Returns the latest major versions from a versions
table by the given key
.
Examples
iex> major_versions = Versions.latest_major([
...> [a: ["1.0.0/2"], b: ["1.0.0/3"]],
...> [a: ["2.0.0/3"], b: ["2.0.0/4"]]
...> ], :a)
iex> Enum.map(major_versions, &to_string/1)
["1.0.2", "2.0.3"]
iex> Versions.latest_major([a: "1"], :a)
** (ArgumentError) latest_major/1 expected a table of versions, got: [a: "1"]
@spec latest_minor() :: [GitHubActions.Version.t()]
Returns the latest minor versions from the configured versions list.
Examples
iex> Config.config(:versions, ["1.0.0/2", "1.1.0/4", "2.0.0/3"])
iex> Versions.latest_minor() |> Enum.map(&to_string/1)
["1.0.2", "1.1.4", "2.0.3"]
@spec latest_minor(versions_list() | key()) :: [GitHubActions.Version.t()]
Returns the latest minor versions from the configured versions
table by the
given key
or from the given versions
list.
Examples
iex> minor_versions = Versions.latest_minor(["1.0.0/2", "1.1.0/3"])
iex> Enum.map(minor_versions, &to_string/1)
["1.0.2", "1.1.3"]
iex> Config.config(:versions, [
...> [a: ["1.0.0/2", "1.1.0/3"], b: ["2.0/5"]],
...> [a: ["1.2.0/1", "1.3.0/4"], b: ["3.0/5"]]
...> ])
iex> minor_versions = Versions.latest_minor(:a)
iex> Enum.map(minor_versions, &to_string/1)
["1.0.2", "1.1.3", "1.2.1", "1.3.4"]
iex> Versions.latest_minor(["foo"])
** (GitHubActions.InvalidVersionError) invalid version: "foo"
iex> Versions.latest_minor([a: "1"])
** (ArgumentError) latest_minor/1 expected a list or table of versions or a key, got: [a: "1"]
iex> minor_versions = Versions.latest_minor(:elixir)
iex> Enum.map(minor_versions, &to_string/1)
["1.0.5", "1.1.1", "1.2.6", "1.3.4", "1.4.5", "1.5.3", "1.6.6", "1.7.4",
"1.8.2", "1.9.4", "1.10.4", "1.11.4", "1.12.3", "1.13.4", "1.14.5",
"1.15.8", "1.16.3", "1.17.3"]
iex> minor_versions = Versions.latest_minor(:otp)
iex> Enum.map(minor_versions, &to_string/1)
["17.0", "17.1", "17.2", "17.3", "17.4", "17.5", "18.0", "18.1", "18.2",
"18.3", "19.0", "19.1", "19.2", "19.3", "20.0", "20.1", "20.2", "20.3",
"21.0", "21.1", "21.2", "21.3", "22.0", "22.1", "22.2", "22.3", "23.0",
"23.1", "23.2", "23.3", "24.0", "24.1", "24.2", "24.3", "25.0", "25.1",
"25.2", "25.3", "26.0", "26.1", "26.2", "27.0", "27.1", "27.2"]
@spec latest_minor(versions_table(), key()) :: [GitHubActions.Version.t()]
Returns the latest minor versions from a versions
table by the given key
.
Examples
iex> minor_versions = Versions.latest_minor([
...> [a: ["1.0.0/2"], b: ["1.0.0/3"]],
...> [a: ["1.1.0/3"], b: ["1.1.0/4"]]
...> ], :a)
iex> Enum.map(minor_versions, &to_string/1)
["1.0.2", "1.1.3"]
iex> Versions.latest_minor([a: "1"], :a)
** (ArgumentError) latest_minor/1 expected a table of versions, got: [a: "1"]
Returns the versions matrix for the given requirements.
Examples
iex> matrix = Versions.matrix(elixir: ">= 1.12.0", otp: ">= 22.0.0")
iex> Enum.map(matrix[:elixir], &to_string/1)
["1.12.3", "1.13.4", "1.14.5", "1.15.8", "1.16.3", "1.17.3"]
iex> Enum.map(matrix[:otp], &to_string/1)
["22.3", "23.3", "24.3", "25.3", "26.2", "27.2"]
iex> for [{k1, v1}, {k2, v2}] <- matrix[:exclude] do
...> [{k1, to_string(v1)}, {k2, to_string(v2)}]
...> end
[
[elixir: "1.12.3", otp: "25.3"],
[elixir: "1.12.3", otp: "26.2"],
[elixir: "1.12.3", otp: "27.2"],
[elixir: "1.13.4", otp: "26.2"],
[elixir: "1.13.4", otp: "27.2"],
[elixir: "1.14.5", otp: "22.3"],
[elixir: "1.14.5", otp: "27.2"],
[elixir: "1.15.8", otp: "22.3"],
[elixir: "1.15.8", otp: "23.3"],
[elixir: "1.15.8", otp: "27.2"],
[elixir: "1.16.3", otp: "22.3"],
[elixir: "1.16.3", otp: "23.3"],
[elixir: "1.16.3", otp: "27.2"],
[elixir: "1.17.3", otp: "22.3"],
[elixir: "1.17.3", otp: "23.3"],
[elixir: "1.17.3", otp: "24.3"]
]
iex> Versions.matrix([], elixir: ">= 1.9.0", otp: ">= 22.0.0")
** (ArgumentError) matrix/1 expected a table of versions as first argument, got: []
@spec member?(versions_list(), GitHubActions.Version.version()) :: boolean()
Returns true if versions
contains the given version
.
Examples
iex> versions = ["1.0.0", "1.1.0", "1.1.1"]
iex> Versions.member?(versions, "1.1")
true
iex> Versions.member?(versions, "1.0.1")
false
iex> Versions.member?([a: "1"], "1.0.0")
** (ArgumentError) member?/2 expected a list of versions, got: [a: "1"]
@spec sort([GitHubActions.Version.version()]) :: [GitHubActions.Version.version()]
Sorts the given versions
.
Examples
iex> versions = ["1.1", "11.1", "1.0", "2.1", "2.0.1", "2.0.0"]
iex> versions = Versions.sort(versions)
iex> Enum.map(versions, &to_string/1)
["1.0", "1.1", "2.0.0", "2.0.1", "2.1", "11.1"]
iex> Versions.sort([a: ["1", "2"]])
** (ArgumentError) sort/2 expected a list or table of versions, got: [a: ["1", "2"]]
Removes all duplicated versions.
Examples
iex> versions = Versions.expand(["1.0.0/4", "1.0.2/5"])
iex> versions |> Versions.uniq() |> Enum.map(&to_string/1)
["1.0.0", "1.0.1", "1.0.2", "1.0.3", "1.0.4", "1.0.5"]
iex> Versions.uniq([:a])
** (ArgumentError) uniq/1 expected a list or table of versions, got: [:a]