Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
3b2d129
feat: add remote binding resolver
lilienblum Jul 20, 2026
863890e
feat: grant remote storage data access
lilienblum Jul 20, 2026
df3effb
fix: gate imported remote binding params
lilienblum Jul 20, 2026
edd2684
feat: add refreshing remote bindings client
lilienblum Jul 20, 2026
9fee5a2
feat: add remote storage bindings for Node
lilienblum Jul 20, 2026
466b61b
fix: harden remote storage bindings
lilienblum Jul 20, 2026
7bbf64b
fix: harden remote storage lease delivery
lilienblum Jul 20, 2026
81fa848
Merge remote-tracking branch 'origin/main' into lilienblum/alien-291-…
lilienblum Jul 20, 2026
14f777e
test: preserve remote binding opt-in on imports
lilienblum Jul 20, 2026
8b047e3
feat: complete setup-owned remote storage bindings
lilienblum Jul 21, 2026
5fcce26
test: use SDK response body type
lilienblum Jul 21, 2026
915d152
fix: close remote bindings review gaps
lilienblum Jul 21, 2026
d55438a
fix: close final remote bindings review gaps
lilienblum Jul 21, 2026
bbd213a
Merge remote-tracking branch 'origin/main' into lilienblum/alien-291-…
lilienblum Jul 21, 2026
ce12700
fix(bindings): preserve transient refresh fallback
lilienblum Jul 21, 2026
0445c75
fix(core): preserve AWS credential wire contract
lilienblum Jul 21, 2026
9714626
test(core): lock AWS credential wire contract
lilienblum Jul 21, 2026
67aae23
test(bindings): close remote fixture connections
lilienblum Jul 21, 2026
3b312b0
fix(infra): break remote management bootstrap cycles
lilienblum Jul 21, 2026
64d6d13
fix(azure): normalize delegation key lifetime
lilienblum Jul 21, 2026
d111d80
Merge remote-tracking branch 'origin/main' into lilienblum/alien-291-…
lilienblum Jul 21, 2026
3c6ffb8
fix(gcp): recover deleted custom roles safely
lilienblum Jul 21, 2026
3796a7e
test(bindings): add remote storage smoke runner
lilienblum Jul 21, 2026
75e408e
test(e2e): rotate cloud resource slot
lilienblum Jul 21, 2026
04e19ad
fix(e2e): verify remote storage deletion
lilienblum Jul 21, 2026
002765b
Merge remote-tracking branch 'origin/main' into lilienblum/alien-291-…
lilienblum Jul 21, 2026
1ea1259
docs(bindings): describe bound queue handle
lilienblum Jul 21, 2026
2308fbe
fix(sdk): sync manager token request contract
lilienblum Jul 21, 2026
f7b74f3
Merge remote-tracking branch 'origin/main' into lilienblum/alien-291-…
lilienblum Jul 21, 2026
e7739d7
fix(cli): construct project manager token request
lilienblum Jul 21, 2026
8a54592
feat(manager-sdk): generate remote bindings client
lilienblum Jul 21, 2026
d062c4c
feat!: finalize remote binding SDK contract
lilienblum Jul 21, 2026
bdb4731
Merge remote-tracking branch 'origin/main' into lilienblum/alien-291-…
lilienblum Jul 21, 2026
a2f565d
fix: harden remote binding credentials (ALIEN-291)
lilienblum Jul 21, 2026
1b0895f
fix(security): harden remote storage lease boundaries (ALIEN-291)
lilienblum Jul 22, 2026
b7c5efc
fix(debug): enforce tunnel trust boundaries (ALIEN-291)
lilienblum Jul 22, 2026
6683117
style(ci): format remote binding fixtures (ALIEN-291)
lilienblum Jul 22, 2026
a5485af
fix(aws): permit tagged Lambda creation (ALIEN-291)
lilienblum Jul 22, 2026
7881f1e
chore(sdk): sync platform API schema (ALIEN-291)
lilienblum Jul 22, 2026
f8bfc0f
Merge remote-tracking branch 'origin/main' into lilienblum/alien-291-…
lilienblum Jul 22, 2026
ca6d933
chore(sdk): sync merged platform schema (ALIEN-291)
lilienblum Jul 22, 2026
404a60a
fix: initialize runtime gates in remote storage fixtures
lilienblum Jul 22, 2026
3270728
refactor: share current release resource lookup
lilienblum Jul 22, 2026
6200c29
chore(sdk): sync Platform client for ALIEN-291
lilienblum Jul 22, 2026
1e3fabe
test(cloudformation): refresh ALIEN-291 IAM snapshot
lilienblum Jul 22, 2026
c8582e4
fix(azure): bound Dapr component names (ALIEN-291)
lilienblum Jul 22, 2026
9b5bd4e
fix(azure): prevent Dapr name collisions (ALIEN-291)
lilienblum Jul 23, 2026
e4372be
fix(azure): namespace Dapr component kinds (ALIEN-291)
lilienblum Jul 23, 2026
068eeea
fix(azure): hash structured Dapr identities (ALIEN-291)
lilienblum Jul 23, 2026
69cc180
fix(azure): migrate Dapr component names (ALIEN-291)
lilienblum Jul 23, 2026
2580221
fix(azure): complete imported worker cleanup (ALIEN-291)
lilienblum Jul 23, 2026
4d63498
fix(azure): reconcile durable worker dependencies (ALIEN-291)
lilienblum Jul 23, 2026
b933250
fix(azure): revalidate storage delivery on updates (ALIEN-291)
lilienblum Jul 23, 2026
2603348
fix(azure): revalidate command delivery on updates (ALIEN-291)
lilienblum Jul 23, 2026
658d29c
fix(azure): checkpoint command setup mutations (ALIEN-291)
lilienblum Jul 23, 2026
f209c26
fix(gcp): retry worker dependency-drain cleanup
lilienblum Jul 23, 2026
a1afda8
fix(gcp): keep remote storage teardown least-privileged
lilienblum Jul 23, 2026
c0475d2
fix(azure): enforce Dapr component name limits
lilienblum Jul 23, 2026
237f000
test(gcp): share dependency-drain teardown coverage
lilienblum Jul 23, 2026
70da89d
fix(aws): preserve region for long service hosts
lilienblum Jul 23, 2026
09997ca
test(azure): split worker controller coverage
lilienblum Jul 23, 2026
c7e02da
fix(azure): preserve setup-owned management resources
lilienblum Jul 23, 2026
0815145
fix(e2e): use bound queue operations
lilienblum Jul 23, 2026
dcc61ae
style(e2e): format queue handler
lilienblum Jul 23, 2026
0422351
fix(azure): migrate management ownership safely
lilienblum Jul 23, 2026
660315f
fix(gcp): preserve setup-owned management resources
lilienblum Jul 23, 2026
de92fb5
test(terraform): cover GCP remote storage grant
lilienblum Jul 23, 2026
6e6122a
fix(azure): redact sensitive error context
lilienblum Jul 23, 2026
04c105b
fix(azure): bound container app names
lilienblum Jul 23, 2026
9691d9f
test: make Terraform artifact assertions format-independent
lilienblum Jul 24, 2026
6956802
fix: break remote storage dependency cycles (ALIEN-291)
lilienblum Jul 24, 2026
632ac6f
docs(commands): add package README
lilienblum Jul 24, 2026
077e09c
docs(commands): correct API guarantees
lilienblum Jul 24, 2026
64363fa
fix(aws): grant management role self-service on deployment-management…
lilienblum Jul 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
23 changes: 18 additions & 5 deletions .github/workflows/ci-fast.yml
Original file line number Diff line number Diff line change
Expand Up @@ -155,13 +155,16 @@ jobs:

