Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
40e8537
Add python support
sebastienros Jan 16, 2026
5759866
Add go support
sebastienros Jan 16, 2026
c9e8de9
Add Java code generator support
sebastienros Jan 16, 2026
c8ce76e
Add Rust code generator support for polyglot AppHosts (WIP)
sebastienros Jan 16, 2026
ef59cd9
Fix Rust code generator issues
sebastienros Jan 16, 2026
9b40815
Fix Java and Rust code generators - Fix RuntimeSpec timing: InstallDe…
sebastienros Jan 16, 2026
46ad57f
Fix Go code generator RuntimeSpec and module config
sebastienros Jan 16, 2026
5865a70
Add E2E test
sebastienros Jan 16, 2026
adb0fae
Fix named pipes for rust/java
sebastienros Jan 17, 2026
cffe834
Merge main - adopt additionalProjectReferences approach for code gene…
sebastienros Jan 17, 2026
467ddf4
Run PolyglotPythonTests as E2E
sebastienros Jan 17, 2026
9cffcc0
Move PolyglotPythonTests to correct E2E test folder for CI discovery
sebastienros Jan 17, 2026
b4f8139
Add comprehensive Python code generator tests with Verify snapshots
sebastienros Jan 17, 2026
2f1fc9f
Add unit tests for Go, Java, and Rust code generators
sebastienros Jan 17, 2026
5dbb4bd
Merge remote-tracking branch 'origin/main' into sebros/poly
sebastienros Jan 17, 2026
9505fcf
Apply list property improvements from TypeScript to Python, Go, Java,…
sebastienros Jan 17, 2026
1ee5bb8
Enable polyglot support feature flag before init -l in E2E test
sebastienros Jan 17, 2026
f85aca2
Fix MethodAccessException when calling AtsConstants.IsDict from code …
sebastienros Jan 17, 2026
cf6be2e
Simplify Python E2E test to not require Python runtime
sebastienros Jan 17, 2026
e70b1d1
Add file content verification to Python E2E test
sebastienros Jan 17, 2026
82f21f8
Merge remote-tracking branch 'origin/main' into sebros/poly
sebastienros Jan 20, 2026
d4f50d7
Add instructions
sebastienros Jan 20, 2026
443c51e
Fix Python E2E test to handle version selection prompt in CI
sebastienros Jan 20, 2026
600f52b
Fix Python E2E test pattern to match actual CLI output
sebastienros Jan 21, 2026
cbf1b51
Fix Python E2E test: verify settings.json instead of .modules (code g…
sebastienros Jan 21, 2026
b3c5110
Fix Python E2E test: verify .modules exists after init, settings.json…
sebastienros Jan 21, 2026
e96f8bf
Fix: Continue SDK code generation even if dependency install fails
sebastienros Jan 21, 2026
10f8acc
Add polyglot E2E tests for Go, Rust, and Java
sebastienros Jan 21, 2026
1137f4a
Fix polyglot E2E tests with correct code patterns
sebastienros Jan 21, 2026
358da78
Simplify polyglot E2E test assertions for SDK patterns
sebastienros Jan 21, 2026
f0c026f
Remove static base/transport snapshot tests and add missing polyglot …
sebastienros Jan 21, 2026
5e8525c
Fix Rust
sebastienros Jan 21, 2026
03c070d
Detect local python command
sebastienros Jan 21, 2026
41515b8
Fix Rust
sebastienros Jan 21, 2026
4d8e786
Add build checks
sebastienros Jan 21, 2026
3edd328
Add polyglot validation to CI workflow
sebastienros Jan 21, 2026
9e00e43
Use Docker containers from mcr.microsoft.com for polyglot validation
sebastienros Jan 21, 2026
fa4be8a
Remove ASPIRE_CLI_PATH requirement from validation scripts
sebastienros Jan 21, 2026
92e964e
Use native CLI archive for polyglot validation with .NET SDK for AppH…
sebastienros Jan 21, 2026
3081dc2
Merge branch 'main' into sebros/poly
sebastienros Jan 21, 2026
befcfa2
Update codegen snapshots for AppHostFilePath property
sebastienros Jan 21, 2026
4dffab0
Fix CLI archive path with find command
sebastienros Jan 21, 2026
8eb84ca
Use dogfood script to install CLI and NuGet packages from PR
sebastienros Jan 21, 2026
44009a0
TEMP: Install gh CLI in Docker, disable other tests for faster polygl…
sebastienros Jan 21, 2026
891d9b0
Merge branch 'main' into sebros/poly
sebastienros Jan 21, 2026
8b10909
Fix polyglot validation workflow to include Docker CLI
sebastienros Jan 22, 2026
a17c100
Update polyglot test scripts to use aspire run --detach and aspire stop
sebastienros Jan 22, 2026
1e75f6a
Update polyglot test scripts to use aspire run --detach and aspire stop
sebastienros Jan 22, 2026
b9eecd9
Make channel config setting non-fatal in get-aspire-cli-pr.sh
sebastienros Jan 22, 2026
e115c18
Fix aspire add --non-interactive to auto-select latest version
sebastienros Jan 22, 2026
762d7d6
Add -d flag to aspire run --detach for debug logging
sebastienros Jan 22, 2026
ca76992
Use local get-aspire-cli-pr.sh script instead of downloading from main
sebastienros Jan 22, 2026
734040b
Use background job for aspire run instead of --detach
sebastienros Jan 22, 2026
1581358
Use kill -9 and remove wait to prevent blocking on cleanup
sebastienros Jan 22, 2026
1e76779
Use go:1-trixie image for GLIBC 2.38 support
sebastienros Jan 22, 2026
e77122f
Re-enable all tests that were temporarily disabled
sebastienros Jan 22, 2026
7bfa895
Add TypeScript polyglot SDK validation
sebastienros Jan 22, 2026
f38a13c
Remove Base.verified.java, Transport.verified.java and their tests
sebastienros Jan 22, 2026
73392bc
Remove PolyglotPythonTests, PolyglotGoTests, PolyglotRustTests, Polyg…
sebastienros Jan 22, 2026
0ba21de
Use setsid and kill process group to properly stop apphost
sebastienros Jan 22, 2026
0b8cc23
Add Redis in a consistent way across scripts
sebastienros Jan 22, 2026
58fd469
Add Dockerfiles for polyglot SDK validation
sebastienros Jan 22, 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
176 changes: 176 additions & 0 deletions .github/workflows/polyglot-validation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
# Polyglot SDK Validation Tests (Reusable)
# Validates Python, Go, Java, Rust, and TypeScript AppHost SDKs with Redis integration
# Uses Dockerfiles from .github/workflows/polyglot-validation/ for reproducible environments
# Uses dogfood script to install CLI and NuGet packages from the current PR
name: Polyglot SDK Validation

on:
workflow_call:
inputs:
versionOverrideArg:
required: false
type: string

jobs:
validate_python:
name: Python SDK Validation
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

- name: Build Python validation image
run: |
docker build \
-f .github/workflows/polyglot-validation/Dockerfile.python \
-t polyglot-python \
.github/workflows/polyglot-validation/

- name: Run Python SDK validation
env:
GH_TOKEN: ${{ github.token }}
run: |
docker run --rm \
-v "${{ github.workspace }}:/workspace" \
-v /var/run/docker.sock:/var/run/docker.sock \
-e GH_TOKEN="${GH_TOKEN}" \
-e PR_NUMBER="${{ github.event.pull_request.number }}" \
polyglot-python

validate_go:
name: Go SDK Validation
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

- name: Build Go validation image
run: |
docker build \
-f .github/workflows/polyglot-validation/Dockerfile.go \
-t polyglot-go \
.github/workflows/polyglot-validation/

- name: Run Go SDK validation
env:
GH_TOKEN: ${{ github.token }}
run: |
docker run --rm \
-v "${{ github.workspace }}:/workspace" \
-v /var/run/docker.sock:/var/run/docker.sock \
-e GH_TOKEN="${GH_TOKEN}" \
-e PR_NUMBER="${{ github.event.pull_request.number }}" \
polyglot-go

validate_java:
name: Java SDK Validation
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

- name: Build Java validation image
run: |
docker build \
-f .github/workflows/polyglot-validation/Dockerfile.java \
-t polyglot-java \
.github/workflows/polyglot-validation/

- name: Run Java SDK validation
env:
GH_TOKEN: ${{ github.token }}
run: |
docker run --rm \
-v "${{ github.workspace }}:/workspace" \
-v /var/run/docker.sock:/var/run/docker.sock \
-e GH_TOKEN="${GH_TOKEN}" \
-e PR_NUMBER="${{ github.event.pull_request.number }}" \
polyglot-java

validate_rust:
name: Rust SDK Validation
runs-on: ubuntu-latest
# Rust SDK has known issues - don't fail the workflow
continue-on-error: true
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

- name: Build Rust validation image
run: |
docker build \
-f .github/workflows/polyglot-validation/Dockerfile.rust \
-t polyglot-rust \
.github/workflows/polyglot-validation/

- name: Run Rust SDK validation
env:
GH_TOKEN: ${{ github.token }}
run: |
docker run --rm \
-v "${{ github.workspace }}:/workspace" \
-v /var/run/docker.sock:/var/run/docker.sock \
-e GH_TOKEN="${GH_TOKEN}" \
-e PR_NUMBER="${{ github.event.pull_request.number }}" \
polyglot-rust

validate_typescript:
name: TypeScript SDK Validation
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

- name: Build TypeScript validation image
run: |
docker build \
-f .github/workflows/polyglot-validation/Dockerfile.typescript \
-t polyglot-typescript \
.github/workflows/polyglot-validation/

- name: Run TypeScript SDK validation
env:
GH_TOKEN: ${{ github.token }}
run: |
docker run --rm \
-v "${{ github.workspace }}:/workspace" \
-v /var/run/docker.sock:/var/run/docker.sock \
-e GH_TOKEN="${GH_TOKEN}" \
-e PR_NUMBER="${{ github.event.pull_request.number }}" \
polyglot-typescript

results:
if: always()
runs-on: ubuntu-latest
name: Polyglot Validation Results
needs: [validate_python, validate_go, validate_java, validate_rust, validate_typescript]
steps:
- name: Check validation results
# Only fail on Python, Go, Java, TypeScript failures (Rust has continue-on-error)
if: >-
${{ needs.validate_python.result == 'failure' ||
needs.validate_go.result == 'failure' ||
needs.validate_java.result == 'failure' ||
needs.validate_typescript.result == 'failure' ||
needs.validate_python.result == 'cancelled' ||
needs.validate_go.result == 'cancelled' ||
needs.validate_java.result == 'cancelled' ||
needs.validate_typescript.result == 'cancelled' }}
run: |
echo "One or more polyglot SDK validations failed."
echo "Python: ${{ needs.validate_python.result }}"
echo "Go: ${{ needs.validate_go.result }}"
echo "Java: ${{ needs.validate_java.result }}"
echo "TypeScript: ${{ needs.validate_typescript.result }}"
exit 1

- name: Report Rust status
if: always()
run: |
echo "Rust SDK validation: ${{ needs.validate_rust.result }}"
if [ "${{ needs.validate_rust.result }}" == "failure" ]; then
echo "⚠️ Rust SDK validation failed (known issues - not blocking)"
fi

- name: All validations passed
run: echo "✅ All required polyglot SDK validations passed!"
55 changes: 55 additions & 0 deletions .github/workflows/polyglot-validation/Dockerfile.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Polyglot SDK Validation - Go
# This Dockerfile sets up an environment for validating the Go AppHost SDK
#
# Usage:
# docker build -f Dockerfile.go -t polyglot-go .
# docker run --rm \
# -v "$(pwd):/workspace" \
# -v /var/run/docker.sock:/var/run/docker.sock \
# -e GH_TOKEN \
# -e PR_NUMBER=<pr_number> \
# polyglot-go
#
FROM mcr.microsoft.com/devcontainers/go:1-trixie

# Install system dependencies (wget, docker CLI, jq for JSON manipulation)
RUN apt-get update && apt-get install -y \
wget \
docker.io \
jq \
&& rm -rf /var/lib/apt/lists/*

# Install GitHub CLI (matches inline script installation)
RUN mkdir -p -m 755 /etc/apt/keyrings \
&& wget -nv -O- https://cli.github.com/packages/githubcli-archive-keyring.gpg | tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
&& chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& apt-get update \
&& apt-get install -y gh \
&& rm -rf /var/lib/apt/lists/*

# Install .NET SDK 10.0
RUN curl -fsSL https://dot.net/v1/dotnet-install.sh | bash -s -- --channel 10.0
ENV PATH="/root/.dotnet:${PATH}"
ENV DOTNET_ROOT="/root/.dotnet"

# Pre-configure Aspire CLI path
ENV PATH="/root/.aspire/bin:${PATH}"

WORKDIR /workspace

COPY test-go.sh /scripts/test-go.sh
RUN chmod +x /scripts/test-go.sh

# Entrypoint: Install Aspire CLI from PR, enable polyglot, run validation
ENTRYPOINT ["/bin/bash", "-c", "\
set -e && \
echo '=== Installing Aspire CLI from PR ===' && \
chmod +x /workspace/eng/scripts/get-aspire-cli-pr.sh && \
/workspace/eng/scripts/get-aspire-cli-pr.sh ${PR_NUMBER} && \
aspire --version && \
echo '=== Enabling polyglot support ===' && \
aspire config set features:polyglotSupportEnabled true --global && \
echo '=== Running validation ===' && \
/scripts/test-go.sh \
"]
55 changes: 55 additions & 0 deletions .github/workflows/polyglot-validation/Dockerfile.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Polyglot SDK Validation - Java
# This Dockerfile sets up an environment for validating the Java AppHost SDK
#
# Usage:
# docker build -f Dockerfile.java -t polyglot-java .
# docker run --rm \
# -v "$(pwd):/workspace" \
# -v /var/run/docker.sock:/var/run/docker.sock \
# -e GH_TOKEN \
# -e PR_NUMBER=<pr_number> \
# polyglot-java
#
FROM mcr.microsoft.com/devcontainers/java:17

# Install system dependencies (wget, docker CLI, jq for JSON manipulation)
RUN apt-get update && apt-get install -y \
wget \
docker.io \
jq \
&& rm -rf /var/lib/apt/lists/*

# Install GitHub CLI (matches inline script installation)
RUN mkdir -p -m 755 /etc/apt/keyrings \
&& wget -nv -O- https://cli.github.com/packages/githubcli-archive-keyring.gpg | tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
&& chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& apt-get update \
&& apt-get install -y gh \
&& rm -rf /var/lib/apt/lists/*

# Install .NET SDK 10.0
RUN curl -fsSL https://dot.net/v1/dotnet-install.sh | bash -s -- --channel 10.0
ENV PATH="/root/.dotnet:${PATH}"
ENV DOTNET_ROOT="/root/.dotnet"

# Pre-configure Aspire CLI path
ENV PATH="/root/.aspire/bin:${PATH}"

WORKDIR /workspace

COPY test-java.sh /scripts/test-java.sh
RUN chmod +x /scripts/test-java.sh

# Entrypoint: Install Aspire CLI from PR, enable polyglot, run validation
ENTRYPOINT ["/bin/bash", "-c", "\
set -e && \
echo '=== Installing Aspire CLI from PR ===' && \
chmod +x /workspace/eng/scripts/get-aspire-cli-pr.sh && \
/workspace/eng/scripts/get-aspire-cli-pr.sh ${PR_NUMBER} && \
aspire --version && \
echo '=== Enabling polyglot support ===' && \
aspire config set features:polyglotSupportEnabled true --global && \
echo '=== Running validation ===' && \
/scripts/test-java.sh \
"]
59 changes: 59 additions & 0 deletions .github/workflows/polyglot-validation/Dockerfile.python
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Polyglot SDK Validation - Python
# This Dockerfile sets up an environment for validating the Python AppHost SDK
#
# Usage:
# docker build -f Dockerfile.python -t polyglot-python .
# docker run --rm \
# -v "$(pwd):/workspace" \
# -v /var/run/docker.sock:/var/run/docker.sock \
# -e GH_TOKEN \
# -e PR_NUMBER=<pr_number> \
# polyglot-python
#
FROM mcr.microsoft.com/devcontainers/python:3.12

# Install system dependencies (wget, docker CLI, jq for JSON manipulation)
RUN apt-get update && apt-get install -y \
wget \
docker.io \
jq \
&& rm -rf /var/lib/apt/lists/*

# Install GitHub CLI (matches inline script installation)
RUN mkdir -p -m 755 /etc/apt/keyrings \
&& wget -nv -O- https://cli.github.com/packages/githubcli-archive-keyring.gpg | tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
&& chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& apt-get update \
&& apt-get install -y gh \
&& rm -rf /var/lib/apt/lists/*

# Install .NET SDK 10.0
RUN curl -fsSL https://dot.net/v1/dotnet-install.sh | bash -s -- --channel 10.0
ENV PATH="/root/.dotnet:${PATH}"
ENV DOTNET_ROOT="/root/.dotnet"

# Install uv package manager (Python-specific)
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.local/bin:${PATH}"

# Pre-configure Aspire CLI path
ENV PATH="/root/.aspire/bin:${PATH}"

WORKDIR /workspace

COPY test-python.sh /scripts/test-python.sh
RUN chmod +x /scripts/test-python.sh

# Entrypoint: Install Aspire CLI from PR, enable polyglot, run validation
ENTRYPOINT ["/bin/bash", "-c", "\
set -e && \
echo '=== Installing Aspire CLI from PR ===' && \
chmod +x /workspace/eng/scripts/get-aspire-cli-pr.sh && \
/workspace/eng/scripts/get-aspire-cli-pr.sh ${PR_NUMBER} && \
aspire --version && \
echo '=== Enabling polyglot support ===' && \
aspire config set features:polyglotSupportEnabled true --global && \
echo '=== Running validation ===' && \
/scripts/test-python.sh \
"]
Loading
Loading