Daybreak CD Pipeline #384
Workflow file for this run
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
# Copyright (c) Microsoft Corporation. | |
# Licensed under the MIT license. | |
# This continuous integration pipeline is triggered anytime a user pushes code to the repo. | |
# This pipeline builds the Wpf project, runs unit tests, then saves the MSIX build artifact. | |
name: Daybreak CD Pipeline | |
on: | |
push: | |
branches: | |
- master | |
paths: | |
- "Daybreak/**" | |
- "Daybreak.Installer/**" | |
workflow_dispatch: | |
jobs: | |
build: | |
strategy: | |
matrix: | |
targetplatform: [x86] | |
runs-on: windows-latest | |
env: | |
Configuration: Release | |
Solution_Path: Daybreak.sln | |
Test_Project_Path: Daybreak.Tests\Daybreak.Tests.csproj | |
Wpf_Project_Path: Daybreak\Daybreak.csproj | |
Actions_Allow_Unsecure_Commands: true | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Get Latest Tag | |
id: getLatestTag | |
uses: WyriHaximus/github-action-get-previous-tag@v1 | |
- name: Generate changelog | |
id: gen_changelog | |
run: | | |
$changeLog = git log --no-merges --pretty="%h - %s (%an)<br />" ${{ env.LatestReleaseTag }}..HEAD | |
echo "::set-env name=Changelog::$changeLog" | |
mkdir Publish | |
echo $changeLog > .\Publish\changelog.txt | |
env: | |
LatestReleaseTag: ${{steps.getLatestTag.outputs.tag}} | |
- name: Install .NET Core | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: '8.x' | |
- name: Setup MSBuild.exe | |
uses: microsoft/[email protected] | |
- name: Setup project secrets | |
run: | | |
dotnet user-secrets --project Daybreak\Daybreak.csproj set AadApplicationId "${{ secrets.AadApplicationId }}" | |
dotnet user-secrets --project Daybreak\Daybreak.csproj set AadTenantId "${{ secrets.AadTenantId }}" | |
- name: Restore project | |
run: msbuild $env:Solution_Path /t:Restore /p:Configuration=$env:Configuration /p:RuntimeIdentifier=$env:RuntimeIdentifier --property:SolutionDir=$GITHUB_WORKSPACE | |
env: | |
RuntimeIdentifier: win-${{ matrix.targetplatform }} | |
- name: Build Daybreak project | |
run: dotnet build Daybreak -c $env:Configuration --property:SolutionDir=$env:GITHUB_WORKSPACE | |
- name: Set version variable | |
run: | | |
$version = .\Scripts\GetBuildVersion.ps1 | |
echo "::set-env name=Version::$version" | |
- name: Create publish launcher files | |
run: dotnet publish .\Daybreak\Daybreak.csproj -c $env:Configuration -r $env:RuntimeIdentifier --property:SolutionDir=$env:GITHUB_WORKSPACE -p:PublishReadyToRun=true -p:PublishSingleFile=false --self-contained true -o .\Publish | |
env: | |
RuntimeIdentifier: win-${{ matrix.targetplatform }} | |
- name: Create publish installer files | |
run: dotnet publish .\Daybreak.Installer\Daybreak.Installer.csproj -c $env:Configuration -r $env:RuntimeIdentifier --property:SolutionDir=$env:GITHUB_WORKSPACE -p:PublishReadyToRun=true -p:PublishSingleFile=true --self-contained true -o .\Publish | |
env: | |
RuntimeIdentifier: win-${{ matrix.targetplatform }} | |
- name: Create publish extractor files | |
run: dotnet publish .\Daybreak.7ZipExtractor\Daybreak.7ZipExtractor.csproj -c $env:Configuration -r $env:RuntimeIdentifier --property:SolutionDir=$env:GITHUB_WORKSPACE -p:PublishReadyToRun=true -p:PublishSingleFile=false --self-contained true -o .\Publish | |
env: | |
RuntimeIdentifier: win-${{ matrix.targetplatform }} | |
- name: Pack publish files | |
run: | | |
Write-Host $env | |
.\Scripts\BuildRelease.ps1 -version $env:Version | |
shell: pwsh | |
- name: Submit virustotal scan | |
shell: pwsh | |
run: | | |
$apiKey = "${{ secrets.VIRUSTOTAL_APIKEY }}" | |
$archiveName = "daybreakv${{ env.Version }}.zip" | |
$archiveName | |
cd Publish | |
ls | |
$uploadUrlResponse = curl https://www.virustotal.com/api/v3/files/upload_url -H x-apikey:"$apiKey" | |
$uploadUrlResponse | |
$uploadUrlJson = $uploadUrlResponse | ConvertFrom-Json | |
$uploadUrl = $uploadUrlJson.data | |
$uploadResponse = curl --request POST --header x-apikey:"$apiKey" --header 'content-type: multipart/form-data' --form file="@$archiveName" --url $uploadUrl | |
$uploadResponse | |
$uploadResponseJson = $uploadResponse | ConvertFrom-Json | |
$resultsUrl = "https://www.virustotal.com/api/v3/analyses/$($uploadResponseJson.data.id)" | |
$resultsUrl | |
# Poll the results until the status is "completed" | |
$status = "" | |
while ($status -ne "completed") { | |
Start-Sleep -Seconds 10 # Wait for 10 seconds between checks | |
$results = curl --header x-apikey:"$apiKey" --url $resultsUrl | |
$results | |
$resultsJson = $results | ConvertFrom-Json | |
$status = $resultsJson.data.attributes.status | |
Write-Host "Current status: $status" | |
} | |
$resultsJson.data.attributes.results | ConvertTo-Json | Out-File -FilePath "VirusTotal.Results.json" -Encoding UTF8 | |
$resultsJson.data.attributes.stats | ConvertTo-Json | Out-File -FilePath "VirusTotal.Stats.json" -Encoding UTF8 | |
$stats = $resultsJson.data.attributes.stats | |
echo "::set-env name=VirusTotalStats::$stats" | |
- name: Publish blob files | |
run: | | |
Write-Host $env | |
.\Scripts\PushFilesToBlobStorage.ps1 -version $env:Version -sourcePath .\Publish\ -connectionString "${{ secrets.BLOBSTORAGE_CONNECTIONSTRING }}" | |
shell: pwsh | |
- name: Create release draft | |
uses: Xotl/[email protected] | |
with: | |
mode: update | |
tag_name: v${{ env.Version }} | |
release_name: Daybreak v${{ env.Version }} | |
assets: | | |
.\Publish\daybreakv${{ env.Version }}.zip | |
.\Publish\VirusTotal.Results.json | |
.\Publish\VirusTotal.Stats.json | |
github_token: ${{ env.GITHUB_TOKEN }} | |
replace_assets: true | |
body_mrkdwn: | | |
${{ env.Changelog }} | |
** VirustTotal Stats: ** | |
``` | |
${{ env.VirusTotalStats }} | |
``` | |
isDraft: true | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Publish release | |
run: | | |
gh release edit v${{ env.Version }} --draft=false | |
shell: powershell | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |