Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
34895d5
Update actions in `labels.yml` workflow
jozefizso Nov 1, 2025
322f5f2
Update actions in `tests.yml` workflow
jozefizso Nov 1, 2025
7e7a68b
Update actions in `release.yml` workflow
jozefizso Nov 1, 2025
8014f93
Use .NET 8 SDK to run build
jozefizso Nov 1, 2025
87842a9
Update code singing tools
jozefizso Nov 1, 2025
25dc0f2
Use the `win-x86` platform as the `win7-x86` is no longer supported
jozefizso Dec 12, 2024
f4dc235
Use Azure Trusted Signing service to digitally sign NetOffice libraries
jozefizso Nov 1, 2025
46558dc
Use Azure Trusted Signing service to digitally sign NetOffice nuget p…
jozefizso Nov 1, 2025
50b60dd
Explicitly sign NetOffice assemblies which are archived into legacy p…
jozefizso Nov 2, 2025
0cc1573
Extract trusted signing certificate
jozefizso Nov 2, 2025
22addc1
Rewrite nuget packages publishing to individual gated job
jozefizso Nov 2, 2025
fefd4d3
Modernize `release` workflow for v1.9.x releases (#443)
jozefizso Nov 3, 2025
4a43cd5
Implement Presentation.AutoSaveOn property in PowerPointApi
kev-is-coding-for-adn Apr 14, 2025
b86bece
Use English documentation link
kev-is-coding-for-adn Apr 15, 2025
a731860
Add integration test for presentation saved locally and with Auto Sav…
jozefizso Nov 2, 2025
0c2e33a
Add integration test for presentation saved in OneDrive and with Auto…
jozefizso Nov 2, 2025
5f5cac9
Implement Presentation.AutoSaveOn property in PowerPointApi (#444)
jozefizso Nov 4, 2025
d952fff
Remove obsolete BuildTools folder
jozefizso Nov 15, 2025
610171a
Fix `.gitignore` patterns to correctly exclude folders (#451)
jozefizso Jan 2, 2026
9178188
Fix bug in `DocumentEvents2` sink implementation of the `ContentContr…
jozefizso Jan 30, 2026
de31b5b
Update changelog for v1.9.8 with the fix for `ContentControlBeforeCon…
jozefizso Jan 30, 2026
d9d422e
Fix bug in `DocumentEvents2` sink implementation of the `ContentContr…
jozefizso Jan 30, 2026
dff14a8
Fix `.gitignore` patterns to correctly exclude folders (#452)
jozefizso Feb 21, 2026
cd6392b
Bump NetOffice libraries to v1.9.8
jozefizso Feb 21, 2026
655b1d8
Run `build` workflow on more branches
jozefizso Feb 21, 2026
9ca2482
Update GitHub actions packages
jozefizso Feb 21, 2026
24484fa
Update build workflows (#457)
jozefizso Feb 21, 2026
21ab594
Use `azure/artifact-signing-action` action to sign libraries (#456)
jozefizso Feb 21, 2026
0690ec6
Run builds on Windows Server 2025
jozefizso Feb 21, 2026
1288ac8
Use `azure/artifact-signing-action` action to sign libraries (#458)
jozefizso Feb 21, 2026
9f4d480
Run builds on Windows Server 2025 (#459)
jozefizso Feb 21, 2026
67eafb6
NetOffice v1.9.8 release
jozefizso Feb 21, 2026
c96b5ca
Use `BUILD_SIGN_RELEASE` env variable to dynamically configure releas…
jozefizso Feb 21, 2026
a15cf65
Improve documentation for publishing signed nuget packages
jozefizso Feb 21, 2026
979d37b
Use `BUILD_SIGN_RELEASE` env variable in `release.yml` workflow (#461)
jozefizso Feb 21, 2026
2e37894
NetOffice v1.9.8 release
jozefizso Feb 21, 2026
fc76da2
Fix the certificate download link
jozefizso Feb 21, 2026
f746621
Fix the certificate download link (#462)
jozefizso Feb 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/Get-BuildInfo.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,4 @@ Write-GitHubVariable "app_version_suffix" $app_version_suffix
Write-GitHubVariable "app_version_full" $app_version_full
Write-GitHubVariable "sign_binaries" $sign_binaries
Write-GitHubVariable "publish_nuget" $publish_nuget
Write-GitHubVariable "nuget_packages_artifact_name" "NetOffice_packages_v$app_version_full"
4 changes: 2 additions & 2 deletions .github/workflows/labels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
labels:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: gitlabels/gitlabels@v1
- uses: actions/checkout@v6
- uses: gitlabels/gitlabels@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
163 changes: 117 additions & 46 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@ on:
- 'v*.*.*'

permissions:
id-token: write
contents: read

jobs:
release:
runs-on: windows-2022
environment: production

runs-on: windows-2025

strategy:
matrix:
Expand All @@ -20,41 +23,45 @@ jobs:
DOTNET_NOLOGO: 1
DOTNET_CLI_TELEMETRY_OPTOUT: 1
DOTNET_GENERATE_ASPNET_CERTIFICATE: 0
BUILD_SIGN_RELEASE: '${{ vars.BUILD_SIGN_RELEASE }}'
ContinuousIntegrationBuild: true
RestoreLockedMode: true
RepositoryBranch: '${{ github.ref_name }}'
RepositoryCommit: '${{ github.sha }}'
Configuration: '${{ matrix.configuration }}'

outputs:
nuget_packages_artifact_name: ${{ steps.build.outputs.nuget_packages_artifact_name }}

steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v6

- name: Setup dotnet
uses: actions/setup-dotnet@v3
uses: actions/setup-dotnet@v5
with:
dotnet-version: '7.0.201'
dotnet-version: 8

- name: Setup MSBuild
uses: microsoft/setup-msbuild@v1.1
uses: microsoft/setup-msbuild@v2

- name: Cache dotnet tools
uses: actions/cache@v3
uses: actions/cache@v5
id: cache-dotnettools
with:
path: ~/.dotnet/tools
key: dotnettools

- name: Setup AzureSignTool
- name: Setup dotnet sign tool
if: steps.cache-dotnettools.outputs.cache-hit != 'true'
run: dotnet tool install --verbosity minimal --global azuresigntool --version 3.0.0
run: dotnet tool install --verbosity minimal --global sign --version 0.9.1-beta.25379.1

- name: Setup NuGetKeyVaultSignTool
- name: Setup Knapcode.CertificateExtractor tool
if: steps.cache-dotnettools.outputs.cache-hit != 'true'
run: dotnet tool install --verbosity minimal --global NuGetKeyVaultSignTool --version 3.2.2
run: dotnet tool install --verbosity minimal --global Knapcode.CertificateExtractor --version 0.1.1

- name: Cache packages
uses: actions/cache@v3
uses: actions/cache@v5
with:
path: ~/.nuget/packages
key: NetOffice-nuget-${{ hashFiles('**/packages.lock.json') }}
Expand All @@ -77,59 +84,123 @@ jobs:
$content = $content.Replace('${{ github.workspace }}', '..')
$content | Set-Content obj/signlist.txt

- name: azure login
uses: azure/login@v2
with:
client-id: ${{ secrets.TRUSTED_SIGNING_CLIENT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}

- name: Sign NetOffice libraries
if: success() && steps.build.outputs.sign_binaries == 'true'
uses: azure/trusted-signing-action@v0.3.19
uses: azure/artifact-signing-action@v1
with:
azure-tenant-id: ${{ secrets.KEYVAULT_TENANT_ID }}
azure-client-id: ${{ secrets.KEYVAULT_CLIENT_ID }}
azure-client-secret: ${{ secrets.KEYVAULT_CLIENT_SECRET }}
endpoint: ${{ vars.KEYVAULT_ENDPOINT }}
trusted-signing-account-name: ${{ vars.KEYVAULT_ACCOUNT_NAME }}
certificate-profile-name: ${{ secrets.KEYVAULT_CERTIFICATE_PROFILE }}
files-catalog: '${{ github.workspace }}/obj/signlist.txt'
file-digest: SHA256
timestamp-rfc3161: http://timestamp.acs.microsoft.com
timestamp-digest: SHA256
endpoint: ${{ secrets.TRUSTED_SIGNING_ENDPOINT }}
signing-account-name: ${{ secrets.TRUSTED_SIGNING_ACCOUNT_NAME }}
certificate-profile-name: ${{ secrets.TRUSTED_SIGNING_CERTIFICATE_PROFILE }}
files-catalog: '${{ github.workspace }}/obj/signlist.txt'
files: |
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/AccessApi.dll
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/ADODBApi.dll
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/DAOApi.dll
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/ExcelApi.dll
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/MSComctlLibApi.dll
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/MSDATASRCApi.dll
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/NetOffice.dll
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/OfficeApi.dll
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/OfficeApi.Extensions.dll
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/OutlookApi.dll
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/OWC10Api.dll
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/PowerPointApi.dll
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/VBIDEApi.dll
${{ github.workspace }}/Source/ClientApplication/bin/${{ matrix.configuration }}/WordApi.dll
file-digest: SHA256
timestamp-rfc3161: http://timestamp.acs.microsoft.com
timestamp-digest: SHA256

- name: Archive NetOffice binaries
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v6
with:
name: NetOffice_binaries_v${{ steps.build.outputs.app_version_full }}_${{ matrix.configuration }}
path: '${{ github.workspace }}\Source\ClientApplication\bin\${{ matrix.configuration }}'

- name: Pack NetOffice
if: steps.build.outputs.publish_nuget == 'true'
run: |
dotnet pack --no-build --no-restore Source\NetOffice.sln -c ${{ matrix.configuration }} -o dist
env:
VersionSuffix: ${{ steps.build.outputs.app_version_suffix }}

# - name: Sign NetOffice packages
# if: success() && steps.build.outputs.publish_nuget == 'true' && steps.build.outputs.sign_binaries == 'true'
# working-directory: '${{ github.workspace}}\dist'
# run: |
# NuGetKeyVaultSignTool.exe sign *.nupkg `
# --file-digest sha256 `
# --timestamp-rfc3161 http://timestamp.digicert.com `
# --timestamp-digest sha256 `
# --azure-key-vault-url https://opensourcesigning.vault.azure.net `
# --azure-key-vault-tenant-id "${{ secrets.KEYVAULT_TENANT_ID }}" `
# --azure-key-vault-client-id "${{ secrets.KEYVAULT_CLIENT_ID }}" `
# --azure-key-vault-client-secret "${{ secrets.KEYVAULT_CLIENT_SECRET }}" `
# --azure-key-vault-certificate "goITSolutions-until-2024-01"

- name: Publish packages
if: success() && steps.build.outputs.publish_nuget == 'true'
- name: Sign NetOffice packages
if: success() && steps.build.outputs.sign_binaries == 'true'
working-directory: '${{ github.workspace}}\dist'
run: |
dotnet nuget push *.nupkg --api-key $env:NUGET_TOKEN --source https://api.nuget.org/v3/index.json
env:
NUGET_TOKEN: ${{ secrets.NUGET_TOKEN }}
sign code trusted-signing *.nupkg `
--publisher-name "NetOffice" `
--description "NetOffice" `
--description-url "https://github.com/NetOfficeFw/NetOffice" `
--trusted-signing-endpoint "${{ secrets.TRUSTED_SIGNING_ENDPOINT }}" `
--trusted-signing-account "${{ secrets.TRUSTED_SIGNING_ACCOUNT_NAME }}" `
--trusted-signing-certificate-profile "${{ secrets.TRUSTED_SIGNING_CERTIFICATE_PROFILE }}" `
--file-digest SHA256 `
--timestamp-url http://timestamp.acs.microsoft.com `
--timestamp-digest SHA256

- name: Extract trusted signing certificate
if: success() && steps.build.outputs.sign_binaries == 'true'
run: |
$nupkg = Get-ChildItem -Path '${{ github.workspace}}\dist' -Filter '*.nupkg' | Select-Object -First 1
nuget-cert-extractor --file $nupkg --output '${{ github.workspace}}\dist' --code-signing --author --leaf

- name: Archive NetOffice packages
if: success() && steps.build.outputs.publish_nuget == 'true'
uses: actions/upload-artifact@v3
if: success()
uses: actions/upload-artifact@v6
with:
name: NetOffice_packages_v${{ steps.build.outputs.app_version_full }}
name: ${{ steps.build.outputs.nuget_packages_artifact_name }}
path: '${{ github.workspace }}\dist'

- name: Archive code signing certificate
if: success() && matrix.configuration == 'Release'
id: certificate_artifact
uses: actions/upload-artifact@v6
with:
name: certificate
path: '${{ github.workspace }}/dist/*.cer'

- name: Release documentation
if: matrix.configuration == 'Release'
run: |
$certUrl = '${{ steps.certificate_artifact.outputs.artifact-url }}'
'To release the NuGet package, upload the signing certificate to NuGet Gallery via Account Settings: <https://www.nuget.org/account>. ' >> $env:GITHUB_STEP_SUMMARY
'See the `certificate` artifact for the signing certificate file.' >> $env:GITHUB_STEP_SUMMARY
'' >> $env:GITHUB_STEP_SUMMARY
"Download the [certiticate file]($certUrl)." >> $env:GITHUB_STEP_SUMMARY
'' >> $env:GITHUB_STEP_SUMMARY
'Approve the `publish` job deployment to the `nuget-gallery` environment when the certificate was added to NuGet Gallery.' >> $env:GITHUB_STEP_SUMMARY

publish:
environment: nuget-gallery

permissions:
id-token: write

needs: release

runs-on: ubuntu-latest

steps:
- name: Download NetOffice packages
uses: actions/download-artifact@v7
with:
name: ${{ needs.release.outputs.nuget_packages_artifact_name }}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Download the Release package artifact deterministically

The publish job resolves artifact name from ${{ needs.release.outputs.nuget_packages_artifact_name }}, but release is a matrix job (Debug and Release) and that output is populated from steps.build.outputs.nuget_packages_artifact_name per matrix leg. On tag builds those names can differ (Debug keeps a preview suffix while Release does not), and matrix job outputs expose only one final value, so the downloaded artifact can depend on which leg finishes last; this can publish preview/debug packages for a stable tag. Make the publish path consume only the Release leg’s artifact (or remove Debug from package publishing) so the selected artifact is deterministic.

Useful? React with 👍 / 👎.


- name: Authenticate Nuget Gallery
uses: NuGet/login@v1
id: nuget
with:
user: ${{ secrets.NUGET_TRUSTED_PUBLISHING_USER }}

- name: Publish packages
run: |
dotnet nuget push "*.nupkg" --api-key "$NUGET_API_KEY" --source https://api.nuget.org/v3/index.json
env:
NUGET_API_KEY: ${{ steps.nuget.outputs.NUGET_API_KEY }}
21 changes: 12 additions & 9 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,18 @@ on:
push:
branches:
- 'main'
- 'dev/*'
- 'releases/*'
- 'bugfix/**'
- 'dev/**'
- 'feature/**'
- 'tests/**'
- 'releases/**'

permissions:
contents: read

jobs:
tests:
runs-on: windows-2022
runs-on: windows-2025

strategy:
matrix:
Expand All @@ -31,18 +34,18 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v6

- name: Setup dotnet
uses: actions/setup-dotnet@v3
uses: actions/setup-dotnet@v5
with:
dotnet-version: '7.0.201'
dotnet-version: 8

- name: Setup MSBuild
uses: microsoft/setup-msbuild@v1.1
uses: microsoft/setup-msbuild@v2

- name: Cache packages
uses: actions/cache@v3
uses: actions/cache@v5
with:
path: ~/.nuget/packages
key: NetOffice-nuget-${{ hashFiles('**/packages.lock.json') }}
Expand All @@ -66,7 +69,7 @@ jobs:
VersionSuffix: ${{ steps.build.outputs.app_version_suffix }}

- name: Archive NetOffice binaries
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v6
with:
name: NetOffice_binaries_v${{ steps.build.outputs.app_version_full }}_${{ matrix.configuration }}
path: '${{ github.workspace }}\Source\ClientApplication\bin\${{ matrix.configuration }}'
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ NetOffice*.rar
ReferenceIndex*.rar
Assemblies/
Any\ CPU/
Current\ Binaries\
Persistance\ Cache*\
Current\ Binaries/
Persistance\ Cache*/
Toolbox/Libs/
..svnbridge/
out/
Expand Down
Binary file removed BuildTools/Lib/HtmlAgilityPack.dll
Binary file not shown.
Binary file removed BuildTools/Lib/HtmlAgilityPack.pdb
Binary file not shown.
Loading
Loading