diff --git a/.github/workflows/cmake-single-platform.yml b/.github/workflows/build-and-publish.yml similarity index 53% rename from .github/workflows/cmake-single-platform.yml rename to .github/workflows/build-and-publish.yml index 5c75fb4b2..4919ee3c9 100644 --- a/.github/workflows/cmake-single-platform.yml +++ b/.github/workflows/build-and-publish.yml @@ -1,30 +1,45 @@ name: Build & Publish +env: + BUILD_TYPE: Release + +# Remove default permissions of GITHUB_TOKEN for security +# https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs +permissions: {} + on: push: paths-ignore: - "docfx/**" - branches: ["main", "dev"] + branches: ["main"] + tags: + - "v*" pull_request: - branches: ["main", "dev"] - -env: - BUILD_TYPE: Release + branches: ["main"] jobs: setup: - permissions: - contents: write runs-on: ubuntu-latest outputs: - buildnumber: ${{ steps.buildnumber.outputs.build_number }} + gitversion_semver: ${{ steps.gitversion.outputs.semVer }} + gitversion_fullsemver: ${{ steps.gitversion.outputs.fullSemVer }} + gitversion_assemblysemver: ${{ steps.gitversion.outputs.assemblySemVer }} + gitversion_informationalversion: ${{ steps.gitversion.outputs.informationalVersion }} steps: - - name: Generate build number - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - id: buildnumber - uses: onyxmueller/build-tag-number@v1 - with: - token: ${{secrets.github_token}} + - name: Install GitVersion + uses: gittools/actions/gitversion/setup@v1 + with: + versionSpec: 6.0.x + + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Execute GitVersion + id: gitversion + uses: gittools/actions/gitversion/execute@v1 + with: + useConfigFile: true build_windows: needs: setup @@ -32,16 +47,9 @@ jobs: steps: - name: Prepare env shell: bash - run: echo "GITHUB_SHA_SHORT=${GITHUB_SHA::7}" >> $GITHUB_ENV - - - name: Fallback build number - if: ${{ github.event_name == 'pull_request' || github.ref != 'refs/heads/main' }} - shell: bash - run: echo "BUILD_NUMBER=0" >> $GITHUB_ENV - - - name: Main build number - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - run: echo "BUILD_NUMBER=${{ needs.setup.outputs.buildnumber }}" >> $GITHUB_ENV + run: | + echo "GITHUB_SHA_SHORT=${GITHUB_SHA::7}" >> $GITHUB_ENV + echo "SEMVER=${{ needs.setup.outputs.gitversion_semver }}" >> $GITHUB_ENV - name: Visual Studio environment shell: cmd @@ -56,7 +64,7 @@ jobs: echo>>"%GITHUB_ENV%" %%a=%%b ) - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: "recursive" @@ -76,7 +84,7 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: counterstrikesharp-build-windows-${{ env.GITHUB_SHA_SHORT }} + name: counterstrikesharp-windows-${{ needs.setup.outputs.gitversion_semver }} path: build/output/ build_linux: @@ -88,18 +96,11 @@ jobs: steps: - name: Prepare env shell: bash - run: echo "GITHUB_SHA_SHORT=${GITHUB_SHA::7}" >> $GITHUB_ENV - - - name: Fallback build number - if: ${{ github.event_name == 'pull_request' || github.ref != 'refs/heads/main' }} - shell: bash - run: echo "BUILD_NUMBER=0" >> $GITHUB_ENV - - - name: Main build number - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - run: echo "BUILD_NUMBER=${{ needs.setup.outputs.buildnumber }}" >> $GITHUB_ENV + run: | + echo "GITHUB_SHA_SHORT=${GITHUB_SHA::7}" >> $GITHUB_ENV + echo "SEMVER=${{ needs.setup.outputs.gitversion_semver }}" >> $GITHUB_ENV - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: "recursive" @@ -117,7 +118,7 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: counterstrikesharp-build-linux-${{ env.GITHUB_SHA_SHORT }} + name: counterstrikesharp-linux-${{ needs.setup.outputs.gitversion_semver }} path: build/output/ build_managed: @@ -130,20 +131,11 @@ jobs: shell: bash run: echo "GITHUB_SHA_SHORT=${GITHUB_SHA::7}" >> $GITHUB_ENV - - name: Fallback build number - if: ${{ github.event_name == 'pull_request' || github.ref != 'refs/heads/main' }} - shell: bash - run: echo "BUILD_NUMBER=0" >> $GITHUB_ENV - - - name: Main build number - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - run: echo "BUILD_NUMBER=${{ needs.setup.outputs.buildnumber }}" >> $GITHUB_ENV - # We don't need expensive submodules for the managed side. - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - name: Build runtime v${{ env.BUILD_NUMBER }} - uses: actions/setup-dotnet@v3 + - name: Build runtime v${{ needs.setup.outputs.gitversion_semver }} + uses: actions/setup-dotnet@v4 with: dotnet-version: "8.0.x" @@ -151,27 +143,36 @@ jobs: run: dotnet restore managed/CounterStrikeSharp.sln - name: Run tests - run: dotnet test --logger trx --results-directory "TestResults-${{ env.GITHUB_SHA_SHORT }}" managed/CounterStrikeSharp.API.Tests/CounterStrikeSharp.API.Tests.csproj + run: dotnet test --logger trx --results-directory "TestResults-${{ needs.setup.outputs.gitversion_semver }}" managed/CounterStrikeSharp.API.Tests/CounterStrikeSharp.API.Tests.csproj - name: Upload dotnet test results uses: actions/upload-artifact@v4 with: - name: test-results-${{ env.GITHUB_SHA_SHORT }} - path: TestResults-${{ env.GITHUB_SHA_SHORT }} + name: test-results-${{ needs.setup.outputs.gitversion_semver }} + path: TestResults-${{ needs.setup.outputs.gitversion_semver }} if: ${{ always() }} - name: Publish artifacts run: | - dotnet publish -c Release /p:Version=1.0.${{ env.BUILD_NUMBER }} managed/CounterStrikeSharp.API - dotnet pack -c Release /p:Version=1.0.${{ env.BUILD_NUMBER }} managed/CounterStrikeSharp.API + dotnet publish -c Release \ + /p:Version=${{ needs.setup.outputs.gitversion_semver }} \ + /p:AssemblyVersion=${{ needs.setup.outputs.gitversion_assemblySemver }} \ + /p:InformationalVersion=${{ needs.setup.outputs.gitversion_informationalversion }} \ + managed/CounterStrikeSharp.API + + dotnet pack -c Release \ + /p:Version=${{ needs.setup.outputs.gitversion_semver }} \ + /p:AssemblyVersion=${{ needs.setup.outputs.gitversion_assemblySemver }} \ + /p:InformationalVersion=${{ needs.setup.outputs.gitversion_informationalversion }} \ + managed/CounterStrikeSharp.API - uses: actions/upload-artifact@v4 with: - name: counterstrikesharp-build-api-${{ env.GITHUB_SHA_SHORT }} + name: counterstrikesharp-api-${{ needs.setup.outputs.gitversion_semver }} path: managed/CounterStrikeSharp.API/bin/Release publish: - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') && github.repository == 'roflmuffin/CounterStrikeSharp' }} permissions: contents: write needs: ["setup", "build_linux", "build_windows", "build_managed"] @@ -183,17 +184,17 @@ jobs: - uses: actions/download-artifact@v4 with: - name: counterstrikesharp-build-windows-${{ env.GITHUB_SHA_SHORT }} + name: counterstrikesharp-windows-${{ needs.setup.outputs.gitversion_semver }} path: build/windows - uses: actions/download-artifact@v4 with: - name: counterstrikesharp-build-linux-${{ env.GITHUB_SHA_SHORT }} + name: counterstrikesharp-linux-${{ needs.setup.outputs.gitversion_semver }} path: build/linux - uses: actions/download-artifact@v4 with: - name: counterstrikesharp-build-api-${{ env.GITHUB_SHA_SHORT }} + name: counterstrikesharp-api-${{ needs.setup.outputs.gitversion_semver }} path: build/api # TODO: This stuff should really be in a matrix @@ -206,8 +207,8 @@ jobs: - name: Zip Builds run: | - (cd build/linux && zip -qq -r ../../counterstrikesharp-build-${{ needs.setup.outputs.buildnumber }}-linux-${{ env.GITHUB_SHA_SHORT }}.zip *) - (cd build/windows && zip -qq -r ../../counterstrikesharp-build-${{ needs.setup.outputs.buildnumber }}-windows-${{ env.GITHUB_SHA_SHORT }}.zip *) + (cd build/linux && zip -qq -r ../../counterstrikesharp-linux-${{ needs.setup.outputs.gitversion_semver }}.zip *) + (cd build/windows && zip -qq -r ../../counterstrikesharp-windows-${{ needs.setup.outputs.gitversion_semver }}.zip *) - name: Add dotnet runtime run: | @@ -221,28 +222,30 @@ jobs: - name: Zip Builds run: | - (cd build/linux && zip -qq -r ../../counterstrikesharp-with-runtime-build-${{ needs.setup.outputs.buildnumber }}-linux-${{ env.GITHUB_SHA_SHORT }}.zip *) - (cd build/windows && zip -qq -r ../../counterstrikesharp-with-runtime-build-${{ needs.setup.outputs.buildnumber }}-windows-${{ env.GITHUB_SHA_SHORT }}.zip *) + (cd build/linux && zip -qq -r ../../counterstrikesharp-with-runtime-linux-${{ needs.setup.outputs.gitversion_semver }}.zip *) + (cd build/windows && zip -qq -r ../../counterstrikesharp-with-runtime-windows-${{ needs.setup.outputs.gitversion_semver }}.zip *) - name: Release id: release uses: softprops/action-gh-release@v1 with: - tag_name: v${{ needs.setup.outputs.buildnumber }} + append_body: true + body: | + Please refer to [CHANGELOG.md](https://github.com/roflmuffin/CounterStrikeSharp/blob/${{ github.ref_name }}/CHANGELOG.md) for details. files: | - counterstrikesharp-build-${{ needs.setup.outputs.buildnumber }}-windows-${{ env.GITHUB_SHA_SHORT }}.zip - counterstrikesharp-with-runtime-build-${{ needs.setup.outputs.buildnumber }}-windows-${{ env.GITHUB_SHA_SHORT }}.zip - counterstrikesharp-build-${{ needs.setup.outputs.buildnumber }}-linux-${{ env.GITHUB_SHA_SHORT }}.zip - counterstrikesharp-with-runtime-build-${{ needs.setup.outputs.buildnumber }}-linux-${{ env.GITHUB_SHA_SHORT }}.zip + counterstrikesharp-windows-${{ needs.setup.outputs.gitversion_semver }}.zip + counterstrikesharp-with-runtime-windows-${{ needs.setup.outputs.gitversion_semver }}.zip + counterstrikesharp-linux-${{ needs.setup.outputs.gitversion_semver }}.zip + counterstrikesharp-with-runtime-linux-${{ needs.setup.outputs.gitversion_semver }}.zip - name: Publish NuGet package run: | - dotnet nuget push build/api/CounterStrikeSharp.API.1.0.${{ needs.setup.outputs.buildnumber }}.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate - dotnet nuget push build/api/CounterStrikeSharp.API.1.0.${{ needs.setup.outputs.buildnumber }}.snupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate - - - name: Send Notification to Discord - env: - DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} - uses: Ilshidur/action-discord@0.3.2 - with: - args: "A new release of CS# has been tagged (v${{ needs.setup.outputs.buildnumber }}) at ${{ steps.release.outputs.url }}" + dotnet nuget push build/api/CounterStrikeSharp.API.${{ needs.setup.outputs.gitversion_semver }}.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate + dotnet nuget push build/api/CounterStrikeSharp.API.${{ needs.setup.outputs.gitversion_semver }}.snupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate + + # - name: Send Notification to Discord + # env: + # DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} + # uses: Ilshidur/action-discord@0.3.2 + # with: + # args: "A new release of CS# has been tagged (v${{ needs.setup.outputs.buildnumber }}) at ${{ steps.release.outputs.url }}" diff --git a/GitVersion.yml b/GitVersion.yml new file mode 100644 index 000000000..58c304159 --- /dev/null +++ b/GitVersion.yml @@ -0,0 +1 @@ +workflow: GitHubFlow/v1 \ No newline at end of file diff --git a/makefiles/shared.cmake b/makefiles/shared.cmake index abb26c72c..9f873b727 100644 --- a/makefiles/shared.cmake +++ b/makefiles/shared.cmake @@ -35,10 +35,10 @@ else() add_definitions(-DGITHUB_SHA="Local") endif() -if(DEFINED ENV{BUILD_NUMBER}) - add_definitions(-DBUILD_NUMBER="$ENV{BUILD_NUMBER}") +if(DEFINED ENV{SEMVER}) + add_definitions(-DSEMVER="$ENV{SEMVER}") else() - add_definitions(-DBUILD_NUMBER="0") + add_definitions(-DSEMVER="Local") endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") diff --git a/src/mm_plugin.cpp b/src/mm_plugin.cpp index 88c126340..965e9ff44 100644 --- a/src/mm_plugin.cpp +++ b/src/mm_plugin.cpp @@ -34,7 +34,7 @@ #include "scripting/script_engine.h" #include "tier0/vprof.h" -#define VERSION_STRING "v" BUILD_NUMBER " @ " GITHUB_SHA +#define VERSION_STRING "v" SEMVER " @ " GITHUB_SHA #define BUILD_TIMESTAMP __DATE__ " " __TIME__ counterstrikesharp::GlobalClass* counterstrikesharp::GlobalClass::head = nullptr;