- name: TypeScript unit tests
# The per-package vitest suites (commands receiver twins, bindings
# loader/error mapping, core schemas) — `test:ts` above is
# typecheck-only, so without this step they never ran in CI. Must run
# after the dev-addon build: the bindings kv/queue/storage/vault
# suites load the native addon.
# loader/error mapping, core schemas) and generated SDK wire contracts.
# `test:ts` above is typecheck-only, so without this step
# they never ran in CI. Must run after the dev-addon build: the bindings
# kv/queue/storage/vault suites load the native addon.
env:
NODE_OPTIONS: "--max-old-space-size=8192"
run: pnpm --filter @alienplatform/core --filter @alienplatform/bindings --filter @alienplatform/commands test
run: |
pnpm --filter @alienplatform/core --filter @alienplatform/bindings --filter @alienplatform/commands test
pnpm test:manager-sdk-wire
pnpm test:platform-sdk-wire

- name: Rust fast tests (non-cloud)
env:
Expand All @@ -180,6 +183,16 @@ jobs:
--exclude alien-test-server \
--filter-expr 'not binary_id(alien-build::build_integration_tests) and not binary_id(alien-build::image_shape_tests) and not binary_id(alien-build::rust_integration_tests) and not binary_id(alien-build::typescript_integration_tests) and not binary_id(alien-worker-runtime::lambda) and not binary_id(alien-test::distribution) and not binary_id(alien-test::pull) and not binary_id(alien-test::push) and not binary_id(alien-manager::registry_proxy_cloud_test)'

