Skip to content

Add GitHub Actions workflow for Windows builds #6

Add GitHub Actions workflow for Windows builds

Add GitHub Actions workflow for Windows builds #6

name: Build Test Installer Release
on:
pull_request:
branches:
- master
push:
branches:
- master
tags:
- 'v*'
workflow_dispatch:
permissions:
contents: write
id-token: write
env:
Configuration: Release
# Version is the tag name e.g. v3.7 or if tag not present, go with a datetime stamp + commit SHA
Version: ${{ startsWith(github.ref, 'refs/tags/v') && github.ref_name || format('{0}-{1}', format('{0:yyyyMMddHHmm}', github.event.head_commit.timestamp), github.sha) }}
jobs:
build_test:
name: Build and test
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Setup NuGet
uses: NuGet/setup-nuget@v2
- name: Restore NuGet packages
run: nuget restore SayMore.sln
- name: Setup MSBuild
uses: microsoft/setup-msbuild@v2
with:
vs-version: '[17.0,18.0)'
- name: Build solution
run: msbuild build\SayMore.proj /t:Build /p:Configuration=$env:Configuration /m
- name: Run tests
run: msbuild build\SayMore.proj /t:Test /p:Configuration=$env:Configuration /p:excludedCategories=SkipOnTeamCity /m
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: saymore-test-results
if-no-files-found: warn
path: output/${{ env.Configuration }}/TestResults.xml
build_installer:
name: Build installer, sign, and publish artifacts
needs: build_test
if: ${{ github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/v'))) }}
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Setup NuGet
uses: NuGet/setup-nuget@v2
- name: Restore NuGet packages
run: nuget restore SayMore.sln
- name: Fetch documentation artifacts
shell: bash
run: build/getDependencies-windows.sh
- name: Setup MSBuild
uses: microsoft/setup-msbuild@v2
with:
vs-version: '[17.0,18.0)'
- name: Build installer
run: msbuild build\SayMore.proj /t:Installer /p:Configuration=$env:Configuration /p:useNUnit-x86=true /m
- name: Sign installer
if: ${{ github.event_name != 'pull_request' }}
uses: sillsdev/codesign/trusted-signing-action@v3
with:
credentials: ${{ secrets.TRUSTED_SIGNING_CREDENTIALS }}
files-folder: output/installer
files-folder-filter: SayMoreInstaller*.msi
- name: Upload installer artifacts
uses: actions/upload-artifact@v4
with:
name: saymore-installer
if-no-files-found: error
path: |
output/installer/SayMoreInstaller*.msi
output/installer/*.download_info
output/installer/appcast.xml
output/releasenotes.download_info
- name: Create release
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
uses: softprops/action-gh-release@v2
with:
files: |
output/installer/SayMoreInstaller*.msi
output/installer/*.download_info
output/installer/appcast.xml
output/releasenotes.download_info
draft: false
generate_release_notes: true