diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index e240e658..64c285c1 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -5,16 +5,23 @@ on: pull_request: branches: ["develop", "master"] workflow_dispatch: + inputs: + releaseType: + description: 'Alpha, Beta, Stable used to stamp release artifacts' + required: true + default: 'Alpha' concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: - windows_debug_build_and_test: + build_and_test: env: CROWDIN_API_KEY: ${{ secrets.CROWDIN_API_KEY }} - name: Build Debug and run Tests + FILESTOSIGNLATER: "${{ github.workspace }}\\filesToSign" + teamcity_build_checkoutDir: ${{ github.workspace }} + name: Build Debug / Test / Build Msi runs-on: windows-latest steps: - name: Checkout Files @@ -26,62 +33,298 @@ jobs: - name: Download 461 targeting pack uses: suisei-cn/actions-download-file@818d6b7dc8fe73f2f924b6241f2b1134ca1377d9 # 1.6.0 - id: downloadfile # Remember to give an ID if you need the output filename + id: downloadfile with: url: "https://download.microsoft.com/download/F/1/D/F1DEB8DB-D277-4EF9-9F48-3A65D4D8F965/NDP461-DevPack-KB3105179-ENU.exe" target: public/ - + - name: Install targeting pack shell: cmd working-directory: public run: NDP461-DevPack-KB3105179-ENU.exe /q - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v2 - + + # We need the dotnet runtime to execute overcrowdin - name: Setup dotnet - uses: actions/setup-dotnet@v3 + uses: actions/setup-dotnet@v4 with: - dotnet-version: | - 2.1.x - 3.1.x - 5.0.x + dotnet-version: + 8.0.x if: github.event_name != 'pull_request' - + + - name: Downgrade Wix Toolset - remove when runner has 3.14.2 + run: | + choco uninstall wixtoolset + choco install wixtoolset --version 3.11.2 --allow-downgrade --force + echo "C:\Program Files (x86)\WiX Toolset v3.11\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + if: github.event_name != 'pull_request' + + # If we are just doing a CI build we don't need real localizations, but the location must exist - name: Add Fake Localizations for CI shell: bash run: echo > DistFiles/localizations/empty.xlf if: github.event_name == 'pull_request' - - - name: Restore Build Tasks & Packages - id: package_restore - shell: cmd - run: msbuild build\FLExBridge.proj /t:RestoreBuildTasks;RestorePackages - - - name: Build & Test - id: build_and_test - shell: cmd - run: msbuild build\FLExBridge.proj /t:Test - + - name: Install Latest Overcrowdin shell: cmd run: dotnet tool install -g overcrowdin if: github.event_name != 'pull_request' - + + - name: Restore L10n Packages shell: cmd run: | cd l10n msbuild l10n.proj /t:restore if: github.event_name != 'pull_request' - + - name: Get Latest L10ns shell: cmd run: | cd l10n msbuild l10n.proj /t:GetLatestL10ns;CopyL10nsToDistFiles if: github.event_name != 'pull_request' + + - name: Restore Build Tasks & Packages + id: package_restore + shell: cmd + run: msbuild build\FLExBridge.proj /t:RestoreBuildTasks;RestorePackages + + - name: Build & Test + id: build_and_test_step + shell: cmd + run: msbuild build\FLExBridge.proj /t:Test /p:Configuration=Release + + # All the following are used only when building an installer after a merge + - name: Build Msi + id: build_msi + shell: cmd + run: | + msbuild build/FLExBridge.proj /t:CleanMasterOutputDir;PreparePublishingArtifactsInternal;BuildProductBaseMsi /p:UploadFolder=${{ inputs.environment || 'Alpha' }} + if: github.event_name != 'pull_request' + + # REVIEW: The .msi file is named with the version, there is probably a cleaner way to generate the correct filename + # and after completing the work to do signing of the bundles it became clear that capturing the files in the signtool wasn't necessary + - name: Prepare for msi signing + shell: bash + run: | + echo "FILES_TO_SIGN=$(cat $FILESTOSIGNLATER)" >> $GITHUB_OUTPUT + id: gathered_files + if: github.event_name != 'pull_request' + + - name: upload-msi + id: upload + uses: actions/upload-artifact@v4 + with: + name: FlexBridge.msi + path: ${{ steps.gathered_files.outputs.FILES_TO_SIGN }} + if-no-files-found: error + overwrite: true + if: github.event_name != 'pull_request' + + sign-msi: + name: Sign FlexBridge Installer + needs: build_and_test + if: github.event_name != 'pull_request' + uses: sillsdev/codesign/.github/workflows/sign.yml@v2.1 + with: + artifact: FlexBridge.msi + description: 'FLEx Bridge Installer' + secrets: + certificate: ${{ secrets.CODESIGN_LSDEVSECTIGOEV }} + + build-bundles: + name: Build Installer Bundles + needs: sign-msi + if: github.event_name != 'pull_request' + runs-on: windows-latest + env: + FILESTOSIGNLATER: "${{ github.workspace }}\\filesToSign" + steps: + - name: Checkout Files + uses: actions/checkout@v4 + id: checkout + with: + fetch-depth: 0 + submodules: true + + - name: Downgrade Wix Toolset - remove when runner has 3.14.2 + # See: https://github.com/actions/runner-images/issues/9667 + run: | + choco uninstall wixtoolset + choco install wixtoolset --version 3.11.2 --allow-downgrade --force + echo "C:\Program Files (x86)\WiX Toolset v3.11\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v2 + + - name: Download FlexBridge artifact + uses: actions/download-artifact@v4 + with: + name: FlexBridge.msi + path: src/WiXInstaller/BaseInstallerBuild # Target directory for the downloaded artifact + + - name: Build Bundles + id: build_bundles + working-directory: build + shell: cmd + run: | + msbuild FLExBridge.proj /t:RestoreBuildTasks;RestorePackages;GetDotNetFiles;CopyWixOverrides + msbuild FLExBridge.proj /t:BuildProductBaseBundles /p:Configuration=Release /p:Platform="Any CPU" + + - name: Extract burn engines + id: extract_engines + working-directory: BuildDir + shell: cmd + run: | + insignia -ib FlexBridge_Offline.exe -o offline-engine.exe + insignia -ib FlexBridge_Online.exe -o online-engine.exe - - name: Build Installer + - name: Upload Offline Engine + id: upload-offline-engine + uses: actions/upload-artifact@v4 + with: + name: offline-engine + path: BuildDir/offline-engine.exe + if-no-files-found: error + overwrite: true + if: github.event_name != 'pull_request' + + - name: Upload Offline Bundle(detatched) + id: upload-offline-bundle + uses: actions/upload-artifact@v4 + with: + name: FlexBridge_Offline.exe + path: BuildDir/FlexBridge_Offline.exe + if-no-files-found: error + overwrite: true + if: github.event_name != 'pull_request' + + - name: Upload Online Engine + id: upload-online-engine + uses: actions/upload-artifact@v4 + with: + name: online-engine + path: BuildDir/online-engine.exe + if-no-files-found: error + overwrite: true + if: github.event_name != 'pull_request' + + - name: Upload Online Bundle(detached) + id: upload-online-bundle + uses: actions/upload-artifact@v4 + with: + name: FlexBridge_Online.exe + path: BuildDir/FlexBridge_Online.exe + if-no-files-found: error + overwrite: true + if: github.event_name != 'pull_request' + + sign-offline-engine: + name: Sign Offline Engine + needs: build-bundles + if: github.event_name != 'pull_request' + uses: sillsdev/codesign/.github/workflows/sign.yml@v2.1 + with: + artifact: offline-engine + description: 'FLEx Bridge Installer' + secrets: + certificate: ${{ secrets.CODESIGN_LSDEVSECTIGOEV }} + + sign-online-engine: + name: Sign Online Engine + needs: build-bundles + if: github.event_name != 'pull_request' + uses: sillsdev/codesign/.github/workflows/sign.yml@v2.1 + with: + artifact: online-engine + description: 'FLEx Bridge Installer' + secrets: + certificate: ${{ secrets.CODESIGN_LSDEVSECTIGOEV }} + + reattach-engines: + runs-on: windows-latest + needs: [sign-offline-engine, sign-online-engine] + steps: + - name: Downgrade Wix Toolset - remove when runner has 3.14.2 + run: | + choco uninstall wixtoolset + choco install wixtoolset --version 3.11.2 --allow-downgrade --force + echo "C:\Program Files (x86)\WiX Toolset v3.11\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + + - name: Download signed online engine + uses: actions/download-artifact@v4 + with: + name: online-engine + - name: Download signed offline engine + uses: actions/download-artifact@v4 + with: + name: offline-engine + - name: Download Online Bundle + uses: actions/download-artifact@v4 + with: + name: FlexBridge_Online.exe + - name: Download Offline Bundle + uses: actions/download-artifact@v4 + with: + name: FlexBridge_Offline.exe + + - name: Reattach Engines shell: cmd - run: msbuild build/FLExBridge.proj /t:Installer /p:UploadFolder=Alpha + run: | + insignia -ab online-engine.exe FlexBridge_Online.exe -o FlexBridge_Online.exe + insignia -ab offline-engine.exe FlexBridge_Offline.exe -o FlexBridge_Offline.exe + + - name: Upload Online Bundle(attached) + id: upload-online-bundle + uses: actions/upload-artifact@v4 + with: + name: FlexBridge_Online.exe + path: FlexBridge_Online.exe + if-no-files-found: error + overwrite: true + if: github.event_name != 'pull_request' + + - name: Upload Offline Bundle(attached) + id: upload-offline-bundle + uses: actions/upload-artifact@v4 + with: + name: FlexBridge_Offline.exe + path: FlexBridge_Offline.exe + if-no-files-found: error + overwrite: true if: github.event_name != 'pull_request' + + - name: Cleanup Offline Engine + uses: geekyeggo/delete-artifact@v5 + with: + name: offline-engine + + - name: Cleanup Online Engine + uses: geekyeggo/delete-artifact@v5 + with: + name: online-engine + + sign-offline-bundle: + name: Sign Offline Bundle + needs: reattach-engines + if: github.event_name != 'pull_request' + uses: sillsdev/codesign/.github/workflows/sign.yml@v2.1 + with: + artifact: FlexBridge_Offline.exe + description: 'FLEx Bridge Installer' + secrets: + certificate: ${{ secrets.CODESIGN_LSDEVSECTIGOEV }} + + sign-online-bundle: + name: Sign Online Bundle + needs: reattach-engines + if: github.event_name != 'pull_request' + uses: sillsdev/codesign/.github/workflows/sign.yml@v2.1 + with: + artifact: FlexBridge_Online.exe + description: 'FLEx Bridge Installer' + secrets: + certificate: ${{ secrets.CODESIGN_LSDEVSECTIGOEV }} + diff --git a/build/FLExBridge.proj b/build/FLExBridge.proj index 45a19196..ea381e73 100644 --- a/build/FLExBridge.proj +++ b/build/FLExBridge.proj @@ -45,7 +45,6 @@ - @@ -80,11 +79,6 @@ - - - - @@ -134,7 +128,7 @@ - + diff --git a/build/WixPatchableInstaller.targets b/build/WixPatchableInstaller.targets index 4742839f..939e3170 100644 --- a/build/WixPatchableInstaller.targets +++ b/build/WixPatchableInstaller.targets @@ -50,11 +50,14 @@ $(InstallersBaseDir)/$(SafeApplicationName)_Build_Master objects/$(SafeApplicationName) $(BinDirSuffix)_Data + $(SafeApplicationName)_$(BuildVersion).msi + $(RootDir)/src/WiXInstaller/BaseInstallerBuild + "$(ApplicationName)" $(SafeApplicationName) $(BuildVersion) $(ProductIdGuid) $(UpgradeCodeGuid) "$(AppBuildDir)/$(BinDirSuffix)" "$(AppBuildDir)/$(DataDirSuffix)" $(CopyrightYear) "$(Manufacturer)" $(SafeManufacturer) - + @@ -79,7 +82,7 @@ - + @@ -111,14 +114,19 @@ - - + + + + + + + @@ -131,8 +139,9 @@ $(RootDir)/src/WiXInstaller/libs - + + - + + + - $(SafeApplicationName)_$(BuildVersion).msi - $(RootDir)/src/WiXInstaller/BaseInstallerBuild - "$(ApplicationName)" $(SafeApplicationName) $(BuildVersion) $(ProductIdGuid) $(UpgradeCodeGuid) "$(AppBuildDir)/$(BinDirSuffix)" "$(AppBuildDir)/$(DataDirSuffix)" $(CopyrightYear) "$(Manufacturer)" $(SafeManufacturer) + "$(ApplicationName)" $(SafeApplicationName) $(BuildVersion) $(ProductIdGuid) $(UpgradeCodeGuid) "$(AppBuildDir)/$(BinDirSuffix)" "$(AppBuildDir)/$(DataDirSuffix)" $(CopyrightYear) "$(Manufacturer)" $(SafeManufacturer) - + @@ -203,6 +212,31 @@ + + + + "$(ApplicationName)" $(SafeApplicationName) $(BuildVersion) $(ProductIdGuid) $(UpgradeCodeGuid) "$(AppBuildDir)/$(BinDirSuffix)" "$(AppBuildDir)/$(DataDirSuffix)" $(CopyrightYear) "$(Manufacturer)" $(SafeManufacturer) + + + + + + + + "$(ApplicationName)" $(SafeApplicationName) $(BuildVersion) $(ProductIdGuid) $(UpgradeCodeGuid) "$(AppBuildDir)/$(BinDirSuffix)" "$(AppBuildDir)/$(DataDirSuffix)" $(CopyrightYear) "$(Manufacturer)" $(SafeManufacturer) + + + + + + + + + + + + + diff --git a/l10n/l10n.proj b/l10n/l10n.proj index cf075088..47564186 100644 --- a/l10n/l10n.proj +++ b/l10n/l10n.proj @@ -37,7 +37,7 @@ - + diff --git a/src/LibFLExBridge-ChorusPluginTests/LibFLExBridge-ChorusPluginTests.csproj b/src/LibFLExBridge-ChorusPluginTests/LibFLExBridge-ChorusPluginTests.csproj index 6f639b0c..6730e1b1 100644 --- a/src/LibFLExBridge-ChorusPluginTests/LibFLExBridge-ChorusPluginTests.csproj +++ b/src/LibFLExBridge-ChorusPluginTests/LibFLExBridge-ChorusPluginTests.csproj @@ -12,7 +12,7 @@ - + diff --git a/src/TriboroughBridge-ChorusPlugin/Infrastructure/ActionHandlers/ObtainAnyProjectActionHandler.cs b/src/TriboroughBridge-ChorusPlugin/Infrastructure/ActionHandlers/ObtainAnyProjectActionHandler.cs index acc867b3..8d985ff9 100644 --- a/src/TriboroughBridge-ChorusPlugin/Infrastructure/ActionHandlers/ObtainAnyProjectActionHandler.cs +++ b/src/TriboroughBridge-ChorusPlugin/Infrastructure/ActionHandlers/ObtainAnyProjectActionHandler.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2010-2023 SIL International +// Copyright (c) 2010-2023 SIL International // This software is licensed under the MIT License (http://opensource.org/licenses/MIT) using System; @@ -76,9 +76,9 @@ void IBridgeActionTypeHandler.StartWorking(IProgress progress, Dictionary _pathToRepository = options[CommandLineProcessor.projDir]; CloneResult result; - var uriArg = options[CommandLineProcessor.uri]; - var projectArg = options[CommandLineProcessor.project]; - var identifier = options[CommandLineProcessor.repositoryIdentifier]; + options.TryGetValue(CommandLineProcessor.uri, out var uriArg); + options.TryGetValue(CommandLineProcessor.project, out var projectArg); + options.TryGetValue(CommandLineProcessor.repositoryIdentifier, out var identifier); if (!string.IsNullOrEmpty(uriArg) && !string.IsNullOrEmpty(projectArg)) { var projectFoldersByIdentifier = GetSharedProjectModel.ExtantRepoIdentifiers(_pathToRepository, LibTriboroughBridgeSharedConstants.OtherRepositories); diff --git a/src/WiXInstaller b/src/WiXInstaller index 4fed364c..deb9f883 160000 --- a/src/WiXInstaller +++ b/src/WiXInstaller @@ -1 +1 @@ -Subproject commit 4fed364cd504097d0fd44f0c93f1954055e7e62e +Subproject commit deb9f8836009264c09cbd950ba0777fcd42e7ca2