feat: add binary release workflow, install script, and self-management CLI commands (#241)

This commit is contained in:
Ismail Pelaseyed authored and GitHub committed 2026-04-03 09:56:34 +02:00
1 parent 19150aeb01
commit 3f68af6f3a
12 files changed
+1097 -72

No files matched your search

+114
View File
@@ -0,0 +1,114 @@
name: Release
on:
push:
tags:
- "v*"
workflow_dispatch:
inputs:
version:
description: "Release version to publish (for example v1.1.4)"
required: true
permissions:
contents: write
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- runner: ubuntu-latest
build_output: grok
asset_name: grok-linux-x64
- runner: macos-13
build_output: grok
asset_name: grok-darwin-x64
- runner: macos-14
build_output: grok
asset_name: grok-darwin-arm64
- runner: windows-latest
build_output: grok.exe
asset_name: grok-windows-x64.exe
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: 1.3.11
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Compile standalone binary
run: bun build --compile --outfile "release/${{ matrix.build_output }}" ./src/index.ts
- name: Compute checksum (unix)
if: runner.os != 'Windows'
shell: bash
working-directory: release
run: |
cp "${{ matrix.build_output }}" "${{ matrix.asset_name }}"
shasum -a 256 "${{ matrix.asset_name }}" > "${{ matrix.asset_name }}.sha256"
- name: Compute checksum (windows)
if: runner.os == 'Windows'
shell: pwsh
working-directory: release
run: |
Copy-Item "${{ matrix.build_output }}" "${{ matrix.asset_name }}"
$hash = (Get-FileHash "${{ matrix.asset_name }}" -Algorithm SHA256).Hash.ToLower()
"$hash ${{ matrix.asset_name }}" | Out-File -Encoding ascii "${{ matrix.asset_name }}.sha256"
- name: Upload release artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.asset_name }}
path: |
release/${{ matrix.asset_name }}
release/${{ matrix.asset_name }}.sha256
publish:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Resolve release tag
shell: bash
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
tag="${{ github.event.inputs.version }}"
else
tag="${{ github.ref_name }}"
fi
tag="${tag#v}"
echo "RELEASE_TAG=v${tag}" >> "$GITHUB_ENV"
- name: Download all build artifacts
uses: actions/download-artifact@v4
with:
path: release-assets
- name: Merge checksums
shell: bash
run: |
cat release-assets/**/*.sha256 | sort > release-assets/checksums.txt
- name: Publish GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.RELEASE_TAG }}
generate_release_notes: true
files: |
release-assets/**/grok-linux-x64
release-assets/**/grok-darwin-x64
release-assets/**/grok-darwin-arm64
release-assets/**/grok-windows-x64.exe
release-assets/checksums.txt
+3
View File
@@ -29,3 +29,6 @@ jobs:
- name: Type Check
run: bun run typecheck
- name: Build standalone binary
run: bun run build:binary