ops: revert checkout workflow #41
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: Check out repo for changelog generation | |
uses: actions/checkout@v4 | |
with: | |
fetch-tags: true | |
fetch-depth: 0 | |
# Ensure we checkout the repo where the workflow runs, not a fork | |
repository: ${{ github.repository }} | |
# Use the token with write permissions | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Generate and Commit Changelog | |
run: | | |
# Create a temporary directory for extraction | |
mkdir chglog_tmp | |
# Download git-chglog archive | |
wget https://github.com/git-chglog/git-chglog/releases/download/v0.15.4/git-chglog_0.15.4_linux_amd64.tar.gz | |
# Extract into the temporary directory | |
tar -xvzf git-chglog_0.15.4_linux_amd64.tar.gz -C chglog_tmp | |
# Generate changelog using the extracted executable | |
./chglog_tmp/git-chglog -o ./CHANGELOG.md | |
# Clean up downloaded archive and temporary directory | |
rm git-chglog_0.15.4_linux_amd64.tar.gz | |
rm -rf chglog_tmp | |
# Configure git user | |
git config user.name "github-actions[bot]" | |
git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
# Fetch the latest main branch from origin | |
# Use refs/heads/main to be explicit about fetching the branch, not a tag named main | |
git fetch origin refs/heads/main | |
# Create a new branch based on the fetched origin/main | |
git checkout -b changelog-update origin/main | |
# Add, commit the changelog to the new branch | |
git add ./CHANGELOG.md | |
# Use --allow-empty in case the changelog hasn't changed (e.g., rerunning on same tag) | |
git commit --allow-empty -m "chore(docs): update CHANGELOG for release ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.version || github.ref_name }} [skip ci]" | |
# Push the new local branch specifically to the remote *branch* main | |
git push origin changelog-update:refs/heads/main | |
# Clean up the temporary local branch (optional but good practice) | |
# We might need to checkout --detach first if this fails | |
git branch -D changelog-update || echo "Could not delete local branch changelog-update" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- 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 |