Skip to content

Deploy

Deploy #107

Workflow file for this run

name: Deploy
on:
push:
branches: ["main"]
tags: ["v[0-9]+.[0-9]+.[0-9]+"]
workflow_dispatch:
schedule:
- cron: "0 0 * * *"
env:
PRODUCTION_URL: https://nugettools.azurewebsites.net
jobs:
build:
runs-on: windows-latest
outputs:
versions-changed: ${{ steps.check-versions.outputs.versions-changed }}
steps:
- name: Check out
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up .NET Core
uses: actions/setup-dotnet@v2
with:
dotnet-version: 6.0.x
- name: Build
run: .\build.ps1
- name: Zip publish directory
run: Compress-Archive -Path .\src\Knapcode.NuGetTools.Website\bin\Release\net472\publish\* -DestinationPath .\src\Knapcode.NuGetTools.Website\bin\website.zip
- name: Upload artifact for deployment job
uses: actions/upload-artifact@v3
with:
name: website
path: .\src\Knapcode.NuGetTools.Website\bin\website.zip
- name: Check for new versions
id: check-versions
run: |
$report = dotnet run --project .\src\Knapcode.NuGetTools.PackageDownloader -- check-versions .\src\Knapcode.NuGetTools.Website\packages ${{ env.PRODUCTION_URL }}
$report
$notMatching = $report | ? { !$_.StartsWith("Matching") }
Write-Output "versions-changed=$(($notMatching.Length -ne 0).ToString().ToLowerInvariant())" >> $Env:GITHUB_OUTPUT
deploy-to-dev:
concurrency:
group: deploy-to-dev
permissions:
id-token: write
contents: read
runs-on: windows-latest
needs: build
environment:
name: DEV
url: ${{ steps.deploy.outputs.webapp-url }}
steps:
- name: Download artifact
uses: actions/download-artifact@v3
with:
name: website
path: .
- name: Log in to Azure
uses: azure/login@v1
with:
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
client-id: ${{ secrets.AZURE_CLIENT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Deploy
id: deploy
uses: azure/webapps-deploy@v2
with:
app-name: NuGetToolsDev
package: .\website.zip
deploy-to-prod:
concurrency:
group: deploy-to-prod
permissions:
id-token: write
contents: read
runs-on: windows-latest
needs: build
environment:
name: PROD
url: ${{ steps.set-environment-url.outputs.url }}
env:
RESOURCE_GROUP: Knapcode.NuGetTools
WEBAPP_NAME: NuGetTools
SLOT_NAME: staging
steps:
- name: Check out
uses: actions/checkout@v3
- name: Download artifact
uses: actions/download-artifact@v3
with:
name: website
path: .
- name: Log in to Azure
uses: azure/login@v1
with:
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
client-id: ${{ secrets.AZURE_CLIENT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Deploy
id: deploy
uses: azure/webapps-deploy@v2
with:
app-name: ${{ env.WEBAPP_NAME }}
slot-name: ${{ env.SLOT_NAME }}
package: .\website.zip
- name: Copy packages for tests
run: |
Expand-Archive -Path .\website.zip -DestinationPath .\website
Copy-Item .\website\packages .\src\Knapcode.NuGetTools.Website -Recurse
- name: Run integration tests
run: dotnet test --logger "console;verbosity=normal" --filter "FullyQualifiedName~Knapcode.NuGetTools.Website.Tests.IntegrationTest"
env:
NUGETTOOLS_BASE_URL: ${{ steps.deploy.outputs.webapp-url }}
- name: Swap slots
if: ${{ needs.build.outputs.versions-changed == 'true' || github.event_name == 'workflow_dispatch' || startsWith(github.ref, 'refs/tags/v') }}
id: swap-slots
run: az webapp deployment slot swap -s ${{ env.SLOT_NAME }} -n ${{ env.WEBAPP_NAME }} -g ${{ env.RESOURCE_GROUP }}
- name: Set environment URL
id: set-environment-url
run: |
if ("${{ steps.swap-slots.outcome }}" -eq "success") {
Write-Output "url=${{ env.PRODUCTION_URL }}" >> $Env:GITHUB_OUTPUT
} else {
Write-Output "url=${{ steps.deploy.outputs.webapp-url }}" >> $Env:GITHUB_OUTPUT
}