Add NativeAOT sample; bump GraphQL.NET to 8.3.0 #1905
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |