View Source BeamMeta.Release.Elixir (BeamMeta v0.1.0)

Functions for retrieving information related to Elixir releases.

This module does not deal with releases prior to version 1.0.0.

Link to this section Summary

Types

A map that information related to a release in GitHub.

A release version.

A release version requirement.

Functions

Returns the latest stable Elixir version.

Returns a map with all the prereleases since Elixir v1.0.0.

Returns a map which contains all the information that we find relevant from releases data.

Returns a map which contains all the information that we find relevant from releases data that matches the elixir_version_requirement.

Returns a map with only final releases since Elixir v1.0.0.

Returns a list with all the Elixir versions since v1.0.0.

Returns a list Elixir versions since v1.0.0, according to kind.

Link to this section Types

Specs

release_data() ::
  BeamMeta.nonempty_keyword(
    version_key :: atom(),
    %{
      assets: [
        %{
          content_type: String.t(),
          created_at: DateTime.t(),
          id: non_neg_integer(),
          json_url: String.t(),
          name: String.t(),
          size: non_neg_integer(),
          state: String.t(),
          url: String.t()
        },
        ...
      ],
      created_at: DateTime.t(),
      id: non_neg_integer(),
      json_url: String.t(),
      prerelease?: boolean(),
      published_at: DateTime.t(),
      tarball_url: String.t(),
      url: String.t(),
      version: Version.t(),
      zipball_url: String.t()
    }
  )

A map that information related to a release in GitHub.

This information is originally provided by BeamLangsMetaData.elixir_releases/0 and is transformed.

Specs

version() :: Version.t() | String.t()

A release version.

It could it be a Version.t/0 or a string representation of this one, for example: #Version<1.0.0> or "1.13.0".

Specs

version_requirement() :: Version.Requirement.t() | String.t()

A release version requirement.

It could it be a Version.Requirement.t/0 or a string representation of this one, for example: #Version.Requirement<"~> 24.0"> or "~> 1.13".

Link to this section Functions

Specs

latest_version() :: Version.t()

Returns the latest stable Elixir version.

Specs

prereleases() :: release_data()

Returns a map with all the prereleases since Elixir v1.0.0.

Examples

> BeamMeta.Release.Elixir.prereleases()
%{
  "1.10.0-rc.0" => %{
    assets: [
      %{
        content_type: "application/zip",
        created_at: ~U[2020-01-07 15:08:43Z],
        id: 17188069,
        json_url: "https://api.github.com/repos/elixir-lang/elixir/releases/assets/17188069",
        name: "Docs.zip",
        size: 2119178,
        state: "uploaded",
        url: "https://github.com/elixir-lang/elixir/releases/download/v1.10.0-rc.0/Docs.zip"
      },
      %{
        content_type: "application/zip",
        created_at: ~U[2020-01-07 15:08:47Z],
        id: 17188070,
        json_url: "https://api.github.com/repos/elixir-lang/elixir/releases/assets/17188070",
        name: "Precompiled.zip",
        size: 5666120,
        state: "uploaded",
        url: "https://github.com/elixir-lang/elixir/releases/download/v1.10.0-rc.0/Precompiled.zip"
      }
    ],
    created_at: ~U[2020-01-07 14:10:04Z],
    id: 22650172,
    json_url: "https://api.github.com/repos/elixir-lang/elixir/releases/22650172",
    prerelease?: true,
    published_at: ~U[2020-01-07 15:09:40Z],
    tarball_url: "https://api.github.com/repos/elixir-lang/elixir/tarball/v1.10.0-rc.0",
    url: "https://github.com/elixir-lang/elixir/releases/tag/v1.10.0-rc.0",
    version: #Version<1.10.0-rc.0>,
    zipball_url: "https://api.github.com/repos/elixir-lang/elixir/zipball/v1.10.0-rc.0"
  },
  ...
}

Specs

release_data() :: release_data()

Returns a map which contains all the information that we find relevant from releases data.

Includes data from final releases and preseleases starting from Elixir version 1.0.0.

Examples

> BeamMeta.Release.Elixir.release_data()
%{
  "1.12.1" => %{
    assets: [
      %{
        content_type: "application/zip",
        created_at: ~U[2021-05-28 15:51:16Z],
        id: 37714034,
        json_url: "https://api.github.com/repos/elixir-lang/elixir/releases/assets/37714034",
        name: "Docs.zip",
        size: 5502033,
        state: "uploaded",
        url: "https://github.com/elixir-lang/elixir/releases/download/v1.12.1/Docs.zip"
      },
      %{
        content_type: "application/zip",
        created_at: ~U[2021-05-28 15:51:27Z],
        id: 37714052,
        json_url: "https://api.github.com/repos/elixir-lang/elixir/releases/assets/37714052",
        name: "Precompiled.zip",
        size: 6049663,
        state: "uploaded",
        url: "https://github.com/elixir-lang/elixir/releases/download/v1.12.1/Precompiled.zip"
      }
    ],
    created_at: ~U[2021-05-28 15:34:14Z],
    id: 43775368,
    json_url: "https://api.github.com/repos/elixir-lang/elixir/releases/43775368",
    prerelease?: false,
    published_at: ~U[2021-05-28 15:51:54Z],
    tarball_url: "https://api.github.com/repos/elixir-lang/elixir/tarball/v1.12.1",
    url: "https://github.com/elixir-lang/elixir/releases/tag/v1.12.1",
    version: #Version<1.12.1>,
    zipball_url: "https://api.github.com/repos/elixir-lang/elixir/zipball/v1.12.1"
  },
  ...
}
Link to this function

