diff --git a/.github/workflows/sonar-scan.yml b/.github/workflows/sonar-scan.yml index 42ede7a48..20f2f7589 100644 --- a/.github/workflows/sonar-scan.yml +++ b/.github/workflows/sonar-scan.yml @@ -1,457 +1,457 @@ name: .NET Build Test and Sonar Scan on: - push: - branches: '**' - pull_request: - branches: [ main, develop ] - types: [synchronize] + push: + branches: '**' + pull_request: + branches: [ main, develop, canary ] + types: [synchronize] jobs: - check_pr: - runs-on: ubuntu-latest - steps: - - name: Check PR Body - uses: JJ/github-pr-contains-action@releases/v10 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - bodyDoesNotContain: "[\"|`]" - build: - name: Build .Net - runs-on: windows-latest - steps: - - name: Checkout Repo - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Setup .NET Core - uses: actions/setup-dotnet@v3 - with: - dotnet-version: 7.0.x - - - name: Install Swashbuckle CLI - shell: powershell - run: dotnet tool install -g --version 6.5.0 Swashbuckle.AspNetCore.Cli - - - 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 - - - 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 ] - runs-on: ubuntu-latest - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/develop' }} - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Setup .NET Core - uses: actions/setup-dotnet@v3 - with: - dotnet-version: 7.0.x - - - name: Install Swashbuckle CLI - run: dotnet tool install -g --version 6.5.0 Swashbuckle.AspNetCore.Cli - - - 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, version ] - runs-on: ubuntu-latest - permissions: - packages: write - contents: read - 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@v3 - with: - ref: develop - - - name: NodeJS to Compile WebUI - uses: actions/setup-node@v2.1.5 - with: - node-version: '16' - - run: | - cd UI/Web || exit - echo 'Installing web dependencies' - npm install --legacy-peer-deps - - 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@v3 - with: - dotnet-version: 7.0.x - - - name: Install Swashbuckle CLI - run: dotnet tool install -g --version 6.5.0 Swashbuckle.AspNetCore.Cli - - - run: ./monorepo-build.sh - - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_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 }}, ghcr.io/kareadita/kavita:nightly, ghcr.io/kareadita/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 ] - runs-on: ubuntu-latest - permissions: - packages: write - contents: read - 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@v3 - with: - ref: main - - - name: NodeJS to Compile WebUI - uses: actions/setup-node@v2.1.5 - with: - node-version: '16' - - run: | - - cd UI/Web || exit - echo 'Installing web dependencies' - npm ci - - 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@v3 - with: - dotnet-version: 7.0.x - - name: Install Swashbuckle CLI - run: dotnet tool install -g --version 6.5.0 Swashbuckle.AspNetCore.Cli - - - run: ./monorepo-build.sh - - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_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 }}, ghcr.io/kareadita/kavita:latest, ghcr.io/kareadita/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 }} - - canary: - name: Build Nightly Docker if Canary push - needs: [ build, version ] - runs-on: ubuntu-latest - permissions: - packages: write - contents: read - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/canary' }} - steps: - - name: Find Current Pull Request - uses: jwalton/gh-find-current-pr@v1.0.2 - id: findPr - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Check Out Repo - uses: actions/checkout@v3 - with: - ref: develop - - - name: NodeJS to Compile WebUI - uses: actions/setup-node@v2.1.5 - with: - node-version: '16' - - run: | - cd UI/Web || exit - echo 'Installing web dependencies' - npm install --legacy-peer-deps - - 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@v3 - with: - dotnet-version: 7.0.x - - - name: Install Swashbuckle CLI - run: dotnet tool install -g --version 6.5.0 Swashbuckle.AspNetCore.Cli - - - run: ./monorepo-build.sh - - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_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:canary, kizaing/kavita:canary-${{ steps.parse-version.outputs.VERSION }}, ghcr.io/kareadita/kavita:canary, ghcr.io/kareadita/kavita:canary-${{ steps.parse-version.outputs.VERSION }} - - - name: Image digest - run: echo ${{ steps.docker_build.outputs.digest }} + check_pr: + runs-on: ubuntu-latest + steps: + - name: Check PR Body + uses: JJ/github-pr-contains-action@releases/v10 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + bodyDoesNotContain: "[\"|`]" + build: + name: Build .Net + runs-on: windows-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Setup .NET Core + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 7.0.x + + - name: Install Swashbuckle CLI + shell: powershell + run: dotnet tool install -g --version 6.5.0 Swashbuckle.AspNetCore.Cli + + - 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 + + - 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/Canary push + needs: [ build ] + runs-on: ubuntu-latest + if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/canary') }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Setup .NET Core + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 7.0.x + + - name: Install Swashbuckle CLI + run: dotnet tool install -g --version 6.5.0 Swashbuckle.AspNetCore.Cli + + - 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, version ] + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + 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@v3 + with: + ref: develop + + - name: NodeJS to Compile WebUI + uses: actions/setup-node@v2.1.5 + with: + node-version: '16' + - run: | + cd UI/Web || exit + echo 'Installing web dependencies' + npm install --legacy-peer-deps + + 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@v3 + with: + dotnet-version: 7.0.x + + - name: Install Swashbuckle CLI + run: dotnet tool install -g --version 6.5.0 Swashbuckle.AspNetCore.Cli + + - run: ./monorepo-build.sh + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_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 }}, ghcr.io/kareadita/kavita:nightly, ghcr.io/kareadita/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 ] + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + 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@v3 + with: + ref: main + + - name: NodeJS to Compile WebUI + uses: actions/setup-node@v2.1.5 + with: + node-version: '16' + - run: | + + cd UI/Web || exit + echo 'Installing web dependencies' + npm ci + + 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@v3 + with: + dotnet-version: 7.0.x + - name: Install Swashbuckle CLI + run: dotnet tool install -g --version 6.5.0 Swashbuckle.AspNetCore.Cli + + - run: ./monorepo-build.sh + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_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 }}, ghcr.io/kareadita/kavita:latest, ghcr.io/kareadita/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 }} + + canary: + name: Build Nightly Docker if Canary push + needs: [ build, version ] + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/canary' }} + steps: + - name: Find Current Pull Request + uses: jwalton/gh-find-current-pr@v1.0.2 + id: findPr + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Check Out Repo + uses: actions/checkout@v3 + with: + ref: develop + + - name: NodeJS to Compile WebUI + uses: actions/setup-node@v2.1.5 + with: + node-version: '16' + - run: | + cd UI/Web || exit + echo 'Installing web dependencies' + npm install --legacy-peer-deps + + 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@v3 + with: + dotnet-version: 7.0.x + + - name: Install Swashbuckle CLI + run: dotnet tool install -g --version 6.5.0 Swashbuckle.AspNetCore.Cli + + - run: ./monorepo-build.sh + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_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:canary, kizaing/kavita:canary-${{ steps.parse-version.outputs.VERSION }}, ghcr.io/kareadita/kavita:canary, ghcr.io/kareadita/kavita:canary-${{ steps.parse-version.outputs.VERSION }} + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }}