diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..d210438 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,61 @@ +name: Publish to crates.io + +on: + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: crates-io-publish + cancel-in-progress: false + +jobs: + verify: + if: github.ref == 'refs/heads/main' && github.repository == 'mp0rta/h3wire' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 + with: + ref: ${{ github.sha }} + persist-credentials: false + - uses: dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d # stable + with: + toolchain: stable + components: rustfmt, clippy + - run: cargo fmt --all --check + - run: cargo clippy --workspace --all-targets --locked -- -D warnings + - run: cargo test --workspace --locked + - run: cargo doc --workspace --no-deps --locked + env: + RUSTDOCFLAGS: -D warnings + - uses: dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d # stable + with: + toolchain: '1.85' + - run: cargo +1.85 build -p h3wire --locked + - run: cargo +stable package -p h3wire --locked + - run: cargo +stable test --manifest-path target/package/h3wire-*/Cargo.toml --locked + - run: cargo +stable publish -p h3wire --locked --dry-run + + publish: + needs: verify + if: github.ref == 'refs/heads/main' && github.repository == 'mp0rta/h3wire' + runs-on: ubuntu-latest + environment: release + permissions: + contents: read + id-token: write + steps: + - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 + with: + ref: ${{ github.sha }} + persist-credentials: false + - uses: dtolnay/rust-toolchain@89b12181fb390509a0842a86cc55eeb8eb928c1d # stable + with: + toolchain: stable + - name: Authenticate to crates.io + id: auth + uses: rust-lang/crates-io-auth-action@c6f97d42243bad5fab37ca0427f495c86d5b1a18 # v1.0.5 + - run: cargo publish -p h3wire --locked + env: + CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }} diff --git a/README.md b/README.md index 9e1a84e..24017cf 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ The core (HTTP/3, RFC 9114, and QPACK, RFC 9204) consumes stream bytes and reset from your QUIC transport and returns events for the application and actions for the transport, with no I/O, no async runtime and no dependencies beyond `std` (`#![forbid(unsafe_code)]`, MSRV 1.85). -Status: v0.1 in development. It covers RFC 9114 request/response streams, control +Status: v0.1 core. It covers RFC 9114 request/response streams, control and QPACK streams, GOAWAY and stream termination, QPACK with the static table only (no dynamic table), Extended CONNECT (RFC 9220), the HTTP/3 part of HTTP Datagrams (RFC 9297) and extension points for frame, stream and setting types. There is no @@ -14,14 +14,13 @@ async layer or QUIC adapter yet. ## Installation -The first crates.io release is being prepared. For now, add the library from Git: +Add the library with Cargo: ```sh -cargo add h3wire --git https://github.com/mp0rta/h3wire +cargo add h3wire ``` -Once v0.1.0 is published, use `cargo add h3wire` or add -`h3wire = "0.1"` under `[dependencies]` in your `Cargo.toml`. +Or add `h3wire = "0.1"` under `[dependencies]`. Licensed under either of [Apache License, Version 2.0](LICENSE-APACHE) or [MIT license](LICENSE-MIT) at your option.