release_data(elixir_version_requirement, options \\ [])

View Source

Returns a map which contains all the information that we find relevant from releases data that matches the elixir_version_requirement.

Includes data from final releases and preseleases starting from Elixir version 1.0.0.

options are options supported by Version.match?/3. Currently the only key supported is :allow_pre which accepts true or false values. Defaults to true.

Examples

> BeamMeta.Release.Elixir.release_data("~> 1.12", allow_pre: false)
%{
  "1.12.1" => %{
    assets: [
      %{
        content_type: "application/zip",
        created_at: ~U[2021-05-28 15:51:16Z],
        id: 37714034,
        json_url: "https://api.github.com/repos/elixir-lang/elixir/releases/assets/37714034",
        name: "Docs.zip",
        size: 5502033,
        state: "uploaded",
        url: "https://github.com/elixir-lang/elixir/releases/download/v1.12.1/Docs.zip"
      },
      %{
        content_type: "application/zip",
        created_at: ~U[2021-05-28 15:51:27Z],
        id: 37714052,
        json_url: "https://api.github.com/repos/elixir-lang/elixir/releases/assets/37714052",
        name: "Precompiled.zip",
        size: 6049663,
        state: "uploaded",
        url: "https://github.com/elixir-lang/elixir/releases/download/v1.12.1/Precompiled.zip"
      }
    ],
    created_at: ~U[2021-05-28 15:34:14Z],
    id: 43775368,
    json_url: "https://api.github.com/repos/elixir-lang/elixir/releases/43775368",
    prerelease?: false,
    published_at: ~U[2021-05-28 15:51:54Z],
    tarball_url: "https://api.github.com/repos/elixir-lang/elixir/tarball/v1.12.1",
    url: "https://github.com/elixir-lang/elixir/releases/tag/v1.12.1",
    version: #Version<1.12.1>,
    zipball_url: "https://api.github.com/repos/elixir-lang/elixir/zipball/v1.12.1"
  },
  ...
}

Specs

releases() :: release_data()

Returns a map with only final releases since Elixir v1.0.0.

Examples

> BeamMeta.Release.Elixir.releases()
%{
    "1.12.1" => %{
      assets: [
        %{
          content_type: "application/zip",
          created_at: ~U[2021-05-28 15:51:16Z],
          id: 37714034,
          json_url: "https://api.github.com/repos/elixir-lang/elixir/releases/assets/37714034",
          name: "Docs.zip",
          size: 5502033,
          state: "uploaded",
          url: "https://github.com/elixir-lang/elixir/releases/download/v1.12.1/Docs.zip"
        },
        %{
          content_type: "application/zip",
          created_at: ~U[2021-05-28 15:51:27Z],
          id: 37714052,
          json_url: "https://api.github.com/repos/elixir-lang/elixir/releases/assets/37714052",
          name: "Precompiled.zip",
          size: 6049663,
          state: "uploaded",
          url: "https://github.com/elixir-lang/elixir/releases/download/v1.12.1/Precompiled.zip"
        }
      ],
      created_at: ~U[2021-05-28 15:34:14Z],
      id: 43775368,
      json_url: "https://api.github.com/repos/elixir-lang/elixir/releases/43775368",
      prerelease?: false,
      published_at: ~U[2021-05-28 15:51:54Z],
      tarball_url: "https://api.github.com/repos/elixir-lang/elixir/tarball/v1.12.1",
      url: "https://github.com/elixir-lang/elixir/releases/tag/v1.12.1",
      version: #Version<1.12.1>,
      zipball_url: "https://api.github.com/repos/elixir-lang/elixir/zipball/v1.12.1"
    },
    ...
  }

Specs

versions() :: [Version.t()]

Returns a list with all the Elixir versions since v1.0.0.

The list contains the versions in the Version.t/0 format, sorted ascendenly.

Examples:

> BeamMeta.Release.Elixir.versions()
[#Version<1.0.0>, #Version<1.0.1>, #Version<1.0.2>, #Version<1.0.3>, #Version<1.0.4>,
 #Version<1.0.5>, #Version<1.1.0>, #Version<1.1.1>, #Version<1.2.0>, #Version<1.2.1>,
 #Version<1.2.2>, #Version<1.2.3>, #Version<1.2.4>, #Version<1.2.5>, #Version<1.2.6>, ...]

Specs

versions(BeamMeta.release_kind()) :: [Version.t()]

Returns a list Elixir versions since v1.0.0, according to kind.

The list contains the versions in the Version.t/0 format, sorted ascendenly.

kind can be:

  • :release
  • :prerelease

Examples

> BeamMeta.Release.Elixir.versions(:release)
[#Version<1.0.0>, #Version<1.0.1>, #Version<1.0.2>, #Version<1.0.3>, #Version<1.0.4>,
 #Version<1.0.5>, #Version<1.1.0>, #Version<1.1.1>, #Version<1.2.0>, #Version<1.2.1>,
 #Version<1.2.2>, #Version<1.2.3>, #Version<1.2.4>, #Version<1.2.5>, #Version<1.2.6>, ...]

> BeamMeta.Release.Elixir.versions(:prerelease)
[#Version<1.3.0-rc.0>, #Version<1.3.0-rc.1>, #Version<1.4.0-rc.0>, #Version<1.4.0-rc.1>,
 #Version<1.5.0-rc.0>, #Version<1.5.0-rc.1>, #Version<1.5.0-rc.2>, #Version<1.6.0-rc.0>,
 #Version<1.6.0-rc.1>, #Version<1.7.0-rc.0>, #Version<1.7.0-rc.1>, #Version<1.8.0-rc.0>, ...]