Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
219 commits
Select commit Hold shift + click to select a range
0eac5a9
Initial scaffold of zed-interfaces
ORESoftware Jul 23, 2026
ee50b45
Calendar + semver versioning, zip artifacts, and zed-sync interop types
ORESoftware Jul 24, 2026
41cc43f
claude autosave 2026-07-24T14:56:28Z
ORESoftware Jul 24, 2026
57941fc
claude autosave 2026-07-24T14:56:36Z
ORESoftware Jul 24, 2026
b411351
claude autosave 2026-07-24T14:56:42Z
ORESoftware Jul 24, 2026
5cade80
claude autosave 2026-07-24T14:56:51Z
ORESoftware Jul 24, 2026
1aa0f72
claude autosave 2026-07-24T14:57:07Z
ORESoftware Jul 24, 2026
1c6b6fe
claude autosave 2026-07-24T14:57:20Z
ORESoftware Jul 24, 2026
cc19a5f
claude autosave 2026-07-24T14:57:36Z
ORESoftware Jul 24, 2026
d67b445
claude autosave 2026-07-24T14:57:45Z
ORESoftware Jul 24, 2026
cbeebb7
claude autosave 2026-07-24T14:57:46Z
ORESoftware Jul 24, 2026
8e28c94
claude autosave 2026-07-24T14:57:59Z
ORESoftware Jul 24, 2026
e88fe27
claude autosave 2026-07-24T14:58:13Z
ORESoftware Jul 24, 2026
ced8ac5
claude autosave 2026-07-24T14:58:25Z
ORESoftware Jul 24, 2026
56dc77a
Harden manifest + add build/bin/workspace/overrides, yank DTOs, sha/u…
ORESoftware Jul 24, 2026
1172f12
claude autosave 2026-07-24T15:37:29Z
ORESoftware Jul 24, 2026
0bdc44e
Add CI: fmt, test, and a schema-drift gate
ORESoftware Jul 24, 2026
3b1b8b5
Manifest: workspace section for monorepo installs
ORESoftware Jul 24, 2026
9322287
Merge remote-tracking branch 'origin/main'
ORESoftware Jul 24, 2026
5f2baa7
claude autosave 2026-07-25T15:36:42Z
ORESoftware Jul 25, 2026
5eaea89
claude autosave 2026-07-25T15:37:11Z
ORESoftware Jul 25, 2026
0c4b852
claude autosave 2026-07-25T15:37:22Z
ORESoftware Jul 25, 2026
1e1e0a5
claude autosave 2026-07-25T15:37:40Z
ORESoftware Jul 25, 2026
e51ef39
claude autosave 2026-07-25T15:41:47Z
ORESoftware Jul 25, 2026
92fbd60
manifest: [install].dir — configurable dependency location
ORESoftware Jul 25, 2026
478dad0
fmt: format install_dir roundtrip test
ORESoftware Jul 25, 2026
ad858f3
schemas: regenerate for [install] section
ORESoftware Jul 25, 2026
17ee671
Audit-log contract: path helper + AuditAction/AuditEntry DTOs
ORESoftware Jul 25, 2026
ad8b6c0
claude autosave 2026-07-25T21:53:48Z
ORESoftware Jul 25, 2026
93e7cbf
claude autosave 2026-07-25T21:53:51Z
ORESoftware Jul 25, 2026
c7e9862
claude autosave 2026-07-25T21:53:59Z
ORESoftware Jul 25, 2026
1d32c15
claude autosave 2026-07-25T21:54:19Z
ORESoftware Jul 25, 2026
b1ebd76
claude autosave 2026-07-25T21:54:22Z
ORESoftware Jul 25, 2026
1aa3bbf
claude autosave 2026-07-25T21:54:30Z
ORESoftware Jul 25, 2026
871bd8d
claude autosave 2026-07-25T21:54:48Z
ORESoftware Jul 25, 2026
79b941f
claude autosave 2026-07-25T21:55:44Z
ORESoftware Jul 25, 2026
aeb9111
claude autosave 2026-07-25T22:00:48Z
ORESoftware Jul 25, 2026
9076c57
claude autosave 2026-07-25T22:01:02Z
ORESoftware Jul 25, 2026
5491be6
manifest: [targets] — polyglot packages that fan out one package per …
ORESoftware Jul 25, 2026
bceeb61
Merge remote-tracking branch 'origin/main'
ORESoftware Jul 25, 2026
1d815bb
schemas: regenerate for [targets]
ORESoftware Jul 25, 2026
b676f19
feat: publish isolated packages from polyglot targets
ORESoftware Jul 25, 2026
84abf24
Merge branch 'main' of https://github.com/zed-pkg/zed-interfaces
ORESoftware Jul 25, 2026
940befe
registry: package tags + list/RAG DTOs (PackageListResponse, Semantic…
ORESoftware Jul 26, 2026
90534dd
fix: exclude zed pack output from artifacts
ORESoftware Jul 26, 2026
415e871
Exclude generated zed pack output from artifacts
ORESoftware Jul 27, 2026
ce84fde
ci: apply DEN-100 native release schema
ORESoftware Jul 27, 2026
36d9923
ci: run DEN-100 schema patch from PR
ORESoftware Jul 27, 2026
11b4239
chore: add deterministic native schema patch
ORESoftware Jul 27, 2026
3f0b919
test: cover native release routing
ORESoftware Jul 27, 2026
fa52857
ci: apply native schema from checked-in script
ORESoftware Jul 27, 2026
86e6cc2
feat: declare native release routing
github-actions[bot] Jul 27, 2026
b0d2c5d
chore: remove temporary schema workflow
ORESoftware Jul 27, 2026
a613fd1
chore: remove temporary schema patcher
ORESoftware Jul 27, 2026
df173d7
chore: remove temporary schema helper
ORESoftware Jul 27, 2026
90534bc
ci: regenerate native release schemas
ORESoftware Jul 27, 2026
b9949e9
schemas: add native release routing
github-actions[bot] Jul 27, 2026
564c0ae
chore: remove temporary schema regeneration workflow
ORESoftware Jul 27, 2026
1a8cdfd
Merge pull request #2 from zed-pkg/feat/den-100-native-release-routing
ORESoftware Jul 27, 2026
f7c253f
chore: add deterministic pub.dev routing patch
ORESoftware Jul 27, 2026
1f329a2
ci: apply pub.dev native routing
ORESoftware Jul 27, 2026
95e81cb
feat: declare pub.dev release routing
github-actions[bot] Jul 27, 2026
4d5af59
chore: remove temporary pub.dev routing workflow
ORESoftware Jul 27, 2026
9e11208
chore: remove temporary pub.dev routing helper
ORESoftware Jul 27, 2026
284f22f
Merge pull request #3 from zed-pkg/feat/den-100-pubdev-routing
ORESoftware Jul 27, 2026
20da730
chore: add deterministic PyPI routing patch
ORESoftware Jul 27, 2026
9a4032e
ci: apply PyPI native routing
ORESoftware Jul 27, 2026
983f8dc
feat: declare PyPI release routing
github-actions[bot] Jul 27, 2026
9eff1e1
chore: remove temporary PyPI routing workflow
ORESoftware Jul 27, 2026
05f382b
chore: remove temporary PyPI routing helper
ORESoftware Jul 27, 2026
61f654d
Merge pull request #4 from zed-pkg/feat/den-100-pypi-routing
ORESoftware Jul 27, 2026
7a73136
manifest: language/ecosystem tagging for per-language packages
ORESoftware Jul 30, 2026
3fea838
wip: draft multi-registry schema
ORESoftware Jul 30, 2026
e6030f2
style: cargo fmt
ORESoftware Jul 30, 2026
40681c4
feat: model native and forge package routes
ORESoftware Jul 30, 2026
3ceadc8
excludes: include_readme keeps the CHANGELOG registries ask for
ORESoftware Jul 30, 2026
bef3b63
fix: retain release routes in target artifacts
ORESoftware Jul 30, 2026
9da6bb1
style: format native routing additions
ORESoftware Jul 30, 2026
1b42531
fix(pack): retain changelogs as release metadata
ORESoftware Jul 30, 2026
95aa3c8
Merge remote-tracking branch 'origin/main'
ORESoftware Jul 30, 2026
c36e0e7
merge: preserve opt-in changelog packaging semantics
ORESoftware Jul 30, 2026
dc0e0a0
feat: model native registry tag formats
ORESoftware Jul 30, 2026
8d81220
Model canonical and forge package release routes (#5)
ORESoftware Jul 30, 2026
07d0160
manifest: pick predictably when two targets share a language
ORESoftware Jul 30, 2026
48e204d
Merge origin/feat/repository-and-language-targets into main
ORESoftware Jul 30, 2026
ebbb002
merge: multi-registry publish routes into main
ORESoftware Jul 30, 2026
e47fb73
merge: multi-registry schema draft into main
ORESoftware Jul 31, 2026
3ffca44
fix: drop superseded publish-route schema left by the draft merge
ORESoftware Jul 31, 2026
cdbd901
docs(DEN-132): add canonical interface agent instructions
ORESoftware Jul 31, 2026
a6166a9
docs(DEN-132): add Claude pointer
ORESoftware Jul 31, 2026
da8d62a
docs(DEN-132): add Gemini pointer
ORESoftware Jul 31, 2026
40e2f6c
docs(DEN-132): add OpenAI pointer
ORESoftware Jul 31, 2026
fa7ae5c
ci(DEN-132): enforce pinned agents policy
ORESoftware Jul 31, 2026
f885262
Merge PR #6: adopt hierarchical agent instructions
ORESoftware Jul 31, 2026
1bafce6
DEN-359 add pinned interface-contract Nix flake
ORESoftware Aug 2, 2026
fc29130
DEN-359 pin interface Nix dependencies
ORESoftware Aug 2, 2026
1c5fc2a
DEN-359 add isolated Rust contract shell
ORESoftware Aug 2, 2026
aa3be67
DEN-359 add non-interactive contract validation
ORESoftware Aug 2, 2026
1224b73
DEN-359 add pinned interface Nix CI
ORESoftware Aug 2, 2026
aef2a3d
DEN-359 pin and harden interface CI
ORESoftware Aug 2, 2026
f219bae
DEN-359 ignore local Nix agent caches
ORESoftware Aug 2, 2026
a47504b
DEN-359 document pinned interface validation
ORESoftware Aug 2, 2026
2d61dc6
DEN-359 apply canonical Nix formatting
ORESoftware Aug 2, 2026
db78d12
DEN-359 preserve version precedence while satisfying Clippy
ORESoftware Aug 2, 2026
997ab2d
DEN-359 capture canonical Nix formatter output
ORESoftware Aug 2, 2026
49da7bb
DEN-359 apply exact canonical Nix formatting
ORESoftware Aug 2, 2026
d6525ac
DEN-359 restore strict non-mutating Nix validation
ORESoftware Aug 2, 2026
ff428c1
DEN-359 align pinned and current Clippy policies
ORESoftware Aug 2, 2026
639f530
Merge PR #7: add a pinned contract-first Nix environment
ORESoftware Aug 2, 2026
f141e4c
Audit contract: tamper-evidence, filtering, and generated schemas
ORESoftware Aug 2, 2026
74905f7
feat(DEN-1417): add canonical Nix interop contract v1
ORESoftware Aug 3, 2026
19e6d74
feat(DEN-1420): add universal environment-plan contract
ORESoftware Aug 3, 2026
625ba7b
feat(DEN-1417): embed Nix intent and provenance in file formats
ORESoftware Aug 3, 2026
2cab25b
feat: add OCI artifact interoperability contract
ORESoftware Aug 3, 2026
3c63bb5
feat: export OCI interoperability types
ORESoftware Aug 3, 2026
fc17a1e
ci: materialize formatted OCI contract sources
ORESoftware Aug 3, 2026
a3ce1c6
feat: generate OCI adapter contract schema
ORESoftware Aug 3, 2026
5a9798f
ci: materialize formatted OCI sources and schema
ORESoftware Aug 3, 2026
548aa10
ci: self-materialize formatted OCI contract outputs
ORESoftware Aug 3, 2026
0ca2c70
ci: cancel superseded OCI bootstrap runs
ORESoftware Aug 3, 2026
d0ebd17
style: format OCI interoperability contract
github-actions[bot] Aug 3, 2026
8fafcab
chore: generate OCI adapter JSON schema
github-actions[bot] Aug 3, 2026
22dc84b
ci: remove temporary OCI contract bootstrap
ORESoftware Aug 3, 2026
73280b8
feat(DEN-1420): add native registry SemVer contract
ORESoftware Aug 3, 2026
a05267d
feat(DEN-1420): export native registry contract
ORESoftware Aug 3, 2026
eda28a1
feat(DEN-1420): generate native registry schema
ORESoftware Aug 3, 2026
a207c5b
test(DEN-1420): pin native registry schema contract
ORESoftware Aug 3, 2026
004eecc
docs(DEN-1420): document native registry publication identity
ORESoftware Aug 3, 2026
3f00233
ci(DEN-1420): validate and materialize native registry contract
ORESoftware Aug 3, 2026
1305eaf
test(DEN-1420): assert emitted native registry schema structure
ORESoftware Aug 3, 2026
8a9b51f
ci(DEN-1420): expose bootstrap on pull requests
ORESoftware Aug 3, 2026
70cb3d4
ci(DEN-1420): fix and materialize native registry contract
ORESoftware Aug 3, 2026
8bcbcbe
feat(DEN-1420): materialize native registry contract
github-actions[bot] Aug 3, 2026
6e893ad
feat(DEN-1450): add EnvironmentPlan v2 for mise parity
ORESoftware Aug 3, 2026
4756605
feat(DEN-1418): define the canonical Nix export plan contract
ORESoftware Aug 3, 2026
9ce90ea
feat(DEN-1418): export the Nix plan wire types
ORESoftware Aug 3, 2026
1e7c7a4
feat(DEN-1418): generate the Nix export plan schema
ORESoftware Aug 3, 2026
2b5698a
ci(DEN-1418): generate and verify the Nix plan schema artifact
ORESoftware Aug 3, 2026
3f38a5e
docs(DEN-1418): document the shared export-plan wire contract
ORESoftware Aug 3, 2026
16861aa
fix(DEN-1418): normalize explicit fields and portable paths before sc…
ORESoftware Aug 3, 2026
db82b86
fix(DEN-1418): remove the obsolete host-path import during generation
ORESoftware Aug 3, 2026
30ab4ee
ci(DEN-1418): apply generated plan schema and self-clean
ORESoftware Aug 3, 2026
9abc5c2
feat(DEN-1418): apply generated Nix export plan schema
github-actions[bot] Aug 3, 2026
c5344c3
ci(DEN-1418): expose the self-cleaning schema generator on the PR event
ORESoftware Aug 3, 2026
dc820f8
ci(DEN-1418): run one observable self-cleaning schema generator
ORESoftware Aug 3, 2026
bc7cf93
fix(DEN-1464): require complete locked artifact metadata
ORESoftware Aug 3, 2026
26b1218
style: apply rustfmt to strict lock tests
ORESoftware Aug 3, 2026
2d397c6
test: keep no-Nix compatibility fixture cryptographically complete
ORESoftware Aug 3, 2026
980fbd7
chore(DEN-1464): one-shot lock schema refresh
ORESoftware Aug 3, 2026
fcc4780
docs(DEN-1464): regenerate strict lockfile schema
ORESoftware Aug 3, 2026
50ff18e
ci(DEN-1464): remove one-shot schema generator
ORESoftware Aug 3, 2026
ce6a424
test(DEN-1464): require immutable revisions in strict lockfiles
ORESoftware Aug 3, 2026
d7275e7
docs(DEN-1464): encode strict lock metadata in the public schema
ORESoftware Aug 3, 2026
7b173f7
chore(DEN-1464): one-shot formatter and schema refresh
ORESoftware Aug 3, 2026
daa5977
style(DEN-1464): finalize immutable revision contract
ORESoftware Aug 3, 2026
85ee930
feat(DEN-1507): add native dependency range and lock contract
ORESoftware Aug 3, 2026
992e1cf
chore(DEN-1464): remove branch-only finalizer
ORESoftware Aug 3, 2026
46c521e
feat(DEN-1507): export native dependency lock types
ORESoftware Aug 3, 2026
8212e84
feat(DEN-1507): generate native dependency lock schema
ORESoftware Aug 3, 2026
3f1b1db
docs(DEN-1507): document source-aware native dependency locks
ORESoftware Aug 3, 2026
9ba70c7
Merge current environment contracts into DEN-1464 strict lock metadata
ORESoftware Aug 3, 2026
a120c2c
chore(DEN-1464): one-shot schema and fixture repair
ORESoftware Aug 3, 2026
bfb36a7
test(DEN-1507): pin native dependency schema contract
ORESoftware Aug 3, 2026
242fdca
ci(DEN-1507): materialize native dependency schema and formatting
ORESoftware Aug 3, 2026
9810e4d
fix(DEN-1464): require VCS commit in schema and test exact field
ORESoftware Aug 3, 2026
c9b547c
feat(DEN-1507): materialize native dependency lock contract
github-actions[bot] Aug 3, 2026
85eab02
docs(DEN-1464): document frozen lock integrity and migration
ORESoftware Aug 3, 2026
fab1910
fix(DEN-1464): target VCS fixtures and override schema defaults
ORESoftware Aug 3, 2026
f572b3b
chore(DEN-1464): regenerate strict lock schema on the feature branch
ORESoftware Aug 3, 2026
73a5a25
style(DEN-1464): regenerate strict lock schema
ORESoftware Aug 3, 2026
31caf94
docs(DEN-1464): clarify required JSON Schema contract
ORESoftware Aug 3, 2026
40146d6
chore(DEN-1464): remove one-time schema regeneration workflow
ORESoftware Aug 3, 2026
4783de9
test(DEN-1507): stage standards edge-case hardening
ORESoftware Aug 3, 2026
2b0bcfe
docs(DEN-1507): document native comparator edge semantics
ORESoftware Aug 3, 2026
9f77475
ci(DEN-1507): apply and validate comparator hardening
ORESoftware Aug 3, 2026
cc801de
fix(DEN-1507): preserve native comparator edge semantics
github-actions[bot] Aug 3, 2026
cc5ed73
Merge strict immutable Zed lockfile contract
ORESoftware Aug 3, 2026
35985ce
DEN-1464 normalize legacy in-memory provenance to exact artifact iden…
ORESoftware Aug 3, 2026
8843701
DEN-1464 document content-addressed legacy provenance normalization
ORESoftware Aug 3, 2026
5d1e936
DEN-1464 add public content-addressed provenance integration tests
ORESoftware Aug 3, 2026
2126489
DEN-1464 make public fallback tests lifetime-safe
ORESoftware Aug 3, 2026
cd49c06
DEN-1464 apply canonical Rust formatting
ORESoftware Aug 3, 2026
cae63e1
DEN-1464 commit the regenerated lockfile schema description
ORESoftware Aug 3, 2026
c2e0490
Merge content-addressed frozen-lock provenance compatibility
ORESoftware Aug 3, 2026
131d6a5
feat(DEN-1452): add hardened EnvironmentLock v1
ORESoftware Aug 4, 2026
88c276b
Merge immutable OCI artifact contract v1
ORESoftware Aug 4, 2026
1ceb67b
ci(DEN-1418): remove obsolete self-cleaning schema workflow
ORESoftware Aug 4, 2026
7d7132f
merge(DEN-1418): compose Nix export-plan schema with current main
ORESoftware Aug 4, 2026
2082012
feat(DEN-1418): add canonical Nix export-plan schema
ORESoftware Aug 4, 2026
032b52f
merge(DEN-1420): compose native-registry publication contract with cu…
ORESoftware Aug 4, 2026
859a71c
merge(DEN-1507): compose native dependency ranges with current contra…
ORESoftware Aug 4, 2026
117c1a1
chore: make zed-interfaces a validated Zed package (#28)
ORESoftware Aug 4, 2026
169e599
ci: require canonical repository targets for targeted packages (#34)
ORESoftware Aug 4, 2026
933155f
ci: certify canonical Zed package artifacts (#35)
ORESoftware Aug 4, 2026
e7b9e27
feat: define native dependency and install hook contracts (#16)
ORESoftware Aug 4, 2026
29addea
feat(DEN-1420): add immutable native-registry publication contract (#36)
ORESoftware Aug 4, 2026
9a236f7
Merge source-aware native dependency ranges onto current main
ORESoftware Aug 5, 2026
11f7d85
chore: synchronize native range exact-head review
ORESoftware Aug 5, 2026
c872714
chore: remove native range review synchronization marker
ORESoftware Aug 5, 2026
2d4259a
Merge PR #30: land source-aware native dependency ranges
ORESoftware Aug 5, 2026
18664bb
DEN-1565 add clean current-main lockfile composer
ORESoftware Aug 5, 2026
2084f4f
DEN-1565 add clean compatibility fixture updater
ORESoftware Aug 5, 2026
fc463c3
DEN-1565 certify clean current-main native lock provenance
ORESoftware Aug 5, 2026
c09c39d
ci: report and validate the exact native lock product delta
ORESoftware Aug 5, 2026
865d2bb
ci: include untracked reviewed files in provenance delta checks
ORESoftware Aug 5, 2026
b6d3c96
feat: persist exact native dependencies in zpkg lockfiles
github-actions[bot] Aug 5, 2026
a23cdd2
DEN-1565 remove native lock composition scaffolding
ORESoftware Aug 5, 2026
0161b3a
Merge PR #38: persist exact native dependency provenance
ORESoftware Aug 5, 2026
5f15f1f
Support .zedignore negation for default directories (#39)
ORESoftware Aug 5, 2026
d36ac52
ci: publish certified Zed package artifacts (#42)
ORESoftware Aug 5, 2026
af1829a
Merge current deterministic interface contracts
ORESoftware Aug 6, 2026
bc3f143
Prefer primary branches and avoid agent worktrees
ORESoftware Aug 6, 2026
7f96eda
Prefer primary branches and avoid agent worktrees
ORESoftware Aug 6, 2026
0125d8c
Prefer primary branches and avoid agent worktrees
ORESoftware Aug 6, 2026
36a335a
Merge commit 'af1829a5264e4d72791ab3a6ee6f3084fd9b9b97'
ORESoftware Aug 6, 2026
4ddd5e3
Merge commit '0125d8c7e5bea6c9c366ade1fc344254b8cc4ec1'
ORESoftware Aug 6, 2026
9f42505
Merge commit 'bc3f14364e674e7629968b90bbdcb99e5d11eabe'
ORESoftware Aug 6, 2026
7620716
feat: publish isolated Rust, Dart, and TypeScript interface slices
ORESoftware Aug 7, 2026
1cb9644
Merge orphan branch rescue/orphan-762071627a6a-feat-publish-isolated-…
ORESoftware Sep 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Read and follow the canonical instructions in `../agents.md`.
1 change: 1 addition & 0 deletions .gemini/GEMINI.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Read and follow the canonical instructions in `../agents.md`.
19 changes: 19 additions & 0 deletions .github/workflows/agents-policy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: agents policy

on:
push:
branches: [main]
pull_request:

permissions:
contents: read

concurrency:
group: agents-policy-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
validate:
uses: zed-pkg/zed-monorepo/.github/workflows/agents-policy-reusable.yml@fb2417b1a976459e3de740f788916d3d91d3669e
with:
policy_ref: fb2417b1a976459e3de740f788916d3d91d3669e
221 changes: 221 additions & 0 deletions .github/workflows/certify-zed-package.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
name: certify-and-publish-zed-package

on:
workflow_call:
pull_request:
paths:
- ".zpkg.toml"
- ".zpkg.lock"
- ".gitignore"
- ".github/workflows/certify-zed-package.yml"
push:
branches: [main]
paths:
- ".zpkg.toml"
- ".zpkg.lock"
- ".gitignore"
- ".github/workflows/certify-zed-package.yml"
workflow_dispatch:

permissions:
contents: read

concurrency:
group: certify-zed-package-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
validate:
uses: zed-pkg/zed-interfaces/.github/workflows/validate-zed-package.yml@933155fc41dc6443424d06b618137b23dc434835

publish:
name: Pack and publish certified artifacts
needs: validate
runs-on: ubuntu-24.04
timeout-minutes: 30

steps:
- name: Check out package
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with:
persist-credentials: false
show-progress: false

- name: Install Rust
uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30
with:
toolchain: stable

- name: Pack canonical and target packages
shell: bash
env:
ZED_ARTIFACT_OUTPUT: ${{ runner.temp }}/zed-package-artifacts
run: |
set -euo pipefail
packer="$RUNNER_TEMP/zed-artifact-publisher"
rm -rf "$packer" "$ZED_ARTIFACT_OUTPUT"
mkdir -p "$packer/src" "$ZED_ARTIFACT_OUTPUT"

cat > "$packer/Cargo.toml" <<'TOML'
[package]
name = "zed-artifact-publisher"
version = "0.0.0"
edition = "2024"
publish = false

[dependencies]
serde_json = "1"
zed-cli = { git = "https://github.com/zed-pkg/zed-cli.git", rev = "fd3b08eb1ac170518cb795e662318ae2714b1176" }
zed-interfaces = { git = "https://github.com/zed-pkg/zed-interfaces.git", rev = "a23cdd2ac509a39ca6fd6d21a3774fdd3a0f7660" }
TOML

cat > "$packer/src/main.rs" <<'RUST'
use std::{env, fs, path::PathBuf, process};

use serde_json::json;
use zed_interfaces::Manifest;

fn fail(message: impl std::fmt::Display) -> ! {
eprintln!("zed artifact publication failed: {message}");
process::exit(1);
}

fn main() {
let root = env::args_os()
.nth(1)
.map(PathBuf::from)
.unwrap_or_else(|| fail("missing repository root argument"));
let output = env::var_os("ZED_ARTIFACT_OUTPUT")
.map(PathBuf::from)
.unwrap_or_else(|| fail("ZED_ARTIFACT_OUTPUT is not set"));
fs::create_dir_all(&output)
.unwrap_or_else(|error| fail(format!("creating output directory: {error}")));

let manifest_text = fs::read_to_string(root.join(".zpkg.toml"))
.unwrap_or_else(|error| fail(format!("reading .zpkg.toml: {error}")));
let manifest = Manifest::parse(&manifest_text)
.unwrap_or_else(|error| fail(format!("parsing .zpkg.toml: {error}")));

let packages = zed_cli::pack::pack_all(&root, &manifest, Some(&output))
.unwrap_or_else(|error| fail(format!("packing repository: {error:#}")));
if packages.is_empty() {
fail("packer emitted no artifacts");
}

let canonical_file = format!(
"{}-{}-{}.tar.gz",
manifest.package.org, manifest.package.name, manifest.package.version
);
if !output.join(&canonical_file).is_file() {
fail(format!("canonical artifact `{canonical_file}` was not emitted"));
}

let mut records = Vec::with_capacity(packages.len());
for package in packages {
let file = package
.packed
.path
.file_name()
.and_then(|name| name.to_str())
.unwrap_or_else(|| fail("artifact has no UTF-8 file name"))
.to_string();
if package.packed.size == 0 || package.packed.file_count == 0 {
fail(format!("artifact `{file}` is empty"));
}
if package.packed.sha256.len() != 64
|| !package
.packed
.sha256
.bytes()
.all(|byte| byte.is_ascii_hexdigit())
{
fail(format!("artifact `{file}` has an invalid sha256"));
}

records.push(json!({
"target": package.target,
"org": package.manifest.package.org,
"name": package.manifest.package.name,
"version": package.manifest.package.version,
"file": file,
"sha256": package.packed.sha256,
"size": package.packed.size,
"file_count": package.packed.file_count,
"excluded_count": package.packed.excluded_count,
"format": package.packed.format.extension(),
}));
}

records.sort_by(|left, right| {
left["file"]
.as_str()
.cmp(&right["file"].as_str())
});

let mut checksums = String::new();
for record in &records {
checksums.push_str(record["sha256"].as_str().unwrap());
checksums.push_str(" ");
checksums.push_str(record["file"].as_str().unwrap());
checksums.push('\n');
}
fs::write(output.join("SHA256SUMS"), checksums)
.unwrap_or_else(|error| fail(format!("writing SHA256SUMS: {error}")));

let provenance = json!({
"schema": "zed.packages.v1",
"repository": env::var("GITHUB_REPOSITORY").unwrap_or_default(),
"commit": env::var("GITHUB_SHA").unwrap_or_default(),
"run_id": env::var("GITHUB_RUN_ID").unwrap_or_default(),
"run_attempt": env::var("GITHUB_RUN_ATTEMPT").unwrap_or_default(),
"package": {
"org": manifest.package.org,
"name": manifest.package.name,
"version": manifest.package.version,
},
"artifacts": records,
});
fs::write(
output.join("zed-artifacts.json"),
serde_json::to_vec_pretty(&provenance).unwrap(),
)
.unwrap_or_else(|error| fail(format!("writing artifact manifest: {error}")));
}
RUST

cargo generate-lockfile --manifest-path "$packer/Cargo.toml"
cargo run --quiet --locked --manifest-path "$packer/Cargo.toml" -- "$GITHUB_WORKSPACE"
test -s "$ZED_ARTIFACT_OUTPUT/SHA256SUMS"
test -s "$ZED_ARTIFACT_OUTPUT/zed-artifacts.json"
(cd "$ZED_ARTIFACT_OUTPUT" && sha256sum --check SHA256SUMS)
find "$ZED_ARTIFACT_OUTPUT" -maxdepth 1 -type f -printf '%f\n' | sort

- name: Publish certified package artifacts
id: publish
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: zed-packages-${{ github.event.repository.name }}-${{ github.sha }}
path: ${{ runner.temp }}/zed-package-artifacts
if-no-files-found: error
retention-days: 30
compression-level: 0
overwrite: false

- name: Verify publication metadata
shell: bash
env:
ARTIFACT_ID: ${{ steps.publish.outputs.artifact-id }}
ARTIFACT_URL: ${{ steps.publish.outputs.artifact-url }}
ARTIFACT_DIGEST: ${{ steps.publish.outputs.artifact-digest }}
run: |
set -euo pipefail
test -n "$ARTIFACT_ID"
test -n "$ARTIFACT_URL"
test -n "$ARTIFACT_DIGEST"
{
echo "### Certified Zed package artifacts"
echo
echo "- Artifact ID: \`$ARTIFACT_ID\`"
echo "- Artifact digest: \`$ARTIFACT_DIGEST\`"
echo "- Download: $ARTIFACT_URL"
} >> "$GITHUB_STEP_SUMMARY"
47 changes: 47 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: ci

on:
push:
branches: [main]
pull_request:

permissions:
contents: read

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
rust:
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Check out repository
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
with:
persist-credentials: false
show-progress: false

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30
with:
components: rustfmt,clippy

- name: Format
run: cargo fmt --check

- name: Clippy
run: cargo clippy --locked --all-targets -- -D warnings

- name: Test
run: cargo test --locked

- name: Doctest
run: cargo test --locked --doc

- name: Schemas are up to date
run: |
cargo run --locked --example generate_schemas
git diff --exit-code schemas/ \
|| (echo "schemas/ is stale; run 'cargo run --locked --example generate_schemas' and commit" && exit 1)
Loading
Loading