From 52033b4f9709b21db2ae9b6ecaad97b917b3d2d5 Mon Sep 17 00:00:00 2001 From: DoubleGate Date: Mon, 26 Oct 2026 00:05:08 -0400 Subject: [PATCH 1/2] chore(deps): consolidate dependency updates, raise MSRV to 1.99.1, and harden CI workflows --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/workflows/ci.yml | 12 +- .github/workflows/fuzz.yml | 59 ++- .github/workflows/gemini-dispatch.yml | 28 +- .github/workflows/gemini-invoke.yml | 19 +- .github/workflows/gemini-review.yml | 21 +- .github/workflows/gemini-scheduled-triage.yml | 19 +- .github/workflows/gemini-triage.yml | 19 +- .github/workflows/release.yml | 4 +- CLAUDE.md | 6 +- CONTRIBUTING.md | 4 +- Cargo.lock | 432 ++++++++++-------- Cargo.toml | 33 +- README.md | 4 +- WARP.md | 2 +- crates/prtip-cli/Cargo.toml | 8 +- crates/prtip-core/Cargo.toml | 4 +- crates/prtip-network/Cargo.toml | 4 +- crates/prtip-scanner/Cargo.toml | 2 +- crates/prtip-tui/Cargo.toml | 2 +- docker/Dockerfile | 6 +- docs/32-USER-GUIDE.md | 2 +- fuzz/Cargo.lock | 344 ++++++++------ fuzz/Cargo.toml | 2 +- 24 files changed, 628 insertions(+), 410 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ea2a84a..232f10c 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -74,7 +74,7 @@ Performance: [metrics if applicable] - [ ] Code follows project style guidelines (`cargo fmt`) - [ ] No clippy warnings (`cargo clippy --workspace --all-targets -- -D warnings`) - [ ] All tests pass (`cargo test --workspace`) -- [ ] MSRV compatibility maintained (Rust 1.95+) +- [ ] MSRV compatibility maintained (Rust 1.99.1+) - [ ] Documentation updated (if needed): - [ ] README.md statistics/features updated - [ ] CHANGELOG.md entry added diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5eb1952..7ab7aba 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -179,13 +179,13 @@ jobs: run: | # Download and extract Npcap SDK (contains Packet.lib for development) Write-Host "Downloading Npcap SDK..." - curl -L -o npcap-sdk.zip https://npcap.com/dist/npcap-sdk-1.13.zip + curl -fL -o npcap-sdk.zip https://npcap.com/dist/npcap-sdk-1.13.zip Expand-Archive -Path npcap-sdk.zip -DestinationPath npcap-sdk Write-Host "✓ Npcap SDK extracted" # Download Npcap installer and extract DLLs without running (avoids hang) Write-Host "`nDownloading Npcap 1.79 installer..." - curl -L -o npcap-installer.exe https://npcap.com/dist/npcap-1.79.exe + curl -fL -o npcap-installer.exe https://npcap.com/dist/npcap-1.79.exe # Extract installer using 7zip (pre-installed on GitHub Actions) Write-Host "Extracting DLLs from Npcap installer (no execution)..." @@ -366,19 +366,19 @@ jobs: # Job 6: MSRV (Minimum Supported Rust Version) check msrv: - name: MSRV Check (1.95) + name: MSRV Check (1.99.1) runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - - name: Install Rust 1.95 + - name: Install Rust 1.99.1 # NOT an action version -- this ref selects the Rust toolchain, and it # must stay equal to `rust-version` in Cargo.toml. Dependabot proposed # bumping it to 1.100, which would have left the job named "Install - # Rust 1.95" while installing 1.100, so the MSRV gate would pass + # Rust 1.99.1" while installing 1.100, so the MSRV gate would pass # without ever testing the floor it claims to enforce. Ignored in # .github/dependabot.yml. - uses: dtolnay/rust-toolchain@1.95 + uses: dtolnay/rust-toolchain@1.99.1 - name: Install system dependencies run: sudo apt-get update && sudo apt-get install -y libpcap-dev pkg-config diff --git a/.github/workflows/fuzz.yml b/.github/workflows/fuzz.yml index c5b8212..c0f8b67 100644 --- a/.github/workflows/fuzz.yml +++ b/.github/workflows/fuzz.yml @@ -27,19 +27,58 @@ env: CARGO_TERM_COLOR: always jobs: + resolve-targets: + name: Resolve Fuzz Targets + runs-on: ubuntu-latest + outputs: + targets: ${{ steps.resolve.outputs.targets }} + steps: + - name: Validate and resolve targets + id: resolve + env: + TARGETS_INPUT: ${{ github.event.inputs.targets || 'all' }} + run: | + KNOWN_TARGETS=("fuzz_tcp_parser" "fuzz_udp_parser" "fuzz_ipv6_parser" "fuzz_icmpv6_parser" "fuzz_tls_parser") + INPUT="$(echo "$TARGETS_INPUT" | tr -d '[:space:]')" + if [ -z "$INPUT" ] || [ "$INPUT" = "all" ]; then + SELECTED=("${KNOWN_TARGETS[@]}") + else + IFS=',' read -r -a REQUESTED <<< "$INPUT" + SELECTED=() + for req in "${REQUESTED[@]}"; do + if [ -z "$req" ]; then + continue + fi + FOUND=false + for known in "${KNOWN_TARGETS[@]}"; do + if [ "$req" = "$known" ]; then + FOUND=true + break + fi + done + if [ "$FOUND" != "true" ]; then + echo "::error::Unknown fuzz target '$req'. Known targets: ${KNOWN_TARGETS[*]} (or 'all')" + exit 1 + fi + SELECTED+=("$req") + done + if [ "${#SELECTED[@]}" -eq 0 ]; then + echo "::error::targets input did not specify any valid fuzz targets: $TARGETS_INPUT" + exit 1 + fi + fi + TARGETS_JSON=$(printf '%s\n' "${SELECTED[@]}" | jq -R . | jq -sc .) + echo "targets=$TARGETS_JSON" >> "$GITHUB_OUTPUT" + fuzz: name: Fuzz ${{ matrix.target }} runs-on: ubuntu-latest + needs: resolve-targets strategy: fail-fast: false # Continue fuzzing other targets even if one crashes matrix: - target: - - fuzz_tcp_parser - - fuzz_udp_parser - - fuzz_ipv6_parser - - fuzz_icmpv6_parser - - fuzz_tls_parser + target: ${{ fromJSON(needs.resolve-targets.outputs.targets) }} steps: - name: Checkout repository @@ -63,7 +102,7 @@ jobs: - name: Cache target directory uses: actions/cache@v6 with: - path: target + path: fuzz/target key: ${{ runner.os }}-fuzz-target-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-fuzz-target-${{ matrix.target }}- @@ -226,18 +265,22 @@ jobs: summary: name: Fuzzing Summary runs-on: ubuntu-latest - needs: fuzz + needs: + - resolve-targets + - fuzz if: always() steps: - name: Generate summary env: DURATION_INPUT: ${{ github.event.inputs.duration || '600' }} + TARGETS_INPUT: ${{ github.event.inputs.targets || 'all' }} run: | echo "## Fuzzing Run Summary" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "**Date:** $(date -u +'%Y-%m-%d %H:%M:%S UTC')" >> $GITHUB_STEP_SUMMARY echo "**Duration:** ${DURATION_INPUT} seconds per target" >> $GITHUB_STEP_SUMMARY + echo "**Targets:** ${TARGETS_INPUT}" >> $GITHUB_STEP_SUMMARY echo "**Trigger:** ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "All fuzz targets executed. Check individual job outputs for statistics." >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/gemini-dispatch.yml b/.github/workflows/gemini-dispatch.yml index c316055..3f0e1c0 100644 --- a/.github/workflows/gemini-dispatch.yml +++ b/.github/workflows/gemini-dispatch.yml @@ -73,7 +73,7 @@ jobs: id: 'mint_identity_token' if: |- ${{ vars.APP_ID }} - uses: 'actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1' # ratchet:actions/create-github-app-token@v3.2.0 + uses: 'actions/create-github-app-token@64ab729a6294000f5aa4a4bc0b73d1f32bc45510' # ratchet:actions/create-github-app-token@v3.3.0 with: app-id: '${{ vars.APP_ID }}' private-key: '${{ secrets.APP_PRIVATE_KEY }}' @@ -81,19 +81,37 @@ jobs: permission-issues: 'write' permission-pull-requests: 'write' + - name: 'Check Gemini credentials' + id: 'check_credentials' + env: + GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}' + GOOGLE_API_KEY: '${{ secrets.GOOGLE_API_KEY }}' + GOOGLE_GENAI_USE_GCA: '${{ vars.GOOGLE_GENAI_USE_GCA }}' + GOOGLE_GENAI_USE_VERTEXAI: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}' + run: |- + if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GOOGLE_GENAI_USE_GCA}${GOOGLE_GENAI_USE_VERTEXAI}" ]; then + echo "configured=true" >> "${GITHUB_OUTPUT}" + else + echo "::notice::Skipping Gemini CLI dispatch: no GEMINI_API_KEY, GOOGLE_API_KEY, GOOGLE_GENAI_USE_GCA, or GOOGLE_GENAI_USE_VERTEXAI configured." + echo "configured=false" >> "${GITHUB_OUTPUT}" + fi + - name: 'Extract command' id: 'extract_command' uses: 'actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3' # ratchet:actions/github-script@v9.0.0 env: EVENT_TYPE: '${{ github.event_name }}.${{ github.event.action }}' REQUEST: '${{ github.event.comment.body || github.event.review.body || github.event.issue.body }}' + GEMINI_CONFIGURED: '${{ steps.check_credentials.outputs.configured }}' with: script: | - const request = process.env.REQUEST; + const request = process.env.REQUEST || ''; const eventType = process.env.EVENT_TYPE core.setOutput('request', request); - if (request.startsWith("@gemini-cli /review")) { + if (process.env.GEMINI_CONFIGURED !== 'true') { + core.setOutput('command', 'skip'); + } else if (request.startsWith("@gemini-cli /review")) { core.setOutput('command', 'review'); const additionalContext = request.replace(/^@gemini-cli \/review/, '').trim(); core.setOutput('additional_context', additionalContext); @@ -112,6 +130,8 @@ jobs: } - name: 'Acknowledge request' + if: |- + ${{ steps.extract_command.outputs.command != 'skip' && steps.extract_command.outputs.command != 'fallthrough' }} env: GITHUB_TOKEN: '${{ steps.mint_identity_token.outputs.token || secrets.GITHUB_TOKEN || github.token }}' ISSUE_NUMBER: '${{ github.event.pull_request.number || github.event.issue.number }}' @@ -183,7 +203,7 @@ jobs: id: 'mint_identity_token' if: |- ${{ vars.APP_ID }} - uses: 'actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1' # ratchet:actions/create-github-app-token@v3.2.0 + uses: 'actions/create-github-app-token@64ab729a6294000f5aa4a4bc0b73d1f32bc45510' # ratchet:actions/create-github-app-token@v3.3.0 with: app-id: '${{ vars.APP_ID }}' private-key: '${{ secrets.APP_PRIVATE_KEY }}' diff --git a/.github/workflows/gemini-invoke.yml b/.github/workflows/gemini-invoke.yml index db224c2..6710562 100644 --- a/.github/workflows/gemini-invoke.yml +++ b/.github/workflows/gemini-invoke.yml @@ -29,7 +29,7 @@ jobs: id: 'mint_identity_token' if: |- ${{ vars.APP_ID }} - uses: 'actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1' # ratchet:actions/create-github-app-token@v3.2.0 + uses: 'actions/create-github-app-token@64ab729a6294000f5aa4a4bc0b73d1f32bc45510' # ratchet:actions/create-github-app-token@v3.3.0 with: app-id: '${{ vars.APP_ID }}' private-key: '${{ secrets.APP_PRIVATE_KEY }}' @@ -37,8 +37,25 @@ jobs: permission-issues: 'write' permission-pull-requests: 'write' + - name: 'Check Gemini credentials' + id: 'check_credentials' + env: + GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}' + GOOGLE_API_KEY: '${{ secrets.GOOGLE_API_KEY }}' + GOOGLE_GENAI_USE_GCA: '${{ vars.GOOGLE_GENAI_USE_GCA }}' + GOOGLE_GENAI_USE_VERTEXAI: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}' + run: |- + if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GOOGLE_GENAI_USE_GCA}${GOOGLE_GENAI_USE_VERTEXAI}" ]; then + echo "configured=true" >> "${GITHUB_OUTPUT}" + else + echo "::notice::Skipping Gemini CLI invocation: no GEMINI_API_KEY, GOOGLE_API_KEY, GOOGLE_GENAI_USE_GCA, or GOOGLE_GENAI_USE_VERTEXAI configured." + echo "configured=false" >> "${GITHUB_OUTPUT}" + fi + - name: 'Run Gemini CLI' id: 'run_gemini' + if: |- + ${{ steps.check_credentials.outputs.configured == 'true' }} uses: 'google-github-actions/run-gemini-cli@v0' # ratchet:exclude env: TITLE: '${{ github.event.pull_request.title || github.event.issue.title }}' diff --git a/.github/workflows/gemini-review.yml b/.github/workflows/gemini-review.yml index 4d86038..1f06c09 100644 --- a/.github/workflows/gemini-review.yml +++ b/.github/workflows/gemini-review.yml @@ -30,7 +30,7 @@ jobs: id: 'mint_identity_token' if: |- ${{ vars.APP_ID }} - uses: 'actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1' # ratchet:actions/create-github-app-token@v3.2.0 + uses: 'actions/create-github-app-token@64ab729a6294000f5aa4a4bc0b73d1f32bc45510' # ratchet:actions/create-github-app-token@v3.3.0 with: app-id: '${{ vars.APP_ID }}' private-key: '${{ secrets.APP_PRIVATE_KEY }}' @@ -38,10 +38,29 @@ jobs: permission-issues: 'write' permission-pull-requests: 'write' + - name: 'Check Gemini credentials' + id: 'check_credentials' + env: + GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}' + GOOGLE_API_KEY: '${{ secrets.GOOGLE_API_KEY }}' + GOOGLE_GENAI_USE_GCA: '${{ vars.GOOGLE_GENAI_USE_GCA }}' + GOOGLE_GENAI_USE_VERTEXAI: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}' + run: |- + if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GOOGLE_GENAI_USE_GCA}${GOOGLE_GENAI_USE_VERTEXAI}" ]; then + echo "configured=true" >> "${GITHUB_OUTPUT}" + else + echo "::notice::Skipping Gemini PR review: no GEMINI_API_KEY, GOOGLE_API_KEY, GOOGLE_GENAI_USE_GCA, or GOOGLE_GENAI_USE_VERTEXAI configured." + echo "configured=false" >> "${GITHUB_OUTPUT}" + fi + - name: 'Checkout repository' + if: |- + ${{ steps.check_credentials.outputs.configured == 'true' }} uses: 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' # ratchet:actions/checkout@v7.0.1 - name: 'Run Gemini pull request review' + if: |- + ${{ steps.check_credentials.outputs.configured == 'true' }} uses: 'google-github-actions/run-gemini-cli@v0' # ratchet:exclude id: 'gemini_pr_review' env: diff --git a/.github/workflows/gemini-scheduled-triage.yml b/.github/workflows/gemini-scheduled-triage.yml index 1666672..c39a717 100644 --- a/.github/workflows/gemini-scheduled-triage.yml +++ b/.github/workflows/gemini-scheduled-triage.yml @@ -81,10 +81,25 @@ jobs: ISSUE_COUNT="$(echo "${ISSUES}" | jq 'length')" echo "✅ Found ${ISSUE_COUNT} issue(s) to triage! 🎯" + - name: 'Check Gemini credentials' + id: 'check_credentials' + env: + GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}' + GOOGLE_API_KEY: '${{ secrets.GOOGLE_API_KEY }}' + GOOGLE_GENAI_USE_GCA: '${{ vars.GOOGLE_GENAI_USE_GCA }}' + GOOGLE_GENAI_USE_VERTEXAI: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}' + run: |- + if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GOOGLE_GENAI_USE_GCA}${GOOGLE_GENAI_USE_VERTEXAI}" ]; then + echo "configured=true" >> "${GITHUB_OUTPUT}" + else + echo "::notice::Skipping Gemini scheduled issue analysis: no GEMINI_API_KEY, GOOGLE_API_KEY, GOOGLE_GENAI_USE_GCA, or GOOGLE_GENAI_USE_VERTEXAI configured." + echo "configured=false" >> "${GITHUB_OUTPUT}" + fi + - name: 'Run Gemini Issue Analysis' id: 'gemini_issue_analysis' if: |- - ${{ steps.find_issues.outputs.issues_to_triage != '[]' }} + ${{ steps.check_credentials.outputs.configured == 'true' && steps.find_issues.outputs.issues_to_triage != '[]' }} uses: 'google-github-actions/run-gemini-cli@v0' # ratchet:exclude env: GITHUB_TOKEN: '' # Do not pass any auth token here since this runs on untrusted inputs @@ -250,7 +265,7 @@ jobs: id: 'mint_identity_token' if: |- ${{ vars.APP_ID }} - uses: 'actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1' # ratchet:actions/create-github-app-token@v3.2.0 + uses: 'actions/create-github-app-token@64ab729a6294000f5aa4a4bc0b73d1f32bc45510' # ratchet:actions/create-github-app-token@v3.3.0 with: app-id: '${{ vars.APP_ID }}' private-key: '${{ secrets.APP_PRIVATE_KEY }}' diff --git a/.github/workflows/gemini-triage.yml b/.github/workflows/gemini-triage.yml index 9d07127..1c8eb66 100644 --- a/.github/workflows/gemini-triage.yml +++ b/.github/workflows/gemini-triage.yml @@ -51,10 +51,25 @@ jobs: core.info(`Found ${labelNames.length} labels: ${labelNames.join(', ')}`); return labelNames; + - name: 'Check Gemini credentials' + id: 'check_credentials' + env: + GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}' + GOOGLE_API_KEY: '${{ secrets.GOOGLE_API_KEY }}' + GOOGLE_GENAI_USE_GCA: '${{ vars.GOOGLE_GENAI_USE_GCA }}' + GOOGLE_GENAI_USE_VERTEXAI: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}' + run: |- + if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GOOGLE_GENAI_USE_GCA}${GOOGLE_GENAI_USE_VERTEXAI}" ]; then + echo "configured=true" >> "${GITHUB_OUTPUT}" + else + echo "::notice::Skipping Gemini issue analysis: no GEMINI_API_KEY, GOOGLE_API_KEY, GOOGLE_GENAI_USE_GCA, or GOOGLE_GENAI_USE_VERTEXAI configured." + echo "configured=false" >> "${GITHUB_OUTPUT}" + fi + - name: 'Run Gemini issue analysis' id: 'gemini_analysis' if: |- - ${{ steps.get_labels.outputs.available_labels != '' }} + ${{ steps.check_credentials.outputs.configured == 'true' && steps.get_labels.outputs.available_labels != '' }} uses: 'google-github-actions/run-gemini-cli@v0' # ratchet:exclude env: GITHUB_TOKEN: '' # Do NOT pass any auth tokens here since this runs on untrusted inputs @@ -158,7 +173,7 @@ jobs: id: 'mint_identity_token' if: |- ${{ vars.APP_ID }} - uses: 'actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1' # ratchet:actions/create-github-app-token@v3.2.0 + uses: 'actions/create-github-app-token@64ab729a6294000f5aa4a4bc0b73d1f32bc45510' # ratchet:actions/create-github-app-token@v3.3.0 with: app-id: '${{ vars.APP_ID }}' private-key: '${{ secrets.APP_PRIVATE_KEY }}' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7251c24..26c46c5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -301,11 +301,11 @@ jobs: if: matrix.os == 'windows-latest' run: | # Download and extract Npcap SDK (contains Packet.lib for development) - curl -L -o npcap-sdk.zip https://npcap.com/dist/npcap-sdk-1.13.zip + curl -fL -o npcap-sdk.zip https://npcap.com/dist/npcap-sdk-1.13.zip Expand-Archive -Path npcap-sdk.zip -DestinationPath npcap-sdk # Download Npcap installer and extract DLLs without running (avoids hang) - curl -L -o npcap-installer.exe https://npcap.com/dist/npcap-1.79.exe + curl -fL -o npcap-installer.exe https://npcap.com/dist/npcap-1.79.exe # Extract installer using 7zip (pre-installed on GitHub Actions) 7z x npcap-installer.exe -o"npcap-runtime" -y diff --git a/CLAUDE.md b/CLAUDE.md index d8ea147..07e9a55 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -43,10 +43,10 @@ ProRT-IP project guidance for Claude Code. ## Critical Dependencies ```toml -tokio = "1.35" # Async runtime +tokio = "1.54" # Async runtime pnet = "0.35" # Packets -clap = "4.5" # CLI -sqlx = "0.8" # Async SQL (0.9 needs Rust 1.94, above the 1.88 MSRV) +clap = "4.6" # CLI +sqlx = "0.9" # Async SQL ratatui = "0.30" # TUI ``` diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f663e73..6c17768 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -87,7 +87,7 @@ Complete development setup instructions are available in **[docs/03-DEV-SETUP.md ### Quick Start -1. **Install Rust** (1.88+ required; edition 2024 needs 1.85, raised for the patched `time`): +1. **Install Rust** (1.99.1+ required): ```bash curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh @@ -344,7 +344,7 @@ CI runs automatically on every push and PR. Check the [Actions tab](https://gith - `clippy`: ~2-3 minutes - Lint checks with caching - `test`: ~3-5 minutes per platform (parallel) - Build and test (789 tests) - `security_audit`: ~1-2 minutes - Vulnerability scanning -- `msrv`: ~2-3 minutes - Minimum version verification (Rust 1.88+) +- `msrv`: ~2-3 minutes - Minimum version verification (Rust 1.99.1+) **Total CI time:** ~5-10 minutes (with caching and parallel execution) **Current Status:** 7/7 jobs passing (100%) diff --git a/Cargo.lock b/Cargo.lock index aa92f8f..c245770 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -198,9 +198,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-rs" -version = "1.18.1" +version = "1.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b281d307588d634de920874890732659e2e7672f72b5e10e81badc1a8a83621e" +checksum = "faac5829c2b74c28f830747e7818ccfb684261b5f48a1118b1e2a13d36dfab13" dependencies = [ "aws-lc-sys", "zeroize", @@ -208,9 +208,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.45.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bff6c3b54fad79a2e60b8102caf565819711497c1f5f092f49508e2f5c31b27" +checksum = "f1622d8446a2d4b2ce0c7eefc73dd43a99779028d5ee5c2dd8073a658ba8a2bc" dependencies = [ "cc", "cmake", @@ -316,7 +316,7 @@ checksum = "46d07918caa9eeaaf06b7873925c53a61daac173539b4f7715090745e44e4e69" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -363,9 +363,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.7" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54413ede23c2daf518f35156dfde027feb2374004d63bd497f983c8db9c0e313" +checksum = "86e055fa6e3e40ad6187ba25b6855eeb635d5271f8e0f0e1e9a5826b8d75bea0" dependencies = [ "find-msvc-tools", "jobserver", @@ -468,7 +468,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -593,9 +593,9 @@ checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" [[package]] name = "crc32fast" -version = "1.5.2" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" +checksum = "0ba106e844045ddc02c20768ac4b0b7cb45f2cc2ecbd833ac9f5dacb183c2055" dependencies = [ "cfg-if", ] @@ -710,7 +710,7 @@ dependencies = [ "document-features", "futures-core", "mio", - "parking_lot", + "parking_lot 0.12.5", "rustix", "signal-hook", "signal-hook-mio", @@ -734,9 +734,9 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" -version = "0.1.7" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", @@ -784,9 +784,9 @@ dependencies = [ [[package]] name = "ctutils" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03bb0e1cc970d482d121d9a1744999169b69a07470b3d644a7894e53fcaf4574" +checksum = "fe3e9d21d39e6f39ff46e03d5b621424f88ee23d8a1672c6bfc9ccc7f2da4f6a" dependencies = [ "cmov", ] @@ -811,7 +811,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -822,7 +822,7 @@ checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785" dependencies = [ "darling_core", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -834,9 +834,9 @@ dependencies = [ "cfg-if", "crossbeam-utils", "hashbrown 0.14.5", - "lock_api", + "lock_api 0.4.14", "once_cell", - "parking_lot_core", + "parking_lot_core 0.9.12", ] [[package]] @@ -867,9 +867,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e" [[package]] name = "derive-into-owned" @@ -918,7 +918,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", - "crypto-common 0.1.7", + "crypto-common 0.1.6", ] [[package]] @@ -971,7 +971,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -997,9 +997,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "either" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" +checksum = "0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be" dependencies = [ "serde", ] @@ -1012,9 +1012,9 @@ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "equivalent" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826" [[package]] name = "errno" @@ -1094,9 +1094,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.13" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25905e51abafe4dcea6c15fec58c57b601cdbd0ee53d22ea1d3016c587d39b" +checksum = "1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48" [[package]] name = "finl_unicode" @@ -1232,8 +1232,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" dependencies = [ "futures-core", - "lock_api", - "parking_lot", + "lock_api 0.4.14", + "parking_lot 0.12.5", ] [[package]] @@ -1250,7 +1250,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -1290,9 +1290,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -1355,7 +1355,7 @@ dependencies = [ "getrandom 0.3.4", "hashbrown 0.16.1", "nonzero_ext", - "parking_lot", + "parking_lot 0.12.5", "portable-atomic", "quanta", "rand 0.9.5", @@ -1450,9 +1450,9 @@ dependencies = [ [[package]] name = "hwlocality" -version = "1.0.0-alpha.12" +version = "1.0.0-alpha.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2e65a48d3b300843ac84a2fe8e166bb5a5b00f30054593bcee8157e4b465fd" +checksum = "675f669dc152dbbbdf9cc9602192262e2ff465c822d32bb937157c5300d5d61f" dependencies = [ "arrayvec", "bitflags 2.13.2", @@ -1467,9 +1467,9 @@ dependencies = [ [[package]] name = "hwlocality-sys" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507b4c70a812b6ed5907db7d59726118f4e17708fbc09e32a872ac8e3b5bafaf" +checksum = "e6a8feaeb431a8d8d4f163456e9b5bc7b18bc30c576360d2da2c04990da2f357" dependencies = [ "libc", "pkg-config", @@ -1511,9 +1511,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +checksum = "fe090a42a0d3140fed8c63263ed1fecc02422cb2f4bfe55cd8de2de1b8e105dd" dependencies = [ "displaydoc", "potential_utf", @@ -1525,9 +1525,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +checksum = "25d29b57c17c6528d0dc4c2141cfa2d08200465acb537a3909c8b9b8a4a984c0" dependencies = [ "displaydoc", "litemap", @@ -1538,9 +1538,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +checksum = "404a3b8c486f205c87fe7f23ab6894d84a4ad76d6e4671ae1981ba7def87c599" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -1552,15 +1552,15 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" +checksum = "20f0088bfb7441f7a37fa0c9e20cb1e9cba1cac6b9ce8cd2a6dc44294f8e8cbc" [[package]] name = "icu_properties" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +checksum = "2ea83d991c56158f7cf898bf86436c1dfe7c07ee82fe88951f2695c9f37a379f" dependencies = [ "displaydoc", "icu_collections", @@ -1573,15 +1573,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" +checksum = "b98f29af82d02b163fe50161388350e743bb3107cc8e8c2f7314cb505faddfcf" [[package]] name = "icu_provider" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" +checksum = "413099315636c588ee8f011190b329b971a09a8fae9d157e01dcae8379468514" dependencies = [ "displaydoc", "icu_locale_core", @@ -1644,9 +1644,9 @@ dependencies = [ [[package]] name = "indoc" -version = "2.0.7" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +checksum = "a37b2691796cffeb8a8cd305ac66e65841559f147f4e63231d0eafa4db5384d1" dependencies = [ "rustversion", ] @@ -1661,7 +1661,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -1724,9 +1724,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.105" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" dependencies = [ "cfg-if", "futures-util", @@ -1735,11 +1735,11 @@ dependencies = [ [[package]] name = "kasuari" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde5057d6143cc94e861d90f591b9303d6716c6b9602309150bd068853c10899" +checksum = "72f14c90e40a6133f4805b83542a7ed7364f56070b447f56e7f4e90297122209" dependencies = [ - "hashbrown 0.16.1", + "hashbrown 0.17.1", "portable-atomic", "thiserror 2.0.21", ] @@ -1752,15 +1752,15 @@ checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f" [[package]] name = "lazy_static" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb" [[package]] name = "libc" -version = "0.2.189" +version = "0.2.191" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" +checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a" [[package]] name = "libm" @@ -1779,9 +1779,9 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.30.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +checksum = "b1f111c8c41e7c61a49cd34e44c7619462967221a6443b0ec299e0ac30cfb9b1" dependencies = [ "cc", "pkg-config", @@ -1811,9 +1811,9 @@ checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "litrs" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" +checksum = "4744e383959f0db86ede514b809b1c53251889093803c05267acc7d4e7030d70" [[package]] name = "lock_api" @@ -1824,6 +1824,15 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "lock_api" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65d91b22da179613dcf4d6ec8349563f52a363f6849e03b00dd0a185ec4a59af" +dependencies = [ + "scopeguard", +] + [[package]] name = "log" version = "0.4.34" @@ -1850,9 +1859,9 @@ dependencies = [ [[package]] name = "luajit-src" -version = "210.7.3+1ee778a" +version = "210.7.4+c6ffc14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "869665372263eb337b14f480cfb864b89f12eade4eb42cb415f71517b4a67572" +checksum = "1db548b001f0b7da416daf0ffae963912bae6cad1799fa9f4eaba09da6dba837" dependencies = [ "cc", "which", @@ -1860,12 +1869,12 @@ dependencies = [ [[package]] name = "mac_address" -version = "1.1.8" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" +checksum = "f3d0581a75c45969c63afd2bb87b1d8b25cfcc556c7a918cf9bb13b0fe8d2381" dependencies = [ - "nix 0.29.0", - "winapi", + "nix 0.31.3", + "windows-sys 0.61.2", ] [[package]] @@ -1895,9 +1904,9 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memmap2" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" +checksum = "6b0ca1155a9ecc25aa12e8313a119f32edf0255fea2f44839c4ac0a12b2ac157" dependencies = [ "libc", ] @@ -1935,9 +1944,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.3" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" +checksum = "1788edb87fdc09c7e26304471e2f5be8cdefb1b6930d6e3985fc02ff53bf86ee" dependencies = [ "libc", "log", @@ -1947,24 +1956,24 @@ dependencies = [ [[package]] name = "mlua" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96e5d00f19d8c46c71ceaced99593b90c31c57aa1fe2cb3e93a8b1698eedba9" +checksum = "7a7ae6b65bf54b7fdd4cf5b6f44f60862350ebf3fe3779b3a9cc005e7fa14f81" dependencies = [ "bstr", "either", "libc", "mlua-sys", "num-traits", - "parking_lot", + "parking_lot 0.12.5", "rustc-hash", ] [[package]] name = "mlua-sys" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b806d7ade031f5d6607eae3e283fb034cb795a76247dd0d1ba753c8c42debccf" +checksum = "1631cda17bd6486410ab751d91f5fd4484f441589278cdad879eb3afc721a285" dependencies = [ "cc", "cfg-if", @@ -2021,7 +2030,6 @@ dependencies = [ "cfg-if", "cfg_aliases", "libc", - "memoffset", ] [[package]] @@ -2034,6 +2042,7 @@ dependencies = [ "cfg-if", "cfg_aliases", "libc", + "memoffset", ] [[package]] @@ -2139,9 +2148,9 @@ dependencies = [ [[package]] name = "num_threads" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +checksum = "cabcc654086861f9e1bc5115258de62ef92c79b20f4615a1b0cc57c4e82027d4" dependencies = [ "libc", ] @@ -2353,8 +2362,18 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ - "lock_api", - "parking_lot_core", + "lock_api 0.4.14", + "parking_lot_core 0.9.12", +] + +[[package]] +name = "parking_lot" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9cf937ca4e1d0b7578784559063422fc39ae7c5a00f02471f2614d5486fd226" +dependencies = [ + "lock_api 0.5.0", + "parking_lot_core 0.10.0", ] [[package]] @@ -2365,7 +2384,19 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.18", + "smallvec", + "windows-link", +] + +[[package]] +name = "parking_lot_core" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cfff060068cc18aa7815010fcaf80c68c7fb9e85fc7f5c0f9bf142c21d19826" +dependencies = [ + "libc", + "redox_syscall 0.9.5", "smallvec", "windows-link", ] @@ -2389,19 +2420,21 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.9.2" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45d3aca230fad2e6f6317ca0a72724338c4960cb97168a85cdee66df4a9a21a8" +checksum = "fd47a460a9cbc3b3429c7e22bf0d76653e779319bae45a499ca010c9a990bb23" dependencies = [ "memchr", + "psm", + "stacker", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.9.2" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284b60557f2c4a2e72ad3f2d34d42685a2fa4a6a61d0d2a10c0ae2a5e916c2cf" +checksum = "203e46697708f7519ab1608393cf89239cafb46b8e6d08a8ffe359359b11ef44" dependencies = [ "pest", "pest_generator", @@ -2409,22 +2442,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.9.2" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9d1f08a115309ee99268cf85e5228e0e56aa9caf8841ec12866b6be07c3109" +checksum = "e84ae6340a458d3d6cfc73cf328cf3cfe90b2484cd0de25eb66aa954615ed4d5" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.9", ] [[package]] name = "pest_meta" -version = "2.9.2" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed93ba1a9ffcca32130a5188701c81c0c49cf00d4b7c5007d5148951d743adcb" +checksum = "b57f92f32b3dbce6598fd8f5cdf1f06a6072570b8103fa21728fa9036923e710" dependencies = [ "pest", ] @@ -2629,9 +2662,9 @@ dependencies = [ [[package]] name = "powerfmt" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958" [[package]] name = "ppv-lite86" @@ -2697,7 +2730,7 @@ dependencies = [ "indicatif", "libc", "num_cpus", - "parking_lot", + "parking_lot 0.13.0", "pcap-file", "predicates", "prtip-core", @@ -2727,7 +2760,7 @@ dependencies = [ "flate2", "indicatif", "ipnetwork 0.21.1", - "parking_lot", + "parking_lot 0.13.0", "rand 0.10.3", "regex", "rkyv", @@ -2753,7 +2786,7 @@ dependencies = [ "hwlocality", "libc", "nix 0.31.3", - "parking_lot", + "parking_lot 0.13.0", "pnet", "pnet_datalink", "pnet_packet", @@ -2782,7 +2815,7 @@ dependencies = [ "mlua", "native-tls", "nonzero_ext", - "parking_lot", + "parking_lot 0.13.0", "pcap-file", "pnet", "pnet_packet", @@ -2816,7 +2849,7 @@ dependencies = [ "dirs", "futures", "ipnetwork 0.21.1", - "parking_lot", + "parking_lot 0.13.0", "prtip-core", "ratatui", "tempfile", @@ -2825,6 +2858,15 @@ dependencies = [ "uuid", ] +[[package]] +name = "psm" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" +dependencies = [ + "cc", +] + [[package]] name = "ptr_meta" version = "0.3.2" @@ -2842,7 +2884,7 @@ checksum = "1c8d9ca532f185d5d4db7a7c9d51420b452168ea1c2b913953281bd6fe1fcbd0" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -3090,6 +3132,15 @@ dependencies = [ "bitflags 2.13.2", ] +[[package]] +name = "redox_syscall" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "580c875845b41ecb1564ad1ae4703044cef774145e3d7a94dc2b3fa7c97868fd" +dependencies = [ + "bitflags 2.13.2", +] + [[package]] name = "redox_users" version = "0.5.3" @@ -3179,7 +3230,7 @@ checksum = "1c25ef604ac7dd839d44d64648952ea23c97866f124ff671b0ed2cf3ad9bb06e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -3230,9 +3281,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.45" +version = "0.23.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" +checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf" dependencies = [ "aws-lc-rs", "log", @@ -3254,9 +3305,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.15" +version = "0.103.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" +checksum = "4443b1b6d39d7c663139942cc4558262562d2c84123bb6282ef177009ca8b281" dependencies = [ "aws-lc-rs", "ring", @@ -3287,9 +3338,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +checksum = "9cb23c424d8ee841bb4d813677ca237e2a610067d594fec130f87d6093495ab5" dependencies = [ "windows-sys 0.61.2", ] @@ -3356,14 +3407,14 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] name = "serde_json" -version = "1.0.151" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" dependencies = [ "itoa", "memchr", @@ -3374,9 +3425,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +checksum = "4e7523beb55eece201a2356bee0bbca0d1ab466c14c07703b2e0ee6d42cb0c2c" dependencies = [ "serde_core", ] @@ -3405,9 +3456,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +checksum = "47d7069beb7d6ac7b9acd1039986e73443f24234f41074da099d6f994ac9ad19" dependencies = [ "cfg-if", "cpufeatures 0.3.1", @@ -3474,9 +3525,9 @@ checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "siphasher" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" +checksum = "33f4fe9184a62d842c9ef383018f3306d8ba224fd9d836f56d7288308847c256" [[package]] name = "slab" @@ -3486,9 +3537,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.16.1" +version = "1.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" +checksum = "d0d5d4b1981b8bbbb7aed204cae5726d683d5d6ac7e74ec54122ea28f315e7c8" dependencies = [ "serde", ] @@ -3509,7 +3560,7 @@ version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" dependencies = [ - "lock_api", + "lock_api 0.4.14", ] [[package]] @@ -3518,7 +3569,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" dependencies = [ - "lock_api", + "lock_api 0.4.14", ] [[package]] @@ -3629,7 +3680,7 @@ dependencies = [ "percent-encoding", "serde", "sha1", - "sha2 0.11.0", + "sha2 0.11.1", "sqlx-core", "thiserror 2.0.21", "tracing", @@ -3662,7 +3713,7 @@ dependencies = [ "rand 0.10.3", "serde", "serde_json", - "sha2 0.11.0", + "sha2 0.11.1", "smallvec", "sqlx-core", "stringprep", @@ -3702,6 +3753,19 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +[[package]] +name = "stacker" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707f49d46706bacf8a2b00d51dace3f9de527c13eec3778f570c411f89e69967" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "windows-sys 0.61.2", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -3776,9 +3840,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.6" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" dependencies = [ "proc-macro2", "quote", @@ -3804,7 +3868,7 @@ checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -3842,7 +3906,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9048a889effe34a5cddee0af7f53285198b16dca3be510858d38dfdb3e62a04e" dependencies = [ "bitflags 2.13.2", - "parking_lot", + "parking_lot 0.12.5", "rustix", "signal-hook", "windows-sys 0.61.2", @@ -3954,7 +4018,7 @@ checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -4000,9 +4064,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +checksum = "abc840c238154d58f9e86b2792261edfde565a17696e1cda1a449de27979801a" dependencies = [ "displaydoc", "zerovec", @@ -4026,14 +4090,14 @@ checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" -version = "1.53.1" +version = "1.54.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3" dependencies = [ "bytes", "libc", "mio", - "parking_lot", + "parking_lot 0.12.5", "pin-project-lite", "signal-hook-registry", "socket2", @@ -4049,7 +4113,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -4064,9 +4128,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.5" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" +checksum = "c9cc2678c2cdd569ef8215e2afd7954ada2ae20b4fdd2c5fe6139a3b02d105db" dependencies = [ "rustls", "tokio", @@ -4085,9 +4149,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.6+spec-1.1.0" +version = "1.1.8+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "920602543f0911ab71da12c50d59701da54c196d1a2bf5cb4b75667f137a406a" +checksum = "20489e00e4d8741d6be680764cc12e270655e375a20d1011e844a9c3379e678d" dependencies = [ "indexmap", "serde_core", @@ -4100,27 +4164,27 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +checksum = "2b86d767906c6c42421dcba507eb9d203e779497710a47782a224bb871653053" dependencies = [ "serde_core", ] [[package]] name = "toml_parser" -version = "1.1.3+spec-1.1.0" +version = "1.1.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +checksum = "baa693a8032d7e1cada7d0041e96126df243179ff061456783ac7f12bda4744c" dependencies = [ "winnow", ] [[package]] name = "toml_writer" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" +checksum = "06bdbd8cfc056b8d2e2e85f29b56a3bdbecb527cef81eb39e3e7b98af4652770" [[package]] name = "tracing" @@ -4204,15 +4268,15 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" [[package]] name = "unicode-normalization" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" +checksum = "75cd3fb03d5288b3ba9a1ee103ac7e9cbb59f0b03d64f8ddfcc04dd42758a85d" dependencies = [ "tinyvec", ] @@ -4290,9 +4354,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.26.1" +version = "1.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" +checksum = "4a0e2d11620c50695fe12bbbfde96b3477fe606e7284c22d505c12ce51214514" dependencies = [ "atomic", "getrandom 0.4.3", @@ -4364,9 +4428,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" dependencies = [ "cfg-if", "once_cell", @@ -4377,9 +4441,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4387,31 +4451,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.105" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" +checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" dependencies = [ "js-sys", "wasm-bindgen", @@ -4774,9 +4838,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +checksum = "417ef3fcf6c300b7dbd25c85531a746931c02ad536f3cf4786ed1e88223340b3" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -4785,30 +4849,30 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" +checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "synstructure 0.14.0", ] [[package]] name = "zerocopy" -version = "0.8.58" +version = "0.8.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17e8fafad82b542ff3717217ecdc736231b59e387768c9630123b4ce4d2db44" +checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.58" +version = "0.8.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595f56e044df4f46a0c9a626f65c3d99eb8488f7e8a8baa12dd76326d9710bf2" +checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f" dependencies = [ "proc-macro2", "quote", @@ -4832,15 +4896,15 @@ checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "synstructure 0.14.0", ] [[package]] name = "zeroize" -version = "1.9.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" +checksum = "e13084392c5e4bc371903e2935a5eaeed24905a7511356b883835e18a78f6879" [[package]] name = "zerotrie" @@ -4855,9 +4919,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" +checksum = "f58a2799cfe9a1670c7ea8edbd52ef8edb93cb37a7f83bf31ba9e35d9dae6a40" dependencies = [ "yoke", "zerofrom", @@ -4866,13 +4930,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.6" +version = "0.11.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" +checksum = "c3743ddbf47738d929cd1ae2e199d40d0162979dfe31aef8ae646d2bf00bf97a" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 59d6b23..0d36213 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,20 +12,17 @@ resolver = "2" [workspace.dependencies] # Async runtime -tokio = { version = "1.35", features = ["full"] } -tokio-util = "0.7" +tokio = { version = "1.54", features = ["full"] } # Networking pnet = "0.35" pnet_datalink = "0.35" pnet_packet = "0.35" -pcap = "2.0" # Concurrency crossbeam = "0.8" -parking_lot = "0.12" -rayon = "1.8" -dashmap = "6.1" +parking_lot = "0.13" +dashmap = "6.2" # Serialization serde = { version = "1.0", features = ["derive"] } @@ -33,26 +30,14 @@ serde_json = "1.0" toml = "1.1" # CLI -clap = { version = "4.5", features = ["derive", "cargo"] } +clap = { version = "4.6", features = ["derive", "cargo"] } colored = "3.1" -# Database -rusqlite = { version = "0.31", features = ["bundled"] } - # Memory-mapped I/O (Sprint 6.6) memmap2 = "0.9" # Zero-copy serialization (rkyv migration) -rkyv = { version = "0.8.14", features = ["std", "alloc"] } - -# CSV export (promote to workspace) -csv = "1.3" - -# Template engine for HTML reports (Sprint 6.6) -tera = "1.19" - -# PDF generation (Sprint 6.6, optional) -printpdf = "0.6" +rkyv = { version = "0.8.18", features = ["std", "alloc"] } # Home directory detection dirs = "7.0" @@ -77,11 +62,11 @@ governor = "0.10" ipnetwork = { version = "0.21", features = ["serde"] } rand = "0.10" chrono = { version = "0.4", features = ["serde"] } -uuid = { version = "1.7", features = ["v4", "serde"] } -num_cpus = "1.16" +uuid = { version = "1.29", features = ["v4", "serde"] } +num_cpus = "1.17" rlimit = "0.11" indicatif = "0.18" -regex = "1.11" +regex = "1.13" sysinfo = "0.39" # Plugin system @@ -100,7 +85,7 @@ windows = { version = "0.62", features = ["Win32_Security", "Win32_Foundation", [workspace.package] version = "1.0.0" edition = "2021" -rust-version = "1.95" +rust-version = "1.99.1" authors = ["ProRT-IP Contributors"] license = "GPL-3.0-or-later" repository = "https://github.com/doublegate/ProRT-IP" diff --git a/README.md b/README.md index b41b5b3..4b3fc7b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ [![Tests](https://img.shields.io/badge/tests-2,557%20passing-success)](https://github.com/doublegate/ProRT-IP/actions) ![Coverage](https://img.shields.io/badge/coverage-51.40%25-yellow) [![License](https://img.shields.io/badge/license-GPLv3-blue.svg)](LICENSE) -[![Rust](https://img.shields.io/badge/rust-1.95%2B-orange.svg)](https://www.rust-lang.org) +[![Rust](https://img.shields.io/badge/rust-1.99.1%2B-orange.svg)](https://www.rust-lang.org) [![Docker](https://img.shields.io/badge/docker-doublegate%2Fprtip-blue)](https://hub.docker.com/r/doublegate/prtip) **Modern network scanner combining Masscan/ZMap speed with Nmap detection depth.** @@ -292,7 +292,7 @@ prtip -T4 target # Aggressive (recommended) ### Build Requirements -- Rust 1.95+ (MSRV; required for sysinfo 0.39 and sqlx 0.9 compatibility) +- Rust 1.99.1+ (MSRV; aligned with current stable Rust for sysinfo 0.39, sqlx 0.9, and parking_lot 0.13) - libpcap (Linux/macOS) or Npcap (Windows) - OpenSSL development libraries - (Optional) hwloc for NUMA optimization diff --git a/WARP.md b/WARP.md index c36a5bf..2a62aa3 100644 --- a/WARP.md +++ b/WARP.md @@ -232,7 +232,7 @@ The scheduler manages target queues, assigns work to workers, handles backpressu ### Style and Tooling - **Edition**: Rust 2021 -- **MSRV**: 1.88+ (edition 2024 needs 1.85; raised to 1.88 for the patched `time`) +- **MSRV**: 1.99.1+ - **Formatting**: `rustfmt` defaults (4-space indentation, trailing commas) - **Linting**: Zero clippy warnings enforced (`-D warnings`) diff --git a/crates/prtip-cli/Cargo.toml b/crates/prtip-cli/Cargo.toml index 29745cb..a40882e 100644 --- a/crates/prtip-cli/Cargo.toml +++ b/crates/prtip-cli/Cargo.toml @@ -42,7 +42,7 @@ toml = { workspace = true } # value goes through src/xml.rs. A `quick-xml` dependency was declared here but # never imported by any source file, so it contributed nothing but two # advisories (RUSTSEC-2026-0194, RUSTSEC-2026-0195). -csv = "1.3" +csv = "1.4" pcap-file = { workspace = true } # Logging @@ -72,9 +72,9 @@ parking_lot = { workspace = true } libc = { workspace = true } [dev-dependencies] -tempfile = "3.8" -assert_cmd = "2.0" -predicates = "3.0" +tempfile = "3.27" +assert_cmd = "2.2" +predicates = "3.1" criterion = { version = "0.8", features = ["html_reports"] } uuid = { workspace = true } diff --git a/crates/prtip-core/Cargo.toml b/crates/prtip-core/Cargo.toml index 4e8d458..fcc6b8a 100644 --- a/crates/prtip-core/Cargo.toml +++ b/crates/prtip-core/Cargo.toml @@ -28,14 +28,14 @@ regex = { workspace = true } tokio = { workspace = true } rand = { workspace = true } sysinfo = { workspace = true } -flate2 = "1.0" +flate2 = "1.1" dirs = { workspace = true } rkyv = { workspace = true } [dev-dependencies] tokio = { workspace = true } criterion = { version = "0.8", features = ["html_reports", "async_tokio"] } -tempfile = "3.8" +tempfile = "3.27" filetime = "0.2" [[bench]] diff --git a/crates/prtip-network/Cargo.toml b/crates/prtip-network/Cargo.toml index c05c94a..cf42343 100644 --- a/crates/prtip-network/Cargo.toml +++ b/crates/prtip-network/Cargo.toml @@ -21,13 +21,13 @@ tokio = { workspace = true } pnet = { workspace = true } pnet_datalink = { workspace = true } pnet_packet = { workspace = true } -bytes = "1.9" +bytes = "1.12" thiserror = { workspace = true } anyhow = { workspace = true } tracing = { workspace = true } rand = { workspace = true } parking_lot = { workspace = true } -hwlocality = { version = "1.0.0-alpha.11", optional = true } +hwlocality = { version = "1.0.0-alpha.13", optional = true } [target.'cfg(unix)'.dependencies] nix = { workspace = true, features = ["sched"] } diff --git a/crates/prtip-scanner/Cargo.toml b/crates/prtip-scanner/Cargo.toml index 2988345..d607008 100644 --- a/crates/prtip-scanner/Cargo.toml +++ b/crates/prtip-scanner/Cargo.toml @@ -88,7 +88,7 @@ rkyv = { workspace = true } [dev-dependencies] tokio = { workspace = true } -tempfile = "3.8" +tempfile = "3.27" criterion = { version = "0.8", features = ["html_reports"] } [[bench]] diff --git a/crates/prtip-tui/Cargo.toml b/crates/prtip-tui/Cargo.toml index e47e5ac..1dda514 100644 --- a/crates/prtip-tui/Cargo.toml +++ b/crates/prtip-tui/Cargo.toml @@ -42,4 +42,4 @@ uuid = { workspace = true, features = ["v4"] } dirs.workspace = true [dev-dependencies] -tempfile = "3.8" +tempfile = "3.27" diff --git a/docker/Dockerfile b/docker/Dockerfile index ee6a4fd..e498caf 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -9,10 +9,10 @@ # docker run --rm --net=host --cap-add=NET_RAW prtip -sS -p 80,443 192.168.1.1 # docker run -it --rm --net=host --cap-add=NET_RAW prtip --tui -# Must be >= the workspace `rust-version` in Cargo.toml (1.95). A pin below -# the MSRV fails the build with "requires rustc 1.95 or newer"; nothing in CI +# Must be >= the workspace `rust-version` in Cargo.toml (1.99.1). A pin below +# the MSRV fails the build with "requires rustc 1.99.1 or newer"; nothing in CI # caught the drift because packages.yml only runs on releases. -ARG RUST_VERSION=1.95 +ARG RUST_VERSION=1.99.1 ARG VERSION=1.0.0 # ============================================================================== diff --git a/docs/32-USER-GUIDE.md b/docs/32-USER-GUIDE.md index cd54adb..25ff511 100644 --- a/docs/32-USER-GUIDE.md +++ b/docs/32-USER-GUIDE.md @@ -315,7 +315,7 @@ cd ProRT-IP # Create Dockerfile (example) cat > Dockerfile < Date: Mon, 26 Oct 2026 00:17:41 -0400 Subject: [PATCH 2/2] ci(workflows): detect Gemini auth via credentials/WIF and deduplicate fuzz targets --- .github/workflows/fuzz.yml | 11 ++++++++++- .github/workflows/gemini-dispatch.yml | 7 +++---- .github/workflows/gemini-invoke.yml | 7 +++---- .github/workflows/gemini-review.yml | 7 +++---- .github/workflows/gemini-scheduled-triage.yml | 7 +++---- .github/workflows/gemini-triage.yml | 7 +++---- 6 files changed, 25 insertions(+), 21 deletions(-) diff --git a/.github/workflows/fuzz.yml b/.github/workflows/fuzz.yml index c0f8b67..4b04bd7 100644 --- a/.github/workflows/fuzz.yml +++ b/.github/workflows/fuzz.yml @@ -60,7 +60,16 @@ jobs: echo "::error::Unknown fuzz target '$req'. Known targets: ${KNOWN_TARGETS[*]} (or 'all')" exit 1 fi - SELECTED+=("$req") + ALREADY_SELECTED=false + for sel in "${SELECTED[@]}"; do + if [ "$req" = "$sel" ]; then + ALREADY_SELECTED=true + break + fi + done + if [ "$ALREADY_SELECTED" != "true" ]; then + SELECTED+=("$req") + fi done if [ "${#SELECTED[@]}" -eq 0 ]; then echo "::error::targets input did not specify any valid fuzz targets: $TARGETS_INPUT" diff --git a/.github/workflows/gemini-dispatch.yml b/.github/workflows/gemini-dispatch.yml index 3f0e1c0..797f316 100644 --- a/.github/workflows/gemini-dispatch.yml +++ b/.github/workflows/gemini-dispatch.yml @@ -86,13 +86,12 @@ jobs: env: GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}' GOOGLE_API_KEY: '${{ secrets.GOOGLE_API_KEY }}' - GOOGLE_GENAI_USE_GCA: '${{ vars.GOOGLE_GENAI_USE_GCA }}' - GOOGLE_GENAI_USE_VERTEXAI: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}' + GCP_WIF_PROVIDER: '${{ vars.GCP_WIF_PROVIDER }}' run: |- - if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GOOGLE_GENAI_USE_GCA}${GOOGLE_GENAI_USE_VERTEXAI}" ]; then + if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GCP_WIF_PROVIDER}" ]; then echo "configured=true" >> "${GITHUB_OUTPUT}" else - echo "::notice::Skipping Gemini CLI dispatch: no GEMINI_API_KEY, GOOGLE_API_KEY, GOOGLE_GENAI_USE_GCA, or GOOGLE_GENAI_USE_VERTEXAI configured." + echo "::notice::Skipping Gemini CLI dispatch: no GEMINI_API_KEY, GOOGLE_API_KEY, or GCP_WIF_PROVIDER configured." echo "configured=false" >> "${GITHUB_OUTPUT}" fi diff --git a/.github/workflows/gemini-invoke.yml b/.github/workflows/gemini-invoke.yml index 6710562..84cb0fe 100644 --- a/.github/workflows/gemini-invoke.yml +++ b/.github/workflows/gemini-invoke.yml @@ -42,13 +42,12 @@ jobs: env: GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}' GOOGLE_API_KEY: '${{ secrets.GOOGLE_API_KEY }}' - GOOGLE_GENAI_USE_GCA: '${{ vars.GOOGLE_GENAI_USE_GCA }}' - GOOGLE_GENAI_USE_VERTEXAI: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}' + GCP_WIF_PROVIDER: '${{ vars.GCP_WIF_PROVIDER }}' run: |- - if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GOOGLE_GENAI_USE_GCA}${GOOGLE_GENAI_USE_VERTEXAI}" ]; then + if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GCP_WIF_PROVIDER}" ]; then echo "configured=true" >> "${GITHUB_OUTPUT}" else - echo "::notice::Skipping Gemini CLI invocation: no GEMINI_API_KEY, GOOGLE_API_KEY, GOOGLE_GENAI_USE_GCA, or GOOGLE_GENAI_USE_VERTEXAI configured." + echo "::notice::Skipping Gemini CLI invocation: no GEMINI_API_KEY, GOOGLE_API_KEY, or GCP_WIF_PROVIDER configured." echo "configured=false" >> "${GITHUB_OUTPUT}" fi diff --git a/.github/workflows/gemini-review.yml b/.github/workflows/gemini-review.yml index 1f06c09..a5599ec 100644 --- a/.github/workflows/gemini-review.yml +++ b/.github/workflows/gemini-review.yml @@ -43,13 +43,12 @@ jobs: env: GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}' GOOGLE_API_KEY: '${{ secrets.GOOGLE_API_KEY }}' - GOOGLE_GENAI_USE_GCA: '${{ vars.GOOGLE_GENAI_USE_GCA }}' - GOOGLE_GENAI_USE_VERTEXAI: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}' + GCP_WIF_PROVIDER: '${{ vars.GCP_WIF_PROVIDER }}' run: |- - if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GOOGLE_GENAI_USE_GCA}${GOOGLE_GENAI_USE_VERTEXAI}" ]; then + if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GCP_WIF_PROVIDER}" ]; then echo "configured=true" >> "${GITHUB_OUTPUT}" else - echo "::notice::Skipping Gemini PR review: no GEMINI_API_KEY, GOOGLE_API_KEY, GOOGLE_GENAI_USE_GCA, or GOOGLE_GENAI_USE_VERTEXAI configured." + echo "::notice::Skipping Gemini PR review: no GEMINI_API_KEY, GOOGLE_API_KEY, or GCP_WIF_PROVIDER configured." echo "configured=false" >> "${GITHUB_OUTPUT}" fi diff --git a/.github/workflows/gemini-scheduled-triage.yml b/.github/workflows/gemini-scheduled-triage.yml index c39a717..a24f897 100644 --- a/.github/workflows/gemini-scheduled-triage.yml +++ b/.github/workflows/gemini-scheduled-triage.yml @@ -86,13 +86,12 @@ jobs: env: GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}' GOOGLE_API_KEY: '${{ secrets.GOOGLE_API_KEY }}' - GOOGLE_GENAI_USE_GCA: '${{ vars.GOOGLE_GENAI_USE_GCA }}' - GOOGLE_GENAI_USE_VERTEXAI: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}' + GCP_WIF_PROVIDER: '${{ vars.GCP_WIF_PROVIDER }}' run: |- - if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GOOGLE_GENAI_USE_GCA}${GOOGLE_GENAI_USE_VERTEXAI}" ]; then + if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GCP_WIF_PROVIDER}" ]; then echo "configured=true" >> "${GITHUB_OUTPUT}" else - echo "::notice::Skipping Gemini scheduled issue analysis: no GEMINI_API_KEY, GOOGLE_API_KEY, GOOGLE_GENAI_USE_GCA, or GOOGLE_GENAI_USE_VERTEXAI configured." + echo "::notice::Skipping Gemini scheduled issue analysis: no GEMINI_API_KEY, GOOGLE_API_KEY, or GCP_WIF_PROVIDER configured." echo "configured=false" >> "${GITHUB_OUTPUT}" fi diff --git a/.github/workflows/gemini-triage.yml b/.github/workflows/gemini-triage.yml index 1c8eb66..487e4a2 100644 --- a/.github/workflows/gemini-triage.yml +++ b/.github/workflows/gemini-triage.yml @@ -56,13 +56,12 @@ jobs: env: GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}' GOOGLE_API_KEY: '${{ secrets.GOOGLE_API_KEY }}' - GOOGLE_GENAI_USE_GCA: '${{ vars.GOOGLE_GENAI_USE_GCA }}' - GOOGLE_GENAI_USE_VERTEXAI: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}' + GCP_WIF_PROVIDER: '${{ vars.GCP_WIF_PROVIDER }}' run: |- - if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GOOGLE_GENAI_USE_GCA}${GOOGLE_GENAI_USE_VERTEXAI}" ]; then + if [ -n "${GEMINI_API_KEY}${GOOGLE_API_KEY}${GCP_WIF_PROVIDER}" ]; then echo "configured=true" >> "${GITHUB_OUTPUT}" else - echo "::notice::Skipping Gemini issue analysis: no GEMINI_API_KEY, GOOGLE_API_KEY, GOOGLE_GENAI_USE_GCA, or GOOGLE_GENAI_USE_VERTEXAI configured." + echo "::notice::Skipping Gemini issue analysis: no GEMINI_API_KEY, GOOGLE_API_KEY, or GCP_WIF_PROVIDER configured." echo "configured=false" >> "${GITHUB_OUTPUT}" fi