This is a macro that displays the latest version of each Atlassian product. Because it makes calls to the Atlassian Marketplace REST API, it takes a couple of seconds to complete.

The following image shows the macro form:

The following image shows the macro code:

import com.atlassian.confluence.xhtml.api.XhtmlContent
import com.atlassian.sal.api.component.ComponentLocator
import groovy.xml.MarkupBuilder
import groovyx.net.http.ContentType
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.Method

def httpBuilder = new HTTPBuilder("https://marketplace.atlassian.com")
def xhtmlContent = ComponentLocator.getComponent(XhtmlContent)

def rt = httpBuilder.request(Method.GET, ContentType.JSON) {
    uri.path = "/rest/1.0/applications"
}

List<Map> apps = rt.applications

def writer = new StringWriter()
def builder = new MarkupBuilder(writer)

builder.table {
    tbody {
        tr {
            th { p("App") }
            th { p("Latest version") }
        }

        apps.sort { it.order }.each { app ->
            rt = httpBuilder.request(Method.GET, ContentType.JSON) {
                uri.path = "/rest/1.0/applications/${app.key}"
            }

            tr {
                td { p(app.name) }
                td { p(rt.versions.isEmpty() ? "No Versions Found" : rt.versions.first().version) }
            }
        }
    }
}

xhtmlContent.convertStorageToView(writer.toString(), context)


The following image shows what the macro produces:

This macro would benefit from selecting the Lazy Loaded field.