detached 5b7cfea

feat: add setup-gordon composite GitHub Action

commit
5b7cfeab6e19bc83f008268f2505ae03cc212650
author
brice · · 2026-03-19 04:26 UTC
committer
brice · · 2026-03-19 04:26 UTC
parent
3433b85
signature
unsigned
1 file · +78 -0
A .github/actions/setup-gordon/action.yml +78 -0
@@ -0,0 +1,78 @@
1+name: 'Setup Gordon'
2+description: 'Install the Gordon CLI binary into the runner PATH'
3+author: 'Gordon Contributors'
4+
5+branding:
6+ icon: 'download-cloud'
7+ color: 'blue'
8+
9+inputs:
10+ version:
11+ description: 'Gordon version to install (e.g. v2.0.0 or latest)'
12+ required: false
13+ default: 'latest'
14+
15+outputs:
16+ version:
17+ description: 'The version of Gordon that was installed'
18+ value: ${{ steps.install.outputs.version }}
19+ path:
20+ description: 'Path to the installed Gordon binary'
21+ value: ${{ steps.install.outputs.path }}
22+
23+runs:
24+ using: 'composite'
25+ steps:
26+ - name: Install Gordon
27+ id: install
28+ shell: bash
29+ run: |
30+ set -euo pipefail
31+
32+ # Map RUNNER_OS to gordon OS identifier
33+ case "${RUNNER_OS}" in
34+ Linux) os="linux" ;;
35+ macOS) os="darwin" ;;
36+ *) echo "Unsupported OS: ${RUNNER_OS}" >&2; exit 1 ;;
37+ esac
38+
39+ # Map RUNNER_ARCH to gordon arch identifier
40+ case "${RUNNER_ARCH}" in
41+ X64) arch="amd64" ;;
42+ ARM64) arch="arm64" ;;
43+ *) echo "Unsupported architecture: ${RUNNER_ARCH}" >&2; exit 1 ;;
44+ esac
45+
46+ version="${{ inputs.version }}"
47+
48+ # Resolve 'latest' to an actual tag via redirect URL
49+ if [ "${version}" = "latest" ]; then
50+ redirect_url="$(curl -fsSL -o /dev/null -w '%{redirect_url}' "https://github.com/bnema/gordon/releases/latest")"
51+ version="${redirect_url##*/}"
52+ if [ -z "${version}" ]; then
53+ echo "Failed to resolve latest Gordon version" >&2
54+ exit 1
55+ fi
56+ fi
57+
58+ archive="gordon_${os}_${arch}.tar.gz"
59+ url="https://github.com/bnema/gordon/releases/download/${version}/${archive}"
60+ dest="/tmp/${archive}"
61+ install_path="/usr/local/bin/gordon"
62+
63+ echo "Installing Gordon ${version} (${os}/${arch}) from ${url}"
64+
65+ # Download the release archive
66+ curl -fsSL -o "${dest}" "${url}"
67+
68+ # Extract just the gordon binary and clean up
69+ tar -xzf "${dest}" -C /usr/local/bin/ gordon
70+ rm -f "${dest}"
71+
72+ # Make executable and verify
73+ chmod +x "${install_path}"
74+ gordon version
75+
76+ # Set outputs
77+ echo "version=${version}" >> "${GITHUB_OUTPUT}"
78+ echo "path=${install_path}" >> "${GITHUB_OUTPUT}"
@@ -0,0 +1,78 @@
1+name: 'Setup Gordon'
2+description: 'Install the Gordon CLI binary into the runner PATH'
3+author: 'Gordon Contributors'
4+
5+branding:
6+ icon: 'download-cloud'
7+ color: 'blue'
8+
9+inputs:
10+ version:
11+ description: 'Gordon version to install (e.g. v2.0.0 or latest)'
12+ required: false
13+ default: 'latest'
14+
15+outputs:
16+ version:
17+ description: 'The version of Gordon that was installed'
18+ value: ${{ steps.install.outputs.version }}
19+ path:
20+ description: 'Path to the installed Gordon binary'
21+ value: ${{ steps.install.outputs.path }}
22+
23+runs:
24+ using: 'composite'
25+ steps:
26+ - name: Install Gordon
27+ id: install
28+ shell: bash
29+ run: |
30+ set -euo pipefail
31+
32+ # Map RUNNER_OS to gordon OS identifier
33+ case "${RUNNER_OS}" in
34+ Linux) os="linux" ;;
35+ macOS) os="darwin" ;;
36+ *) echo "Unsupported OS: ${RUNNER_OS}" >&2; exit 1 ;;
37+ esac
38+
39+ # Map RUNNER_ARCH to gordon arch identifier
40+ case "${RUNNER_ARCH}" in
41+ X64) arch="amd64" ;;
42+ ARM64) arch="arm64" ;;
43+ *) echo "Unsupported architecture: ${RUNNER_ARCH}" >&2; exit 1 ;;
44+ esac
45+
46+ version="${{ inputs.version }}"
47+
48+ # Resolve 'latest' to an actual tag via redirect URL
49+ if [ "${version}" = "latest" ]; then
50+ redirect_url="$(curl -fsSL -o /dev/null -w '%{redirect_url}' "https://github.com/bnema/gordon/releases/latest")"
51+ version="${redirect_url##*/}"
52+ if [ -z "${version}" ]; then
53+ echo "Failed to resolve latest Gordon version" >&2
54+ exit 1
55+ fi
56+ fi
57+
58+ archive="gordon_${os}_${arch}.tar.gz"
59+ url="https://github.com/bnema/gordon/releases/download/${version}/${archive}"
60+ dest="/tmp/${archive}"
61+ install_path="/usr/local/bin/gordon"
62+
63+ echo "Installing Gordon ${version} (${os}/${arch}) from ${url}"
64+
65+ # Download the release archive
66+ curl -fsSL -o "${dest}" "${url}"
67+
68+ # Extract just the gordon binary and clean up
69+ tar -xzf "${dest}" -C /usr/local/bin/ gordon
70+ rm -f "${dest}"
71+
72+ # Make executable and verify
73+ chmod +x "${install_path}"
74+ gordon version
75+
76+ # Set outputs
77+ echo "version=${version}" >> "${GITHUB_OUTPUT}"
78+ echo "path=${install_path}" >> "${GITHUB_OUTPUT}"

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 7

Tags 106

↑↓ moveenter openesc close