diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ade55cb9..8bde7eef2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,22 @@ on: - 'major' - 'minor' - 'patch' + force_release: + description: 'Force release (in case it went wrong)' + default: false + type: boolean + github_release: + description: 'Create Github Release' + default: true + type: boolean + docker_release: + description: 'Push Docker images' + default: true + type: boolean + msstore_release: + description: 'Release to the MS Store' + default: true + type: boolean jobs: test: @@ -81,7 +97,7 @@ jobs: version: runs-on: macos-latest - if: inputs.perform_release + if: inputs.perform_release || inputs.force_release outputs: version_current: ${{ steps.versions.outputs.version_current }} version_next: ${{ steps.versions.outputs.version_next }} @@ -110,70 +126,97 @@ jobs: name: Release runs-on: ubuntu-latest needs: [ test, webui, version ] - if: needs.version.outputs.should_release + if: needs.version.outputs.should_release || inputs.force_release steps: - uses: actions/checkout@v4 with: fetch-depth: 0 + - name: Display versions run: | echo "Current version: ${{ needs.version.outputs.version_current }}, should release: ${{ needs.version.outputs.version_next }}" + - name: Update version in gradle.properties + if: needs.version.outputs.should_release #only redo if the version changed run: sed -i -e "s/version=.*/version=${{ needs.version.outputs.version_next }}/" gradle.properties + - uses: actions/setup-node@v3 with: node-version: '16' cache: 'npm' cache-dependency-path: komga-webui/package-lock.json + - uses: actions/setup-java@v3 with: java-version: '19' java-package: 'jdk' distribution: 'temurin' + - uses: actions/setup-java@v3 with: java-version: '17' java-package: 'jdk' distribution: 'temurin' + - name: Set up QEMU uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 + - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} + - name: Login to Docker Hub uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} + - name: Build uses: gradle/gradle-build-action@v2 with: arguments: :komga:prepareThymeLeaf :komga:bootJar :komga-tray:jar env: NODE_OPTIONS: "--max-old-space-size=4096" + - name: Generate OpenAPI docs uses: gradle/gradle-build-action@v2 + if: needs.version.outputs.should_release #only redo if the version changed with: arguments: :komga:generateOpenApiDocs - - name: Generate Changelog append + + - name: JReleaser Changelog append uses: gradle/gradle-build-action@v2 + if: needs.version.outputs.should_release #only redo if the version changed with: arguments: jreleaserChangelog env: JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: JReleaser Changelog output + if: always() && needs.version.outputs.should_release + uses: actions/upload-artifact@v3 + with: + name: jreleaser-changelog + path: | + build/jreleaser/trace.log + build/jreleaser/output.properties + - name: Release commit and push uses: EndBug/add-and-commit@v9 + if: needs.version.outputs.should_release #only redo if the version changed with: message: 'chore(release): ${{ needs.version.outputs.version_next }} [skip ci]' tag: 'v${{ needs.version.outputs.version_next }}' default_author: github_actions - - name: Run Conveyor + + - name: Conveyor build apps uses: hydraulic-software/conveyor/actions/build@v11.4 + if: inputs.github_release with: command: -f conveyor.ci.conf make site -o ./output/release signing_key: ${{ secrets.CONVEYOR_SIGNING_KEY }} @@ -181,33 +224,73 @@ jobs: env: APPLE_ASP: ${{ secrets.APPLE_ASP }} APPLE_ID: ${{ secrets.APPLE_ID }} + - name: Adjust Conveyor output + if: inputs.github_release run: | mkdir ./output/site mv ./output/release/download.html ./output/site/index.html mv ./output/release/icon.svg ./output/site/ + - name: Deploy download page to Github Pages + if: inputs.github_release uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./output/site cname: download.komga.org - - name: JReleaser full release + + - name: JReleaser Release + if: inputs.github_release uses: gradle/gradle-build-action@v2 with: - arguments: jreleaserFullRelease + arguments: jreleaserRelease env: JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: JReleaser release output - if: always() + - name: JReleaser Release output + if: always() && inputs.github_release uses: actions/upload-artifact@v3 with: name: jreleaser-release path: | build/jreleaser/trace.log build/jreleaser/output.properties - - name: Run Conveyor - Microsoft Store - uses: hydraulic-software/conveyor/actions/build@v11.3 + + - name: JReleaser Announce + if: inputs.github_release + uses: gradle/gradle-build-action@v2 + with: + arguments: jreleaserAnnounce + env: + JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: JReleaser Announce output + if: always() && inputs.github_release + uses: actions/upload-artifact@v3 + with: + name: jreleaser-announce + path: | + build/jreleaser/trace.log + build/jreleaser/output.properties + + - name: JReleaser Publish + if: inputs.docker_release + uses: gradle/gradle-build-action@v2 + with: + arguments: jreleaserPublish + env: + JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: JReleaser Publish output + if: always() && inputs.docker_release + uses: actions/upload-artifact@v3 + with: + name: jreleaser-publish + path: | + build/jreleaser/trace.log + build/jreleaser/output.properties + + - name: Conveyor - publish to Microsoft Store + uses: hydraulic-software/conveyor/actions/build@v11.4 + if: inputs.msstore_release with: command: -f conveyor.msstore.ci.conf make ms-store-release -o ./output/msstore signing_key: ${{ secrets.CONVEYOR_SIGNING_KEY }}