Skip to content

build(deps): bump the minor-changes group across 1 directory with 5 updates #492

build(deps): bump the minor-changes group across 1 directory with 5 updates

build(deps): bump the minor-changes group across 1 directory with 5 updates #492

Workflow file for this run

name: CI
on:
push:
branches: [ master ]
# Need to run on tags in order to publish tagged Docker images
tags: [ "v*" ]
pull_request:
branches: [ master ]
env:
# Minimum supported Rust version.
msrv: 1.86.0
# Nightly Rust necessary for building docs.
nightly: nightly-2025-11-02
# `mdbook` version used
MDBOOK_VERSION: 0.5.2
jobs:
build-msrv:
permissions:
contents: read
strategy:
matrix:
include:
- os: windows-latest
features: ""
- os: macos-latest
features: ""
- os: ubuntu-latest
features: --all-features
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.msrv }}
- name: Cache cargo build
uses: actions/cache@v5
with:
path: target
key: ${{ runner.os }}${{ matrix.features }}-msrv-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}${{ matrix.features }}-msrv-cargo
- name: Run tests
run: cargo test -p term-transcript ${{ matrix.features }} --all-targets
- name: Run doc tests
run: cargo test -p term-transcript ${{ matrix.features }} --doc
build:
permissions:
contents: read
strategy:
matrix:
include:
- os: windows-latest
- os: macos-latest
- os: ubuntu-latest
all_checks: true
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
components: rustfmt, clippy
- name: Install cargo-deny
uses: baptiste0928/cargo-install@v3
if: matrix.all_checks
with:
crate: cargo-deny
version: "^0.18.9"
- name: Cache cargo build
uses: actions/cache@v5
with:
path: target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo
- name: Format
run: cargo fmt --all -- --check
if: matrix.all_checks
- name: Clippy
run: cargo clippy --workspace --all-features --all-targets -- -D warnings
- name: Clippy styled-str (no features)
run: cargo clippy -p styled-str --no-default-features --lib -- -D warnings
- name: Clippy (no features)
run: cargo clippy -p term-transcript --no-default-features --lib -- -D warnings
- name: Clippy (features = svg)
run: cargo clippy -p term-transcript --no-default-features --features svg --lib -- -D warnings
- name: Clippy (features = test)
run: cargo clippy -p term-transcript --no-default-features --features test --lib -- -D warnings
- name: Clippy CLI (no features)
run: cargo clippy -p term-transcript --no-default-features --all-targets -- -D warnings
- name: Check dependencies
run: cargo deny --workspace --all-features check
if: matrix.all_checks
- name: Check rainbow script outputs
run: ./e2e-tests/rainbow/bin/regenerate-rainbow-out.sh --check
if: matrix.all_checks
- name: Run tests
run: cargo test --workspace --all-features --all-targets --no-fail-fast
env:
# Skip the PowerShell snapshots when testing CLI examples
TT_IMG_SKIP: pwsh
- name: Run doc tests
run: cargo test --workspace --all-features --doc
- name: Run proptests (styled-str)
run: cargo test --release -p styled-str --test proptests
env:
PROPTEST_CASES: 100000
if: matrix.all_checks
- name: Test CLI tracing
shell: bash
run: |
RUST_LOG=term_transcript=debug \
cargo run -p term-transcript-cli --all-features -- \
exec 'echo Hello' 2>&1 | grep DEBUG
build-nightly:
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.nightly }}
targets: thumbv7m-none-eabi
- name: Install mdbook
run: |
mkdir -p .bin
curl -sSL https://github.com/rust-lang/mdBook/releases/download/v$MDBOOK_VERSION/mdbook-v$MDBOOK_VERSION-x86_64-unknown-linux-gnu.tar.gz \
| tar -xz --directory=.bin
sudo install .bin/mdbook /usr/local/bin
mdbook --version
- name: Cache cargo build
uses: actions/cache@v5
with:
path: target
key: ${{ runner.os }}-cargo-nightly-${{ hashFiles('Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-nightly
- name: Build the Book
working-directory: ./docs
run: mdbook build
- name: Build docs
run: |
cargo clean --doc && \
cargo rustdoc -p term-transcript --all-features -- -D warnings --cfg docsrs
build-docker:
needs:
- build
- build-msrv
- build-nightly
permissions:
contents: read
packages: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Cache Docker build
uses: actions/cache@v5
with:
path: target/docker
key: ${{ runner.os }}-docker-buildkit-${{ hashFiles('Cargo.lock') }}
restore-keys: ${{ runner.os }}-docker-buildkit
- name: Install `socat`
run: |
sudo apt-get update && \
sudo apt-get install -y --no-install-suggests --no-install-recommends socat
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v6
with:
images: ghcr.io/${{ github.repository }}
- name: Log in to Container registry
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Identify Buildx container
run: |
CONTAINER_ID=$(docker ps --filter=ancestor=moby/buildkit:buildx-stable-1 --format='{{ .ID }}')
echo "buildx_container=$CONTAINER_ID" | tee -a "$GITHUB_ENV"
- name: Restore cache
run: |
if [[ -f target/docker/cache.db ]]; then
docker cp target/docker/. "$buildx_container:/var/lib/buildkit"
docker restart "$buildx_container"
# Wait until the container is restarted
sleep 5
fi
docker buildx du # Check the restored cache
- name: Build image
uses: docker/build-push-action@v7
with:
context: .
file: crates/term-transcript-cli/Dockerfile
load: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
# We want to only store cache volumes (type=exec.cachemount) since
# their creation is computationally bound as opposed to other I/O-bound volume types.
- name: Extract image cache
run: |
docker buildx prune --force --filter=type=regular
docker buildx prune --force --filter=type=source.local
rm -rf target/docker && mkdir -p target/docker
docker cp "$buildx_container:/var/lib/buildkit/." target/docker
du -ah -d 1 target/docker
- name: Test image (--help)
run: docker run --rm "$IMAGE_TAG" --help
env:
IMAGE_TAG: ${{ fromJSON(steps.meta.outputs.json).tags[0] }}
- name: Test image (print)
run: |
docker run -i --rm --env COLOR=always "$IMAGE_TAG" print - < examples/rainbow.svg
env:
IMAGE_TAG: ${{ fromJSON(steps.meta.outputs.json).tags[0] }}
- name: Test image (exec, nc host)
run: |
mkfifo /tmp/shell.fifo
cat /tmp/shell.fifo | bash -i 2>&1 | nc -lU /tmp/shell.sock > /tmp/shell.fifo &
docker run --rm -v /tmp/shell.sock:/tmp/shell.sock "$IMAGE_TAG" \
exec --shell nc --echoing --args=-U --args=/tmp/shell.sock 'ls -al' \
> test.svg
docker run -i --rm --env COLOR=always "$IMAGE_TAG" print - < test.svg
env:
IMAGE_TAG: ${{ fromJSON(steps.meta.outputs.json).tags[0] }}
- name: Test image (exec, socat host)
run: |
rm -f /tmp/shell.sock
socat UNIX-LISTEN:/tmp/shell.sock,fork EXEC:"bash -i",pty,setsid,ctty,stderr &
docker run --rm -v /tmp/shell.sock:/tmp/shell.sock "$IMAGE_TAG" \
exec --shell nc --echoing --args=-U --args=/tmp/shell.sock 'ls -al' \
> test-pty.svg
docker run -i --rm --env COLOR=always "$IMAGE_TAG" print - < test-pty.svg
env:
IMAGE_TAG: ${{ fromJSON(steps.meta.outputs.json).tags[0] }}
- name: Publish image
if: github.event_name == 'push'
run: docker push "$IMAGE_TAG"
env:
IMAGE_TAG: ${{ fromJSON(steps.meta.outputs.json).tags[0] }}