diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2f07ba7..a1710e9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,15 +1,18 @@ -name: Build-and-test +name: Build and Test + on: push: branches: - - '*' + - master + - main pull_request: branches: - - '*' + - master + - main + jobs: build: runs-on: ubuntu-latest - timeout-minutes: 3 steps: - name: Checkout uses: actions/checkout@v4 @@ -18,9 +21,51 @@ jobs: test: runs-on: ubuntu-latest needs: build - timeout-minutes: 3 steps: - name: Checkout uses: actions/checkout@v4 - name: Test run: dotnet test --configuration Release + sonarqube: + name: sonarqube + runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.conclusion == 'success' }} + steps: + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: 'microsoft' # See 'Supported distributions' for available options + java-version: '17' + - uses: actions/checkout@v4 + with: + fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + - name: Cache SonarCloud packages + uses: actions/cache@v4 + with: + path: ~\sonar\cache + key: ${{ runner.os }}-sonar + restore-keys: ${{ runner.os }}-sonar + - name: Cache SonarCloud scanner + id: cache-sonar-scanner + uses: actions/cache@v4 + with: + path: .\.sonar\scanner + key: ${{ runner.os }}-sonar-scanner + restore-keys: ${{ runner.os }}-sonar-scanner + - name: Install SonarCloud scanner + if: steps.cache-sonar-scanner.outputs.cache-hit != 'true' + shell: powershell + run: | + New-Item -Path .\.sonar\scanner -ItemType Directory + dotnet tool update dotnet-sonarscanner --tool-path .\.sonar\scanner + - name: Build and analyze + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + shell: powershell + run: | + dotnet tool install --global dotnet-coverage + .\.sonar\scanner\dotnet-sonarscanner begin /k:"RxTelegram_RxTelegram.Bot" /o:"rxtelegram" /d:sonar.login="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.vscoveragexml.reportsPaths=coverage.xml + dotnet build --configuration Release + dotnet-coverage collect 'dotnet test' -f xml -o 'coverage.xml' --settings CodeCoverage.runsettings + .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4795a5e..1658222 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,14 +1,72 @@ name: Publish-to-nuget on: - workflow_run: - workflows: ["Check-code-quality"] - branches: ["v[0-9]+.[0-9]+.[0-9]+"] - types: - - completed + push: + tags: + - "v[0-9]+.[0-9]+.[0-9]+" + jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Build + run: dotnet build --configuration Release + test: + runs-on: ubuntu-latest + needs: build + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Test + run: dotnet test --configuration Release + sonarqube: + name: sonarqube + runs-on: ubuntu-latest + needs: test + if: ${{ github.event.workflow_run.conclusion == 'success' }} + steps: + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: 'microsoft' # See 'Supported distributions' for available options + java-version: '17' + - uses: actions/checkout@v4 + with: + fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + - name: Cache SonarCloud packages + uses: actions/cache@v4 + with: + path: ~\sonar\cache + key: ${{ runner.os }}-sonar + restore-keys: ${{ runner.os }}-sonar + - name: Cache SonarCloud scanner + id: cache-sonar-scanner + uses: actions/cache@v4 + with: + path: .\.sonar\scanner + key: ${{ runner.os }}-sonar-scanner + restore-keys: ${{ runner.os }}-sonar-scanner + - name: Install SonarCloud scanner + if: steps.cache-sonar-scanner.outputs.cache-hit != 'true' + shell: powershell + run: | + New-Item -Path .\.sonar\scanner -ItemType Directory + dotnet tool update dotnet-sonarscanner --tool-path .\.sonar\scanner + - name: Build and analyze + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + shell: powershell + run: | + dotnet tool install --global dotnet-coverage + .\.sonar\scanner\dotnet-sonarscanner begin /k:"RxTelegram_RxTelegram.Bot" /o:"rxtelegram" /d:sonar.login="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.vscoveragexml.reportsPaths=coverage.xml + dotnet build --configuration Release + dotnet-coverage collect 'dotnet test' -f xml -o 'coverage.xml' --settings CodeCoverage.runsettings + .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}" publish: runs-on: ubuntu-latest - timeout-minutes: 3 + needs: sonarqube steps: - name: Download build result uses: actions/download-artifact@v4 @@ -20,3 +78,5 @@ jobs: run: dotnet pack --configuration Release /p:Version=${VERSION} --no-build --output . - name: Push nuget to nuget.org run: dotnet nuget push RxTelegram.Bot.*.nupkg -k ${{secrets.NUGET_API_KEY}} -s https://api.nuget.org/v3/index.json + - name: Publish release + uses: ghalactic/github-release-from-tag@v5 diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml deleted file mode 100644 index c5b637b..0000000 --- a/.github/workflows/sonarqube.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Check-code-quality -on: - workflow_run: - workflows: ["Build-and-test"] - types: - - completed -jobs: - sonarqube: - name: sonarqube - runs-on: ubuntu-latest - if: ${{ github.event.workflow_run.conclusion == 'success' }} - steps: - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - distribution: 'microsoft' # See 'Supported distributions' for available options - java-version: '17' - - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: Cache SonarCloud packages - uses: actions/cache@v4 - with: - path: ~\sonar\cache - key: ${{ runner.os }}-sonar - restore-keys: ${{ runner.os }}-sonar - - name: Cache SonarCloud scanner - id: cache-sonar-scanner - uses: actions/cache@v4 - with: - path: .\.sonar\scanner - key: ${{ runner.os }}-sonar-scanner - restore-keys: ${{ runner.os }}-sonar-scanner - - name: Install SonarCloud scanner - if: steps.cache-sonar-scanner.outputs.cache-hit != 'true' - shell: powershell - run: | - New-Item -Path .\.sonar\scanner -ItemType Directory - dotnet tool update dotnet-sonarscanner --tool-path .\.sonar\scanner - - name: Build and analyze - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - shell: powershell - run: | - dotnet tool install --global dotnet-coverage - .\.sonar\scanner\dotnet-sonarscanner begin /k:"RxTelegram_RxTelegram.Bot" /o:"rxtelegram" /d:sonar.login="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.vscoveragexml.reportsPaths=coverage.xml - dotnet build --configuration Release - dotnet-coverage collect 'dotnet test' -f xml -o 'coverage.xml' --settings CodeCoverage.runsettings - .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}" diff --git a/RxTelegram.Bot.sln b/RxTelegram.Bot.sln index b52db32..a66b9d4 100644 --- a/RxTelegram.Bot.sln +++ b/RxTelegram.Bot.sln @@ -20,7 +20,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{ ProjectSection(SolutionItems) = preProject .github\workflows\main.yml = .github\workflows\main.yml .github\workflows\publish.yml = .github\workflows\publish.yml - .github\workflows\sonarqube.yml = .github\workflows\sonarqube.yml EndProjectSection EndProject Global