Skip to content

Instantly share code, notes, and snippets.

@Wonno
Created September 11, 2025 18:06
Show Gist options
  • Select an option

  • Save Wonno/d5296c6ee5ffb4b5dd85fa116d13dd18 to your computer and use it in GitHub Desktop.

Select an option

Save Wonno/d5296c6ee5ffb4b5dd85fa116d13dd18 to your computer and use it in GitHub Desktop.
Retrieve greatest Semantic Release version from Github releases page

Github Semver Release Query

Purpose:
Retrieve greatest semantic version from any Github releases page.

Preconditions

JQ-Selector

Full jq selector with comments.

curl -sSf "$RELEASE_URL" \
| jq -r '
[.[].tag_name
	| select (contains("-") | not) # no pre-release
	| select (contains("+") | not) # no builds 
]
|sort_by(
  # "Build metadata MUST be ignored when determining version precedence"
  # https://semver.org/#spec-item-10
  split("+")[0]
  # split core cersion from pre-release 
  # https://semver.org/#spec-item-9
  |split("-")
  # split core version to major minor patch and do type conversion
  |(.[0]|split(".")|map(tonumber? // .)) as $version_core
  # recombine pre-release part
  |(.[1:]|join("-")
  # "Precedence [..] MUST be determined by comparing each dot separated identifier"
  # https://semver.org/#spec-item-11 (4)
	|split(".")|map(tonumber? // .)
	) as $pre_release
  # sort by version core
  |$version_core,
  # "a pre-release version has lower precedence than a normal version"
  # https://semver.org/#spec-item-11 (3)
  ($pre_release|length)==0,
  # sort by pre-release
  $pre_release
) 
# Latest is greatest
| last'

Example

💡Condensed variant without comments; querying the latest version of Joomla Content Management System

RELEASE_URL=https://api.github.com/repos/joomla/joomla-cms/releases

curl -sSf "${RELEASE_URL}" |jq -r '
[.[].tag_name|select (contains("-")|not)|select(contains("+")|not)]
|sort_by(split("+")[0]|split("-") 
|(.[0]|split(".")|map(tonumber? // .)) as $version_core  
|(.[1:]|join("-")|split(".")|map(tonumber? // .)) as $pre_release
|$version_core,($pre_release|length)==0,$pre_release)|last'

Result: (Thu Sep 11 2025)

5.3.3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment