rustd-resolved 0.2.3

Native DNS resolver and name-service daemon for RustD
name: Fuzz smoke

on:
  push:
    branches:
      - main
  workflow_dispatch:

permissions:
  contents: read
  statuses: write

concurrency:
  group: fuzz-smoke-${{ github.ref }}
  cancel-in-progress: true

jobs:
  fuzz:
    name: Fuzz DNS and Varlink boundaries
    runs-on: ubuntu-latest
    timeout-minutes: 20

    steps:
      - name: Publish pending status
        env:
          GH_TOKEN: ${{ github.token }}
        run: |
          set -euo pipefail
          payload=$(printf '{"state":"pending","context":"rustd-resolved/fuzz","description":"Fuzz smoke verification is running","target_url":"%s"}' "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}")
          curl --fail-with-body --silent --show-error \
            --request POST \
            --header "Accept: application/vnd.github+json" \
            --header "Authorization: Bearer $GH_TOKEN" \
            --header "X-GitHub-Api-Version: 2022-11-28" \
            "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/statuses/${GITHUB_SHA}" \
            --data "$payload" >/dev/null

      - name: Check out source
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

      - name: Install native build dependencies
        run: |
          set -euo pipefail
          sudo apt-get update
          sudo apt-get install --yes --no-install-recommends gfortran libssl-dev liburing-dev

      - name: Install pinned fuzz toolchain
        run: |
          set -euo pipefail
          rustup toolchain install nightly-2025-04-01 --profile minimal
          cargo +nightly-2025-04-01 install cargo-fuzz --version 0.12.0 --locked

      - name: Fuzz DNS packet parser
        run: cargo +nightly-2025-04-01 fuzz run dns_packet -- -max_total_time=30 -timeout=5 -rss_limit_mb=1024

      - name: Fuzz DNS record parser
        run: cargo +nightly-2025-04-01 fuzz run dns_records -- -max_total_time=30 -timeout=5 -rss_limit_mb=1024

      - name: Fuzz Varlink request parser
        run: cargo +nightly-2025-04-01 fuzz run varlink_request -- -max_total_time=30 -timeout=5 -rss_limit_mb=1024

      - name: Upload fuzz artifacts
        if: ${{ failure() }}
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        with:
          name: rustd-resolved-fuzz-${{ github.sha }}
          path: fuzz/artifacts
          if-no-files-found: ignore
          retention-days: 14

      - name: Publish final status
        if: ${{ always() }}
        env:
          GH_TOKEN: ${{ github.token }}
          STATE: ${{ job.status == 'success' && 'success' || 'failure' }}
        run: |
          set -euo pipefail
          payload=$(printf '{"state":"%s","context":"rustd-resolved/fuzz","description":"Fuzz smoke verification %s","target_url":"%s"}' "$STATE" "$STATE" "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}")
          curl --fail-with-body --silent --show-error \
            --request POST \
            --header "Accept: application/vnd.github+json" \
            --header "Authorization: Bearer $GH_TOKEN" \
            --header "X-GitHub-Api-Version: 2022-11-28" \
            "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/statuses/${GITHUB_SHA}" \
            --data "$payload" >/dev/null