Skip to content

Bump rollup from 2.75.7 to 4.58.0 in /src/microsoft-trydotnet #158

Bump rollup from 2.75.7 to 4.58.0 in /src/microsoft-trydotnet

Bump rollup from 2.75.7 to 4.58.0 in /src/microsoft-trydotnet #158

name: Build, Test, and Deploy Try .NET API
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
workflow_dispatch:
permissions:
id-token: write
contents: read
jobs:
build-and-test:
runs-on: ubuntu-latest
environment: "BuildAndUploadImage"
steps:
- uses: actions/checkout@v6
- name: Set up Node.js environment
uses: ./.github/actions/setup-node
- name: Set up .NET environment
uses: ./.github/actions/setup-dotnet
- name: Run ciTest for microsoft-trydotnet
working-directory: src/microsoft-trydotnet
run: npm run ciTest
- name: Run ciTest for microsoft-trydotnet-editor
working-directory: src/microsoft-trydotnet-editor
run: npm run ciTest
- name: Run .NET Tests
id: run-dotnet-tests
run: dotnet test --no-build --configuration Release --blame-hang-timeout 15m --blame-hang-dump-type full -l trx --results-directory ./TestResults
env:
POCKETLOGGER_LOG_PATH: ${{ github.workspace }}/artifacts/logs/pocketlogger.log
- name: Convert TRX to Playlist
if: ${{ steps.run-dotnet-tests.outcome == 'failure' || failure() }}
uses: BenjaminMichaelis/trx-to-vsplaylist@v3
with:
trx-file-path: './TestResults/*.trx'
test-outcomes: 'Failed'
artifact-name: 'linux-test-playlists'
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# Build but no push with a PR
- name: Docker build (no push)
if: github.event_name == 'pull_request' || github.event_name == 'merge_group'
uses: docker/build-push-action@v6
with:
push: false
tags: temp-pr-validation
file: ./Dockerfile
- name: Build Container Image
if: github.event_name != 'pull_request_target' && github.event_name != 'pull_request'
uses: docker/build-push-action@v6
with:
tags: ${{ vars.DEVCONTAINER_REGISTRY }}/try:${{ github.sha }},${{ vars.DEVCONTAINER_REGISTRY }}/try:latest
file: ./Dockerfile
context: .
outputs: type=docker,dest=${{ github.workspace }}/tryimage.tar
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Upload artifact
if: github.event_name != 'pull_request_target' && github.event_name != 'pull_request'
uses: actions/upload-artifact@v6
with:
name: tryimage
path: ${{ github.workspace }}/tryimage.tar
build-and-test-windows:
# Ensures .NET build and unit tests pass on Windows, matching the original
# Azure DevOps Windows_NT job. Integration tests are covered separately.
runs-on: windows-latest
steps:
- uses: actions/checkout@v6
- name: Set up Node.js environment
uses: ./.github/actions/setup-node
- name: Set up .NET environment
uses: ./.github/actions/setup-dotnet
- name: Run .NET Tests
id: run-dotnet-tests
run: dotnet test --no-build --configuration Release --blame-hang-timeout 15m --blame-hang-dump-type full -l trx --results-directory ./TestResults
env:
POCKETLOGGER_LOG_PATH: ${{ github.workspace }}/artifacts/logs/pocketlogger.log
- name: Convert TRX to Playlist
if: ${{ steps.run-dotnet-tests.outcome == 'failure' || failure() }}
uses: BenjaminMichaelis/trx-to-vsplaylist@v3
with:
trx-file-path: './TestResults/*.trx'
test-outcomes: 'Failed'
artifact-name: 'windows-test-playlists'
integration-tests:
# Integration tests use Playwright and are gated behind RunIntegrationTests=true.
# IntegrationTestFactAttribute explicitly skips these tests on Linux, so a
# Windows runner is required to actually execute them.
runs-on: windows-latest
steps:
- uses: actions/checkout@v6
- name: Set up Node.js environment
uses: ./.github/actions/setup-node
- name: Set up .NET environment
uses: ./.github/actions/setup-dotnet
- name: Run .NET Integration Tests
id: run-dotnet-integration-tests
run: dotnet test --no-build --configuration Release --blame-hang-timeout 15m --blame-hang-dump-type full -l trx --results-directory ./TestResults
env:
RunIntegrationTests: true
POCKETLOGGER_LOG_PATH: ${{ github.workspace }}/artifacts/logs/pocketlogger.log
TRYDOTNET_PREBUILDS_PATH: ${{ github.workspace }}/artifacts/trydotnet-prebuilds
- name: Convert TRX to Playlist
if: ${{ steps.run-dotnet-integration-tests.outcome == 'failure' || failure() }}
uses: BenjaminMichaelis/trx-to-vsplaylist@v3
with:
trx-file-path: './TestResults/*.trx'
test-outcomes: 'Failed'
artifact-name: 'integration-test-playlists'
deploy-development:
if: github.event_name != 'pull_request_target' && github.event_name != 'pull_request'
runs-on: ubuntu-latest
needs: [build-and-test, build-and-test-windows, integration-tests]
environment:
name: "Development"
permissions:
id-token: write
contents: read
steps:
- name: Azure Login
uses: azure/login@v2
with:
client-id: ${{ secrets.ESSENTIALCSHARPDEV_CLIENT_ID }}
tenant-id: ${{ secrets.ESSENTIALCSHARP_TENANT_ID }}
subscription-id: ${{ secrets.ESSENTIALCSHARP_SUBSCRIPTION_ID }}
- name: Download artifact
uses: actions/download-artifact@v7
with:
name: tryimage
path: ${{ github.workspace }}
- name: Load image
run: |
docker load --input ${{ github.workspace }}/tryimage.tar
docker image ls -a
- name: Log in to container registry
uses: docker/login-action@v3
with:
registry: ${{ vars.DEVCONTAINER_REGISTRY }}
username: ${{ secrets.ESSENTIALCSHARP_ACR_USERNAME }}
password: ${{ secrets.ESSENTIALCSHARP_ACR_PASSWORD }}
- name: Push Image to Container Registry
env:
REGISTRY_URL: ${{ vars.DEVCONTAINER_REGISTRY }}
run: docker push --all-tags $REGISTRY_URL/try
- name: Create and Deploy to Container App
uses: azure/CLI@v2
env:
CONTAINER_APP_NAME: ${{ vars.CONTAINER_APP_NAME }}
RESOURCEGROUP: ${{ vars.RESOURCEGROUP }}
CONTAINER_APP_ENVIRONMENT: ${{ vars.CONTAINER_APP_ENVIRONMENT }}
REGISTRY_URL: ${{ vars.DEVCONTAINER_REGISTRY }}
ACR_USERNAME: ${{ secrets.ESSENTIALCSHARP_ACR_USERNAME }}
ACR_PASSWORD: ${{ secrets.ESSENTIALCSHARP_ACR_PASSWORD }}
with:
inlineScript: |
az config set extension.use_dynamic_install=yes_without_prompt
az containerapp up -n $CONTAINER_APP_NAME -g $RESOURCEGROUP --image $REGISTRY_URL/try:${{ github.sha }} --environment $CONTAINER_APP_ENVIRONMENT --registry-server $REGISTRY_URL --ingress external --registry-username $ACR_USERNAME --registry-password $ACR_PASSWORD --target-port 80 --debug
- name: Logout of Azure CLI
if: always()
uses: azure/CLI@v2
with:
inlineScript: |
az logout
az cache purge
az account clear