Bump the minor-changes group across 1 directory with 7 updates (#169) #235
This file contains 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: CI | |
on: | |
push: | |
branches: [ master ] | |
tags: [ "v*" ] | |
pull_request: | |
branches: [ master ] | |
env: | |
# Minimum supported Rust version. | |
msrv: 1.72.0 | |
# Nightly Rust necessary for building docs. | |
nightly: nightly-2024-07-05 | |
jobs: | |
build-msrv: | |
strategy: | |
matrix: | |
include: | |
- os: windows-latest | |
features: "" | |
- os: ubuntu-latest | |
features: --all-features | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.msrv }} | |
- name: Cache cargo build | |
uses: actions/cache@v4 | |
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: | |
uses: ./.github/workflows/build-reusable.yml | |
build-docker: | |
needs: | |
- build | |
- build-msrv | |
permissions: | |
contents: read | |
packages: write | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Cache Docker build | |
uses: actions/cache@v4 | |
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@v5 | |
with: | |
images: ghcr.io/${{ github.repository }} | |
- name: Log in to Container registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- 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@v5 | |
with: | |
context: . | |
file: 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] }} | |
document: | |
needs: | |
- build | |
- build-msrv | |
if: github.event_name == 'push' && github.ref_type == 'branch' | |
permissions: | |
contents: write | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.nightly }} | |
- name: Cache cargo build | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ runner.os }}-cargo-document-${{ hashFiles('Cargo.lock') }} | |
restore-keys: ${{ runner.os }}-cargo-document | |
- name: Build docs | |
run: | | |
cargo clean --doc && \ | |
cargo rustdoc -p term-transcript --all-features -- --cfg docsrs | |
- name: Copy examples | |
run: | | |
mkdir -p target/doc/examples && \ | |
cp examples/rainbow.html target/doc/examples | |
- name: Deploy | |
uses: JamesIves/github-pages-deploy-action@v4 | |
with: | |
branch: gh-pages | |
folder: target/doc | |
single-commit: true |