name: .NET Build Test and Sonar Scan on: push: branches: '**' pull_request: branches: [ main, develop ] types: [synchronize] jobs: build: name: Build .Net runs-on: windows-latest steps: - name: Checkout Repo uses: actions/checkout@v2 with: fetch-depth: 0 - name: Setup .NET Core uses: actions/setup-dotnet@v2 with: dotnet-version: 6.0.x - name: Install dependencies run: dotnet restore - name: Set up JDK 11 uses: actions/setup-java@v1 with: java-version: 1.11 - uses: actions/upload-artifact@v2 with: name: csproj path: Kavita.Common/Kavita.Common.csproj test: name: Install Sonar & Test needs: build runs-on: windows-latest steps: - name: Checkout Repo uses: actions/checkout@v2 with: fetch-depth: 0 - name: Setup .NET Core uses: actions/setup-dotnet@v2 with: dotnet-version: 6.0.x - name: Install dependencies run: dotnet restore - name: Set up JDK 11 uses: actions/setup-java@v1 with: java-version: 1.11 - name: Cache SonarCloud packages uses: actions/cache@v1 with: path: ~\sonar\cache key: ${{ runner.os }}-sonar restore-keys: ${{ runner.os }}-sonar - name: Cache SonarCloud scanner id: cache-sonar-scanner uses: actions/cache@v1 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: Sonar Scan env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} shell: powershell run: | .\.sonar\scanner\dotnet-sonarscanner begin /k:"Kareadita_Kavita" /o:"kareadita" /d:sonar.login="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" dotnet build --configuration Release .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}" - name: Test run: dotnet test --no-restore --verbosity normal version: name: Bump version on Develop push needs: [ build, test ] runs-on: ubuntu-latest if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/develop' }} steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - name: Setup .NET Core uses: actions/setup-dotnet@v2 with: dotnet-version: 6.0.x - name: Install dependencies run: dotnet restore - name: Build run: dotnet build --configuration Release --no-restore - name: Bump versions uses: SiqiLu/dotnet-bump-version@2.0.0 with: version_files: Kavita.Common/Kavita.Common.csproj github_token: ${{ secrets.REPO_GHA_PAT }} version_mask: "0.0.0.1" develop: name: Build Nightly Docker if Develop push needs: [ build, test, version ] runs-on: ubuntu-latest if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/develop' }} steps: - name: Find Current Pull Request uses: jwalton/gh-find-current-pr@v1.0.2 id: findPr with: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Parse PR body id: parse-body run: | body="${{ steps.findPr.outputs.body }}" if [[ ${#body} -gt 1870 ]] ; then body=${body:0:1870} body="${body}...and much more. Read full changelog: https://github.com/Kareadita/Kavita/pull/${{ steps.findPr.outputs.pr }}" fi body=${body//\'/} body=${body//'%'/'%25'} body=${body//$'\n'/'%0A'} body=${body//$'\r'/'%0D'} body=${body//$'`'/'%60'} body=${body//$'>'/'%3E'} echo $body echo "::set-output name=BODY::$body" - name: Check Out Repo uses: actions/checkout@v2 with: ref: develop - name: NodeJS to Compile WebUI uses: actions/setup-node@v2.1.5 with: node-version: '14' - run: | cd UI/Web || exit echo 'Installing web dependencies' npm install echo 'Building UI' npm run prod echo 'Copying back to Kavita wwwroot' rsync -a dist/ ../../API/wwwroot/ cd ../ || exit - name: Get csproj Version uses: naminodarie/get-net-sdk-project-versions-action@v1 id: get-version with: proj-path: Kavita.Common/Kavita.Common.csproj - name: Parse Version run: | version='${{steps.get-version.outputs.assembly-version}}' echo "::set-output name=VERSION::$version" id: parse-version - name: Echo csproj version run: echo "${{steps.get-version.outputs.assembly-version}}" - name: Compile dotnet app uses: actions/setup-dotnet@v2 with: dotnet-version: 6.0.x - run: ./monorepo-build.sh - name: Login to Docker Hub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx id: buildx uses: docker/setup-buildx-action@v1 - name: Build and push id: docker_build uses: docker/build-push-action@v2 with: context: . platforms: linux/amd64,linux/arm/v7,linux/arm64 push: true tags: kizaing/kavita:nightly, kizaing/kavita:nightly-${{ steps.parse-version.outputs.VERSION }} - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }} - name: Notify Discord uses: rjstone/discord-webhook-notify@v1 with: severity: info description: v${{steps.get-version.outputs.assembly-version}} - ${{ steps.findPr.outputs.title }} details: '${{ steps.parse-body.outputs.BODY }}' text: <@&939225459156217917> <@&939225350775406643> A new nightly build has been released for docker. webhookUrl: ${{ secrets.DISCORD_DOCKER_UPDATE_URL }} stable: name: Build Stable Docker if Main push needs: [ build, test ] runs-on: ubuntu-latest if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} steps: - name: Find Current Pull Request uses: jwalton/gh-find-current-pr@v1.0.2 id: findPr with: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Parse PR body id: parse-body run: | body="${{ steps.findPr.outputs.body }}" if [[ ${#body} -gt 1870 ]] ; then body=${body:0:1870} body="${body}...and much more. Read full changelog: https://github.com/Kareadita/Kavita/releases/latest" fi body=${body//\'/} body=${body//'%'/'%25'} body=${body//$'\n'/'%0A'} body=${body//$'\r'/'%0D'} body=${body//$'`'/'%60'} body=${body//$'>'/'%3E'} echo $body echo "::set-output name=BODY::$body" - name: Check Out Repo uses: actions/checkout@v2 with: ref: main - name: NodeJS to Compile WebUI uses: actions/setup-node@v2.1.5 with: node-version: '14' - run: | cd UI/Web || exit echo 'Installing web dependencies' npm install echo 'Building UI' npm run prod echo 'Copying back to Kavita wwwroot' rsync -a dist/ ../../API/wwwroot/ cd ../ || exit - name: Get csproj Version uses: naminodarie/get-net-sdk-project-versions-action@v1 id: get-version with: proj-path: Kavita.Common/Kavita.Common.csproj - name: Echo csproj version run: echo "${{steps.get-version.outputs.assembly-version}}" - name: Parse Version run: | version='${{steps.get-version.outputs.assembly-version}}' newVersion=${version%.*} echo $newVersion echo "::set-output name=VERSION::$newVersion" id: parse-version - name: Compile dotnet app uses: actions/setup-dotnet@v2 with: dotnet-version: 6.0.x - run: ./monorepo-build.sh - name: Login to Docker Hub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx id: buildx uses: docker/setup-buildx-action@v1 - name: Build and push id: docker_build uses: docker/build-push-action@v2 with: context: . platforms: linux/amd64,linux/arm/v7,linux/arm64 push: true tags: kizaing/kavita:latest, kizaing/kavita:${{ steps.parse-version.outputs.VERSION }} - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }} - name: Notify Discord uses: rjstone/discord-webhook-notify@v1 with: severity: info description: v${{steps.get-version.outputs.assembly-version}} - ${{ steps.findPr.outputs.title }} details: '${{ steps.parse-body.outputs.BODY }}' text: <@&939225192553644133> A new stable build has been released. webhookUrl: ${{ secrets.DISCORD_DOCKER_UPDATE_URL }}