- name: Manager OpenAPI security contract
run: cargo test -p alien-manager --features openapi --lib api::tests::openapi_declares_http_bearer_security_without_dropping_schemas

- name: Remote bindings tests (non-cloud)
run: |
depot cargo test -p alien-bindings --features platform-sdk --lib remote::
depot cargo test -p alien-aws-clients --lib
depot cargo test -p alien-gcp-clients --lib
depot cargo test -p alien-azure-clients --lib user_delegation_sas

- name: Build all CLIs
if: steps.changes.outcome != 'success' || steps.changes.outputs.examples == 'true' || github.event_name == 'workflow_dispatch' || github.ref == 'refs/heads/main'
run: depot cargo build -p alien-cli -p alien-deploy-cli -p alien-operator
Expand Down
14 changes: 14 additions & 0 deletions .github/workflows/ci-fork.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,13 @@ jobs:
NODE_OPTIONS: "--max-old-space-size=8192"
run: pnpm test:ts

- name: Generated SDK wire contracts
env:
NODE_OPTIONS: "--max-old-space-size=8192"
run: |
pnpm test:manager-sdk-wire
pnpm test:platform-sdk-wire

- name: Rust tests (non-cloud)
run: |
cargo nextest run --workspace \
Expand All @@ -101,3 +108,10 @@ jobs:
--exclude endpoint-agent \
--exclude alien-test-server \
--filter-expr 'not binary_id(alien-build::build_integration_tests) and not binary_id(alien-build::image_shape_tests) and not binary_id(alien-build::rust_integration_tests) and not binary_id(alien-build::typescript_integration_tests) and not binary_id(alien-worker-runtime::lambda) and not binary_id(alien-test::distribution) and not binary_id(alien-test::pull) and not binary_id(alien-test::push) and not binary_id(alien-manager::registry_proxy_cloud_test)'

- name: Remote bindings tests (non-cloud)
run: |
cargo test -p alien-bindings --features platform-sdk --lib remote::
cargo test -p alien-aws-clients --lib
cargo test -p alien-gcp-clients --lib
cargo test -p alien-azure-clients --lib user_delegation_sas
8 changes: 4 additions & 4 deletions .github/workflows/e2e-cloud.yml
Original file line number Diff line number Diff line change
Expand Up @@ -129,11 +129,11 @@ on:
pull_request:
types: [opened, reopened, synchronize, labeled]

# Every run currently shares ALIEN_E2E_SLOT 03. Serialize the complete workflow
# so a newer run cannot reuse resources while an older run is still testing or
# Every run shares ALIEN_E2E_SLOT 10. Serialize the complete workflow so a
# newer run cannot reuse resources while an older run is still testing or
# cleaning them up.
concurrency:
group: e2e-tests-slot-03
group: e2e-tests-slot-10
cancel-in-progress: false

permissions:
Expand All @@ -142,7 +142,7 @@ permissions:
packages: write

env:
ALIEN_E2E_SLOT: "03"
ALIEN_E2E_SLOT: "10"
# Fall back to local compilation when the shared sccache backend returns a
# transient error (e.g. webdav 403) instead of failing the whole build.
SCCACHE_IGNORE_SERVER_IO_ERROR: "1"
Expand Down
73 changes: 71 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ jobs:
env:
VERSION: ${{ steps.bump.outputs.version }}

