Skip to content

Do not remove pinned clips when removing old clips. #13

Do not remove pinned clips when removing old clips.

Do not remove pinned clips when removing old clips. #13

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build, test, sign and package a WPF or Windows Forms desktop application
# built on .NET Core.
# To learn how to migrate your existing application to .NET Core,
# refer to https://docs.microsoft.com/en-us/dotnet/desktop-wpf/migration/convert-project-from-net-framework
#
# To configure this workflow:
#
# 1. Configure environment variables
# GitHub sets default environment variables for every workflow run.
# Replace the variables relative to your project in the "env" section below.
#
# 2. Signing
# Generate a signing certificate in the Windows Application
# Packaging Project or add an existing signing certificate to the project.
# Next, use PowerShell to encode the .pfx file using Base64 encoding
# by running the following Powershell script to generate the output string:
#
# $pfx_cert = Get-Content '.\SigningCertificate.pfx' -Encoding Byte
# [System.Convert]::ToBase64String($pfx_cert) | Out-File 'SigningCertificate_Encoded.txt'
#
# Open the output file, SigningCertificate_Encoded.txt, and copy the
# string inside. Then, add the string to the repo as a GitHub secret
# and name it "Base64_Encoded_Pfx."
# For more information on how to configure your signing certificate for
# this workflow, refer to https://github.com/microsoft/github-actions-for-desktop-apps#signing
#
# Finally, add the signing certificate password to the repo as a secret and name it "Pfx_Key".
# See "Build the Windows Application Packaging project" below to see how the secret is used.
#
# For more information on GitHub Actions, refer to https://github.com/features/actions
# For a complete CI/CD sample to get started with GitHub Action workflows for Desktop Applications,
# refer to https://github.com/microsoft/github-actions-for-desktop-apps
name: Release 3.2 (Application)
on:
workflow_dispatch:
push:
branches:
- 'release/**'
pull_request:
branches:
- 'main'
- 'release/**'
paths-ignore:
- '.attachments/**'
- '.editorconfig'
- '.gitignore'
- 'LICENSE'
- 'README.md'
jobs:
build:
name: Build 3.2
runs-on: windows-latest
outputs:
version: ${{ steps.define-version.outputs.version }}
env:
Scripts: .\.github\workflows\scripts
PublishDir: .\Tum4ik.JustClipboardManager\bin\publish
InstallerDir: .\Tum4ik.JustClipboardManager\bin\setup
TemporaryPfxFilePath: .\GitHubActionsWorkflow.pfx
steps:
- name: Checkout
uses: actions/[email protected]
with:
fetch-depth: 0
- name: Setup MSBuild
uses: microsoft/setup-msbuild@v2
- name: Test
run: |
$vswherePath = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$vsInstallationPath = & $vswherePath `
-latest `
-products * `
-requires Microsoft.VisualStudio.Workload.ManagedDesktop Microsoft.VisualStudio.Workload.Web `
-requiresAny `
-property installationPath
$vstestPath = Join-Path $vsInstallationPath "Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe"
msbuild /t:Restore /t:Build /p:Configuration=Release
& $vstestPath .\Tests\*.UnitTests\bin\Release\*\*.UnitTests.dll `
/Parallel `
/Enablecodecoverage `
/Collect:"Code Coverage;Format=Cobertura"
- name: Define version
id: define-version
run: |
$majorMinor = "${{ github.ref_name }}".Split("/")[-1]
if (![System.Version]::TryParse($majorMinor, [ref]$null)) { $majorMinor = "0.0" }
$buildNumber = "$(Get-Date -Format 'yy')$((Get-Date).DayOfYear.ToString().PadLeft(3, '0'))"
$version = "$majorMinor.$buildNumber.${{ github.run_number }}"
Write-Host "Defined version: $version" -ForegroundColor green
"#define MyAppVersion `"$version`"" | Set-Content -Path .\InnoSetup\version.iss
echo "version=$version" >> $env:GITHUB_OUTPUT
- name: Configure appsettings
run: |
$appsettings = Get-Content .\Tum4ik.JustClipboardManager\appsettings.json -Raw | ConvertFrom-Json
$appsettings.SentryDsn = "${{ secrets.SENTRY_DSN }}"
$appsettings.SentryEnvironment = "production"
$appsettings | ConvertTo-Json -Depth 32 | Set-Content .\Tum4ik.JustClipboardManager\appsettings.json
- name: Publish
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
run: |
$version = "${{ steps.define-version.outputs.version }}"
Write-Host "Build version: $version" -ForegroundColor green
${{ env.Scripts }}\MSBuildPublish.ps1 -Architecture x86 -Version $version
${{ env.Scripts }}\MSBuildPublish.ps1 -Architecture x64 -Version $version
- name: Upload coverage reports to Codecov
uses: codecov/[email protected]
- name: Prepare PFX fil for code signing
run: |
${{ env.Scripts }}\DecodePfx.ps1 `
-Base64Pfx "${{ secrets.BASE64_ENCODED_PFX }}" `
-OutputPath ${{ env.TemporaryPfxFilePath }}
- name: Sign code files
run: |
${{ env.Scripts }}\SignMyCodeFiles.ps1 `
-SigntoolPath .\signtool.exe `
-FilesDirectoryPath ${{ env.PublishDir }} `
-PfxFilePath ${{ env.TemporaryPfxFilePath }} `
-PfxPassword ${{ secrets.PFX_KEY }} `
-FileNamesToInclude `
JustClipboardManager.dll, `
JustClipboardManager.exe, `
Tum4ik.JustClipboardManager.PluginDevKit.dll, `
JustClipboardManager.resources.dll, `
Tum4ik.JustClipboardManager.TextPlugin.dll
- name: Install Inno Setup
run: |
.\InnoSetup\innosetup-6.2.2.exe /verysilent /allusers /dir=inst | Out-Host
Copy-Item .\InnoSetup\ISCrypt.dll -Destination .\inst
- name: Build installer
run: |
$pfxFullPath = (Resolve-Path ${{ env.TemporaryPfxFilePath }}).Path
${{ env.Scripts }}\BuildInstaller.ps1 -Architecture x86 `
-SigntoolPath signtool.exe `
-PfxFilePath $pfxFullPath `
-PfxPassword ${{ secrets.PFX_KEY }}
${{ env.Scripts }}\BuildInstaller.ps1 -Architecture x64 `
-SigntoolPath signtool.exe `
-PfxFilePath $pfxFullPath `
-PfxPassword ${{ secrets.PFX_KEY }}
- name: Clean up temporary files for code signing
run: Remove-Item -Path ${{ env.TemporaryPfxFilePath }}
- name: Upload build artifacts
uses: actions/[email protected]
with:
if-no-files-found: error
name: BuildFiles
path: |
${{ env.InstallerDir }}
ReleaseNotes.md
github-release:
name: Release ${{ needs.build.outputs.version }}
if: github.event_name != 'pull_request' && contains(github.ref_name, 'release')
needs: build
runs-on: windows-latest
steps:
- name: Download build artifacts
uses: actions/[email protected]
- name: GitHub release
env:
GH_REPO: ${{ github.repository }}
GITHUB_TOKEN: ${{ github.token }}
run: |
gh release create ${{ needs.build.outputs.version }} (Get-ChildItem -Path *.exe -Recurse) `
--draft `
--title ${{ needs.build.outputs.version }} `
--notes-file BuildFiles/ReleaseNotes.md