Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
9673e5c
[feat][Protocol] Implement signed kernel
ouyangyipeng Aug 13, 2026
6029c1f
[feat][Runtime] Implement loopback runtime
ouyangyipeng Aug 13, 2026
2033c0f
[feat][Flow] Implement verified metrics flow
ouyangyipeng Aug 13, 2026
e38043b
[feat][Demo] Implement local AgenNet demo
ouyangyipeng Aug 13, 2026
fda7a6b
[chore] Verify AgenNet loopback MVP
ouyangyipeng Aug 13, 2026
b0eb409
[doc] Design AgenNet node bootstrap
ouyangyipeng Aug 14, 2026
5a15749
[doc] Plan AgenNet v0.2 implementation
ouyangyipeng Aug 14, 2026
7babf4e
[feat][Bootstrap][1/14] Establish v0.2 boundary
ouyangyipeng Aug 14, 2026
f57de0f
[feat][Bootstrap][2/14] Add authority credentials
ouyangyipeng Aug 14, 2026
1501cfb
[bug] Fix contract Domain validation
ouyangyipeng Aug 14, 2026
1039cc6
[feat][Bootstrap][3/14] Enforce network boundary
ouyangyipeng Aug 14, 2026
de3fdb9
[bug] Fix private-network startup boundary
ouyangyipeng Aug 14, 2026
a6ed86a
[feat][Bootstrap][4/14] Add encrypted PKI
ouyangyipeng Aug 14, 2026
719209c
[bug] Fix encrypted PKI safety bounds
ouyangyipeng Aug 14, 2026
6a64442
[bug] Preserve legacy root keystores
ouyangyipeng Aug 14, 2026
26a01e9
[feat][Bootstrap][5/14] Add one-time invitations
ouyangyipeng Aug 14, 2026
2a62e82
[bug] Bind invitation handoff claims
ouyangyipeng Aug 14, 2026
3c1f92a
[feat][Bootstrap][6/14] Add pinned enrollment
ouyangyipeng Aug 14, 2026
a05bf26
[bug] Zeroize enrollment bearer lifecycle
ouyangyipeng Aug 14, 2026
d1facfa
[bug] Prevent bearer serialization reallocation
ouyangyipeng Aug 14, 2026
c336e0d
[feat][Bootstrap][7/14] Enforce signed revocation
ouyangyipeng Aug 14, 2026
44a7c9b
[bug] Harden revocation policy state
ouyangyipeng Aug 14, 2026
866ef58
[feat][Bootstrap][8/14] Add mutual TLS transport
ouyangyipeng Aug 14, 2026
255be5d
[bug] Bind client certificate to local IP
ouyangyipeng Aug 14, 2026
e200132
[bug] Close mutual TLS identity gaps
ouyangyipeng Aug 14, 2026
69a1e98
[bug] Verify signed response before TLS binding
ouyangyipeng Aug 14, 2026
392ff4b
[feat][Bootstrap][9/14] Persist bootstrap state
ouyangyipeng Aug 14, 2026
0196b5f
[bug] Fix bootstrap persistence races
ouyangyipeng Aug 14, 2026
8063050
[bug] Clean failed bootstrap publications
ouyangyipeng Aug 14, 2026
35f995b
[feat][Bootstrap][10/14] Add bootstrap commands
ouyangyipeng Aug 14, 2026
2c81b23
[bug] Fix bootstrap authorization state
ouyangyipeng Aug 14, 2026
ba2f394
[bug] Remove unchecked capability registration
ouyangyipeng Aug 14, 2026
0ee88e2
[feat][Bootstrap][11/14] Manage user node service
ouyangyipeng Aug 14, 2026
bad35b3
[bug] Fix service rollback safety
ouyangyipeng Aug 14, 2026
e6ecb54
[feat][Bootstrap][12/14] Integrate host runtime
ouyangyipeng Aug 14, 2026
4895eaa
[bug] Enforce live effect authorization
ouyangyipeng Aug 14, 2026
595850e
[bug] Bind contract capability role
ouyangyipeng Aug 14, 2026
74f35c4
[feat][Bootstrap][13/14] Complete node lifecycle
ouyangyipeng Aug 14, 2026
740c4f9
[bug] Fix lifecycle recovery integrity
ouyangyipeng Aug 14, 2026
ff8e097
[bug] Serialize identity generation changes
ouyangyipeng Aug 15, 2026
41a60c6
[feat][Bootstrap] Prepare physical acceptance
ouyangyipeng Aug 15, 2026
d5cbe96
[bug] Fix physical preflight integrity
ouyangyipeng Aug 15, 2026
7db2556
[bug] Verify live acceptance health
ouyangyipeng Aug 15, 2026
f7cae6f
[doc] Design preview release surfaces
ouyangyipeng Aug 15, 2026
195525f
[doc] Plan preview release publication
ouyangyipeng Aug 15, 2026
425014a
[feat][Release][1/6] Define preview manifest
ouyangyipeng Aug 15, 2026
355fddf
[doc] Record Agent Society vision
ouyangyipeng Aug 15, 2026
629957a
[feat][Release][2/6] Build native archives
ouyangyipeng Aug 15, 2026
3cf2d4a
[feat][Release][3/6] Generate installer
ouyangyipeng Aug 15, 2026
6ed30c2
[bug] Fix installer doctor command
ouyangyipeng Aug 15, 2026
83f9864
[doc][Release][4/6] Publish guides
ouyangyipeng Aug 15, 2026
97dfc3c
[feat][Skill][5/6] Add node bootstrap Skill
ouyangyipeng Aug 15, 2026
c86ca68
[chore][Release][6/6] Seal preview candidate
ouyangyipeng Aug 15, 2026
1608c26
[feat][Site] Publish AgenNet public experience
ouyangyipeng Aug 15, 2026
73bd99e
[bug][Release] Fix CI toolchain bootstrap
ouyangyipeng Aug 15, 2026
41f693e
[bug][Release] Fix Linux device ID lint
ouyangyipeng Aug 15, 2026
5a7a06f
[bug][Release] Fix cross-platform test isolation
ouyangyipeng Aug 15, 2026
e57b173
[bug][Release] Fix Linux host fixture roots
ouyangyipeng Aug 15, 2026
2a17900
[bug][Release] Fix Linux subprocess paths
ouyangyipeng Aug 15, 2026
7f6d8e0
[bug][Release] Fix Linux identity fixture
ouyangyipeng Aug 15, 2026
8debaac
[bug][Release] Fix Linux Domain fixture
ouyangyipeng Aug 15, 2026
763bd2b
[bug][Release] Fix Linux systemd fixtures
ouyangyipeng Aug 15, 2026
9aee57c
[bug][Release] Fix Linux LaunchAgent fixtures
ouyangyipeng Aug 15, 2026
aa5059b
[bug][Release] Fix artifact download pattern
ouyangyipeng Aug 15, 2026
061c6e6
[chore][Release] Advance preview candidate
ouyangyipeng Aug 15, 2026
088585e
[bug][Release] Fix cross-target verification
ouyangyipeng Aug 15, 2026
24e8ba9
[milestone][Release] Publish preview.4
ouyangyipeng Aug 15, 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
253 changes: 253 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
name: Preview release

on:
pull_request:
push:
branches:
- feat/release-skill-sites
tags:
- v0.2.0-preview.4
workflow_dispatch:

permissions:
contents: read

concurrency:
group: preview-release-${{ github.ref }}
cancel-in-progress: false

env:
CARGO_TERM_COLOR: always
RELEASE_VERSION: 0.2.0-preview.4

jobs:
native-archive:
name: ${{ matrix.target }}
runs-on: ${{ matrix.runner }}
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
include:
- runner: macos-15
target: aarch64-apple-darwin
- runner: macos-15-intel
target: x86_64-apple-darwin
- runner: ubuntu-24.04-arm
target: aarch64-unknown-linux-gnu
- runner: ubuntu-24.04
target: x86_64-unknown-linux-gnu
steps:
- name: Check out source
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false

- name: Install pinned Rust toolchain
run: >-
rustup toolchain install 1.97.1 --profile minimal
--component rustfmt --component clippy
--target "${{ matrix.target }}"

- name: Check formatting
run: cargo +1.97.1 fmt --check

- name: Lint all targets and features
run: cargo +1.97.1 clippy --locked --all-targets --all-features -- -D warnings

- name: Test all targets and features
run: cargo +1.97.1 test --locked --all-targets --all-features

- name: Build release binary
run: cargo +1.97.1 build --locked --release --target "${{ matrix.target }}"