- name: Set npm package versions
- name: Set JavaScript package versions
run: |
VERSION="${{ steps.bump.outputs.version }}"
# The bindings addon ships as a wrapper + per-platform prebuild packages
Expand All @@ -114,6 +114,60 @@ jobs:
fs.writeFileSync(path, content.replace(/\"version\": \"[^\"]*\"/, '\"version\": \"${VERSION}\"'));
"
done
# Both generated SDKs publish a JSR manifest alongside package.json.
# Keep the two registries on the release version.
node -e "
const fs = require('fs');
for (const path of [
'client-sdks/platform/typescript/jsr.json',
'client-sdks/manager/typescript/jsr.json',
]) {
const content = fs.readFileSync(path, 'utf8');
fs.writeFileSync(path, content.replace(/\"version\": \"[^\"]*\"/, '\"version\": \"${VERSION}\"'));
}
"
# Speakeasy emits npm locks for both SDKs and the Manager examples.
# Stamp embedded package metadata alongside the publish manifests.
node -e "
const fs = require('fs');
for (const sdk of ['platform', 'manager']) {
const lockPath = 'client-sdks/' + sdk + '/typescript/package-lock.json';
const lock = JSON.parse(fs.readFileSync(lockPath, 'utf8'));
lock.version = '${VERSION}';
lock.packages[''].version = '${VERSION}';
fs.writeFileSync(lockPath, JSON.stringify(lock, null, 2) + '\\n');
}

const examplesLockPath = 'client-sdks/manager/typescript/examples/package-lock.json';
const examplesLock = JSON.parse(fs.readFileSync(examplesLockPath, 'utf8'));
examplesLock.packages['..'].version = '${VERSION}';
fs.writeFileSync(examplesLockPath, JSON.stringify(examplesLock, null, 2) + '\\n');
"
# Both checked-in generation workflows use the version from gen.yaml.
# Advance them with the release so later regeneration cannot reset manifests.
node -e "
const fs = require('fs');
for (const sdk of ['platform', 'manager']) {
const root = 'client-sdks/' + sdk + '/typescript/.speakeasy/';
const configPath = root + 'gen.yaml';
const config = fs.readFileSync(configPath, 'utf8');
const updatedConfig = config.replace(
/(typescript:\\n version: )[^\\n]+/,
(_, prefix) => prefix + '${VERSION}',
);
if (updatedConfig === config) throw new Error(sdk + ' SDK version not found in gen.yaml');
fs.writeFileSync(configPath, updatedConfig);

const lockPath = root + 'gen.lock';
const lock = fs.readFileSync(lockPath, 'utf8');
const updatedLock = lock.replace(
/( releaseVersion: )[^\\n]+/,
(_, prefix) => prefix + '${VERSION}',
);
if (updatedLock === lock) throw new Error(sdk + ' SDK releaseVersion not found in gen.lock');
fs.writeFileSync(lockPath, updatedLock);
}
"

# Dry-run build jobs start from the untagged commit, so carry the exact
# versioned manifests that a real release would commit into those fresh
Expand All @@ -132,7 +186,16 @@ jobs:
packages/sdk/package.json
packages/testing/package.json
client-sdks/platform/typescript/package.json
client-sdks/platform/typescript/jsr.json
client-sdks/platform/typescript/package-lock.json
client-sdks/platform/typescript/.speakeasy/gen.yaml
client-sdks/platform/typescript/.speakeasy/gen.lock
client-sdks/manager/typescript/package.json
client-sdks/manager/typescript/jsr.json
client-sdks/manager/typescript/package-lock.json
client-sdks/manager/typescript/examples/package-lock.json
client-sdks/manager/typescript/.speakeasy/gen.yaml
client-sdks/manager/typescript/.speakeasy/gen.lock
packages/bindings/package.json
crates/alien-bindings-node/package.json
packages/bindings/npm/darwin-arm64/package.json
Expand All @@ -148,7 +211,13 @@ jobs:
git config user.email "github-actions[bot]@users.noreply.github.com"
git add Cargo.toml packages/core/package.json packages/commands/package.json \
packages/sdk/package.json packages/testing/package.json \
client-sdks/platform/typescript/package.json client-sdks/manager/typescript/package.json \
client-sdks/platform/typescript/package.json client-sdks/platform/typescript/jsr.json \
client-sdks/platform/typescript/package-lock.json client-sdks/platform/typescript/.speakeasy/gen.yaml \
client-sdks/platform/typescript/.speakeasy/gen.lock \
client-sdks/manager/typescript/package.json client-sdks/manager/typescript/jsr.json \
client-sdks/manager/typescript/package-lock.json client-sdks/manager/typescript/examples/package-lock.json \
client-sdks/manager/typescript/.speakeasy/gen.yaml \
client-sdks/manager/typescript/.speakeasy/gen.lock \
packages/bindings/package.json crates/alien-bindings-node/package.json \
packages/bindings/npm/darwin-arm64/package.json packages/bindings/npm/darwin-x64/package.json \
packages/bindings/npm/linux-x64-gnu/package.json packages/bindings/npm/linux-arm64-gnu/package.json
Expand Down
Loading
Loading