Files
grok-cli/.github/workflows/release.yml
T
2026-04-03 10:05:44 +02:00

118 lines
3.3 KiB
YAML

name: Release
on:
push:
tags:
- "grok-dev@*"
workflow_dispatch:
inputs:
version:
description: "Release tag to publish (for example grok-dev@1.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
target: ""
- runner: macos-latest
build_output: grok
asset_name: grok-darwin-x64
target: --target=bun-darwin-x64
- runner: macos-latest
build_output: grok
asset_name: grok-darwin-arm64
target: ""
- runner: windows-latest
build_output: grok.exe
asset_name: grok-windows-x64.exe
target: ""
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 ${{ matrix.target }} --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
echo "RELEASE_TAG=${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