grafana / grafana/github-datasource

Releases: emit a pre-rendered link field so annotation tooltips can show clickable links

Open
#760 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
310
Forks
70
Avg merge
2d 20h
Merged PRs (30d)
3

Description

### Use case

We use the **Releases** query type as a Grafana annotation source on dashboards, so deploys of a service show up as vertical markers on every panel. The natural next step from a marker is "take me to the release notes on GitHub" — i.e. a clickable link in the annotation tooltip pointing at the release page.

### Current behavior

The Releases frame exposes a `url` field containing the release page URL (e.g. `https://github.com/org/repo/releases/tag/v1`). With the annotation mapping

```json
"mappings": {
"time": { "source": "field", "value": "published_at" },
"text": { "source": "field", "value": "url" }
}
```

the tooltip shows the URL as plain text. It is **not** clickable.

### Why the obvious workarounds don't apply

- Grafana's annotation tooltip (`AnnotationTooltip2.tsx`) renders the `text` field via `dangerouslySetInnerHTML={{ __html: textUtil.sanitize(text) }}` and the surrounding CSS even styles `a` elements. So an HTML anchor like `v2026.05.29.2` in `text` would render as a clickable link.
- However, the GitHub plugin's Releases frame ([`pkg/github/releases.go`](https://github.com/grafana/github-datasource/blob/main/pkg/github/releases.go#L25-L39)) only emits plain string fields (`name`, `tag`, `url`, …).
- Grafana's standard annotation mapping (`standardAnnotationSupport.ts`) lets the user pick **one** field per annotation key (`time`, `text`, `tags`, …) — there is no template/concat support, so a user cannot produce `{tag}` from the existing fields.

The net effect: there is no user-side configuration that makes the link clickable.

### Requested change

Add one or more pre-formatted link fields to the Releases frame, e.g.:

- `html_link` — HTML anchor: `{tag}` (or `{name}` if non-empty, falling back to `{tag}`)
- `markdown_link` — markdown: `[{tag}]({url})`

Either is sufficient on its own. HTML is the safer bet because the annotation tooltip renders HTML directly; markdown would only help in places that run a markdown renderer.

Users could then pick `html_link` (or `markdown_link`) as the annotation `text` field and get a clickable, descriptively-labelled link in the tooltip.

### Scope

Releases is the immediate need (release annotations are a very common use case), but the same applies to:

- Tags
- Commits
- Pull requests
- Issues

…all of which are commonly used as annotation sources and all of which expose a URL but not a pre-formatted link.

### Alternatives considered

- **Switch to the Infinity datasource** to call the GitHub REST API and synthesize an `html_link` column — needs a GitHub PAT configured per Grafana instance and re-implements pagination, caching, etc. that this plugin already handles.
- **Auto-linkify bare URLs in Grafana itself** — would have to be filed against `grafana/grafana`, has wider implications, and doesn't help users who want `tag` as the link label rather than the raw URL.

A pre-rendered link field on the existing frame is the smallest, most local fix.

### Environment

- Grafana 12.3.3
- grafana-github-datasource (latest at time of filing)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.