Skip to content

Bump tar from 7.5.10 to 7.5.11 in /tests/runner-fixtures/npm-tap #32

Bump tar from 7.5.10 to 7.5.11 in /tests/runner-fixtures/npm-tap

Bump tar from 7.5.10 to 7.5.11 in /tests/runner-fixtures/npm-tap #32

Workflow file for this run

name: CI
on:
pull_request:
push:
branches:
- main
tags:
- "v*"
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
pull-requests: read
jobs:
changes:
runs-on: ubuntu-latest
outputs:
rust_core: ${{ steps.filter.outputs.rust_core }}
integration_rust_nextest: ${{ steps.filter.outputs.integration_rust_nextest }}
integration_go: ${{ steps.filter.outputs.integration_go }}
integration_npm_tap: ${{ steps.filter.outputs.integration_npm_tap }}
integration_jest_json: ${{ steps.filter.outputs.integration_jest_json }}
integration_vitest_json: ${{ steps.filter.outputs.integration_vitest_json }}
integration_python_pytest: ${{ steps.filter.outputs.integration_python_pytest }}
integration_python_unittest: ${{ steps.filter.outputs.integration_python_unittest }}
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Detect changed paths
id: filter
uses: dorny/paths-filter@v3
with:
filters: |
rust_core:
- 'src/**'
- 'tests/**'
- 'Cargo.toml'
- 'Cargo.lock'
- '.github/workflows/**'
- 'scripts/**'
- 'README.md'
- 'CONTRIBUTING.md'
- 'docs/**'
integration_rust_nextest:
- 'src/**'
- 'scripts/verify-nextest-integration.sh'
- 'tests/runner-fixtures/rust-nextest/**'
- '.github/workflows/**'
integration_go:
- 'src/**'
- 'scripts/verify-go-integration.sh'
- 'tests/runner-fixtures/go-sample/**'
- '.github/workflows/**'
integration_npm_tap:
- 'src/**'
- 'scripts/verify-npm-tap-integration.sh'
- 'tests/runner-fixtures/npm-tap/**'
- '.github/workflows/**'
integration_jest_json:
- 'src/**'
- 'scripts/verify-jest-integration.sh'
- 'tests/runner-fixtures/jest-json/**'
- '.github/workflows/**'
integration_vitest_json:
- 'src/**'
- 'scripts/verify-vitest-integration.sh'
- 'tests/runner-fixtures/vitest-json/**'
- '.github/workflows/**'
integration_python_pytest:
- 'src/**'
- 'scripts/verify-pytest-integration.sh'
- 'tests/runner-fixtures/python-pytest/**'
- '.github/workflows/**'
integration_python_unittest:
- 'src/**'
- 'scripts/verify-unittest-integration.sh'
- 'tests/runner-fixtures/python-unittest/**'
- '.github/workflows/**'
build-tapcue-debug:
needs: changes
if: github.event_name != 'pull_request' || needs.changes.outputs.integration_rust_nextest == 'true' || needs.changes.outputs.integration_go == 'true' || needs.changes.outputs.integration_npm_tap == 'true' || needs.changes.outputs.integration_jest_json == 'true' || needs.changes.outputs.integration_vitest_json == 'true' || needs.changes.outputs.integration_python_pytest == 'true' || needs.changes.outputs.integration_python_unittest == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Build tapcue debug binary
run: cargo build --locked
- name: Upload tapcue debug binary
uses: actions/upload-artifact@v7
with:
name: tapcue-debug-bin
path: target/debug/tapcue
test:
needs: changes
if: github.event_name != 'pull_request' || needs.changes.outputs.rust_core == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Format check
run: cargo fmt --all --check
- name: Cargo check (locked)
run: cargo check --all-targets --all-features --locked
- name: Clippy
run: cargo clippy --all-targets --all-features -- -D warnings
- name: Tests
run: cargo test --all-features --locked
- name: Stream format fixtures
run: cargo test --test stream_formats --locked
- name: Build docs
env:
RUSTDOCFLAGS: -D warnings
run: cargo doc --no-deps --locked
- name: Validate man page
run: man -l docs/man/tapcue.1 >/dev/null
- name: Validate TLDR page
run: |
python3 - <<'PY'
from pathlib import Path
page = Path("docs/tldr/tapcue.md")
lines = page.read_text(encoding="utf-8").splitlines()
assert lines and lines[0].startswith("# "), "TLDR page must start with a title"
assert any(line.startswith("> ") for line in lines), "TLDR page must include a description"
assert any(line.startswith("`") and line.endswith("`") for line in lines), "TLDR page must include at least one command example"
PY
- name: Shell script lint
run: |
sudo apt-get update
sudo apt-get install -y shellcheck
shellcheck scripts/*.sh
- name: Validate docs script references
run: ./scripts/check-doc-links.sh
- name: Dependency audit
uses: rustsec/audit-check@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
integration-rust-nextest:
needs: [changes, build-tapcue-debug]
if: github.event_name != 'pull_request' || needs.changes.outputs.integration_rust_nextest == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Install cargo-nextest
uses: taiki-e/install-action@v2
with:
tool: cargo-nextest
- name: Download tapcue debug binary
uses: actions/download-artifact@v8
with:
name: tapcue-debug-bin
path: bin
- name: Ensure tapcue binary is executable
run: chmod +x bin/tapcue
- name: Verify rust nextest integration
env:
TAPCUE_BIN: ${{ github.workspace }}/bin/tapcue
run: ./scripts/verify-nextest-integration.sh
integration-go:
needs: [changes, build-tapcue-debug]
if: github.event_name != 'pull_request' || needs.changes.outputs.integration_go == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: stable
- name: Download tapcue debug binary
uses: actions/download-artifact@v8
with:
name: tapcue-debug-bin
path: bin
- name: Ensure tapcue binary is executable
run: chmod +x bin/tapcue
- name: Verify go integration
env:
TAPCUE_BIN: ${{ github.workspace }}/bin/tapcue
run: ./scripts/verify-go-integration.sh
integration-npm-tap:
needs: [changes, build-tapcue-debug]
if: github.event_name != 'pull_request' || needs.changes.outputs.integration_npm_tap == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Node.js
uses: actions/setup-node@v6
with:
node-version: "22"
cache: npm
cache-dependency-path: tests/runner-fixtures/npm-tap/package-lock.json
- name: Download tapcue debug binary
uses: actions/download-artifact@v8
with:
name: tapcue-debug-bin
path: bin
- name: Ensure tapcue binary is executable
run: chmod +x bin/tapcue
- name: Verify npm TAP integration
env:
TAPCUE_BIN: ${{ github.workspace }}/bin/tapcue
run: ./scripts/verify-npm-tap-integration.sh
integration-jest-json:
needs: [changes, build-tapcue-debug]
if: github.event_name != 'pull_request' || needs.changes.outputs.integration_jest_json == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Node.js
uses: actions/setup-node@v6
with:
node-version: "22"
cache: npm
cache-dependency-path: tests/runner-fixtures/jest-json/package-lock.json
- name: Download tapcue debug binary
uses: actions/download-artifact@v8
with:
name: tapcue-debug-bin
path: bin
- name: Ensure tapcue binary is executable
run: chmod +x bin/tapcue
- name: Verify Jest JSON integration
env:
TAPCUE_BIN: ${{ github.workspace }}/bin/tapcue
run: ./scripts/verify-jest-integration.sh
integration-vitest-json:
needs: [changes, build-tapcue-debug]
if: github.event_name != 'pull_request' || needs.changes.outputs.integration_vitest_json == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Node.js
uses: actions/setup-node@v6
with:
node-version: "22"
cache: npm
cache-dependency-path: tests/runner-fixtures/vitest-json/package-lock.json
- name: Download tapcue debug binary
uses: actions/download-artifact@v8
with:
name: tapcue-debug-bin
path: bin
- name: Ensure tapcue binary is executable
run: chmod +x bin/tapcue
- name: Verify Vitest JSON integration
env:
TAPCUE_BIN: ${{ github.workspace }}/bin/tapcue
run: ./scripts/verify-vitest-integration.sh
integration-python-pytest:
needs: [changes, build-tapcue-debug]
if: github.event_name != 'pull_request' || needs.changes.outputs.integration_python_pytest == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
- name: Set up uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
- name: Download tapcue debug binary
uses: actions/download-artifact@v8
with:
name: tapcue-debug-bin
path: bin
- name: Ensure tapcue binary is executable
run: chmod +x bin/tapcue
- name: Verify pytest integration
env:
TAPCUE_BIN: ${{ github.workspace }}/bin/tapcue
run: ./scripts/verify-pytest-integration.sh
integration-python-unittest:
needs: [changes, build-tapcue-debug]
if: github.event_name != 'pull_request' || needs.changes.outputs.integration_python_unittest == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
- name: Set up uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
- name: Download tapcue debug binary
uses: actions/download-artifact@v8
with:
name: tapcue-debug-bin
path: bin
- name: Ensure tapcue binary is executable
run: chmod +x bin/tapcue
- name: Verify unittest integration
env:
TAPCUE_BIN: ${{ github.workspace }}/bin/tapcue
run: ./scripts/verify-unittest-integration.sh
build-release:
if: github.event_name == 'push'
runs-on: ubuntu-latest
needs:
- test
- integration-rust-nextest
- integration-go
- integration-npm-tap
- integration-jest-json
- integration-vitest-json
- integration-python-pytest
- integration-python-unittest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Build release binary
run: cargo build --release
- name: Package release artifact
run: |
mkdir -p dist
cp target/release/tapcue dist/tapcue
tar -C dist -czf dist/tapcue-${{ runner.os }}-${{ github.sha }}.tar.gz tapcue
- name: Publish prerelease from main
if: startsWith(github.ref, 'refs/heads/main')
uses: softprops/action-gh-release@v2
with:
tag_name: prerelease-${{ github.sha }}
name: tapcue prerelease ${{ github.sha }}
prerelease: true
files: dist/tapcue-${{ runner.os }}-${{ github.sha }}.tar.gz
- name: Publish tagged release
if: startsWith(github.ref, 'refs/tags/v')
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
prerelease: false
files: dist/tapcue-${{ runner.os }}-${{ github.sha }}.tar.gz