From ae11e448f0c8110f18af951dea90a3dda6ef33e3 Mon Sep 17 00:00:00 2001 From: Alexander Mills Date: Tue, 28 Jul 2026 08:26:21 -0500 Subject: [PATCH 1/7] test: verify published Rust API --- src/lib.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 9069697..5212728 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,3 +2,16 @@ pub fn greet(who: &str) -> String { format!("hello {who} from zed-pkg-test/rust-lib") } + +#[cfg(test)] +mod tests { + use super::greet; + + #[test] + fn greet_identifies_the_immutable_zed_package_namespace() { + assert_eq!( + greet("consumer"), + "hello consumer from zed-pkg-test/rust-lib" + ); + } +} From a78bd99dc5447356aea4e7b05a0b64c7b66653b9 Mon Sep 17 00:00:00 2001 From: Alexander Mills Date: Tue, 28 Jul 2026 08:27:14 -0500 Subject: [PATCH 2/7] ci: add deterministic Rust package checks --- .github/workflows/ci.yml | 73 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..5b93482 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,73 @@ +name: package CI + +on: + pull_request: + push: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + verify: + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + + - name: Validate workflow + uses: docker://rhysd/actionlint@sha256:b1934ee5f1c509618f2508e6eb47ee0d3520686341fec936f3b79331f9315667 + with: + args: .github/workflows/ci.yml + + - uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 + with: + toolchain: "1.97.0" + components: rustfmt, clippy + + - name: Verify Zed and Cargo metadata agree + shell: bash + run: | + set -euo pipefail + python3 - <<'PY' + import tomllib + from pathlib import Path + + with Path("Cargo.toml").open("rb") as handle: + cargo = tomllib.load(handle)["package"] + with Path(".zpkg.toml").open("rb") as handle: + zed = tomllib.load(handle)["package"] + + assert cargo["name"] == zed["name"] + assert cargo["version"] == zed["version"] + assert cargo["license"] == zed["license"] + assert zed["org"] == "zed-pkg-test" + assert zed["repository"]["url"] == "https://github.com/zed-pkg-test/rust-lib" + PY + + - name: Format, lint, and test + run: | + cargo fmt --all -- --check + cargo clippy --all-targets -- -D warnings + cargo test --all-targets + + - name: Audit Cargo package contents + shell: bash + run: | + set -euo pipefail + cargo package --allow-dirty --list > "$RUNNER_TEMP/package-files.txt" + grep -Fxq Cargo.toml "$RUNNER_TEMP/package-files.txt" + grep -Fxq src/lib.rs "$RUNNER_TEMP/package-files.txt" + if grep -Eq '(^|/)(target|\.zed)/|(^|/)Cargo\.lock$' "$RUNNER_TEMP/package-files.txt"; then + echo "Cargo package contains generated or local state" >&2 + cat "$RUNNER_TEMP/package-files.txt" >&2 + exit 1 + fi + cargo package --allow-dirty From b54bd8f7f6afb5b1eaf8804d417b03c542290b36 Mon Sep 17 00:00:00 2001 From: Alexander Mills Date: Tue, 28 Jul 2026 08:37:08 -0500 Subject: [PATCH 3/7] build: complete Rust package metadata --- Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 59120ee..dd3902f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,10 @@ name = "rust-lib" version = "1.0.0" edition = "2021" +description = "A Rust crate sourced via zed for interoperability tests." license = "MIT" +repository = "https://github.com/zed-pkg-test/rust-lib" +readme = "README.md" [lib] name = "rust_lib" From 9ab2722347ab41c19400822989f742dc5ba934c8 Mon Sep 17 00:00:00 2001 From: Alexander Mills Date: Tue, 28 Jul 2026 08:37:31 -0500 Subject: [PATCH 4/7] build: align Cargo and Zed descriptions --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index dd3902f..78affd5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "rust-lib" version = "1.0.0" edition = "2021" -description = "A Rust crate sourced via zed for interoperability tests." +description = "A Rust crate sourced via zed (complements cargo/crates.io)." license = "MIT" repository = "https://github.com/zed-pkg-test/rust-lib" readme = "README.md" From 0cd43ca14486c984341e358f74631bade1f15d77 Mon Sep 17 00:00:00 2001 From: Alexander Mills Date: Tue, 28 Jul 2026 08:38:26 -0500 Subject: [PATCH 5/7] test: verify complete Cargo package metadata --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5b93482..6dadcb2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,9 +47,11 @@ jobs: assert cargo["name"] == zed["name"] assert cargo["version"] == zed["version"] + assert cargo["description"] == zed["description"] assert cargo["license"] == zed["license"] + assert cargo["repository"] == zed["repository"]["url"] + assert cargo["readme"] == "README.md" assert zed["org"] == "zed-pkg-test" - assert zed["repository"]["url"] == "https://github.com/zed-pkg-test/rust-lib" PY - name: Format, lint, and test @@ -64,6 +66,7 @@ jobs: set -euo pipefail cargo package --allow-dirty --list > "$RUNNER_TEMP/package-files.txt" grep -Fxq Cargo.toml "$RUNNER_TEMP/package-files.txt" + grep -Fxq README.md "$RUNNER_TEMP/package-files.txt" grep -Fxq src/lib.rs "$RUNNER_TEMP/package-files.txt" if grep -Eq '(^|/)(target|\.zed)/|(^|/)Cargo\.lock$' "$RUNNER_TEMP/package-files.txt"; then echo "Cargo package contains generated or local state" >&2 From affa3e81d56e6280e200f3465befe669a2c2b2f9 Mon Sep 17 00:00:00 2001 From: Alexander Mills Date: Tue, 28 Jul 2026 09:17:01 -0500 Subject: [PATCH 6/7] ci: preserve Cargo package diagnostics --- .github/workflows/ci.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6dadcb2..c3b6147 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,12 +65,21 @@ jobs: run: | set -euo pipefail cargo package --allow-dirty --list > "$RUNNER_TEMP/package-files.txt" + cat "$RUNNER_TEMP/package-files.txt" grep -Fxq Cargo.toml "$RUNNER_TEMP/package-files.txt" grep -Fxq README.md "$RUNNER_TEMP/package-files.txt" grep -Fxq src/lib.rs "$RUNNER_TEMP/package-files.txt" if grep -Eq '(^|/)(target|\.zed)/|(^|/)Cargo\.lock$' "$RUNNER_TEMP/package-files.txt"; then echo "Cargo package contains generated or local state" >&2 - cat "$RUNNER_TEMP/package-files.txt" >&2 exit 1 fi cargo package --allow-dirty + + - name: Upload package-content diagnostics + if: ${{ always() }} + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 + with: + name: cargo-package-files + path: ${{ runner.temp }}/package-files.txt + if-no-files-found: warn + retention-days: 7 From 117fdff25a8c7f783b0aa89646fa68a7fb0378a6 Mon Sep 17 00:00:00 2001 From: Alexander Mills Date: Tue, 28 Jul 2026 09:26:33 -0500 Subject: [PATCH 7/7] test: distinguish packaged lockfile from tracked library state --- .github/workflows/ci.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c3b6147..337c2cd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,13 +64,18 @@ jobs: shell: bash run: | set -euo pipefail + if git ls-files --error-unmatch Cargo.lock >/dev/null 2>&1; then + echo "Library source checkout must not track Cargo.lock" >&2 + exit 1 + fi cargo package --allow-dirty --list > "$RUNNER_TEMP/package-files.txt" cat "$RUNNER_TEMP/package-files.txt" grep -Fxq Cargo.toml "$RUNNER_TEMP/package-files.txt" grep -Fxq README.md "$RUNNER_TEMP/package-files.txt" grep -Fxq src/lib.rs "$RUNNER_TEMP/package-files.txt" - if grep -Eq '(^|/)(target|\.zed)/|(^|/)Cargo\.lock$' "$RUNNER_TEMP/package-files.txt"; then - echo "Cargo package contains generated or local state" >&2 + grep -Fxq Cargo.lock "$RUNNER_TEMP/package-files.txt" + if grep -Eq '(^|/)(target|\.zed)/' "$RUNNER_TEMP/package-files.txt"; then + echo "Cargo package contains build or local Zed state" >&2 exit 1 fi cargo package --allow-dirty