- name: Verify binary version
run: >-
test "$(target/${{ matrix.target }}/release/agenet --version)"
= "agenet ${RELEASE_VERSION}"

- name: Package deterministic archive
run: |
scripts/package-release.sh \
--binary "target/${{ matrix.target }}/release/agenet" \
--target "${{ matrix.target }}" \
--version "${RELEASE_VERSION}" \
--commit "${GITHUB_SHA}" \
--output-dir dist

- name: Verify release archive
run: |
scripts/check-release-archive.sh \
--archive "dist/agenet-v${RELEASE_VERSION}-${{ matrix.target }}.tar.gz" \
--target "${{ matrix.target }}" \
--version "${RELEASE_VERSION}" \
--commit "${GITHUB_SHA}"

- name: Upload immutable archive
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: native-${{ matrix.target }}
path: dist/agenet-v${{ env.RELEASE_VERSION }}-${{ matrix.target }}.tar.gz
archive: false
if-no-files-found: error
retention-days: 7

publish-prerelease:
name: Verify and publish immutable prerelease
if: startsWith(github.ref, 'refs/tags/')
needs: native-archive
runs-on: ubuntu-24.04
timeout-minutes: 30
permissions:
contents: write
id-token: write
attestations: write
steps:
- name: Check out exact tag source
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false

- name: Install pinned Rust toolchain
run: rustup toolchain install 1.97.1 --profile minimal

- name: Download all four native archives
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
pattern: agenet-v${{ env.RELEASE_VERSION }}-*.tar.gz
path: dist
merge-multiple: true

- name: Require the exact archive set
run: |
find dist -mindepth 1 -maxdepth 1 -type f -printf '%f\n' \
| LC_ALL=C sort > actual-archives.txt
cat > expected-archives.txt <<EOF
agenet-v${RELEASE_VERSION}-aarch64-apple-darwin.tar.gz
agenet-v${RELEASE_VERSION}-aarch64-unknown-linux-gnu.tar.gz
agenet-v${RELEASE_VERSION}-x86_64-apple-darwin.tar.gz
agenet-v${RELEASE_VERSION}-x86_64-unknown-linux-gnu.tar.gz
EOF
diff -u expected-archives.txt actual-archives.txt

- name: Build release metadata tools
run: >-
cargo +1.97.1 build --locked
--bin agenet-release-manifest
--bin agenet-render-installer

- name: Generate manifest and fixed installer
run: |
commit_epoch=$(git show -s --format=%ct "${GITHUB_SHA}")
published_at=$(date -u -d "@${commit_epoch}" +%Y-%m-%dT%H:%M:%SZ)
target/debug/agenet-release-manifest \
--version "${RELEASE_VERSION}" \
--commit "${GITHUB_SHA}" \
--published-at "${published_at}" \
--macos-arm64 "dist/agenet-v${RELEASE_VERSION}-aarch64-apple-darwin.tar.gz" \
--macos-x86-64 "dist/agenet-v${RELEASE_VERSION}-x86_64-apple-darwin.tar.gz" \
--linux-arm64 "dist/agenet-v${RELEASE_VERSION}-aarch64-unknown-linux-gnu.tar.gz" \
--linux-x86-64 "dist/agenet-v${RELEASE_VERSION}-x86_64-unknown-linux-gnu.tar.gz" \
--output dist/release-manifest-v1.json
target/debug/agenet-render-installer \
--manifest dist/release-manifest-v1.json \
--output dist/install.sh
chmod 0755 dist/install.sh

- name: Verify the release core offline
run: |
find dist -mindepth 1 -maxdepth 1 -type f \
! -name SHA256SUMS -printf '%f\n' \
| LC_ALL=C sort \
| while IFS= read -r file; do sha256sum "dist/${file}"; done \
| sed 's# dist/# #' > SHA256SUMS.core
scripts/verify-release.sh \
--manifest dist/release-manifest-v1.json \
--installer dist/install.sh \
--checksums SHA256SUMS.core \
--archives-dir dist \
--version "${RELEASE_VERSION}" \
--commit "${GITHUB_SHA}" \
--renderer target/debug/agenet-render-installer

