mirror of
https://github.com/cheikh2shift/godex.git
synced 2026-10-22 02:53:24 -05:00
149 lines
4.8 KiB
YAML
149 lines
4.8 KiB
YAML
name: Release to Snap Store
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
description: 'Version tag (e.g., v1.2.3)'
|
|
required: true
|
|
type: string
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
env:
|
|
SNAP_CHANNEL: stable
|
|
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_CREDENTIALS }}
|
|
|
|
jobs:
|
|
build-and-publish-snap:
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version-file: go.mod
|
|
|
|
- name: Get version
|
|
id: get_tag
|
|
run: |
|
|
TAG="${{ inputs.version }}"
|
|
if [ -z "$TAG" ]; then
|
|
TAG="${{ github.ref_name }}"
|
|
fi
|
|
echo "TAG=$TAG" >> $GITHUB_OUTPUT
|
|
echo "VERSION=${TAG#v}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Build Linux AMD64
|
|
env:
|
|
GOOS: linux
|
|
GOARCH: amd64
|
|
CGO_ENABLED: 0
|
|
TAG: ${{ steps.get_tag.outputs.TAG }}
|
|
VERSION: ${{ steps.get_tag.outputs.VERSION }}
|
|
run: |
|
|
mkdir -p dist
|
|
go build -ldflags="-s -w -X main.version=${VERSION} -X main.buildTime=$(date -u +"%Y-%m-%d_%H:%M:%S")" -o dist/godex-amd64 ./cmd/godex
|
|
|
|
- name: Build Linux ARM64
|
|
env:
|
|
GOOS: linux
|
|
GOARCH: arm64
|
|
CGO_ENABLED: 0
|
|
TAG: ${{ steps.get_tag.outputs.TAG }}
|
|
VERSION: ${{ steps.get_tag.outputs.VERSION }}
|
|
run: |
|
|
mkdir -p dist
|
|
go build -ldflags="-s -w -X main.version=${VERSION} -X main.buildTime=$(date -u +"%Y-%m-%d_%H:%M:%S")" -o dist/godex-arm64 ./cmd/godex
|
|
|
|
- name: Create tarballs for snap
|
|
env:
|
|
VERSION: ${{ steps.get_tag.outputs.VERSION }}
|
|
run: |
|
|
mkdir -p snap-build/godex-${VERSION}-linux-amd64
|
|
cp dist/godex-amd64 snap-build/godex-${VERSION}-linux-amd64/godex
|
|
chmod +x snap-build/godex-${VERSION}-linux-amd64/godex
|
|
tar -czf godex-${VERSION}-linux-amd64.tar.gz -C snap-build godex-${VERSION}-linux-amd64
|
|
|
|
mkdir -p snap-build/godex-${VERSION}-linux-arm64
|
|
cp dist/godex-arm64 snap-build/godex-${VERSION}-linux-arm64/godex
|
|
chmod +x snap-build/godex-${VERSION}-linux-arm64/godex
|
|
tar -czf godex-${VERSION}-linux-arm64.tar.gz -C snap-build godex-${VERSION}-linux-arm64
|
|
|
|
- name: Copy assets for snap
|
|
run: |
|
|
cp packaging/snap/gui/godex-ai-agent.png packaging/snap/
|
|
cp screen3.gif packaging/snap/
|
|
cp screen2.gif packaging/snap/
|
|
cp scrreen.gif packaging/snap/
|
|
|
|
- name: Install Snapcraft
|
|
run: |
|
|
sudo snap install snapcraft --classic
|
|
|
|
- name: Ensure snapd and core22
|
|
run: |
|
|
sudo systemctl start snapd
|
|
sudo snap wait system seed.loaded
|
|
sudo snap install core22 --channel=latest/stable
|
|
|
|
- name: Validate Snapcraft credentials
|
|
run: |
|
|
if [ -z "$SNAPCRAFT_STORE_CREDENTIALS" ]; then
|
|
echo "SNAP_CREDENTIALS secret is empty or unavailable."
|
|
exit 1
|
|
fi
|
|
|
|
- name: Build Snaps
|
|
env:
|
|
VERSION: ${{ steps.get_tag.outputs.VERSION }}
|
|
GITHUB_WORKSPACE: ${{ github.workspace }}
|
|
working-directory: packaging/snap
|
|
run: |
|
|
for arch in amd64 arm64; do
|
|
tarball="$GITHUB_WORKSPACE/godex-${VERSION}-linux-${arch}.tar.gz"
|
|
if [ ! -f "$tarball" ]; then
|
|
echo "Missing tarball: $tarball"
|
|
exit 1
|
|
fi
|
|
sed -i "/^ godex:/,/^ launcher:/ s|^\\(\\s*\\)source: .*|\\1source: ${tarball}|" snapcraft.yaml
|
|
sed -i "s/\$SNAPCRAFT_PROJECT_VERSION/${VERSION}/g" snapcraft.yaml
|
|
snapcraft pack --destructive-mode --build-for="$arch" --output "$GITHUB_WORKSPACE/godex_${VERSION}_${arch}.snap"
|
|
done
|
|
|
|
- name: Dump Snapcraft logs on failure
|
|
if: failure()
|
|
run: |
|
|
echo "=== Snapcraft logs ==="
|
|
log_dir="$HOME/.local/state/snapcraft/log"
|
|
if [ -d "$log_dir" ]; then
|
|
ls -1t "$log_dir" | head -5
|
|
latest_log=$(ls -1t "$log_dir" | head -1)
|
|
if [ -n "$latest_log" ]; then
|
|
echo "--- $log_dir/$latest_log ---"
|
|
cat "$log_dir/$latest_log"
|
|
fi
|
|
else
|
|
echo "No snapcraft log directory found at $log_dir"
|
|
fi
|
|
|
|
- name: Upload Snap to Store
|
|
env:
|
|
VERSION: ${{ steps.get_tag.outputs.VERSION }}
|
|
run: |
|
|
snap_files=$(ls *.snap 2>/dev/null || true)
|
|
if [ -z "$snap_files" ]; then
|
|
echo "No snap files found"
|
|
exit 1
|
|
fi
|
|
for snap_name in $snap_files; do
|
|
echo "Uploading $snap_name to Snap Store..."
|
|
snapcraft upload "$snap_name" --release "${SNAP_CHANNEL}"
|
|
done
|