25fb843c40
The prior commit switched the recipe to `[source] path = "source"`, but .gitignore:77 still listed `local/recipes/shells/brush/source` (a leftover from when brush was a transient upstream git fetch), so the vendored tree was not tracked — a fresh clone would have no brush source and the build would fail. Drop that ignore line and commit the vendored working tree (reubeno/brush @ 897b373e, with the Redox port patches pre-applied). brush is now a durable local fork like the other path=source recipes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
204 lines
6.9 KiB
YAML
204 lines
6.9 KiB
YAML
#
|
|
# Based on https://github.com/release-plz/release-plz/blob/a5043c478d46d051c00e4fbc85036ac22510f07e/.github/workflows/cd.yml
|
|
#
|
|
|
|
name: CD # Continuous Deployment
|
|
run-name: CD${{ github.event_name == 'release' && ' (release)' || ' (dry run)' }}
|
|
|
|
on:
|
|
release:
|
|
types: [published]
|
|
|
|
# Manual triggers don't actually publish but dry-run the builds.
|
|
workflow_dispatch: null
|
|
|
|
# Run on PR in dry-run mode to make sure this workflow is still generally
|
|
# working.
|
|
pull_request:
|
|
branches: ["main"]
|
|
|
|
# Run on pushes into `main` as a way to have "nightly"-ish binaries.
|
|
push:
|
|
branches: ["main"]
|
|
|
|
# Only allow one run of the workflow per branch / PR at a time.
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
CARGO_INCREMENTAL: 0
|
|
CARGO_NET_GIT_FETCH_WITH_CLI: true
|
|
CARGO_NET_RETRY: 10
|
|
CARGO_TERM_COLOR: always
|
|
RUST_BACKTRACE: 1
|
|
RUSTFLAGS: -D warnings
|
|
RUSTUP_MAX_RETRIES: 10
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
permissions: {}
|
|
|
|
jobs:
|
|
upload-docs:
|
|
name: "Generate and upload documentation"
|
|
|
|
permissions:
|
|
contents: write
|
|
id-token: write
|
|
attestations: write
|
|
|
|
if: github.event_name == 'workflow_dispatch' || github.event_name == 'pull_request' || github.event_name == 'push' || (github.event_name == 'release' && github.repository_owner == 'reubeno' && startsWith(github.event.release.tag_name, 'brush-shell-v'))
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 30
|
|
|
|
steps:
|
|
- name: "Checkout repository"
|
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: "Install Rust toolchain"
|
|
uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1
|
|
with:
|
|
toolchain: stable
|
|
|
|
- name: "Enable cargo cache"
|
|
uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
|
|
|
|
- name: "Generate documentation distribution"
|
|
run: cargo xtask gen docs dist --out brush-docs.tar.gz
|
|
|
|
- name: "Upload documentation to release"
|
|
if: github.event_name == 'release'
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
GITHUB_RELEASE_TAG: ${{ github.event.release.tag_name }}
|
|
run: |
|
|
gh release upload ${GITHUB_RELEASE_TAG} \
|
|
brush-docs.tar.gz \
|
|
brush-docs.tar.gz.sha256 \
|
|
brush-docs.tar.gz.sha512
|
|
|
|
- name: "Generate artifact attestation"
|
|
if: github.event_name == 'release'
|
|
uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
|
|
with:
|
|
subject-path: "brush-docs.tar.gz*"
|
|
|
|
- name: "Upload documentation artifact (dry-run)"
|
|
if: github.event_name != 'release'
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: brush-docs
|
|
path: |
|
|
brush-docs.tar.gz
|
|
brush-docs.tar.gz.sha256
|
|
brush-docs.tar.gz.sha512
|
|
|
|
upload-assets:
|
|
name: ${{ matrix.target }}
|
|
|
|
permissions:
|
|
contents: write
|
|
id-token: write
|
|
attestations: write
|
|
|
|
if: github.event_name == 'workflow_dispatch' || github.event_name == 'pull_request' || github.event_name == 'push' || (github.event_name == 'release' && github.repository_owner == 'reubeno' && startsWith(github.event.release.tag_name, 'brush-shell-v'))
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
# Run all jobs to completion regardless of errors.
|
|
# This is useful because sometimes we fail to compile for a certain target.
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- target: aarch64-pc-windows-msvc
|
|
os: windows-2025
|
|
force_dry_run: true
|
|
- target: x86_64-unknown-linux-gnu
|
|
os: ubuntu-22.04
|
|
force_dry_run: false
|
|
- target: x86_64-apple-darwin
|
|
os: macos-15-intel
|
|
force_dry_run: false
|
|
- target: x86_64-pc-windows-msvc
|
|
os: windows-2025
|
|
force_dry_run: true
|
|
- target: x86_64-unknown-linux-musl
|
|
os: ubuntu-22.04
|
|
force_dry_run: false
|
|
- target: aarch64-unknown-linux-gnu
|
|
os: ubuntu-22.04
|
|
force_dry_run: false
|
|
- target: aarch64-unknown-linux-musl
|
|
os: ubuntu-22.04
|
|
force_dry_run: false
|
|
- target: aarch64-apple-darwin
|
|
os: macos-14
|
|
force_dry_run: false
|
|
timeout-minutes: 60
|
|
|
|
steps:
|
|
- name: "Checkout repository"
|
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: "Install Rust toolchain"
|
|
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1.17.0
|
|
|
|
- name: "Setup cross-compiling toolchain"
|
|
if: startsWith(matrix.os, 'ubuntu') && !contains(matrix.target, '-musl')
|
|
uses: taiki-e/setup-cross-toolchain-action@3d9770ce98eb7dbcf378563182a5e8031165f75b # v1.41.0
|
|
with:
|
|
target: ${{ matrix.target }}
|
|
|
|
- name: "Install musl cross tools"
|
|
if: contains(matrix.target, '-musl')
|
|
uses: taiki-e/install-action@43aecc8d72668fbcfe75c31400bc4f890f1c5853 # v2.83.2
|
|
with:
|
|
tool: cross
|
|
|
|
- name: "Workaround: clean cache"
|
|
run: cargo clean
|
|
|
|
- name: "Install cargo-about"
|
|
run: cargo install cargo-about --locked --features cli
|
|
|
|
- name: "Generate license notices"
|
|
working-directory: brush-shell
|
|
run: cargo about generate -o ../THIRD_PARTY_LICENSES.html about.hbs
|
|
|
|
- name: "Update build flags"
|
|
if: endsWith(matrix.target, 'windows-msvc')
|
|
run: echo "RUSTFLAGS=${RUSTFLAGS} -C target-feature=+crt-static" >> "${GITHUB_ENV}"
|
|
|
|
- name: "Build and upload binaries to release"
|
|
uses: taiki-e/upload-rust-binary-action@f0d45ae91ee7b8ee928de7a9d04d893a08bcbec6 # v1.30.2
|
|
id: upload-release
|
|
with:
|
|
dry-run: ${{ github.event_name != 'release' || matrix.force_dry_run }}
|
|
bin: brush
|
|
locked: true
|
|
target: ${{ matrix.target }}
|
|
tar: unix
|
|
zip: windows
|
|
checksum: sha256,sha512
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
include: "LICENSE,THIRD_PARTY_LICENSES.html"
|
|
|
|
- name: "Generate artifact attestation"
|
|
if: github.event_name == 'release' && !matrix.force_dry_run
|
|
uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
|
|
with:
|
|
subject-path: "${{ steps.upload-release.outputs.archive }}.*"
|
|
|
|
- name: "Upload artifacts (dry-run)"
|
|
if: github.event_name != 'release' || matrix.force_dry_run
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: brush-${{ matrix.target }}
|
|
path: "${{ steps.upload-release.outputs.archive }}.*"
|