diff --git a/.github/workflows/prepare_release_pr.yml b/.github/workflows/prepare_release_pr.yml new file mode 100644 index 00000000..8965775c --- /dev/null +++ b/.github/workflows/prepare_release_pr.yml @@ -0,0 +1,40 @@ +name: Create Release PR + +on: + workflow_dispatch + +permissions: + contents: write + pull-requests: write + +jobs: + bump_version: + runs-on: windows-2022 + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Calculate next version + id: version + run: | + $newVer = .\tools\get-next-main-version.ps1 + echo "NEW_VERSION=$newVer" >> $env:GITHUB_ENV + .\tools\set-version.ps1 $newVer -UpdateAssemblyAndFileVersion + + git config user.name "github-actions" + git config user.email "github-actions@github.com" + + git checkout -b release/$newVer + git commit -am "Release $newVer" + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v6 + with: + branch: release/${{ env.NEW_VERSION }} + base: master + title: "Release ${{ env.NEW_VERSION }}" + body: "Automated release PR." + delete-branch: true + merge-method: rebase \ No newline at end of file diff --git a/.github/workflows/publish_nuget.yml b/.github/workflows/publish_nuget.yml new file mode 100644 index 00000000..ab5693a3 --- /dev/null +++ b/.github/workflows/publish_nuget.yml @@ -0,0 +1,45 @@ +name: Publish + +on: + push: + tags: + - 'v*' + +permissions: + contents: write + packages: write + +jobs: + build_and_publish: + runs-on: windows-2022 + + steps: + - uses: actions/checkout@v4 + + - name: Set up .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 2.1.x + 6.0.x + 8.0.x + 9.0.x + + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v2 + + - name: Run tests + run: dotnet test -c Release src/UglyToad.PdfPig.sln + + - name: Build package + run: dotnet pack -c Release -o package tools/UglyToad.PdfPig.Package/UglyToad.PdfPig.Package.csproj -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg + + - name: Publish to NuGet + run: dotnet nuget push package/*.nupkg --api-key ${{secrets.NUGET_API_KEY}} --source https://api.nuget.org/v3/index.json + + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ github.ref_name }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/publish_release.yml b/.github/workflows/publish_release.yml deleted file mode 100644 index 7e47f569..00000000 --- a/.github/workflows/publish_release.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Release Publish - -on: - release: - types: [published] - -permissions: - contents: write - packages: write - -jobs: - build_and_publish_release: - runs-on: windows-2022 - - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up dotnet core - uses: actions/setup-dotnet@v4 - with: - dotnet-version: | - 2.1.x - 6.0.x - 8.0.x - 9.0.x - - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v2 - - - name: Run tests - run: dotnet test -c Release src/UglyToad.PdfPig.sln - - - name: Build package - run: dotnet pack -c Release -o package tools/UglyToad.PdfPig.Package/UglyToad.PdfPig.Package.csproj -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg - - - name: Publish to NuGet - run: dotnet nuget push **/*.nupkg --api-key ${{secrets.NUGET_API_KEY}} --source https://api.nuget.org/v3/index.json - - - name: Increment version after release - run: | - $newVer = .\tools\get-next-main-version.ps1 - .\tools\set-version.ps1 $newVer -UpdateAssemblyAndFileVersion - git config user.name "github-actions" - git config user.email "github-actions@github.com" - - git fetch origin master - git checkout master - git pull - - git commit -am "Increment version to $newVer" - git push \ No newline at end of file diff --git a/.github/workflows/tag_release.yml b/.github/workflows/tag_release.yml new file mode 100644 index 00000000..a6e57f62 --- /dev/null +++ b/.github/workflows/tag_release.yml @@ -0,0 +1,43 @@ +name: Tag Release + +on: + push: + branches: + - master + +permissions: + contents: write + +jobs: + tag_if_version_changed: + if: startsWith(github.event.head_commit.message, 'Release ') + runs-on: windows-2022 + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Detect version change + id: versioncheck + run: | + git fetch origin master --depth=2 + + $diff = git diff HEAD^ HEAD -- tools/UglyToad.PdfPig.Package/UglyToad.PdfPig.Package.csproj + + if ($diff -match "") { + $version = (Select-String -Path tools/UglyToad.PdfPig.Package/UglyToad.PdfPig.Package.csproj -Pattern "(.*)").Matches.Groups[1].Value + echo "version=$version" >> $env:GITHUB_OUTPUT + echo "create=true" >> $env:GITHUB_OUTPUT + } else { + echo "create=false" >> $env:GITHUB_OUTPUT + } + + - name: Create tag + if: steps.versioncheck.outputs.create == 'true' + run: | + git config user.name "github-actions" + git config user.email "github-actions@github.com" + + git tag "v${{ steps.versioncheck.outputs.version }}" + git push origin "v${{ steps.versioncheck.outputs.version }}"