ci: build and publish releases on GitHub only
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
# Builds Windows, macOS and Linux on GitHub's runners when a v* tag is pushed, then publishes a
|
||||
# GitHub release with the files. Gitea reads .github/workflows too, so every job is gated on the
|
||||
# server URL: this pipeline only ever runs on github.com.
|
||||
name: release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ["v*"]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: Existing tag to build and release (e.g. v0.8.4)
|
||||
required: true
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
TAG: ${{ inputs.tag || github.ref_name }}
|
||||
|
||||
jobs:
|
||||
windows:
|
||||
if: github.server_url == 'https://github.com'
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with: { ref: "${{ inputs.tag || github.ref }}" }
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
- name: Build and zip
|
||||
shell: pwsh
|
||||
run: |
|
||||
cargo build --release --locked --bins
|
||||
$v = $env:TAG.TrimStart('v')
|
||||
New-Item -ItemType Directory -Force dist | Out-Null
|
||||
$exes = 'papercraft','papercraft-cli','papercraft-mcp','papercraft-relay' | ForEach-Object { "target/release/$_.exe" }
|
||||
Compress-Archive -Path $exes -DestinationPath "dist/papercraft-$v-windows-x86_64.zip"
|
||||
- uses: actions/upload-artifact@v4
|
||||
with: { name: windows, path: dist/* }
|
||||
|
||||
macos:
|
||||
if: github.server_url == 'https://github.com'
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with: { ref: "${{ inputs.tag || github.ref }}" }
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
- name: Package (ad-hoc signed, not notarized)
|
||||
run: packaging/macos/package.sh
|
||||
- uses: actions/upload-artifact@v4
|
||||
with: { name: macos, path: dist/release/* }
|
||||
|
||||
linux:
|
||||
if: github.server_url == 'https://github.com'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with: { ref: "${{ inputs.tag || github.ref }}" }
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
- name: Build dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y pkg-config libssl-dev libxkbcommon-x11-dev libxcb-xkb-dev libx11-xcb-dev libwayland-dev libvulkan-dev
|
||||
- name: Build and tar
|
||||
run: |
|
||||
cargo build --release --locked --bins
|
||||
v="${TAG#v}"
|
||||
mkdir -p dist stage
|
||||
cp target/release/papercraft target/release/papercraft-cli target/release/papercraft-mcp target/release/papercraft-relay stage/
|
||||
tar -C stage -czf "dist/papercraft-$v-linux-x86_64.tar.gz" .
|
||||
tar -C stage -czf "dist/papercraft-cli-$v-linux-x86_64.tar.gz" papercraft-cli papercraft-mcp
|
||||
- uses: actions/upload-artifact@v4
|
||||
with: { name: linux, path: dist/* }
|
||||
|
||||
publish:
|
||||
if: github.server_url == 'https://github.com'
|
||||
needs: [windows, macos, linux]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/download-artifact@v4
|
||||
with: { path: files, merge-multiple: true }
|
||||
- name: Create the release
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
gh release create "$TAG" files/* --repo "$GITHUB_REPOSITORY" --title "PaperCraft ${TAG#v}" \
|
||||
--generate-notes --verify-tag || gh release upload "$TAG" files/* --repo "$GITHUB_REPOSITORY" --clobber
|
||||
Reference in New Issue
Block a user