Skip to content

Phase 0.2 | Add Dry-run test SDK generation across all languages #2

Phase 0.2 | Add Dry-run test SDK generation across all languages

Phase 0.2 | Add Dry-run test SDK generation across all languages #2

name: SDK Generation Validation
on:
pull_request:
jobs:
validate-sdk-generation:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- language: java
generator: java
- language: ruby
generator: ruby
- language: python
generator: python
- language: node
generator: typescript-axios
- language: csharp
generator: csharp
- language: go
generator: go
name: Validate ${{ matrix.language }} SDK Generation
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install OpenAPI Generator CLI
run: npm install -g @openapitools/openapi-generator-cli
- name: Set up Java (required for OpenAPI Generator)
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
- name: Set up language-specific environment
run: |
case "${{ matrix.language }}" in
"java")
echo "Java already set up"
;;
"ruby")
sudo apt-get update
sudo apt-get install -y ruby-full
;;
"python")
python -m pip install --upgrade pip
;;
"node")
echo "Node.js already set up"
;;
"csharp")
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y dotnet-sdk-6.0
;;
"go")
wget -c https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> $GITHUB_ENV
;;
esac
- name: Create output directory
run: mkdir -p ./sdk-output/${{ matrix.language }}
- name: Generate Test SDK
run: |
openapi-generator-cli generate \
-i openapi/mx_platform_api.yml \
-g ${{ matrix.generator }} \
-o ./sdk-output/${{ matrix.language }} \
--skip-validate-spec
- name: Verify expected files were generated
run: |
echo "Checking for generated files in ./sdk-output/${{ matrix.language }}"
ls -la ./sdk-output/${{ matrix.language }}
cd ./sdk-output/${{ matrix.language }}
# Check for key files based on language
case "${{ matrix.language }}" in
"java")
find . -name "pom.xml" || (echo "❌ Missing pom.xml" && exit 1)
find . -name "*.java" || (echo "❌ No Java files found" && exit 1)
echo "✅ Java SDK structure validated"
;;
"ruby")
find . -name "*.gemspec" || (echo "❌ Missing gemspec file" && exit 1)
find . -name "*.rb" || (echo "❌ No Ruby files found" && exit 1)
echo "✅ Ruby SDK structure validated"
;;
"python")
find . -name "setup.py" || (echo "❌ Missing setup.py" && exit 1)
find . -name "*.py" || (echo "❌ No Python files found" && exit 1)
echo "✅ Python SDK structure validated"
;;
"node")
find . -name "package.json" || (echo "❌ Missing package.json" && exit 1)
find . -name "*.ts" -o -name "*.js" || (echo "❌ No TypeScript/JavaScript files found" && exit 1)
echo "✅ Node SDK structure validated"
;;
"csharp")
find . -name "*.csproj" || (echo "❌ Missing csproj file" && exit 1)
find . -name "*.cs" || (echo "❌ No C# files found" && exit 1)
echo "✅ C# SDK structure validated"
;;
"go")
find . -name "go.mod" || (echo "❌ Missing go.mod" && exit 1)
find . -name "*.go" || (echo "❌ No Go files found" && exit 1)
echo "✅ Go SDK structure validated"
;;
esac
- name: Clean up
if: always()
run: rm -rf ./sdk-output/${{ matrix.language }}