diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cb5b3e8e..ca37e0d5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,23 +12,28 @@ on: branches: [ "main" ] workflow_dispatch: inputs: - configuration: - description: 'Build Configuration' + deploy_packages: + description: 'deploy_packages: If the created package should be deployed (additional manual approval required by a release admin)' + type: boolean + default: false required: true - default: 'Release' - type: choice - options: - - Debug - - Release - production_release: - description: 'If the build produces a production package (resets version prefix)' + is_production_release: + description: 'is_production_release: Whether the release is a production release and not a pre-release (enabling this will update change log, increases version and tags commit)' type: boolean default: false required: true - version_suffix: - description: 'Suffix for the NuGet packages (without leading -). Build ID will be appended.' - default: manual + custom_version_suffix: + description: 'custom_version_suffix: Custom suffix for the NuGet packages (without leading -) for non-production releases. Default: empty for production release, "ci" for other runs. The build ID is always appended.' + required: false + custom_configuration: + description: 'custom_configuration: Custom build configuration. Default: "Debug" for CI builds, "Release" for deployments.' required: false + default: 'Default' + type: choice + options: + - Default + - Debug + - Release permissions: checks: write @@ -40,16 +45,20 @@ jobs: runs-on: windows-latest outputs: + product_version_prefix: ${{ steps.versions.outputs.product_version_prefix }} product_version_suffix: ${{ steps.versions.outputs.product_version_suffix }} - product_build_number: ${{ steps.versions.outputs.product_build_number }} + product_main_version: ${{ steps.versions.outputs.product_main_version }} + product_patch_version: ${{ steps.versions.outputs.product_patch_version }} + product_full_version: ${{ steps.versions.outputs.product_full_version }} product_configuration: ${{ steps.versions.outputs.product_configuration }} - build_params: ${{ steps.versions.outputs.build_params }} - test_params: ${{ steps.versions.outputs.test_params }} + deploy_packages: ${{ steps.versions.outputs.deploy_packages }} + is_production_release: ${{ steps.versions.outputs.is_production_release }} + + build_params: ${{ steps.build_params.outputs.build_params }} + test_params: ${{ steps.build_params.outputs.test_params }} steps: - uses: actions/checkout@v4 - with: - fetch-depth: 0 # avoid shallow clone so nbgv can do its work. - name: Setup .NET uses: actions/setup-dotnet@v4 with: @@ -57,78 +66,140 @@ jobs: - id: versions name: Calculate versions shell: pwsh - env: - APPINSIGHTS_KEY: ${{ secrets.APPINSIGHTS_KEY }} run: | - $productionReleaseSetting = "${{ inputs.production_release }}" - $productionRelease = $false - if ($productionReleaseSetting -eq 'true') { - $productionRelease = $true + $deployPackages = $false + if ("${{ inputs.deploy_packages }}" -eq 'true') { + $deployPackages = $true + } + Write-Output "deploy_packages=$($deployPackages.ToString().ToLowerInvariant())" >> $env:GITHUB_OUTPUT + Write-Output "Deploy packages: $deployPackages" + + $isProductionRelease = $false + if ("${{ inputs.is_production_release }}" -eq 'true') { + $isProductionRelease = $true } - Write-Output "Production release: $productionRelease" + Write-Output "is_production_release=$($isProductionRelease.ToString().ToLowerInvariant())" >> $env:GITHUB_OUTPUT + Write-Output "Is production release: $isProductionRelease" - $versionSuffix = "${{ inputs.version_suffix }}" - if ($productionRelease) { - $versionSuffix = '' + $versionSuffix = "${{ inputs.custom_version_suffix }}" + if ($isProductionRelease){ + if ($versionSuffix -ne "") { + throw "The 'custom_version_suffix' setting cannot be used for production releases." + } } - elseif ($versionSuffix -eq "") { + else { + if ($versionSuffix -eq "") { $date = [datetime]::Today $dateString = $date.ToString('yyyyMMdd') $versionSuffix = "ci$dateString-${env:GITHUB_RUN_NUMBER}" - } - else { + } + else { $versionSuffix = "$versionSuffix-${env:GITHUB_RUN_NUMBER}" + } } Write-Output "product_version_suffix=$versionSuffix" >> $env:GITHUB_OUTPUT - Write-Output "Product Suffix: $versionSuffix" - - $buildNumber = ${env:GITHUB_RUN_NUMBER} - Write-Output "product_build_number=$buildNumber" >> $env:GITHUB_OUTPUT - Write-Output "Build Number: $buildNumber" + Write-Output "Product Version Suffix: $versionSuffix" - $productConfig = "${{ inputs.configuration }}" - if ($productConfig -eq "") { + $productConfig = "${{ inputs.custom_configuration }}" + if (($productConfig -eq "Default") -or ($productConfig -eq "")) { + if ($deployPackages){ $productConfig = "Release" + } + else { + $productConfig = "Debug" + } } Write-Output "product_configuration=$productConfig" >> $env:GITHUB_OUTPUT Write-Output "Product Configuration: $productConfig" - $buildParams = "-p:VersionSuffix=$versionSuffix -property:ReqnrollBuildNumber=$buildNumber" - Write-Output "Build Params: $buildParams" - if ($productionRelease) { - $buildParams = "$buildParams -property:AppInsightsInstrumentationKey=$env:APPINSIGHTS_KEY" - Write-Output "Main Build Params Updated for Production" + # Load Version + $buildPropsXml = [xml](Get-Content Directory.Build.props) + $mainVersion = $buildPropsXml.SelectSingleNode('//Project/PropertyGroup/ReqnrollMainVersion/text()').Value.Trim() + Write-Output "product_main_version=$mainVersion" >> $env:GITHUB_OUTPUT + Write-Output "Product Main Version: $mainVersion" + + # we use the GH build number as patch number + $patchVersion = ${env:GITHUB_RUN_NUMBER} + Write-Output "product_patch_version=$patchVersion" >> $env:GITHUB_OUTPUT + Write-Output "Product Patch Version: $patchVersion" + + $versionPrefix = "$mainVersion.$patchVersion" + Write-Output "product_version_prefix=$versionPrefix" >> $env:GITHUB_OUTPUT + Write-Output "Product Version Prefix: $versionPrefix" + + $fullVersion = $versionPrefix + if ($versionSuffix -ne "") { + $fullVersion = "$fullVersion-$versionSuffix" } + Write-Output "product_full_version=$fullVersion" >> $env:GITHUB_OUTPUT + Write-Output "Product Full Version: $fullVersion" + + - id: build_params + name: Calculate build parameters + shell: pwsh + env: + APPINSIGHTS_KEY: ${{ secrets.APPINSIGHTS_KEY }} + run: | + # Load version fields to variables + $versionSuffix = '${{ steps.versions.outputs.product_version_suffix }}' + $productConfig = '${{ steps.versions.outputs.product_configuration }}' + $patchVersion = '${{ steps.versions.outputs.product_patch_version }}' + $deployPackages = '${{ steps.versions.outputs.deploy_packages }}' -eq 'true' + + # Calculate 'build_params' + # configuration is handled in a special way during build, hence not included here + $buildParams = "-p:VersionSuffix=$versionSuffix -property:ReqnrollBuildNumber=$patchVersion" Write-Output "build_params=$buildParams" >> $env:GITHUB_OUTPUT + Write-Output "Build Params: $buildParams" + + # Calculate 'main_build_params' + $mainBuildParams = $buildParams + if ($deployPackages) { + $mainBuildParams = "$mainBuildParams -p:AppInsightsInstrumentationKey=$env:APPINSIGHTS_KEY" + Write-Output "Main Build Params Updated for Deployment" + } + Write-Output "main_build_params=$mainBuildParams" >> $env:GITHUB_OUTPUT + # Calculate 'test_params' $gitHubActionsLoggerSettings = '"GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true;annotations.titleFormat=[@traits.Category] @test;annotations.messageFormat=@error\n@trace"' - $testParams = "--no-build --verbosity normal -c $productConfig --logger trx --logger $gitHubActionsLoggerSettings -- RunConfiguration.CollectSourceInformation=true" + $testParams = "--no-build --verbosity normal -c $productConfig --logger trx --logger $gitHubActionsLoggerSettings -- RunConfiguration.CollectSourceInformation=true RunConfiguration.TreatNoTestsAsError=true" Write-Output "test_params=$testParams" >> $env:GITHUB_OUTPUT Write-Output "Test Params: $testParams" + - name: Update Changelog + shell: pwsh + run: | + $releaseDate = [System.DateTime]::Today.ToString("yyyy-MM-dd") + $newHeading = "# v${{ steps.versions.outputs.product_full_version }} - $releaseDate" + $content = [System.IO.File]::ReadAllText("CHANGELOG.md").Replace("# [vNext]",$newHeading) + [System.IO.File]::WriteAllText("CHANGELOG.md", $content) + - name: Restore dependencies run: dotnet restore - name: Build Connectors shell: pwsh run: | cd Connectors - .\build.ps1 -configuration ${{ steps.versions.outputs.product_configuration }} -additionalArgs "${{ steps.versions.outputs.build_params }}" - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.3 + .\build.ps1 -configuration ${{ steps.versions.outputs.product_configuration }} -additionalArgs "${{ steps.build_params.outputs.main_build_params }}" - name: Install Test Report Dependencies run: | dotnet add ./Tests/Reqnroll.VisualStudio.Specs/Reqnroll.VisualStudio.Specs.csproj package GitHubActionsTestLogger dotnet add ./Tests/Reqnroll.VisualStudio.Tests/Reqnroll.VisualStudio.Tests.csproj package GitHubActionsTestLogger dotnet add ./Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.Tests/Reqnroll.VisualStudio.ReqnrollConnector.Tests.csproj package GitHubActionsTestLogger dotnet add ./Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.V1.Tests/Reqnroll.VisualStudio.ReqnrollConnector.V1.Tests.csproj package GitHubActionsTestLogger + - name: Add MsBuild to PATH + uses: microsoft/setup-msbuild@v1.3 - name: Build - run: msbuild -restore -target:Rebuild -property:DeployExtension=false -property:Configuration=${{ steps.versions.outputs.product_configuration }} ${{ steps.versions.outputs.build_params }} + run: msbuild -restore -target:Rebuild -property:DeployExtension=false -property:Configuration=${{ steps.versions.outputs.product_configuration }} ${{ steps.build_params.outputs.main_build_params }} - name: Unit Tests - run: dotnet test ./Tests/Reqnroll.VisualStudio.Tests/Reqnroll.VisualStudio.Tests.csproj ${{ steps.versions.outputs.test_params }} - - name: Upload vsix + run: dotnet test ./Tests/Reqnroll.VisualStudio.Tests/Reqnroll.VisualStudio.Tests.csproj ${{ steps.build_params.outputs.test_params }} + - name: Review modified files + run: git status + - name: Upload VSIX uses: actions/upload-artifact@v4 with: - name: vsix - path: "Reqnroll.VisualStudio.Package/**/*.vsix" + name: vsix-v${{ steps.versions.outputs.product_full_version }} + if-no-files-found: error + path: "Reqnroll.VisualStudio.Package/bin/${{ steps.versions.outputs.product_configuration }}/net481/*.vsix" - uses: nuget/setup-nuget@v1.2 - name: Prepare Connector Tests shell: pwsh @@ -138,18 +209,122 @@ jobs: cd PackagesForTests nuget install packages.config - name: Connector Tests - run: dotnet test ./Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.Tests/Reqnroll.VisualStudio.ReqnrollConnector.Tests.csproj ${{ steps.versions.outputs.test_params }} + run: dotnet test ./Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.Tests/Reqnroll.VisualStudio.ReqnrollConnector.Tests.csproj ${{ steps.build_params.outputs.test_params }} - name: Connector V1 Tests - run: dotnet test ./Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.V1.Tests/Reqnroll.VisualStudio.ReqnrollConnector.V1.Tests.csproj ${{ steps.versions.outputs.test_params }} + run: dotnet test ./Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.V1.Tests/Reqnroll.VisualStudio.ReqnrollConnector.V1.Tests.csproj ${{ steps.build_params.outputs.test_params }} - name: Specs Tests run: > dotnet test ./Tests/Reqnroll.VisualStudio.Specs/Reqnroll.VisualStudio.Specs.csproj - --filter "Category!=quarantaine" - ${{ steps.versions.outputs.test_params }} + --filter "Category!=quarantine" + ${{ steps.build_params.outputs.test_params }} - name: Upload Test Result TRX Files uses: actions/upload-artifact@v4 - if: success() || failure() + if: always() with: - name: trx-test-results + name: build-trx-v${{ steps.versions.outputs.product_full_version }} + if-no-files-found: error path: "**/*.trx" - \ No newline at end of file + + release: + runs-on: windows-latest + needs: [build] + environment: production_environment + if: github.ref == 'refs/heads/main' && needs.build.outputs.deploy_packages == 'true' + permissions: + # Give the default GITHUB_TOKEN write permission to commit and push the + # added or changed files to the repository. + contents: write + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 # avoid shallow clone git commit + ref: ${{ github.head_ref }} + ssh-key: ${{secrets.RELEASE_GIT_SSH_KEY}} + - uses: actions/download-artifact@v4 + with: + name: vsix-v${{ needs.build.outputs.product_full_version }} + path: release_packages + + - name: Verify VSIX Deploy settings + shell: pwsh + run: | + Write-Output "Deploying v${{ needs.build.outputs.product_full_version }} (v${{ needs.build.outputs.product_main_version }}) package to Visual Studio Marketplace" + ls ${{ github.workspace }}/release_packages + $isProductionRelease = '${{ needs.build.outputs.is_production_release }}' -eq 'true' + if (-not $isProductionRelease) { + throw "Preview releases are currently not supported. (The 'is_production_release' must be set.)" + } + + - name: Deploy VSIX packages + uses: CodingWithCalvin/GHA-VSMarketplacePublisher@v2.0.0 + with: + marketplace-pat: ${{ secrets.MARKETPLACE_PUBLISH_PAT }} + publish-manifest-path: ${{ github.workspace }}/.marketplace/publishManifest.json + vsix-path: ${{ github.workspace }}/release_packages/Reqnroll.VisualStudio.Package.v${{ needs.build.outputs.product_version_prefix }}.vsix + + - name: Calculate Next Version + if: needs.build.outputs.is_production_release == 'true' + id: next_version + shell: pwsh + run: | + $mainVersion = "${{ needs.build.outputs.product_main_version }}" + $majorVersion = &{$mainVersion -match '^\d+' > $null; $matches[0]} + $minorVersion = &{$mainVersion -match '\d+$' > $null; $matches[0]} + $nextMinor = [int]$minorVersion + 1 + $nextMainVersion = "$majorVersion.$nextMinor" + Write-Output "product_next_main_version=$nextMainVersion" >> $env:GITHUB_OUTPUT + Write-Output "Product Next Main Version: $nextMainVersion" + + - name: Bump Version + if: needs.build.outputs.is_production_release == 'true' + shell: pwsh + run: | + [System.IO.File]::WriteAllText("Directory.Build.props", [System.IO.File]::ReadAllText("Directory.Build.props").Replace("${{ needs.build.outputs.product_main_version }}", "${{ steps.next_version.outputs.product_next_main_version }}")) + $vsTemplates = Get-ChildItem -Path . -File -Recurse -Filter '*.vstemplate' + foreach ($vsTemplate in $vsTemplates) { + [System.IO.File]::WriteAllText($vsTemplate.FullName, [System.IO.File]::ReadAllText($vsTemplate.FullName).Replace("Version=${{ needs.build.outputs.product_main_version }}.0.0", "Version=${{ steps.next_version.outputs.product_next_main_version }}.0.0")) + } + + - name: Update Changelog + if: needs.build.outputs.is_production_release == 'true' + id: changelog + shell: pwsh + run: | + $newHeading = "# [vNext]$([Environment]::NewLine)$([Environment]::NewLine)## Improvements:$([Environment]::NewLine)$([Environment]::NewLine)## Bug fixes:$([Environment]::NewLine)$([Environment]::NewLine)*Contributors of this release (in alphabetical order):* $([Environment]::NewLine)$([Environment]::NewLine)" + $releaseDate = [System.DateTime]::Today.ToString("yyyy-MM-dd") + $releaseTitle = "v${{ needs.build.outputs.product_full_version }} - $releaseDate" + $newHeading = $newHeading + "# $releaseTitle" + $content = [System.IO.File]::ReadAllText("CHANGELOG.md").Replace("# [vNext]",$newHeading) + [System.IO.File]::WriteAllText("CHANGELOG.md", $content) + Write-Output "New Heading:" + Write-Output $newHeading + + # calculate release notes + $match = [System.Text.RegularExpressions.Regex]::Match($content, "(?ms)^# .*?^# (?[^\r\n]*?)\s*$\s*(?<notes>.*?)\s*(?:^# |\Z)") + $releaseNotes = $(if ($match.Success) { $match.Groups["notes"].Value } else { "N/A" }) + [System.IO.File]::WriteAllText("release_notes.txt", $releaseNotes) + Write-Output "release_title=$releaseTitle" >> $env:GITHUB_OUTPUT + Write-Output "release_notes_file=release_notes.txt" >> $env:GITHUB_OUTPUT + + - name: Update changes in GitHub repository + if: needs.build.outputs.is_production_release == 'true' + run: | + git status + git config --global user.name 'Reqnroll CI' + git config --global user.email 'ci@reqnroll.net' + git tag v${{ needs.build.outputs.product_full_version }} + # git push origin tag v${{ needs.build.outputs.product_full_version }} + git add -u + git commit -m '[automated commit] bump version after release of ${{ needs.build.outputs.product_full_version }}' + # git push + + - name: Create GitHub Release + if: needs.build.outputs.is_production_release == 'true' + env: + GH_TOKEN: ${{ github.token }} + run: | + gh release create "v${{ needs.build.outputs.product_full_version }}" \ + --verify-tag \ + --title="${{ steps.changelog.outputs.release_title }}" \ + --notes-file="${{ steps.changelog.outputs.release_notes_file }}" diff --git a/.marketplace/publishManifest.json b/.marketplace/publishManifest.json index 7b07c34f..a717fbb2 100644 --- a/.marketplace/publishManifest.json +++ b/.marketplace/publishManifest.json @@ -6,7 +6,7 @@ }, "overview": "overview.md", "priceCategory": "free", - "publisher": "reqnroll", + "publisher": "Reqnroll", "private": false, "qna": true, "repo": "https://github.com/reqnroll/Reqnroll.VisualStudio" diff --git a/.vscode/settings.json b/.vscode/settings.json index 2bbfadf9..d7692fd8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,6 @@ { "cSpell.words": [ "Reqnroll" - ] + ], + "markdown.extension.toc.updateOnSave": false } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 036fd792..15c6c2fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ *Added support for .NET 9 through the Visual Studio extension. -*Contributors of this release (in alphabetical order):* @UL-ChrisGlew +*Contributors of this release (in alphabetical order):* @gasparnagy, @UL-ChrisGlew # v2024.6.176 - 2024-11-08 diff --git a/RELEASING.md b/RELEASING.md new file mode 100644 index 00000000..0864de24 --- /dev/null +++ b/RELEASING.md @@ -0,0 +1,50 @@ +# Releasing + +This document describes how to make a release using GitHub Actions. + +There are two parts to making a release: + +* [Prepare the release](#prepare-the-release) +* [Make the release](#make-the-release) + +If you're making a major or minor release it is recommended to discuss it with the other contributors upfront (e.g. on Discord). + +## Prepare the release + +Anyone with permission to push to the `main` branch can prepare a release. + +1. Add new information to `CHANGELOG.md`. Ideally the `CHANGELOG.md` should be up-to-date, but sometimes there will be accidental omissions when merging PRs. + * Use `git log --format=format:"* %s (%an)" --reverse <last-version-tag>..HEAD` to list all commits since the last release. + * Add changelog details under the `# [vNext]` heading; the release process will update this heading when it makes the release +1. Check & update contributors list (if applicable) + * List recent contributors: + ``` + git log --format=format:"%an <%ae>" --reverse <last-version-tag>..HEAD | grep -vEi "(renovate|dependabot|Snyk)" | sort| uniq -i + ``` + * Update contributors if necessary at the `Contributors of this release` part of the `# [vNext]` heading +1. The Visual Studio extension releases are versioned sequentially within a year, with the format `YYYY.SEQ.BUILD` (e.g. `2024.5.182`). In the beginning of the year, the year number must be updated and the sequence number has to be reset to `1`. When preparing the release you just need to double-check if the version is correct. You can find the current version number in the `Directory.Build.props` file. + +## Make the release + +Only people in group [release-managers](https://github.com/orgs/reqnroll/teams/release-managers) can make releases and only from the `main` branch. + +### Making a preview release + +Making preview releases are currently not supported, but each build contains a deploy target with the `vsix` installation file included. Installing those could be used to test preview versions. + +### Making a production release + +Production releases (or just releases) are intended to use for any users. Their version number does not contain a version suffix. + +To release such a preview release, the following steps has to be done: + +1. Open the CI workflow at GitHub: https://github.com/reqnroll/Reqnroll.VisualStudio/actions/workflows/ci.yml +1. Choose the "Run workflow" button to trigger the release with the following settings: + * `deploy_packages`: checked + * `is_production_release`: checked + * `custom_version_suffix`: leave it empty + * `custom_configuration`: leave it on default +1. The CI workflow runs and ideally passes all core and testing jobs, but will stop for approval before running the `release` job. +1. Make sure everything is OK. You can even download the packages to be published for a smoke test if necessary. +1. If everything is fine, approve the deployment job. +1. The job will publish the packages, tag the current commit and create a new commit with the updated version number and changelog header. diff --git a/Reqnroll.VisualStudio.ItemTemplates/FeatureFile/FeatureFile_CSharp.vstemplate b/Reqnroll.VisualStudio.ItemTemplates/FeatureFile/FeatureFile_CSharp.vstemplate index 6f6b6a6d..1939a6ab 100644 --- a/Reqnroll.VisualStudio.ItemTemplates/FeatureFile/FeatureFile_CSharp.vstemplate +++ b/Reqnroll.VisualStudio.ItemTemplates/FeatureFile/FeatureFile_CSharp.vstemplate @@ -1,4 +1,4 @@ -<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item"> +<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item"> <TemplateData> <DefaultName>Feature.feature</DefaultName> <Name>Feature File for Reqnroll</Name> diff --git a/Reqnroll.VisualStudio.ItemTemplates/FeatureFile/FeatureFile_VB.vstemplate b/Reqnroll.VisualStudio.ItemTemplates/FeatureFile/FeatureFile_VB.vstemplate index cae1fb09..bd865978 100644 --- a/Reqnroll.VisualStudio.ItemTemplates/FeatureFile/FeatureFile_VB.vstemplate +++ b/Reqnroll.VisualStudio.ItemTemplates/FeatureFile/FeatureFile_VB.vstemplate @@ -1,4 +1,4 @@ -<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item"> +<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item"> <TemplateData> <DefaultName>Feature.feature</DefaultName> <Name>Feature File for Reqnroll</Name> diff --git a/Reqnroll.VisualStudio.ItemTemplates/Hooks/Hooks_CSharp.vstemplate b/Reqnroll.VisualStudio.ItemTemplates/Hooks/Hooks_CSharp.vstemplate index 1cb0b8d6..91dcacd7 100644 --- a/Reqnroll.VisualStudio.ItemTemplates/Hooks/Hooks_CSharp.vstemplate +++ b/Reqnroll.VisualStudio.ItemTemplates/Hooks/Hooks_CSharp.vstemplate @@ -1,4 +1,4 @@ -<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item"> +<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item"> <TemplateData> <DefaultName>Hooks.cs</DefaultName> <Name>Reqnroll Hooks (event bindings)</Name> diff --git a/Reqnroll.VisualStudio.ItemTemplates/Hooks/Hooks_VB.vstemplate b/Reqnroll.VisualStudio.ItemTemplates/Hooks/Hooks_VB.vstemplate index c4a88b10..b74c2da0 100644 --- a/Reqnroll.VisualStudio.ItemTemplates/Hooks/Hooks_VB.vstemplate +++ b/Reqnroll.VisualStudio.ItemTemplates/Hooks/Hooks_VB.vstemplate @@ -1,4 +1,4 @@ -<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item"> +<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item"> <TemplateData> <DefaultName>Hooks.cs</DefaultName> <Name>Reqnroll Hooks (event bindings)</Name> diff --git a/Reqnroll.VisualStudio.ItemTemplates/ReqnrollConfig/ReqnrollConfig_CSharp.vstemplate b/Reqnroll.VisualStudio.ItemTemplates/ReqnrollConfig/ReqnrollConfig_CSharp.vstemplate index 9309472a..7b87cfee 100644 --- a/Reqnroll.VisualStudio.ItemTemplates/ReqnrollConfig/ReqnrollConfig_CSharp.vstemplate +++ b/Reqnroll.VisualStudio.ItemTemplates/ReqnrollConfig/ReqnrollConfig_CSharp.vstemplate @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <VSTemplate Version="3.0.0" Type="Item" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005"> <TemplateData> <DefaultName>reqnroll.json</DefaultName> diff --git a/Reqnroll.VisualStudio.ItemTemplates/ReqnrollConfig/ReqnrollConfig_VB.vstemplate b/Reqnroll.VisualStudio.ItemTemplates/ReqnrollConfig/ReqnrollConfig_VB.vstemplate index b0fa807b..5755815d 100644 --- a/Reqnroll.VisualStudio.ItemTemplates/ReqnrollConfig/ReqnrollConfig_VB.vstemplate +++ b/Reqnroll.VisualStudio.ItemTemplates/ReqnrollConfig/ReqnrollConfig_VB.vstemplate @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <VSTemplate Version="3.0.0" Type="Item" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005"> <TemplateData> <DefaultName>reqnroll.json</DefaultName> diff --git a/Reqnroll.VisualStudio.Package/Reqnroll.VisualStudio.Package.csproj b/Reqnroll.VisualStudio.Package/Reqnroll.VisualStudio.Package.csproj index aeff3c0f..3b6ae380 100644 --- a/Reqnroll.VisualStudio.Package/Reqnroll.VisualStudio.Package.csproj +++ b/Reqnroll.VisualStudio.Package/Reqnroll.VisualStudio.Package.csproj @@ -99,19 +99,6 @@ <Import Project="..\Connectors\DeploymentAssets.props" /> - <Target Name="ReplaceVersions" AfterTargets="GetBuildVersion" BeforeTargets="BeforeCompile"> - <ItemGroup> - <TemplateFiles Include="$(MSBuildThisFileDirectory)..\Reqnroll.VisualStudio.ItemTemplates\**\*.vstemplate" /> - <TemplateFiles Include="$(MSBuildThisFileDirectory)..\Reqnroll.VisualStudio.ProjectTemplate\**\*.vstemplate" /> - <VsChangeLog Include="$(MSBuildThisFileDirectory)..\CHANGELOG.md" /> - </ItemGroup> - - <WriteLinesToFile File="%(TemplateFiles.FullPath)" Lines="$([System.Text.RegularExpressions.Regex]::Replace($([System.IO.File]::ReadAllText(%(TemplateFiles.FullPath))), 'Version=(\d+).(\d+).(\d+).(\d+),', 'Version=$(AssemblyVersion),'))" Overwrite="true" Encoding="UTF-8" /> - - <WriteLinesToFile Condition=" '$(Configuration)' == 'Release' " File="%(VsChangeLog.FullPath)" Lines="$([System.IO.File]::ReadAllText(%(VsChangeLog.FullPath)).Replace('[vNext]','v$(Version) - $([System.DateTime]::Now.ToString('yyyy-MM-dd'))'))" Overwrite="true" Encoding="UTF-8" /> - - </Target> - <!-- needed to include version in source.extension.vsixmanifest --> <Target Name="GetVsixVersion" Returns="$(ReqnrollPackageVersion)" BeforeTargets="BeforeCompile" AfterTargets="GetBuildVersion"> <Message Text="VSIX Version is set to: $(ReqnrollPackageVersion)" /> diff --git a/Reqnroll.VisualStudio.ProjectTemplate/Reqnroll.VisualStudio.ProjectTemplate.vstemplate b/Reqnroll.VisualStudio.ProjectTemplate/Reqnroll.VisualStudio.ProjectTemplate.vstemplate index 22d9aa59..f2a07474 100644 --- a/Reqnroll.VisualStudio.ProjectTemplate/Reqnroll.VisualStudio.ProjectTemplate.vstemplate +++ b/Reqnroll.VisualStudio.ProjectTemplate/Reqnroll.VisualStudio.ProjectTemplate.vstemplate @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <VSTemplate Version="3.0.0" Type="Project" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" xmlns:sdk="http://schemas.microsoft.com/developer/vstemplate-sdkextension/2010"> <TemplateData> <Name>Reqnroll Project</Name> diff --git a/Reqnroll.VisualStudio.sln b/Reqnroll.VisualStudio.sln index 3ea7d675..f65faea5 100644 --- a/Reqnroll.VisualStudio.sln +++ b/Reqnroll.VisualStudio.sln @@ -57,6 +57,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Repo", "Repo", "{31ACD27E-7 Directory.Build.targets = Directory.Build.targets LICENSE = LICENSE README.md = README.md + RELEASING.md = RELEASING.md EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Reqnroll.VisualStudio.UI.Tester", "Tests\Reqnroll.VisualStudio.UI.Tester\Reqnroll.VisualStudio.UI.Tester.csproj", "{2A412F65-68C7-4A5D-AFCF-74E928C40C21}" diff --git a/Tests/Reqnroll.VisualStudio.Specs/Features/Editor/SyntaxColoring.feature b/Tests/Reqnroll.VisualStudio.Specs/Features/Editor/SyntaxColoring.feature index 019342eb..a06559b8 100644 --- a/Tests/Reqnroll.VisualStudio.Specs/Features/Editor/SyntaxColoring.feature +++ b/Tests/Reqnroll.VisualStudio.Specs/Features/Editor/SyntaxColoring.feature @@ -369,7 +369,7 @@ Scenario: Highlights Scenario Outline placeholders Rule: Language configuration changes are applied to open feature file editors # this scenario is flaky on CI -@quarantaine +@quarantine Scenario: Default feature file language was changed Given there is a non-Reqnroll project scope And the reqnroll.json configuration file contains diff --git a/Tests/Reqnroll.VisualStudio.Specs/Features/Editor/SyntaxErrors.feature b/Tests/Reqnroll.VisualStudio.Specs/Features/Editor/SyntaxErrors.feature index ad543cd2..16757aed 100644 --- a/Tests/Reqnroll.VisualStudio.Specs/Features/Editor/SyntaxErrors.feature +++ b/Tests/Reqnroll.VisualStudio.Specs/Features/Editor/SyntaxErrors.feature @@ -7,7 +7,7 @@ Rules: * Highlights semantic errors # this scenario is flaky on CI -@quarantaine +@quarantine Scenario: Highlights syntax errors Given there is a Reqnroll project scope When the following feature file is opened in the editor