Skip to content

Add NativeAOT sample; bump GraphQL.NET to 8.3.0 #1925

Add NativeAOT sample; bump GraphQL.NET to 8.3.0

Add NativeAOT sample; bump GraphQL.NET to 8.3.0 #1925

Workflow file for this run

name: Run code tests
on:
pull_request:
branches:
- master
- develop
paths:
- src/**
- tests/**
- samples/**
- .github/workflows/**
- "*.props"
- "*.targets"
- "*.sln"
# Upload code coverage results when PRs are merged
push:
branches:
- master
- develop
paths:
- src/**
- tests/**
- samples/**
- .github/workflows/**
- "*.props"
- "*.targets"
env:
DOTNET_NOLOGO: true
DOTNET_CLI_TELEMETRY_OPTOUT: true
jobs:
test:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
name: ${{ matrix.os }}
runs-on: ${{ matrix.os }}
steps:
- name: Checkout source
uses: actions/checkout@v4
- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: |
2.1.x
3.1.x
5.0.x
6.0.x
7.0.x
8.0.x
source-url: https://nuget.pkg.github.com/graphql-dotnet/index.json
env:
NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: Install dependencies
run: dotnet restore
- name: Build solution [Release]
run: dotnet build --no-restore -c Release
- name: Build solution [Debug]
run: dotnet build --no-restore -c Debug
- name: Test solution [Debug] with code coverage
if: ${{ startsWith(matrix.os, 'ubuntu') }}
run: dotnet test --no-restore --no-build -p:CollectCoverage=true
- name: Test solution [Debug] without code coverage
if: ${{ startsWith(matrix.os, 'windows') }}
run: dotnet test --no-restore --no-build
- name: Upload coverage to codecov
if: ${{ startsWith(matrix.os, 'ubuntu') }}
uses: codecov/codecov-action@v5
with:
files: .coverage/GraphQL.Server.Transports.AspNetCore.Tests/coverage.net7.0.opencover.xml,.coverage/GraphQL.Server.Transports.AspNetCore.Tests/coverage.netcoreapp2.1.opencover.xml,.coverage/GraphQL.Server.Samples.Server.Tests/coverage.net7.0.opencover.xml
nativeaot:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
name: NativeAOT Sample on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
steps:
- name: Checkout source
uses: actions/checkout@v4
- name: Setup .NET SDK for NativeAOT
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
source-url: https://nuget.pkg.github.com/graphql-dotnet/index.json
env:
NUGET_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish NativeAOT sample
working-directory: samples/Samples.NativeAot
run: dotnet publish -c Release -o published
- name: Start NativeAOT sample in background
working-directory: samples/Samples.NativeAot/published
shell: bash
run: |
if [ "$RUNNER_OS" == "Windows" ]; then
./GraphQL.Server.Samples.NativeAot.exe &
else
./GraphQL.Server.Samples.NativeAot &
fi
- name: Wait for NativeAOT sample to spin up
shell: bash
run: |
# Disable exit-on-error to allow retries
set +e
for i in {1..60}; do
echo "Request $i to the GraphQL endpoint..."
response=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:5000/ || true)
if [ "$response" -eq 200 ]; then
echo "Received 200 response, NativeAOT sample is ready."
exit 0
fi
echo "Did not receive a 200 response, sleeping for 0.5 second..."
sleep 0.5
done
echo "NativeAOT sample did not spin up in time."
exit 1
- name: Run GraphQL query against NativeAOT sample
working-directory: samples/Samples.NativeAot
shell: bash
run: |
# Run a simple GraphQL query. Adjust the request as needed for your sample.
curl -X POST -H "Content-Type: application/json" \
-d @sample-request.json \
http://localhost:5000/graphql > nativeaot_response.json
- name: Print query result
working-directory: samples/Samples.NativeAot
shell: bash
run: cat nativeaot_response.json
- name: Compare query result to expected response
working-directory: samples/Samples.NativeAot
shell: bash
run: |
jq . nativeaot_response.json > actual-response.json
jq . sample-response.json > expected-response.json
diff -b actual-response.json expected-response.json
buildcheck:
needs:
- test
- nativeaot
runs-on: ubuntu-latest
if: always()
steps:
- name: Pass build check
if: ${{ needs.test.result == 'success' && needs.nativeaot.result == 'success' }}
run: exit 0
- name: Fail build check
if: ${{ needs.test.result != 'success' || needs.nativeaot.result != 'success' }}
run: exit 1