diff --git a/.github/workflows/wf-build-release-ci.yml b/.github/workflows/wf-build-release-ci.yml index a8244c9d..04634c3c 100644 --- a/.github/workflows/wf-build-release-ci.yml +++ b/.github/workflows/wf-build-release-ci.yml @@ -4,7 +4,6 @@ on: push: branches: - master - workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -16,11 +15,11 @@ jobs: env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 name: Checkout Code - name: Install additional .NET SDKs - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: | 2.1.x @@ -69,46 +68,27 @@ jobs: pack-push-ci: needs: [test, additional-tests] runs-on: windows-latest - env: - GH_PKG_SEC: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 name: Checkout Code - name: Install .NET SDK - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: 8.0.x + source-url: https://nuget.pkg.github.com/Shane32/index.json + env: + NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} - - name: Restore dependencies - run: dotnet restore - - - name: Build library - run: dotnet build -c Release --no-restore - - - name: Get assembly version QRCoder - run: echo "ASSEM_VER=$([Reflection.Assembly]::Loadfile( $(-join($pwd,"\QRCoder\bin\Release\net40\QRCoder.dll"))).GetName().version.ToString())" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append - - - name: Clean assembly version QRCoder - run: echo "ASSEM_VER_SHT=$($env:ASSEM_VER.substring(0, $env:ASSEM_VER.lastIndexOf(".")))" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append + - name: Build NuGet packages + shell: bash + run: dotnet pack -c Release -p:VersionSuffix=$GITHUB_RUN_NUMBER -o out - - name: Calculate ci suffix QRCoder - run: echo "CI_TAG=-ci-$([datetime]::now.tostring("yyyyMMddHHmmss"))" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append - - - name: Get assembly version QRCoder.Xaml - run: echo "ASSEM_VER_XAML=$([Reflection.Assembly]::Loadfile( $(-join($pwd,"\QRCoder.Xaml\bin\Release\net40\QRCoder.Xaml.dll"))).GetName().version.ToString())" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append - - - name: Clean assembly version QRCoder.Xaml - run: echo "ASSEM_VER_SHT_XAML=$($env:ASSEM_VER_XAML.substring(0, $env:ASSEM_VER_XAML.lastIndexOf(".")))" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append - - - name: Calculate ci suffix QRCoder.Xaml - run: echo "CI_TAG_XAML=-ci-$([datetime]::now.tostring("yyyyMMddHHmmss"))" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append - - - name: Build QRCoder NuGet package - run: dotnet pack QRCoder\QRCoder.csproj -c Release --no-build /p:PackageVersion="$env:ASSEM_VER_SHT$env:CI_TAG" /p:PackageReleaseNotes="- This is an automatic CI build ($env:CI_TAG)`n- Please don't use it in productive environments!" - - - name: Build QRCoder.Xaml NuGet package - run: dotnet pack QRCoder.Xaml\QRCoder.Xaml.csproj -c Release --no-build /p:PackageVersion="$env:ASSEM_VER_SHT_XAML$env:CI_TAG_XAML" /p:PackageReleaseNotes="- This is an automatic CI build ($env:CI_TAG_XAML)`n- Please don't use it in productive environments!" + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: Nuget packages + path: out/* - - name: Publish QRCoder and QRCoder.Xaml to Github packages - run: dotnet nuget push "**/*.nupkg" --no-symbols --skip-duplicate --api-key $env:GH_PKG_SEC --source https://nuget.pkg.github.com/Shane32/index.json + - name: Publish packages to Github packages + run: dotnet nuget push "out/*" -k ${{secrets.GITHUB_TOKEN}} diff --git a/.github/workflows/wf-build-release.yml b/.github/workflows/wf-build-release.yml index ad7a5f21..52ceec6f 100644 --- a/.github/workflows/wf-build-release.yml +++ b/.github/workflows/wf-build-release.yml @@ -1,195 +1,72 @@ -name: Build, test, pack, push (Release) +name: Build, pack, push (Release) + on: - workflow_dispatch: - inputs: - releaseNotes: - description: 'Release Notes (use `n for new line)' - required: true -jobs: - build: - runs-on: windows-latest - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true + release: + types: + - published + +jobs: + pack-push-ci: + runs-on: windows-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 name: Checkout Code - - name: Install additional .NET SDKs - uses: actions/setup-dotnet@v4 + - name: Check github.ref starts with 'refs/tags/' + if: ${{ !startsWith(github.ref, 'refs/tags/') }} + shell: bash + run: | + echo Error! github.ref does not start with 'refs/tags' + echo github.ref: ${{ github.ref }} + exit 1 + + - name: Set version number environment variable + env: + github_ref: ${{ github.ref }} + shell: bash + run: | + version="${github_ref:10}" + echo version=$version + echo "version=$version" >> $GITHUB_ENV + + - name: Install .NET SDK + uses: actions/setup-dotnet@v5 with: - dotnet-version: | - 1.0.x - 2.0.x - 5.0.x - 6.0.x - 8.0.x + dotnet-version: 8.0.x + source-url: https://api.nuget.org/v3/index.json + env: + NUGET_AUTH_TOKEN: ${{secrets.NUGET_AUTH_TOKEN}} - - name: Restore NuGet Packages - run: dotnet restore - - - name: Build library - run: dotnet build -c Release --no-restore + - name: Build NuGet packages + shell: bash + run: dotnet pack -c Release -p:Version=$version -o out - name: Upload artifacts uses: actions/upload-artifact@v4 with: - name: Compiled project - path: ${{ github.workspace }} - - test: - needs: build - runs-on: windows-latest - steps: - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - name: Compiled project - path: ${{ github.workspace }} - - - name: Install additional .NET SDKs - uses: actions/setup-dotnet@v4 - with: - dotnet-version: | - 1.0.x - 2.0.x - 5.0.x - 6.0.x - 8.0.x - - - name: Run test .NET 3.5 - working-directory: QRCoderTests - run: dotnet test -c Release -f net35 --nologo --no-build # No coverage for NET3.5 because of bug in combination with Coverlet+Stronh naming - - - name: Run test .NET 4.52 - working-directory: QRCoderTests - run: dotnet test -c Release -f net452 --nologo --no-build # No coverage for NET4.5 because of bug in combination with Coverlet+Strong naming - - - name: Run test .NET Core 1.1 - working-directory: QRCoderTests - run: dotnet test -c Release -f netcoreapp1.1 --nologo # No coverage for .NETCORE 1.1 because Coverlet doesn't support it https://github.com/coverlet-coverage/coverlet/issues/466 - - - name: Run test .NET Core 2.0 - working-directory: QRCoderTests - run: dotnet test -c Release -f netcoreapp2.0 --nologo /p:CollectCoverage=true /p:CoverletOutputFormat=opencover - - - name: Run test .NET 5.0 - working-directory: QRCoderTests - run: dotnet test -c Release -f net5.0 --nologo --no-build /p:CollectCoverage=true /p:CoverletOutputFormat=opencover - - - name: Run test .NET 5.0 Windows - working-directory: QRCoderTests - run: dotnet test -c Release -f net5.0-windows --nologo --no-build /p:CollectCoverage=true /p:CoverletOutputFormat=opencover - - - name: Run test .NET 6.0 - working-directory: QRCoderTests - run: dotnet test -c Release -f net6.0 --nologo --no-build /p:CollectCoverage=true /p:CoverletOutputFormat=opencover - - - name: Run test .NET 6.0 Windows - working-directory: QRCoderTests - run: dotnet test -c Release -f net6.0-windows --nologo --no-build /p:CollectCoverage=true /p:CoverletOutputFormat=opencover - - - name: Run API approval tests - working-directory: QRCoderApiTests - run: dotnet test -c Release --nologo --no-build - - - name: Codecov update netcoreapp2.0 - uses: codecov/codecov-action@v4 - with: - token: ${{ secrets.CODECOV_TOKEN }} - disable_search: true - fail_ci_if_error: true - files: ./QRCoderTests/coverage.netcoreapp2.0.opencover.xml - flags: netcoreapp2.0 + name: Nuget packages + path: out/* - - name: Codecov update net5.0 - uses: codecov/codecov-action@v4 - with: - token: ${{ secrets.CODECOV_TOKEN }} - disable_search: true - fail_ci_if_error: true - files: ./QRCoderTests/coverage.net5.0.opencover.xml - flags: net5.0 + - name: Publish packages to Github packages + run: dotnet nuget push "out/*" -k ${{secrets.NUGET_AUTH_TOKEN}} - - name: Codecov update net5.0-windows - uses: codecov/codecov-action@v4 - with: - token: ${{ secrets.CODECOV_TOKEN }} - disable_search: true - fail_ci_if_error: true - files: ./QRCoderTests/coverage.net5.0-windows.opencover.xml - flags: net5.0-windows - - - name: Codecov update net6.0 - uses: codecov/codecov-action@v4 - with: - token: ${{ secrets.CODECOV_TOKEN }} - disable_search: true - fail_ci_if_error: true - files: ./QRCoderTests/coverage.net5.0.opencover.xml - flags: net6.0 - - - name: Codecov update net6.0-windows - uses: codecov/codecov-action@v4 - with: - token: ${{ secrets.CODECOV_TOKEN }} - disable_search: true - fail_ci_if_error: true - files: ./QRCoderTests/coverage.net5.0-windows.opencover.xml - flags: net6.0-windows - - pack-push-release: - needs: test - runs-on: windows-latest - env: - GH_PKG_SEC: ${{ secrets.GITHUB_TOKEN }} - steps: - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - name: Compiled project - path: ${{ github.workspace }} - - - name: Install additional .NET SDKs - uses: actions/setup-dotnet@v4 - with: - dotnet-version: | - 1.0.x - 2.0.x - 5.0.x - 6.0.x - 8.0.x - - - name: Restore dependencies - run: dotnet restore - - - name: Get assembly version QRCoder - run: echo "ASSEM_VER=$([Reflection.Assembly]::Loadfile( $(-join($pwd,"\QRCoder\bin\Release\net40\QRCoder.dll"))).GetName().version.ToString())" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append - - - name: Clean assembly version QRCoder - run: echo "ASSEM_VER_SHT=$($env:ASSEM_VER.substring(0, $env:ASSEM_VER.lastIndexOf(".")))" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append - - - name: Get assembly version QRCoder.Xaml - run: echo "ASSEM_VER_XAML=$([Reflection.Assembly]::Loadfile( $(-join($pwd,"\QRCoder.Xaml\bin\Release\net40\QRCoder.Xaml.dll"))).GetName().version.ToString())" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append - - - name: Clean assembly version QRCoder.Xaml - run: echo "ASSEM_VER_SHT_XAML=$($env:ASSEM_VER_XAML.substring(0, $env:ASSEM_VER_XAML.lastIndexOf(".")))" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append - - - name: Build QRCoder NuGet package - run: dotnet pack QRCoder\QRCoder.csproj -c Release --no-build /p:PackageVersion="$env:ASSEM_VER_SHT" /p:PackageReleaseNotes="${{ github.event.inputs.releaseNotes }}" - - - name: Build QRCoder.Xaml NuGet package - run: dotnet pack QRCoder.Xaml\QRCoder.Xaml.csproj -c Release --no-build /p:PackageVersion="$env:ASSEM_VER_SHT_XAML" /p:PackageReleaseNotes="${{ github.event.inputs.releaseNotes }}" - - - name: Publish QRCoder and QRCoder.Xaml to Github packages - run: dotnet nuget push "**/*.nupkg" --no-symbols --skip-duplicate --api-key $env:GH_PKG_SEC --source https://nuget.pkg.github.com/codebude/index.json - - - clean: - needs: [build, test, pack-push-release] - if: always() - runs-on: windows-latest - steps: - - name: Delete artifacts - uses: GeekyEggo/delete-artifact@v5 + - name: Upload Nuget packages as release artifacts + uses: actions/github-script@v8 with: - name: Compiled project + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + console.log('environment', process.versions); + const fs = require('fs').promises; + const { repo: { owner, repo }, sha } = context; + + for (let file of await fs.readdir('out')) { + console.log('uploading', file); + + await github.rest.repos.uploadReleaseAsset({ + owner, + repo, + release_id: ${{ github.event.release.id }}, + name: file, + data: await fs.readFile(`out/${file}`) + }); + } diff --git a/Directory.Build.props b/Directory.Build.props index e56c95ac..50156e31 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -10,8 +10,8 @@ - - 1.6.1 + + 1.6.1-preview 12 enable false diff --git a/QRCoder.Xaml/QRCoder.Xaml.csproj b/QRCoder.Xaml/QRCoder.Xaml.csproj index 06c1b8ff..e023aff2 100644 --- a/QRCoder.Xaml/QRCoder.Xaml.csproj +++ b/QRCoder.Xaml/QRCoder.Xaml.csproj @@ -29,7 +29,7 @@ - +