Skip to content

fix: update CL output location #31

fix: update CL output location

fix: update CL output location #31

Workflow file for this run

name: Release
on:
push:
tags:
- 'v*.*.*' # Trigger on version tags like v1.0.0
workflow_dispatch: # Allows manual triggering
inputs:
version:
description: 'The version tag to use for the release (e.g., v1.0.0)'
required: true
type: string
permissions:
contents: write # Needed for softprops/action-gh-release
env:
CARGO_TERM_COLOR: always
CRATE_NAME: rustdocs_mcp_server
jobs:
build_assets:
name: Build Asset (${{ matrix.platform.target }})
strategy:
matrix:
platform:
- release_for: Linux-x86_64
os: ubuntu-latest
target: x86_64-unknown-linux-gnu
bin: rustdocs_mcp_server
asset_suffix: linux-x86_64
- release_for: macOS-x86_64
os: macos-latest
target: x86_64-apple-darwin
bin: rustdocs_mcp_server
asset_suffix: macos-x86_64
- release_for: macOS-aarch64
os: macos-latest # Build arm on x86 runner
target: aarch64-apple-darwin
bin: rustdocs_mcp_server
asset_suffix: macos-aarch64
- release_for: Windows-x86_64
os: windows-latest
target: x86_64-pc-windows-msvc
bin: rustdocs_mcp_server.exe
asset_suffix: windows-x86_64.exe
runs-on: ${{ matrix.platform.os }}
steps:
- name: Check out repo
uses: actions/checkout@v4
- name: Cache cargo & target directories
uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.platform.target }} # Use target in cache key
# --- Build Binary ---
- name: Build binary using actions-rust-cross
uses: houseabsolute/actions-rust-cross@v1 # Using latest version
with:
target: ${{ matrix.platform.target }}
args: "--release --verbose"
strip: true # Stripping is done by the action
# --- Install UPX ---
- name: Install UPX (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y upx-ucl
- name: Install UPX (macOS)
if: runner.os == 'macOS'
run: brew install upx
- name: Install UPX (Windows)
if: runner.os == 'Windows'
run: choco install upx --no-progress --yes
# --- Prepare Artifact (includes UPX compression) ---
- name: Prepare Artifact and Compress with UPX
id: artifact_details
shell: bash
run: |
BINARY_NAME="${{ matrix.platform.bin }}"
ASSET_NAME="${{ env.CRATE_NAME }}-${{ matrix.platform.asset_suffix }}"
TARGET_DIR="target/${{ matrix.platform.target }}/release"
BINARY_PATH="$TARGET_DIR/$BINARY_NAME"
echo "Calculated binary path: $BINARY_PATH"
echo "Calculated asset name: $ASSET_NAME"
if [[ ! -f "$BINARY_PATH" ]]; then
echo "Error: Binary not found at $BINARY_PATH"
echo "Listing contents of $TARGET_DIR:"
ls -l "$TARGET_DIR" || echo "Could not list $TARGET_DIR"
exit 1
fi
# Compress the binary with UPX (skip on macOS)
if [[ "${{ runner.os }}" != "macOS" ]]; then
echo "Compressing binary with UPX..."
upx --best --lzma "$BINARY_PATH"
else
echo "Skipping UPX compression on macOS."
fi
# Rename binary to the desired asset name AFTER potential compression
mv "$BINARY_PATH" "$TARGET_DIR/$ASSET_NAME"
echo "Renamed compressed binary to $TARGET_DIR/$ASSET_NAME"
echo "asset_path=$TARGET_DIR/$ASSET_NAME" >> $GITHUB_OUTPUT
echo "asset_name=$ASSET_NAME" >> $GITHUB_OUTPUT
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: ${{ steps.artifact_details.outputs.asset_name }}
path: ${{ steps.artifact_details.outputs.asset_path }}
if-no-files-found: error
release:
name: Create GitHub Release
needs: build_assets
runs-on: ubuntu-latest
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: List downloaded artifacts for debugging
run: |
echo "Listing downloaded artifacts:"
find artifacts -type f
echo "---"
- name: Create Release and Upload Assets
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.version || github.ref_name }}
name: Release ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.version || github.ref_name }}
body: |
Automated release for ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.version || github.ref_name }}
draft: false
prerelease: false
files: artifacts/*/* # Upload all files from all subdirectories within artifacts