944311cba1
The page in site/ reads the latest GitHub release from release.json, offers the build for the visitor's system, and shows the demo tour, a live agent run and the feature set on the app's acrylic look. site.yml builds it with the newest release and commits the result to the pages branch; release.yml calls it after publishing, and a daily run catches releases made by hand. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J9PiV8m3jnQjxY1skZUJfF
102 lines
3.7 KiB
YAML
102 lines
3.7 KiB
YAML
# Builds Windows, macOS and Linux on GitHub's runners when a v* tag is pushed, then publishes a
|
|
# GitHub release with the files once the full test suite (test.yml) passes, then refreshes the
|
|
# landing page (site.yml). 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:
|
|
test:
|
|
uses: ./.github/workflows/test.yml
|
|
with: { ref: "${{ inputs.tag || github.ref }}" }
|
|
|
|
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
|
|
with: { targets: aarch64-apple-darwin }
|
|
- uses: Swatinem/rust-cache@v2
|
|
- name: Package (Apple silicon, ad-hoc signed, not notarized)
|
|
run: packaging/macos/package.sh --arch aarch64
|
|
- 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 libdbus-1-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: [test, 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
|
|
|
|
site:
|
|
if: github.server_url == 'https://github.com'
|
|
needs: publish
|
|
uses: ./.github/workflows/site.yml
|