Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
358 commits
Select commit Hold shift + click to select a range
369608c
release: 0.5.0
stainless-app[bot] Dec 5, 2025
020833d
Merge pull request #7 from onkernel/release-please--branches--main--c…
rgarcia Dec 5, 2025
d6bf382
chore(internal): version bump
stainless-app[bot] Dec 5, 2025
660ac27
release: 0.5.1 (#9)
stainless-app[bot] Dec 5, 2025
d5ac7ab
chore(internal): codegen related update
stainless-app[bot] Dec 6, 2025
2bb1f93
chore: elide duplicate aliases
stainless-app[bot] Dec 6, 2025
6dfaa94
fix(mcp): correct code tool API endpoint
stainless-app[bot] Dec 6, 2025
afea2d1
fix: rename param to avoid collision
stainless-app[bot] Dec 6, 2025
868b7ae
feat: Start and Stop VM
stainless-app[bot] Dec 6, 2025
714cd3a
chore(internal): codegen related update
stainless-app[bot] Dec 6, 2025
47e8212
chore: elide duplicate aliases
stainless-app[bot] Dec 6, 2025
1a385aa
fix(mcp): correct code tool API endpoint
stainless-app[bot] Dec 6, 2025
88b7545
fix: rename param to avoid collision
stainless-app[bot] Dec 6, 2025
3784058
feat: Start and Stop VM
stainless-app[bot] Dec 6, 2025
ae45225
release: 0.6.0
stainless-app[bot] Dec 6, 2025
738a348
chore(internal): version bump
stainless-app[bot] Dec 8, 2025
479d034
feat: Support TLS for ingress
stainless-app[bot] Dec 9, 2025
3b75f1a
fix: incorrect reporting of Stopped, add better error reporting
stainless-app[bot] Dec 10, 2025
1917505
release: 0.6.0 (#13)
stainless-app[bot] Dec 10, 2025
311c28a
feat: Operational logs over API: hypeman.log, vmm.log
stainless-app[bot] Dec 11, 2025
79dc505
feat: Support TLS for ingress
stainless-app[bot] Dec 9, 2025
a28703f
fix: incorrect reporting of Stopped, add better error reporting
stainless-app[bot] Dec 10, 2025
bd56469
feat: Operational logs over API: hypeman.log, vmm.log
stainless-app[bot] Dec 11, 2025
b1ef44a
release: 0.7.0
stainless-app[bot] Dec 11, 2025
a720429
chore(internal): version bump
stainless-app[bot] Dec 11, 2025
486c9a3
Ingress support (#15)
sjmiller609 Dec 11, 2025
c069c0c
Fix lint
sjmiller609 Dec 11, 2025
71d62d8
release: 0.6.1 (#16)
stainless-app[bot] Dec 11, 2025
c2d7545
Fix windows build
sjmiller609 Dec 11, 2025
d7498d5
Update README
sjmiller609 Dec 11, 2025
74f0026
Update brew publishing
sjmiller609 Dec 11, 2025
3a02007
Update Homebrew installation command for hypeman
sjmiller609 Dec 11, 2025
2b993f6
Add directory field to Homebrew formula configuration
sjmiller609 Dec 11, 2025
cb672fa
feat(encoder): support bracket encoding form-data object members
stainless-app[bot] Dec 12, 2025
0735a46
feat(encoder): support bracket encoding form-data object members
stainless-app[bot] Dec 12, 2025
3785e2d
feat: gpu passthrough
stainless-app[bot] Dec 16, 2025
5ae1bb7
feat: gpu passthrough
stainless-app[bot] Dec 16, 2025
de2e388
fix: skip usage tests that don't work with Prism
stainless-app[bot] Dec 18, 2025
b158b1b
fix: skip usage tests that don't work with Prism
stainless-app[bot] Dec 18, 2025
01a984c
chore: add float64 to valid types for RegisterFieldValidator
stainless-app[bot] Dec 19, 2025
6f1e2ef
chore: add float64 to valid types for RegisterFieldValidator
stainless-app[bot] Dec 19, 2025
b4f1cab
Initial commit
stainless-sdks[bot] Dec 22, 2025
4972859
codegen metadata
stainless-app[bot] Dec 22, 2025
71cd29e
codegen metadata
stainless-app[bot] Dec 22, 2025
1dfbaf6
chore: configure new SDK language
stainless-app[bot] Dec 22, 2025
cbd7ffd
chore: configure new SDK language
stainless-app[bot] Dec 22, 2025
6b96a3e
codegen metadata
stainless-app[bot] Dec 22, 2025
1c1b209
codegen metadata
stainless-app[bot] Dec 22, 2025
6f09ab0
chore: update SDK settings
stainless-app[bot] Dec 22, 2025
0cbc0d9
chore: update SDK settings
stainless-app[bot] Dec 22, 2025
fd78479
codegen metadata
stainless-app[bot] Dec 22, 2025
cb5bb46
codegen metadata
stainless-app[bot] Dec 22, 2025
1f5af3f
chore: update SDK settings
stainless-app[bot] Dec 22, 2025
8561f5d
chore: update SDK settings
stainless-app[bot] Dec 22, 2025
31148e2
release: 0.0.2
stainless-app[bot] Dec 22, 2025
54372d8
Merge pull request #1 from onkernel/release-please--branches--main--c…
rgarcia Dec 22, 2025
9b941c7
chore(internal): version bump
stainless-app[bot] Dec 22, 2025
c6ee60e
codegen metadata
stainless-app[bot] Dec 22, 2025
6f02374
codegen metadata
stainless-app[bot] Dec 22, 2025
6cf70c8
codegen metadata
stainless-app[bot] Dec 22, 2025
27a28f7
feat(api): add stat endpoint and PathInfo error field
rgarcia Dec 23, 2025
2e4761c
feat: add CpToInstance and CpFromInstance functions
rgarcia Dec 22, 2025
a4ae251
feat: add cpToInstance and cpFromInstance functions
rgarcia Dec 22, 2025
2e3b2e3
feat(api): add autogenerated stat endpoint from Stainless
rgarcia Dec 23, 2025
5720efe
fix(cp): address bugbot review comments
rgarcia Dec 23, 2025
4406599
Merge pull request #12 from onkernel/feature/hypeman-cp
rgarcia Dec 23, 2025
d008916
Merge pull request #2 from onkernel/feature/hypeman-cp
rgarcia Dec 23, 2025
3f0a051
chore: sync repo
stainless-app[bot] Dec 23, 2025
889e4db
feat: add hypeman cp for file copy to/from running VMs
stainless-app[bot] Dec 23, 2025
23a8b4d
feat: add hypeman cp for file copy to/from running VMs
stainless-app[bot] Dec 23, 2025
8d093a4
feat: add hypeman cp for file copy to/from running VMs
stainless-app[bot] Dec 23, 2025
bdc5259
feat: add hypeman cp for file copy to/from running VMs
stainless-app[bot] Dec 23, 2025
ffef5fc
release: 0.8.0
stainless-app[bot] Dec 23, 2025
7c5bf59
Merge pull request #11 from onkernel/release-please--branches--main--…
rgarcia Dec 23, 2025
2d97bc0
chore(internal): version bump
stainless-app[bot] Dec 23, 2025
442bc04
feat: add cp command for file copy to/from instances (#18)
rgarcia Dec 23, 2025
6b59dbe
release: 0.7.0 (#17)
stainless-app[bot] Dec 23, 2025
cc31276
feat: QEMU support
stainless-app[bot] Dec 23, 2025
80aaf35
feat: QEMU support
stainless-app[bot] Dec 23, 2025
05f8829
feat: QEMU support
stainless-app[bot] Dec 23, 2025
4831d37
feat: QEMU support
stainless-app[bot] Dec 23, 2025
83bfaf9
release: 0.1.0
stainless-app[bot] Dec 23, 2025
e6e2b59
feat: Add ws dependency and types
cursoragent Dec 23, 2025
4ef5c91
Merge pull request #3 from onkernel/release-please--branches--main--c…
rgarcia Dec 23, 2025
2a088e8
chore(internal): version bump
stainless-app[bot] Dec 23, 2025
4b3e0b4
feat: Resource accounting
stainless-app[bot] Jan 5, 2026
8f86ca2
feat: Resource accounting
stainless-app[bot] Jan 5, 2026
5c75b3c
feat: Resource accounting
stainless-app[bot] Jan 5, 2026
f076fc6
feat: Resource accounting
stainless-app[bot] Jan 5, 2026
341e6f3
release: 0.9.0
stainless-app[bot] Jan 5, 2026
d0a3c4a
chore: break long lines in snippets into multiline
stainless-app[bot] Jan 7, 2026
77822bb
chore: break long lines in snippets into multiline
stainless-app[bot] Jan 7, 2026
4cdb8fa
feat: add hypeman build command (#21)
hiroTamada Jan 9, 2026
1b60640
codegen metadata
stainless-app[bot] Jan 9, 2026
89fc8a8
codegen metadata
stainless-app[bot] Jan 9, 2026
d9c7ae2
codegen metadata
stainless-app[bot] Jan 9, 2026
465ca42
chore(internal): codegen related update
stainless-app[bot] Dec 23, 2025
b84496d
fix(mcp): correct code tool API endpoint
stainless-app[bot] Dec 6, 2025
f8121fd
chore(internal): codegen related update
stainless-app[bot] Dec 6, 2025
6b0d277
codegen metadata
stainless-app[bot] Jan 12, 2026
a1cfd86
codegen metadata
stainless-app[bot] Jan 12, 2026
8c63845
codegen metadata
stainless-app[bot] Jan 12, 2026
b35b4b3
chore: rename GitHub org from onkernel to kernel
hiroTamada Jan 13, 2026
3d8fce0
Merge pull request #14 from kernel/rename-org-to-kernel
hiroTamada Jan 14, 2026
efce0f0
chore: rename GitHub org from onkernel to kernel (#23)
hiroTamada Jan 14, 2026
c49b876
fix: enable Windows cross-compilation
hiroTamada Jan 14, 2026
b653260
Merge pull request #15 from kernel/fix/windows-cross-compile
hiroTamada Jan 14, 2026
774079b
fix: update SDK to v0.9.1 and fix goreleaser config (#25)
hiroTamada Jan 14, 2026
8121e97
feat: QEMU support
stainless-app[bot] Dec 23, 2025
50cac52
feat: Resource accounting
stainless-app[bot] Jan 5, 2026
63d0b78
codegen metadata
stainless-app[bot] Jan 9, 2026
134768e
codegen metadata
stainless-app[bot] Jan 12, 2026
72be072
chore(internal): upgrade babel, qs, js-yaml
stainless-app[bot] Jan 15, 2026
63a9528
chore(internal): upgrade babel, qs, js-yaml
stainless-app[bot] Jan 15, 2026
94a5457
chore(internal): upgrade brace-expansion and @babel/helpers
stainless-app[bot] Jan 16, 2026
514032d
chore(internal): upgrade brace-expansion and @babel/helpers
stainless-app[bot] Jan 16, 2026
74164f0
chore(internal): update lock file
stainless-app[bot] Jan 16, 2026
a50a80e
chore(internal): update lock file
stainless-app[bot] Jan 16, 2026
3a09c39
feat: Add vGPU support
stainless-app[bot] Jan 16, 2026
d9a2e51
feat: Add vGPU support
stainless-app[bot] Jan 16, 2026
0f1047f
feat: Add vGPU support
stainless-app[bot] Jan 16, 2026
9441977
feat: Add vGPU support
stainless-app[bot] Jan 16, 2026
59ea198
chore(internal): update `actions/checkout` version
stainless-app[bot] Jan 17, 2026
4295a7f
chore(internal): update `actions/checkout` version
stainless-app[bot] Jan 17, 2026
dc6c938
chore(internal): update `actions/checkout` version
stainless-app[bot] Jan 17, 2026
e2ca58b
chore(internal): update `actions/checkout` version
stainless-app[bot] Jan 17, 2026
e71357e
fix(docs): add missing pointer prefix to api.md return types
stainless-app[bot] Jan 17, 2026
f6827c3
Merge remote-tracking branch 'origin/next' into main--merge-conflict
sjmiller609 Jan 20, 2026
f0c751e
Merge branch 'main' into release-please--branches--main--changes--next
sjmiller609 Jan 20, 2026
ec93c28
Merge pull request #13 from kernel/release-please--branches--main--ch…
sjmiller609 Jan 20, 2026
bdd46aa
Merge branch 'main' into next
sjmiller609 Jan 20, 2026
38b03bb
Merge pull request #16 from kernel/next
sjmiller609 Jan 20, 2026
a592202
Upgrade SDK
sjmiller609 Jan 20, 2026
1ba0b4f
feat: Add to stainless config new API endpoints
stainless-app[bot] Jan 20, 2026
07b04ab
feat: Add to stainless config new API endpoints
stainless-app[bot] Jan 20, 2026
438e835
feat: Add to stainless config new API endpoints
stainless-app[bot] Jan 20, 2026
3e58ba0
onkernel -> kernel to fix build
sjmiller609 Jan 20, 2026
d358645
Merge pull request #3 from stainless-sdks/fix-build-staging
sjmiller609 Jan 20, 2026
b595781
Add Hypeman Resources, Build APIs to SDK (#17)
sjmiller609 Jan 20, 2026
9d1fe99
Devices, Resources, Build
sjmiller609 Jan 20, 2026
7e5b890
Update README
sjmiller609 Jan 20, 2026
df61295
Resources, Devices, vGPU, Build (#26)
sjmiller609 Jan 20, 2026
844655c
Add format option to ingress list command (#27)
ulziibay-kernel Jan 23, 2026
38648ba
codegen metadata
stainless-app[bot] Jan 23, 2026
898d4d1
codegen metadata
stainless-app[bot] Jan 23, 2026
6989690
codegen metadata
stainless-app[bot] Jan 23, 2026
b192752
feat: add boot time optimizations for faster VM startup
stainless-app[bot] Jan 23, 2026
a1da9cf
feat: add boot time optimizations for faster VM startup
stainless-app[bot] Jan 23, 2026
9f7d022
feat: add boot time optimizations for faster VM startup
stainless-app[bot] Jan 23, 2026
ef1f0bb
Merge pull request #18 from kernel/next
hiroTamada Jan 23, 2026
b4feab5
feat(client): add a convenient param.SetJSON helper
stainless-app[bot] Jan 24, 2026
55f22b4
chore(ci): upgrade `actions/github-script`
stainless-app[bot] Jan 24, 2026
fe37dd0
chore(ci): upgrade `actions/github-script`
stainless-app[bot] Jan 24, 2026
1bcf008
fix: image name encoding and auth on push (#28)
sjmiller609 Jan 27, 2026
cbd08b2
feat(builds): implement two-tier build cache with per-repo token scopes
stainless-app[bot] Jan 27, 2026
d8a9525
feat(builds): implement two-tier build cache with per-repo token scopes
stainless-app[bot] Jan 27, 2026
30fa42f
feat(builds): implement two-tier build cache with per-repo token scopes
stainless-app[bot] Jan 27, 2026
d33cc84
codegen metadata
stainless-app[bot] Jan 28, 2026
72ee6a6
codegen metadata
stainless-app[bot] Jan 28, 2026
a37cb9e
codegen metadata
stainless-app[bot] Jan 28, 2026
52d498f
codegen metadata
stainless-app[bot] Jan 28, 2026
445629b
codegen metadata
stainless-app[bot] Jan 28, 2026
3a5af4d
codegen metadata
stainless-app[bot] Jan 28, 2026
627d4d0
feat(api): manual updates
stainless-app[bot] Jan 28, 2026
2c12c6b
feat(api): manual updates
stainless-app[bot] Jan 28, 2026
35cef58
feat(api): manual updates
stainless-app[bot] Jan 28, 2026
ea41000
Merge pull request #19 from kernel/next
hiroTamada Jan 29, 2026
be4f5f7
Handle terminal resizing (#30)
sjmiller609 Jan 29, 2026
cf9c1b1
fix: address multi-platform build
sjmiller609 Jan 29, 2026
8bb2e32
fix: network is bytes/s not bits/s (#31)
sjmiller609 Jan 30, 2026
02b666c
feat: Use resources module for input validation
stainless-app[bot] Jan 30, 2026
4f50ba3
feat: Use resources module for input validation
stainless-app[bot] Jan 30, 2026
1aeb26b
feat: Use resources module for input validation
stainless-app[bot] Jan 30, 2026
27f17e6
release: 0.9.6
stainless-app[bot] Jan 30, 2026
d6e5ccf
Add disk io to resources output (#32)
sjmiller609 Jan 30, 2026
b4050f7
release: 0.2.0
stainless-app[bot] Jan 31, 2026
3cf23b4
fix(client): avoid memory leak with abort signals
stainless-app[bot] Feb 3, 2026
cb4aefe
fix(client): avoid memory leak with abort signals
stainless-app[bot] Feb 3, 2026
8f6b666
chore(client): do not parse responses with empty content-length
stainless-app[bot] Feb 3, 2026
9ac692c
chore(client): do not parse responses with empty content-length
stainless-app[bot] Feb 3, 2026
5adf13a
fix: use GitHub App token for Homebrew tap updates (#33)
rgarcia Feb 10, 2026
fc8435c
Respect terminal width
sjmiller609 Feb 11, 2026
9279dc6
Respect terminal width (#34)
sjmiller609 Feb 11, 2026
9449a61
Add CLI updater CI job
sjmiller609 Feb 11, 2026
23f340c
Trigger workflow to try it
sjmiller609 Feb 11, 2026
dd38566
create branch when doesn't exist
sjmiller609 Feb 11, 2026
3184789
Cancel in progress
sjmiller609 Feb 11, 2026
23e0517
Reference the right repo
sjmiller609 Feb 11, 2026
323721d
Remove stainless generated endpoints
sjmiller609 Feb 11, 2026
4f60daa
Clean up version output
sjmiller609 Feb 11, 2026
d9215e8
Remove stainless generated endpoints (#35)
sjmiller609 Feb 11, 2026
e6d9544
CLI: Update hypeman SDK to a9a0d6c96059 and add new commands/flags
kernel-internal[bot] Feb 11, 2026
3ff7ec3
Consistency tweaks
sjmiller609 Feb 11, 2026
03a5296
CLI: Update hypeman SDK to a9a0d6c96059 and add new commands/flags (#36)
kernel-internal[bot] Feb 11, 2026
9dfd9e2
refactor: cross-platform foundation for macOS support
stainless-app[bot] Feb 11, 2026
de4c799
fix(encoder): correctly serialize NullStruct
stainless-app[bot] Feb 11, 2026
094152e
codegen metadata
stainless-app[bot] Feb 11, 2026
3411871
release: 0.9.7
stainless-app[bot] Feb 11, 2026
c5cdf8f
Fix old references
sjmiller609 Feb 11, 2026
c180907
Fix the prompt
sjmiller609 Feb 11, 2026
84289d3
Merge pull request #22 from kernel/cli-updater
sjmiller609 Feb 11, 2026
d223922
Merge main into cli-coverage-update
kernel-internal[bot] Feb 11, 2026
bc992be
CLI: Update hypeman SDK to b99ed488ace3 and add new flags
kernel-internal[bot] Feb 11, 2026
28ede8c
release: 0.9.8
stainless-app[bot] Feb 11, 2026
7794716
CLI: Update hypeman SDK to 5fc15d8 and add vz hypervisor support
kernel-internal[bot] Feb 11, 2026
4620e96
CLI: Update hypeman SDK to 5fc15d8 and add vz hypervisor support (#37)
kernel-internal[bot] Feb 12, 2026
6ea1f01
Fix terminal width through pipe
sjmiller609 Feb 12, 2026
cc25964
feat: Add metadata field to instances
stainless-app[bot] Feb 13, 2026
c5dd36b
feat: Better stop behavior
stainless-app[bot] Feb 13, 2026
64414dc
release: 0.10.0
stainless-app[bot] Feb 13, 2026
8444439
Merge pull request #24 from kernel/release-please--branches--main--ch…
sjmiller609 Feb 13, 2026
92168f0
CLI: Update hypeman SDK to 0adb0e3 and add new flags (#38)
kernel-internal[bot] Feb 13, 2026
b51bc0e
feat: Add image_name parameter to builds
stainless-app[bot] Feb 15, 2026
1f83e26
release: 0.11.0
stainless-app[bot] Feb 15, 2026
2b3de55
CLI: Update hypeman SDK to a63ff054a3 and add --image-name flag (#39)
kernel-internal[bot] Feb 15, 2026
3fa6f62
feat: add YAML config file support via koanf (#40)
rgarcia Feb 16, 2026
467cbf9
fix: send query params for NewFromArchive
hiroTamada Feb 18, 2026
66bf8df
Merge pull request #27 from kernel/fix/new-from-archive-query-params
hiroTamada Feb 18, 2026
f782498
feat: add metadata and state filtering to GET /instances
stainless-app[bot] Feb 17, 2026
7057c4a
chore(internal): remove mock server code
stainless-app[bot] Feb 20, 2026
f6136a9
chore: update mock server docs
stainless-app[bot] Feb 20, 2026
d0c6369
fix: allow canceling a request while it is waiting to retry
stainless-app[bot] Feb 20, 2026
1ed8840
chore(internal): move custom custom `json` tags to `api`
stainless-app[bot] Feb 25, 2026
f1777f3
feat: Disable default hotplug memory allocation
stainless-app[bot] Feb 26, 2026
8c740c1
release: 0.12.0
stainless-app[bot] Feb 26, 2026
abff617
feat: wire up memory_mb and cpus in builds API
stainless-app[bot] Feb 26, 2026
5999881
release: 0.13.0
stainless-app[bot] Feb 26, 2026
ce82564
import: kernel/hypeman-cli into apps/cli
sjmiller609 Feb 28, 2026
ae52cf3
import: kernel/hypeman-go into sdks/go
sjmiller609 Feb 28, 2026
1bb9236
import: kernel/hypeman-ts into sdks/ts
sjmiller609 Feb 28, 2026
eb9c912
chore: wire monorepo workspaces and sdk sync workflows
sjmiller609 Feb 28, 2026
c9f2e05
import: preserve history from import-full/cli/src-heads/cli-coverage-…
sjmiller609 Feb 28, 2026
1129bda
import: preserve history from import-full/cli/src-heads/main--merge-c…
sjmiller609 Feb 28, 2026
5d68c7b
import: preserve history from import-full/cli/src-heads/new-cli-features
sjmiller609 Feb 28, 2026
a11c2f8
import: preserve history from import-full/cli/src-heads/remove-auto-g…
sjmiller609 Feb 28, 2026
93aefe5
import: preserve history from import-full/cli/src-heads/terminal-width
sjmiller609 Feb 28, 2026
305c4db
import: preserve history from import-full/sdk-go/src-remotes/origin/g…
sjmiller609 Feb 28, 2026
0851e94
import: preserve history from import-full/sdk-ts/src-remotes/origin/g…
sjmiller609 Feb 28, 2026
f8401e3
import: preserve history from import-full/sdk-ts/src-remotes/origin/next
sjmiller609 Feb 28, 2026
dc68221
import: preserve history from import-full/sdk-ts/src-remotes/origin/r…
sjmiller609 Feb 28, 2026
224edd7
docs: add non-main history anchoring guidance
sjmiller609 Feb 28, 2026
89ab8c7
ci: fix monorepo test wiring and stainless sync
sjmiller609 Feb 28, 2026
eb85c2b
ci: handle apt lock contention and no-op stainless builds
sjmiller609 Feb 28, 2026
a7497e3
ci: resolve source branch in e2e install test under detached HEAD
sjmiller609 Feb 28, 2026
96b8449
fix: reuse source checkout when building CLI in install script
sjmiller609 Feb 28, 2026
36164e5
test: add temporary health automation probe field
sjmiller609 Feb 28, 2026
f3ad5e1
ci: use token auth for stainless sdk sync fetch
sjmiller609 Feb 28, 2026
29008a0
test: force stainless regeneration for sdk sync validation
sjmiller609 Feb 28, 2026
b94639d
ci: fallback ts sdk sync to stainless install artifact
sjmiller609 Feb 28, 2026
b6cf144
test: force fresh stainless outcomes after sync fallback
sjmiller609 Feb 28, 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
64 changes: 64 additions & 0 deletions .github/workflows/mirror-sync.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Mirror Monorepo Components

on:
workflow_dispatch:
inputs:
source_ref:
description: "Monorepo ref to mirror (branch, tag, or SHA)"
required: true
default: "main"
dry_run:
description: "Preview only (no pushes)"
required: true
default: true
type: boolean

permissions:
contents: read

jobs:
mirror:
runs-on: ubuntu-latest
steps:
- name: Checkout source ref
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ inputs.source_ref }}

- name: Configure mirror remotes
env:
MIRROR_PUSH_TOKEN: ${{ secrets.MIRROR_PUSH_TOKEN }}
run: |
set -euo pipefail
if [ -z "${MIRROR_PUSH_TOKEN}" ]; then
echo "MIRROR_PUSH_TOKEN is required"
exit 1
fi

git remote add mirror-cli "https://x-access-token:${MIRROR_PUSH_TOKEN}@github.com/kernel/hypeman-cli.git"
git remote add mirror-sdk-go "https://x-access-token:${MIRROR_PUSH_TOKEN}@github.com/kernel/hypeman-go.git"
git remote add mirror-sdk-ts "https://x-access-token:${MIRROR_PUSH_TOKEN}@github.com/onkernel/hypeman-ts.git"

- name: Build subtree branches
run: |
set -euo pipefail
git subtree split --prefix=apps/cli -b mirror-cli-branch
git subtree split --prefix=sdks/go -b mirror-sdk-go-branch
git subtree split --prefix=sdks/ts -b mirror-sdk-ts-branch

- name: Preview mirror pushes
if: ${{ inputs.dry_run == true }}
run: |
echo "Dry run enabled. Would push:"
echo " mirror-cli-branch -> kernel/hypeman-cli:main"
echo " mirror-sdk-go-branch -> kernel/hypeman-go:main"
echo " mirror-sdk-ts-branch -> onkernel/hypeman-ts:main"

- name: Push mirrors
if: ${{ inputs.dry_run != true }}
run: |
set -euo pipefail
git push mirror-cli mirror-cli-branch:main --force-with-lease
git push mirror-sdk-go mirror-sdk-go-branch:main --force-with-lease
git push mirror-sdk-ts mirror-sdk-ts-branch:main --force-with-lease
42 changes: 40 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Release Hypeman API
name: Release Hypeman Monorepo

on:
push:
Expand All @@ -9,7 +9,7 @@ permissions:
contents: write

jobs:
release:
release-server:
runs-on: [self-hosted, linux, x64, kvm]
steps:
- name: Checkout
Expand All @@ -34,3 +34,41 @@ jobs:
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

release-components:
needs: release-server
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.25.4'

- name: Verify CLI and Go SDK release build
run: go test ./...
working-directory: ./apps/cli

- name: Verify Go SDK tests
run: go test ./...
working-directory: ./sdks/go

- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
version: '10.24.0'

- name: Verify TypeScript SDK build
run: |
./scripts/bootstrap
./scripts/build
working-directory: ./sdks/ts
198 changes: 168 additions & 30 deletions .github/workflows/stainless-sdks.yml
Original file line number Diff line number Diff line change
@@ -1,65 +1,203 @@
name: Stainless SDK preview on PRs
name: Stainless SDK Sync on PRs

on:
pull_request:
types:
- opened
- synchronize
- reopened
- closed
paths:
- openapi.yaml
- stainless.yaml
- .github/workflows/stainless-sdks.yml

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

env:
STAINLESS_ORG: ${{ vars.STAINLESS_ORG }}
STAINLESS_PROJECT: ${{ vars.STAINLESS_PROJECT }}
OAS_PATH: openapi.yaml
CONFIG_PATH: stainless.yaml

jobs:
preview:
if: github.event.action != 'closed'
build-and-sync:
if: github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
permissions:
contents: read
contents: write
pull-requests: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 2
fetch-depth: 0

- name: Run preview builds
uses: stainless-api/upload-openapi-spec-action/preview@v1
- name: Run Stainless build
id: stainless_build
uses: stainless-api/upload-openapi-spec-action/build@v1
with:
stainless_api_key: ${{ secrets.STAINLESS_API_KEY }}
org: ${{ env.STAINLESS_ORG }}
project: ${{ env.STAINLESS_PROJECT }}
oas_path: ${{ env.OAS_PATH }}
config_path: ${{ env.CONFIG_PATH }}
make_comment: true
github_token: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ github.event.pull_request.head.ref }}
commit_message: "chore(stainless): update SDKs for PR #${{ github.event.pull_request.number }}"

merge:
if: github.event.action == 'closed' && github.event.pull_request.merged == true
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Sync generated SDKs into monorepo
id: sync_sdks
env:
OUTCOMES_JSON: ${{ steps.stainless_build.outputs.outcomes }}
STAINLESS_SYNC_GITHUB_TOKEN: ${{ secrets.STAINLESS_SYNC_GITHUB_TOKEN }}
run: |
set -euo pipefail

if [ -z "${OUTCOMES_JSON}" ] || [ "${OUTCOMES_JSON}" = "null" ] || [ "${OUTCOMES_JSON}" = "{}" ]; then
echo "No Stainless outcomes available (likely no SDK changes)."
echo "changed=false" >> "$GITHUB_OUTPUT"
exit 0
fi

printf '%s' "${OUTCOMES_JSON}" > /tmp/stainless-outcomes.json
GO_SHA="$(jq -r '.go.commit.completed.commit.sha // .go.commit.commit.sha // empty' /tmp/stainless-outcomes.json)"
GO_OWNER="$(jq -r '.go.commit.completed.commit.repo.owner // .go.commit.commit.repo.owner // empty' /tmp/stainless-outcomes.json)"
GO_REPO="$(jq -r '.go.commit.completed.commit.repo.name // .go.commit.commit.repo.name // empty' /tmp/stainless-outcomes.json)"
TS_SHA="$(jq -r '.typescript.commit.completed.commit.sha // .typescript.commit.commit.sha // empty' /tmp/stainless-outcomes.json)"
TS_OWNER="$(jq -r '.typescript.commit.completed.commit.repo.owner // .typescript.commit.commit.repo.owner // empty' /tmp/stainless-outcomes.json)"
TS_REPO="$(jq -r '.typescript.commit.completed.commit.repo.name // .typescript.commit.commit.repo.name // empty' /tmp/stainless-outcomes.json)"
TS_INSTALL_URL="$(jq -r '.typescript.install_url // empty' /tmp/stainless-outcomes.json)"

if [ -z "${GO_SHA}" ] || [ -z "${GO_OWNER}" ] || [ -z "${GO_REPO}" ]; then
echo "No Go commit coordinates found in outcomes; skipping sync."
jq . /tmp/stainless-outcomes.json
echo "changed=false" >> "$GITHUB_OUTPUT"
exit 0
fi

if [ -z "${TS_INSTALL_URL}" ] && { [ -z "${TS_SHA}" ] || [ -z "${TS_OWNER}" ] || [ -z "${TS_REPO}" ]; }; then
echo "No TypeScript source coordinates found in outcomes; skipping sync."
jq . /tmp/stainless-outcomes.json
echo "changed=false" >> "$GITHUB_OUTPUT"
exit 0
fi

if [ -z "${STAINLESS_SYNC_GITHUB_TOKEN:-}" ]; then
echo "STAINLESS_SYNC_GITHUB_TOKEN is required to fetch generated SDK commits."
exit 1
fi

sync_from_install_url() {
local install_url="$1"
local destination="$2"
local tmp_archive
local tmp_extract

tmp_archive="$(mktemp)"
tmp_extract="$(mktemp -d)"

curl --fail --location --silent --show-error "${install_url}" --output "${tmp_archive}"
tar -xzf "${tmp_archive}" -C "${tmp_extract}"

rm -rf "${destination}"
mkdir -p "${destination}"

if [ -d "${tmp_extract}/package" ]; then
cp -a "${tmp_extract}/package/." "${destination}/"
else
cp -a "${tmp_extract}/." "${destination}/"
fi
}

sync_target() {
local owner="$1"
local repo="$2"
local sha="$3"
local monorepo_subpath="$4"
local destination="$5"
local source_url="https://x-access-token:${STAINLESS_SYNC_GITHUB_TOKEN}@github.com/${owner}/${repo}.git"

local tmp_repo
tmp_repo="$(mktemp -d)"

git -C "${tmp_repo}" init --quiet
git -C "${tmp_repo}" remote add origin "${source_url}"
git -C "${tmp_repo}" fetch --depth=1 origin "${sha}"

rm -rf "${destination}"
mkdir -p "${destination}"

if git -C "${tmp_repo}" cat-file -e "FETCH_HEAD:${monorepo_subpath}" 2>/dev/null; then
local strip_components
strip_components="$(awk -F/ '{print NF}' <<< "${monorepo_subpath}")"
git -C "${tmp_repo}" archive FETCH_HEAD "${monorepo_subpath}" | tar -x -C "${destination}" --strip-components="${strip_components}"
else
git -C "${tmp_repo}" archive FETCH_HEAD | tar -x -C "${destination}"
fi
}

sync_target "${GO_OWNER}" "${GO_REPO}" "${GO_SHA}" "sdks/go" "sdks/go"

if [ -n "${TS_INSTALL_URL}" ]; then
sync_from_install_url "${TS_INSTALL_URL}" "sdks/ts"
else
if [ "${TS_OWNER}" = "stainless-sdks" ] && [ "${TS_REPO}" = "hypeman-typescript" ]; then
TS_REPO="hypeman-ts"
fi
sync_target "${TS_OWNER}" "${TS_REPO}" "${TS_SHA}" "sdks/ts" "sdks/ts"
fi

if git diff --quiet -- sdks/go sdks/ts; then
echo "changed=false" >> "$GITHUB_OUTPUT"
else
echo "changed=true" >> "$GITHUB_OUTPUT"
fi

- name: Set up Go
if: steps.sync_sdks.outputs.changed == 'true'
uses: actions/setup-go@v5
with:
fetch-depth: 2
go-version: '1.25.4'

- name: Run Go SDK tests
if: steps.sync_sdks.outputs.changed == 'true'
run: GOWORK=off go test ./...
working-directory: ./sdks/go

- name: Run CLI tests
if: steps.sync_sdks.outputs.changed == 'true'
env:
GOWORK: ${{ github.workspace }}/go.work
run: go test ./...
working-directory: ./apps/cli

- name: Run merge build
uses: stainless-api/upload-openapi-spec-action/merge@v1
- name: Set up Node
if: steps.sync_sdks.outputs.changed == 'true'
uses: actions/setup-node@v4
with:
stainless_api_key: ${{ secrets.STAINLESS_API_KEY }}
org: ${{ env.STAINLESS_ORG }}
project: ${{ env.STAINLESS_PROJECT }}
oas_path: ${{ env.OAS_PATH }}
make_comment: true
github_token: ${{ secrets.GITHUB_TOKEN }}
node-version: '20'

- name: Set up pnpm
if: steps.sync_sdks.outputs.changed == 'true'
uses: pnpm/action-setup@v4
with:
version: '10.24.0'

- name: Run TypeScript SDK tests
if: steps.sync_sdks.outputs.changed == 'true'
run: |
./scripts/bootstrap
./scripts/test
working-directory: ./sdks/ts

- name: Commit synced SDK changes
if: steps.sync_sdks.outputs.changed == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add sdks/go sdks/ts
git commit -m "chore(stainless): sync SDKs for PR #${{ github.event.pull_request.number }}"

- name: Push synced SDK changes
if: steps.sync_sdks.outputs.changed == 'true'
run: git push origin "HEAD:${{ github.event.pull_request.head.ref }}"
Loading
Loading