Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b9c2d024d9 | ||
|
|
7ee7474605 | ||
|
|
c18903b097 | ||
|
|
b397916ec6 | ||
|
|
9f6ef340f9 | ||
|
|
3a29b4efb2 | ||
|
|
a2f542bb97 |
No files matched your search
@@ -7,7 +7,6 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
merge_group:
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
@@ -32,7 +31,7 @@ jobs:
|
|||||||
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
||||||
with:
|
with:
|
||||||
components: rustfmt
|
components: rustfmt
|
||||||
cache-key: fmt
|
cache: false
|
||||||
|
|
||||||
- name: Check formatting
|
- name: Check formatting
|
||||||
uses: actions-rust-lang/rustfmt@4066006ec54a31931b9b1fddfd38f2fdf2d27143 # v1
|
uses: actions-rust-lang/rustfmt@4066006ec54a31931b9b1fddfd38f2fdf2d27143 # v1
|
||||||
@@ -52,7 +51,7 @@ jobs:
|
|||||||
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
||||||
with:
|
with:
|
||||||
components: clippy
|
components: clippy
|
||||||
cache-key: clippy
|
cache: false
|
||||||
|
|
||||||
- name: Run clippy
|
- name: Run clippy
|
||||||
run: |
|
run: |
|
||||||
@@ -79,46 +78,22 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- task: check
|
- task: check
|
||||||
runner: ubuntu-24.04
|
|
||||||
target: x86_64-unknown-linux-gnu
|
target: x86_64-unknown-linux-gnu
|
||||||
musl: false
|
musl: false
|
||||||
|
|
||||||
- task: test
|
- task: test
|
||||||
runner: ubuntu-24.04
|
|
||||||
target: x86_64-unknown-linux-gnu
|
target: x86_64-unknown-linux-gnu
|
||||||
musl: false
|
musl: false
|
||||||
|
|
||||||
- task: check
|
- task: check
|
||||||
runner: ubuntu-24.04
|
|
||||||
target: x86_64-unknown-linux-musl
|
target: x86_64-unknown-linux-musl
|
||||||
musl: true
|
musl: true
|
||||||
|
|
||||||
- task: test
|
- task: test
|
||||||
runner: ubuntu-24.04
|
|
||||||
target: x86_64-unknown-linux-musl
|
target: x86_64-unknown-linux-musl
|
||||||
musl: true
|
musl: true
|
||||||
|
|
||||||
- task: check
|
runs-on: ubuntu-latest
|
||||||
runner: ubuntu-24.04-arm
|
|
||||||
target: aarch64-unknown-linux-gnu
|
|
||||||
musl: false
|
|
||||||
|
|
||||||
- task: test
|
|
||||||
runner: ubuntu-24.04-arm
|
|
||||||
target: aarch64-unknown-linux-gnu
|
|
||||||
musl: false
|
|
||||||
|
|
||||||
- task: check
|
|
||||||
runner: ubuntu-24.04-arm
|
|
||||||
target: aarch64-unknown-linux-musl
|
|
||||||
musl: true
|
|
||||||
|
|
||||||
- task: test
|
|
||||||
runner: ubuntu-24.04-arm
|
|
||||||
target: aarch64-unknown-linux-musl
|
|
||||||
musl: true
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.runner }}
|
|
||||||
timeout-minutes: 25
|
timeout-minutes: 25
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -137,7 +112,7 @@ jobs:
|
|||||||
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
||||||
with:
|
with:
|
||||||
target: ${{ matrix.target }}
|
target: ${{ matrix.target }}
|
||||||
cache-key: ${{ matrix.task }}-${{ matrix.target }}
|
cache: false
|
||||||
|
|
||||||
- name: Run ${{ matrix.task }} with all features
|
- name: Run ${{ matrix.task }} with all features
|
||||||
run: |
|
run: |
|
||||||
@@ -174,7 +149,7 @@ jobs:
|
|||||||
- name: Install Rust toolchain
|
- name: Install Rust toolchain
|
||||||
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
||||||
with:
|
with:
|
||||||
cache-key: docs
|
cache: false
|
||||||
|
|
||||||
- name: Check docs
|
- name: Check docs
|
||||||
run: |
|
run: |
|
||||||
@@ -16,6 +16,9 @@ env:
|
|||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
# Pinned for reproducibility; bump deliberately alongside `fuzz/Cargo.lock`.
|
# Pinned for reproducibility; bump deliberately alongside `fuzz/Cargo.lock`.
|
||||||
CARGO_FUZZ_VERSION: 0.13.1
|
CARGO_FUZZ_VERSION: 0.13.1
|
||||||
|
CARGO_FUZZ_SHA256: 86edc9b8f20c29ff07c3e5fcd67bc3f0784b3b960a5428635060f20d50555461
|
||||||
|
FUZZ_TOOLCHAIN: nightly-x86_64-unknown-linux-gnu
|
||||||
|
FUZZ_TARGET: x86_64-unknown-linux-gnu
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
fuzz-smoke:
|
fuzz-smoke:
|
||||||
@@ -32,22 +35,33 @@ jobs:
|
|||||||
- name: Install stable Rust toolchain
|
- name: Install stable Rust toolchain
|
||||||
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
||||||
with:
|
with:
|
||||||
cache-key: fuzz
|
cache: false
|
||||||
|
|
||||||
- name: Install nightly Rust toolchain
|
- name: Install nightly Rust toolchain
|
||||||
# Installed alongside, but deliberately not made the directory
|
# Installed alongside, but deliberately not made the directory
|
||||||
# default: cargo-fuzz itself is built with the default stable
|
# default: cargo-fuzz itself is built with the default stable
|
||||||
# toolchain below, and only `fuzz build`/`fuzz run` are run with
|
# toolchain below, and only `fuzz build`/`fuzz run` are run with
|
||||||
# `+nightly`. Building cargo-fuzz's own dependency tree under a
|
# the GNU-host nightly below. Building cargo-fuzz's own dependency
|
||||||
# nightly override can trip build scripts (e.g. rustix) that gate
|
# tree under a nightly override can trip build scripts (e.g. rustix) that gate
|
||||||
# unstable internal attributes on detecting a nightly compiler.
|
# unstable internal attributes on detecting a nightly compiler.
|
||||||
run: rustup toolchain install nightly --profile minimal --no-self-update
|
run: rustup toolchain install "${FUZZ_TOOLCHAIN}" --profile minimal --no-self-update
|
||||||
|
|
||||||
- name: Install cargo-fuzz
|
- name: Install cargo-fuzz
|
||||||
run: cargo install cargo-fuzz --locked --version "${CARGO_FUZZ_VERSION}"
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
archive="cargo-fuzz-${CARGO_FUZZ_VERSION}-x86_64-unknown-linux-musl.tar.gz"
|
||||||
|
curl --fail --show-error --location --retry 3 \
|
||||||
|
"https://github.com/rust-fuzz/cargo-fuzz/releases/download/${CARGO_FUZZ_VERSION}/${archive}" \
|
||||||
|
--output "$archive"
|
||||||
|
echo "${CARGO_FUZZ_SHA256} ${archive}" | sha256sum --check --status -
|
||||||
|
tar -xzf "$archive" cargo-fuzz
|
||||||
|
install -Dm755 cargo-fuzz "${RUNNER_TEMP}/bin/cargo-fuzz"
|
||||||
|
echo "${RUNNER_TEMP}/bin" >> "$GITHUB_PATH"
|
||||||
|
|
||||||
- name: Build all fuzz targets
|
- name: Build all fuzz targets
|
||||||
run: cargo +nightly fuzz build
|
# libFuzzer sanitizers require dynamically linked GNU binaries; the
|
||||||
|
# runner's default Rust host can be static musl.
|
||||||
|
run: RUSTUP_TOOLCHAIN="${FUZZ_TOOLCHAIN}" cargo fuzz build --target "${FUZZ_TARGET}"
|
||||||
working-directory: fuzz
|
working-directory: fuzz
|
||||||
|
|
||||||
- name: Run bounded fuzz smoke for every target
|
- name: Run bounded fuzz smoke for every target
|
||||||
@@ -59,7 +73,7 @@ jobs:
|
|||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
for target in decode_request decode_open_reply decode_echo_reply decode_params decode_varint; do
|
for target in decode_request decode_open_reply decode_echo_reply decode_params decode_varint; do
|
||||||
echo "::group::fuzz smoke: ${target}"
|
echo "::group::fuzz smoke: ${target}"
|
||||||
cargo +nightly fuzz run "${target}" -- \
|
RUSTUP_TOOLCHAIN="${FUZZ_TOOLCHAIN}" cargo fuzz run --target "${FUZZ_TARGET}" "${target}" -- \
|
||||||
-max_total_time=10 \
|
-max_total_time=10 \
|
||||||
-timeout=5
|
-timeout=5
|
||||||
echo "::endgroup::"
|
echo "::endgroup::"
|
||||||
@@ -32,13 +32,14 @@ jobs:
|
|||||||
- name: Install Rust toolchain
|
- name: Install Rust toolchain
|
||||||
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
||||||
with:
|
with:
|
||||||
cache-key: interop-netem
|
cache: false
|
||||||
|
|
||||||
- name: Check host tools
|
- name: Check host tools and network administration access
|
||||||
run: |
|
run: |
|
||||||
ip -V
|
ip -V
|
||||||
tc -V
|
tc -V
|
||||||
go version
|
go version
|
||||||
|
sudo -n true
|
||||||
|
|
||||||
- name: Install upstream irtt
|
- name: Install upstream irtt
|
||||||
run: |
|
run: |
|
||||||
@@ -62,14 +63,14 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
latest_summary="$(find target/interop-netem -mindepth 2 -maxdepth 2 -name github-step-summary.md -type f -print 2>/dev/null | sort | tail -n 1)"
|
latest_summary="$(find target/interop-netem -mindepth 2 -maxdepth 2 -name github-step-summary.md -type f -print 2>/dev/null | sort | tail -n 1)"
|
||||||
if [ -n "$latest_summary" ]; then
|
if [ -n "$latest_summary" ]; then
|
||||||
cat "$latest_summary" >> "$GITHUB_STEP_SUMMARY"
|
cat "$latest_summary" >> "$GITEA_STEP_SUMMARY"
|
||||||
else
|
else
|
||||||
echo "No netem interop github-step-summary.md found." >> "$GITHUB_STEP_SUMMARY"
|
echo "No netem interop github-step-summary.md found." >> "$GITEA_STEP_SUMMARY"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Upload netem interop artifacts
|
- name: Upload netem interop artifacts
|
||||||
if: always()
|
if: always()
|
||||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
uses: https://gitea.com/actions/gitea-upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: interop-netem
|
name: interop-netem
|
||||||
path: target/interop-netem
|
path: target/interop-netem
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
name: Semver
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- "irtt-proto/v*.*.*"
|
||||||
|
- "irtt-client/v*.*.*"
|
||||||
|
- "irtt-server/v*.*.*"
|
||||||
|
- "irtt-stats/v*.*.*"
|
||||||
|
- "irtt-rs/v*.*.*"
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
env:
|
||||||
|
CARGO_SEMVER_CHECKS_VERSION: 0.50.0
|
||||||
|
CARGO_SEMVER_CHECKS_SHA256: 52a65dc88dc53fa8b57d6087954eb52cda149ca03bcfca78ce3fdecd23f893c4
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
semver:
|
||||||
|
name: cargo-semver-checks
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 20
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Install Rust toolchain
|
||||||
|
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
||||||
|
with:
|
||||||
|
cache: false
|
||||||
|
|
||||||
|
# The CLI preserves the previous wrapper's `feature-group: all-features`
|
||||||
|
# behavior without its GitHub API/cache dependency.
|
||||||
|
- name: Install cargo-semver-checks
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
archive="cargo-semver-checks-x86_64-unknown-linux-gnu.tar.gz"
|
||||||
|
curl --fail --show-error --location --retry 3 \
|
||||||
|
"https://github.com/obi1kenobi/cargo-semver-checks/releases/download/v${CARGO_SEMVER_CHECKS_VERSION}/${archive}" \
|
||||||
|
--output "$archive"
|
||||||
|
echo "${CARGO_SEMVER_CHECKS_SHA256} ${archive}" | sha256sum --check --status -
|
||||||
|
tar -xzf "$archive" cargo-semver-checks
|
||||||
|
install -Dm755 cargo-semver-checks "${RUNNER_TEMP}/bin/cargo-semver-checks"
|
||||||
|
echo "${RUNNER_TEMP}/bin" >> "$GITHUB_PATH"
|
||||||
|
|
||||||
|
- name: Check semver compatibility
|
||||||
|
run: cargo semver-checks check-release --all-features
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
name: Supply chain
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
schedule:
|
||||||
|
- cron: "41 2 * * 1"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
env:
|
||||||
|
ACTIONLINT_VERSION: 1.7.7
|
||||||
|
CARGO_DENY_VERSION: 0.20.2
|
||||||
|
CARGO_DENY_SHA256: 9f12ed4c49936e09b48bf862b595cde2fe64fcbd9d74dfacac6131ca824c8d5f
|
||||||
|
ACTIONLINT_SHA256: 023070a287cd8cccd71515fedc843f1985bf96c436b7effaecce67290e7e0757
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cargo-deny:
|
||||||
|
name: cargo-deny ${{ matrix.checks }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 15
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
# Advisories can appear after code was merged. Keep this visible,
|
||||||
|
# but don't let a surprise upstream advisory nuke every unrelated PR.
|
||||||
|
- checks: advisories
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
# These are policy choices in this repo. They should block PRs.
|
||||||
|
- checks: bans licenses sources
|
||||||
|
continue-on-error: false
|
||||||
|
|
||||||
|
continue-on-error: ${{ matrix.continue-on-error }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Install cargo-deny
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
archive="cargo-deny-${CARGO_DENY_VERSION}-x86_64-unknown-linux-musl.tar.gz"
|
||||||
|
curl --fail --show-error --location --retry 3 \
|
||||||
|
"https://github.com/EmbarkStudios/cargo-deny/releases/download/${CARGO_DENY_VERSION}/${archive}" \
|
||||||
|
--output "$archive"
|
||||||
|
echo "${CARGO_DENY_SHA256} ${archive}" | sha256sum --check --status -
|
||||||
|
tar -xzf "$archive" --strip-components=1 \
|
||||||
|
"cargo-deny-${CARGO_DENY_VERSION}-x86_64-unknown-linux-musl/cargo-deny"
|
||||||
|
install -Dm755 cargo-deny "${RUNNER_TEMP}/bin/cargo-deny"
|
||||||
|
echo "${RUNNER_TEMP}/bin" >> "$GITHUB_PATH"
|
||||||
|
|
||||||
|
- name: Run cargo-deny
|
||||||
|
run: >-
|
||||||
|
cargo deny --manifest-path Cargo.toml --all-features check
|
||||||
|
${{ matrix.checks }}
|
||||||
|
|
||||||
|
actionlint:
|
||||||
|
name: actionlint
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 10
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Install actionlint
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
archive="actionlint_${ACTIONLINT_VERSION}_linux_amd64.tar.gz"
|
||||||
|
curl --fail --show-error --location --retry 3 \
|
||||||
|
"https://github.com/rhysd/actionlint/releases/download/v${ACTIONLINT_VERSION}/${archive}" \
|
||||||
|
--output "$archive"
|
||||||
|
echo "${ACTIONLINT_SHA256} ${archive}" | sha256sum --check --status -
|
||||||
|
tar -xzf "$archive" actionlint
|
||||||
|
install -Dm755 actionlint "${RUNNER_TEMP}/bin/actionlint"
|
||||||
|
echo "${RUNNER_TEMP}/bin" >> "$GITHUB_PATH"
|
||||||
|
|
||||||
|
- name: actionlint handwritten workflows
|
||||||
|
# actionlint validates GitHub Actions syntax. It cannot parse Gitea's
|
||||||
|
# required absolute action URL in interop-netem.yml, so that workflow
|
||||||
|
# is checked by the Gitea runner instead.
|
||||||
|
run: |
|
||||||
|
actionlint \
|
||||||
|
.gitea/workflows/ci.yml \
|
||||||
|
.gitea/workflows/docker-publish.yml \
|
||||||
|
.gitea/workflows/fuzz.yml \
|
||||||
|
.gitea/workflows/semver.yml \
|
||||||
|
.gitea/workflows/supply-chain.yml \
|
||||||
|
.github/workflows/actions-security.yml \
|
||||||
|
.github/workflows/ci-arm.yml \
|
||||||
|
.github/workflows/osv-scanner.yml \
|
||||||
|
.github/workflows/rust-clippy.yml
|
||||||
|
|
||||||
|
- name: actionlint generated release workflow
|
||||||
|
run: >-
|
||||||
|
actionlint -shellcheck= .github/workflows/irtt-rs-release.yml
|
||||||
@@ -16,34 +16,6 @@ permissions:
|
|||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
actionlint:
|
|
||||||
name: actionlint
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
timeout-minutes: 10
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- name: actionlint handwritten workflows
|
|
||||||
uses: raven-actions/actionlint@205b530c5d9fa8f44ae9ed59f341a0db994aa6f8
|
|
||||||
with:
|
|
||||||
files: >-
|
|
||||||
.github/workflows/actions-security.yml,
|
|
||||||
.github/workflows/ci.yml,
|
|
||||||
.github/workflows/interop-netem.yml,
|
|
||||||
.github/workflows/osv-scanner.yml,
|
|
||||||
.github/workflows/rust-clippy.yml,
|
|
||||||
.github/workflows/semver.yml,
|
|
||||||
.github/workflows/supply-chain.yml
|
|
||||||
|
|
||||||
- name: actionlint generated release workflow
|
|
||||||
uses: raven-actions/actionlint@205b530c5d9fa8f44ae9ed59f341a0db994aa6f8
|
|
||||||
with:
|
|
||||||
files: .github/workflows/irtt-rs-release.yml
|
|
||||||
shellcheck: false
|
|
||||||
zizmor:
|
zizmor:
|
||||||
name: zizmor
|
name: zizmor
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -60,7 +32,13 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
# Zizmor's SARIF integration publishes GitHub Code Scanning results.
|
||||||
|
# It remains here while portable actionlint runs with Gitea CI, but scans
|
||||||
|
# both workflow directories through its GitHub Actions rule set.
|
||||||
- name: Run zizmor
|
- name: Run zizmor
|
||||||
uses: zizmorcore/zizmor-action@70fb788f84895a7701f5643d103d587e460b5c99 # v0.6.3
|
uses: zizmorcore/zizmor-action@70fb788f84895a7701f5643d103d587e460b5c99 # v0.6.3
|
||||||
with:
|
with:
|
||||||
persona: regular
|
persona: regular
|
||||||
|
inputs: |
|
||||||
|
.github/workflows
|
||||||
|
.gitea/workflows
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
name: Rust ARM CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
merge_group:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
env:
|
||||||
|
CARGO_TERM_COLOR: always
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
verify:
|
||||||
|
name: cargo ${{ matrix.task }} (${{ matrix.target }})
|
||||||
|
# Gitea currently has only amd64 Linux runners; retain ARM coverage here.
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- task: check
|
||||||
|
target: aarch64-unknown-linux-gnu
|
||||||
|
musl: false
|
||||||
|
|
||||||
|
- task: test
|
||||||
|
target: aarch64-unknown-linux-gnu
|
||||||
|
musl: false
|
||||||
|
|
||||||
|
- task: check
|
||||||
|
target: aarch64-unknown-linux-musl
|
||||||
|
musl: true
|
||||||
|
|
||||||
|
- task: test
|
||||||
|
target: aarch64-unknown-linux-musl
|
||||||
|
musl: true
|
||||||
|
|
||||||
|
runs-on: ubuntu-24.04-arm
|
||||||
|
timeout-minutes: 25
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Install musl toolchain
|
||||||
|
if: matrix.musl
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install --no-install-recommends musl-tools
|
||||||
|
|
||||||
|
- name: Install Rust toolchain
|
||||||
|
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1
|
||||||
|
with:
|
||||||
|
target: ${{ matrix.target }}
|
||||||
|
cache-key: ${{ matrix.task }}-${{ matrix.target }}
|
||||||
|
|
||||||
|
- name: Run ${{ matrix.task }} with all features
|
||||||
|
run: |
|
||||||
|
cargo ${{ matrix.task }} \
|
||||||
|
--workspace \
|
||||||
|
--all-targets \
|
||||||
|
--all-features \
|
||||||
|
--target ${{ matrix.target }} \
|
||||||
|
--locked
|
||||||
|
|
||||||
|
- name: Run ${{ matrix.task }} without default features
|
||||||
|
run: |
|
||||||
|
cargo ${{ matrix.task }} \
|
||||||
|
--workspace \
|
||||||
|
--all-targets \
|
||||||
|
--no-default-features \
|
||||||
|
--target ${{ matrix.target }} \
|
||||||
|
--locked
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
name: Semver
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- "irtt-proto/v*.*.*"
|
|
||||||
- "irtt-client/v*.*.*"
|
|
||||||
- "irtt-server/v*.*.*"
|
|
||||||
- "irtt-stats/v*.*.*"
|
|
||||||
- "irtt-rs/v*.*.*"
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
semver:
|
|
||||||
name: cargo-semver-checks
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
timeout-minutes: 20
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- name: Check semver compatibility
|
|
||||||
uses: obi1kenobi/cargo-semver-checks-action@6b69fcf40e9b5fb17adeb57e4b6ecd020649a239 # v2
|
|
||||||
with:
|
|
||||||
feature-group: all-features
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
name: Supply chain
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
merge_group:
|
|
||||||
schedule:
|
|
||||||
- cron: "41 2 * * 1"
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
cargo-deny:
|
|
||||||
name: cargo-deny ${{ matrix.checks }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
timeout-minutes: 15
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
# Advisories can appear after code was merged. Keep this visible,
|
|
||||||
# but don't let a surprise upstream advisory nuke every unrelated PR.
|
|
||||||
- checks: advisories
|
|
||||||
continue-on-error: true
|
|
||||||
|
|
||||||
# These are policy choices in this repo. They should block PRs.
|
|
||||||
- checks: bans licenses sources
|
|
||||||
continue-on-error: false
|
|
||||||
|
|
||||||
continue-on-error: ${{ matrix.continue-on-error }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- name: Run cargo-deny
|
|
||||||
uses: EmbarkStudios/cargo-deny-action@3c6349835b2b7b196a839186cb8b78e02f7b5f25 # v2
|
|
||||||
with:
|
|
||||||
command: check
|
|
||||||
arguments: --all-features
|
|
||||||
command-arguments: ${{ matrix.checks }}
|
|
||||||
|
|
||||||
actionlint:
|
|
||||||
name: actionlint
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
timeout-minutes: 10
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- name: actionlint handwritten workflows
|
|
||||||
uses: raven-actions/actionlint@205b530c5d9fa8f44ae9ed59f341a0db994aa6f8
|
|
||||||
with:
|
|
||||||
files: >-
|
|
||||||
.github/workflows/actions-security.yml,
|
|
||||||
.github/workflows/ci.yml,
|
|
||||||
.github/workflows/interop-netem.yml,
|
|
||||||
.github/workflows/osv-scanner.yml,
|
|
||||||
.github/workflows/rust-clippy.yml,
|
|
||||||
.github/workflows/semver.yml,
|
|
||||||
.github/workflows/supply-chain.yml
|
|
||||||
|
|
||||||
- name: actionlint generated release workflow
|
|
||||||
uses: raven-actions/actionlint@205b530c5d9fa8f44ae9ed59f341a0db994aa6f8
|
|
||||||
with:
|
|
||||||
files: .github/workflows/irtt-rs-release.yml
|
|
||||||
shellcheck: false
|
|
||||||
@@ -28,6 +28,12 @@ release. The format is loosely based on
|
|||||||
|
|
||||||
## irtt-client
|
## irtt-client
|
||||||
|
|
||||||
|
### 0.5.1
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- `ManagedCommandReceipt::blocking_wait()` lets synchronous callers wait for a managed target-set update to be applied or rejected without entering an async runtime.
|
||||||
|
|
||||||
### 0.5.0
|
### 0.5.0
|
||||||
|
|
||||||
#### Added
|
#### Added
|
||||||
@@ -102,6 +108,17 @@ release. The format is loosely based on
|
|||||||
|
|
||||||
## irtt-rs
|
## irtt-rs
|
||||||
|
|
||||||
|
### 0.7.0
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- Client target arguments now support per-target HMAC configuration: append `@hmac=KEY` to override the global `--hmac` value for that target, or use `@hmac=` to explicitly disable HMAC for it. The target syntax supports context-aware escaping for literal delimiters.
|
||||||
|
- Continuous client runs can now take complete desired target sets from standard input with `--targets-stdin`. Each non-empty record atomically replaces the current set, `[]` selects an empty set, and EOF requests a graceful stop. The controller retains only the newest unapplied record under transient replacement backpressure, with explicit bounds on record size, desired targets, and live target generations.
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- A peer-initiated close is now target-local in stdin-controlled continuous runs: the controller and other desired targets keep running, and a later desired set can start that target again.
|
||||||
|
|
||||||
### 0.6.2
|
### 0.6.2
|
||||||
|
|
||||||
#### Added
|
#### Added
|
||||||
|
|||||||
Generated
+2
-2
@@ -715,7 +715,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "irtt-client"
|
name = "irtt-client"
|
||||||
version = "0.5.0"
|
version = "0.5.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"irtt-proto",
|
"irtt-proto",
|
||||||
"irtt-server",
|
"irtt-server",
|
||||||
@@ -749,7 +749,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "irtt-rs"
|
name = "irtt-rs"
|
||||||
version = "0.6.2"
|
version = "0.7.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ homepage = "https://github.com/Lochnair/irtt-rs"
|
|||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
irtt-proto = { version = "0.5.0", path = "crates/irtt-proto" }
|
irtt-proto = { version = "0.5.0", path = "crates/irtt-proto" }
|
||||||
irtt-client = { version = "0.5.0", path = "crates/irtt-client" }
|
irtt-client = { version = "0.5.1", path = "crates/irtt-client" }
|
||||||
irtt-server = { version = "0.5.2", path = "crates/irtt-server" }
|
irtt-server = { version = "0.5.2", path = "crates/irtt-server" }
|
||||||
irtt-stats = { version = "0.5.0", path = "crates/irtt-stats" }
|
irtt-stats = { version = "0.5.0", path = "crates/irtt-stats" }
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "irtt-rs"
|
name = "irtt-rs"
|
||||||
version = "0.6.2"
|
version = "0.7.0"
|
||||||
description = "IRTT-compatible client, TUI, and server applications"
|
description = "IRTT-compatible client, TUI, and server applications"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "irtt-client"
|
name = "irtt-client"
|
||||||
version = "0.5.0"
|
version = "0.5.1"
|
||||||
description = "IRTT-compatible Rust client library"
|
description = "IRTT-compatible Rust client library"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
@@ -44,6 +44,8 @@ required-features = ["tokio"]
|
|||||||
doc-scrape-examples = true
|
doc-scrape-examples = true
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
irtt-server.workspace = true
|
# Keep the packaged client testable against the latest published server while
|
||||||
|
# workspace tests continue to exercise the local source through this path.
|
||||||
|
irtt-server = { version = "0.5.1", path = "../irtt-server" }
|
||||||
proptest = "1.11.0"
|
proptest = "1.11.0"
|
||||||
tokio = { version = "1.53.1", default-features = false, features = ["rt", "sync"] }
|
tokio = { version = "1.53.1", default-features = false, features = ["rt", "sync"] }
|
||||||
@@ -304,7 +304,7 @@ pub struct ManagedCommandReceipt {
|
|||||||
impl ManagedCommandReceipt {
|
impl ManagedCommandReceipt {
|
||||||
/// Block until the target-set transaction is applied or rejected.
|
/// Block until the target-set transaction is applied or rejected.
|
||||||
///
|
///
|
||||||
/// This is for synchronous callers such as [`BlockingManagedClient`]. It
|
/// This is for synchronous callers such as [`crate::managed::BlockingManagedClient`]. It
|
||||||
/// must not be called from an asynchronous runtime; use the [`Future`]
|
/// must not be called from an asynchronous runtime; use the [`Future`]
|
||||||
/// implementation there instead.
|
/// implementation there instead.
|
||||||
pub fn blocking_wait(self) -> Result<ManagedCommandAcknowledgement, ManagedCommandApplyError> {
|
pub fn blocking_wait(self) -> Result<ManagedCommandAcknowledgement, ManagedCommandApplyError> {
|
||||||
|
|||||||
@@ -139,5 +139,5 @@ scenario contains the existing comparison harness output under
|
|||||||
`netem-summary.json` files. Server stdout/stderr are captured at the run root as
|
`netem-summary.json` files. Server stdout/stderr are captured at the run root as
|
||||||
`server.stdout` and `server.stderr`.
|
`server.stdout` and `server.stderr`.
|
||||||
|
|
||||||
On macOS, `ip netns` and `tc netem` are unavailable; use the GitHub Actions
|
On macOS, `ip netns` and `tc netem` are unavailable; use the Gitea Actions
|
||||||
workflow for netem coverage.
|
workflow for netem coverage.
|
||||||
Reference in new issue
Block a user