- name: Add guides, Skill, and release notes
run: |
cp docs/bootstrap/agent-node-setup.md dist/agent-bootstrap.md
cp docs/bootstrap/agent-node-setup.en.md dist/agent-bootstrap.en.md
scripts/package-bootstrap-skill.sh \
--version "${RELEASE_VERSION}" \
--output "dist/agenet-node-bootstrap-v${RELEASE_VERSION}.tar.gz"
cp "docs/releases/v${RELEASE_VERSION}.md" \
"dist/release-notes-v${RELEASE_VERSION}.md"
find dist -mindepth 1 -maxdepth 1 -type f \
! -name SHA256SUMS -printf '%f\n' \
| LC_ALL=C sort \
| while IFS= read -r file; do sha256sum "dist/${file}"; done \
| sed 's# dist/# #' > dist/SHA256SUMS
scripts/verify-release.sh \
--manifest dist/release-manifest-v1.json \
--installer dist/install.sh \
--checksums dist/SHA256SUMS \
--archives-dir dist \
--version "${RELEASE_VERSION}" \
--commit "${GITHUB_SHA}" \
--renderer target/debug/agenet-render-installer \
--complete \
--release-dir dist

- name: Attest macOS arm64 archive
uses: actions/attest@508db95dd578ae2727ebd6217d5ba78e4fbda05d # v4.2.1
with:
subject-path: dist/agenet-v${{ env.RELEASE_VERSION }}-aarch64-apple-darwin.tar.gz

- name: Attest macOS x86_64 archive
uses: actions/attest@508db95dd578ae2727ebd6217d5ba78e4fbda05d # v4.2.1
with:
subject-path: dist/agenet-v${{ env.RELEASE_VERSION }}-x86_64-apple-darwin.tar.gz

- name: Attest Linux arm64 archive
uses: actions/attest@508db95dd578ae2727ebd6217d5ba78e4fbda05d # v4.2.1
with:
subject-path: dist/agenet-v${{ env.RELEASE_VERSION }}-aarch64-unknown-linux-gnu.tar.gz

- name: Attest Linux x86_64 archive
uses: actions/attest@508db95dd578ae2727ebd6217d5ba78e4fbda05d # v4.2.1
with:
subject-path: dist/agenet-v${{ env.RELEASE_VERSION }}-x86_64-unknown-linux-gnu.tar.gz

- name: Publish once or prove exact idempotency
env:
GH_TOKEN: ${{ github.token }}
run: |
tag="${GITHUB_REF_NAME}"
if gh release view "${tag}" >/dev/null 2>&1; then
comparison=$(mktemp -d)
trap 'rm -rf -- "${comparison}"' EXIT
gh release download "${tag}" --dir "${comparison}"
find dist -mindepth 1 -maxdepth 1 -type f -printf '%f\n' \
| LC_ALL=C sort > expected-assets.txt
find "${comparison}" -mindepth 1 -maxdepth 1 -type f -printf '%f\n' \
| LC_ALL=C sort > existing-assets.txt
diff -u expected-assets.txt existing-assets.txt
while IFS= read -r asset; do
cmp "dist/${asset}" "${comparison}/${asset}"
done < expected-assets.txt
release_state=$(gh release view "${tag}" \
--json isPrerelease,isDraft \
--jq '"\(.isPrerelease) \(.isDraft)"')
test "${release_state}" = 'true false'
else
gh release create "${tag}" dist/* \
--prerelease \
--verify-tag \
--title "AgenNet ${tag} Developer Preview" \
--notes-file "docs/releases/v${RELEASE_VERSION}.md"
fi

- name: Upload complete verified release bundle
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: preview-release-${{ env.RELEASE_VERSION }}
path: dist/*
if-no-files-found: error
retention-days: 30
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@
target/
*.key
*.pem
*.token
*.log
*.jsonl

Loading
Loading