Class: Homebrew::Livecheck::Strategy::GithubLatest
- Inherits:
-
Object
- Object
- Homebrew::Livecheck::Strategy::GithubLatest
- Defined in:
- brew/Library/Homebrew/livecheck/strategy/github_latest.rb
Overview
The GithubLatest strategy identifies versions of software at github.com by checking a repository’s “latest” release page.
GitHub URLs take a few different formats:
https://github.com/example/example/releases/download/1.2.3/example-1.2.3.tar.gz
https://github.com/example/example/archive/v1.2.3.tar.gz
https://github.com/downloads/example/example/example-1.2.3.tar.gz
A repository’s /releases/latest
URL normally redirects to a release
tag (e.g., /releases/tag/1.2.3
). When there isn’t a “latest” release,
it will redirect to the /releases
page.
This strategy should only be used when we know the upstream repository
has a “latest” release and the tagged release is appropriate to use
(e.g., “latest” isn’t wrongly pointing to an unstable version, not
picking up the actual latest version, etc.). The strategy can only be
applied by using strategy :github_latest
in a livecheck
block.
The default regex identifies versions like 1.2.3
/v1.2.3
in href
attributes containing the tag URL (e.g.,
/example/example/releases/tag/v1.2.3
). This is a common tag format
but a modified regex can be provided in a livecheck
block to override
the default if a repository uses a different format (e.g.,
example-1.2.3
, 1.2.3d
, 1.2.3-4
, etc.).
Constant Summary collapse
- NICE_NAME =
"GitHub - Latest"
- PRIORITY =
A priority of zero causes livecheck to skip the strategy. We do this for Homebrew::Livecheck::Strategy::GithubLatest so we can selectively apply the strategy using
strategy :github_latest
in alivecheck
block. 0
- URL_MATCH_REGEX =
The
Regexp
used to determine if the strategy applies to the URL. %r{ ^https?://github\.com /(?:downloads/)?(?<username>[^/]+) # The GitHub username /(?<repository>[^/]+) # The GitHub repository name }ix.freeze
Class Method Summary collapse
-
.find_versions(url, regex = nil, &block) ⇒ Hash
Generates a URL and regex (if one isn’t provided) and passes them to PageMatch.find_versions to identify versions in the content.
-
.match?(url) ⇒ Boolean
Whether the strategy can be applied to the provided URL.
Class Method Details
.find_versions(url, regex = nil, &block) ⇒ Hash
Generates a URL and regex (if one isn’t provided) and passes them to PageMatch.find_versions to identify versions in the content.
63 64 65 66 67 68 69 70 71 72 73 |
# File 'brew/Library/Homebrew/livecheck/strategy/github_latest.rb', line 63 def self.find_versions(url, regex = nil, &block) match = url.sub(/\.git$/i, "").match(URL_MATCH_REGEX) # Example URL: `https://github.com/example/example/releases/latest` page_url = "https://github.com/#{match[:username]}/#{match[:repository]}/releases/latest" # The default regex is the same for all URLs using this strategy regex ||= %r{href=.*?/tag/v?(\d+(?:\.\d+)+)["' >]}i PageMatch.find_versions(page_url, regex, &block) end |
.match?(url) ⇒ Boolean
Whether the strategy can be applied to the provided URL.
53 54 55 |
# File 'brew/Library/Homebrew/livecheck/strategy/github_latest.rb', line 53 def self.match?(url) URL_MATCH_REGEX.match?(url) end |