Release #26
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
on: | |
workflow_dispatch: | |
inputs: | |
release_notes: | |
description: Release notes (use \n for newlines) | |
type: string | |
required: false | |
bump: | |
description: 'Bump type' | |
required: false | |
default: 'next' | |
type: choice | |
options: | |
- 'next' | |
- 'major' | |
- 'minor' | |
- 'patch' | |
- 'current' | |
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: | |
version: | |
runs-on: macos-latest | |
outputs: | |
version_current: ${{ steps.versions.outputs.version_current }} | |
version_next: ${{ steps.versions.outputs.version_next }} | |
should_release: ${{ steps.versions.outputs.should_release }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Homebrew | |
id: set-up-homebrew | |
uses: Homebrew/actions/setup-homebrew@master | |
- name: Install svu | |
run: brew install caarlos0/tap/svu | |
- name: Compute next version for release | |
run: | | |
echo "VERSION_NEXT=`svu --pattern="[0-9]*" --strip-prefix ${{ inputs.bump }}`" | tee -a $GITHUB_ENV | |
echo "VERSION_NEXT_SUFFIX=`svu --pattern="[0-9]*" --strip-prefix ${{ inputs.bump }}`" | tee -a $GITHUB_ENV | |
- name: Set Versions | |
id: versions | |
run: | | |
echo "version_current=`svu --pattern="[0-9]*" --strip-prefix current`" >> $GITHUB_OUTPUT | |
echo "version_next=${{ env.VERSION_NEXT_SUFFIX }}" >> $GITHUB_OUTPUT | |
[[ `svu --pattern="[0-9]*" --strip-prefix current` != ${{ env.VERSION_NEXT }} ]] && echo "should_release=true" >> $GITHUB_OUTPUT || echo | |
release: | |
name: Release | |
runs-on: ubuntu-latest | |
needs: version | |
steps: | |
- name: Remove unnecessary files | |
run: | | |
sudo rm -rf /usr/share/dotnet | |
sudo rm -rf "$AGENT_TOOLSDIRECTORY" | |
- 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@v4 | |
with: | |
node-version-file: '.nvmrc' | |
cache: 'npm' | |
cache-dependency-path: komga-webui/package-lock.json | |
- uses: actions/setup-java@v3 | |
with: | |
java-version: 21 | |
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: Create release notes | |
run: | | |
mkdir release_notes | |
echo -e "${{ inputs.release_notes }}" >> release_notes/release_notes.md | |
echo "Release notes:" | |
cat release_notes/release_notes.md | |
echo "" | |
- 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: '${{ needs.version.outputs.version_next }}' | |
default_author: github_actions | |
- name: Retrieve the Apple private key and decode it to a file | |
if: inputs.github_release | |
env: | |
APPLE_PRIVATE_KEY: ${{ secrets.APPLE_PRIVATE_KEY }} | |
run: | | |
mkdir ./secret | |
echo $APPLE_PRIVATE_KEY | base64 --decode > ./secret/apple_private_key.p8 | |
- name: Conveyor build apps | |
uses: hydraulic-software/conveyor/actions/[email protected] | |
if: inputs.github_release | |
with: | |
command: -f conveyor.ci.conf make site -o ./output/release | |
signing_key: ${{ secrets.CONVEYOR_SIGNING_KEY }} | |
agree_to_license: 1 | |
env: | |
APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }} | |
APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }} | |
- name: Upload Conveyor log | |
if: always() && inputs.github_release | |
uses: actions/upload-artifact@v3 | |
with: | |
name: conveyor-make-site | |
path: ~/.cache/hydraulic/conveyor/logs/log.latest.txt | |
- 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 Release | |
if: inputs.github_release | |
uses: gradle/gradle-build-action@v2 | |
with: | |
arguments: jreleaserRelease | |
env: | |
JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- 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: 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 | |
# Sometimes the workflow will fail because it's out of disk space | |
- name: Cleanup Conveyor output | |
run: rm -fr ./output | |
- 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/[email protected] | |
if: inputs.msstore_release | |
with: | |
command: -f conveyor.msstore.ci.conf make ms-store-release -o ./output/msstore | |
signing_key: ${{ secrets.CONVEYOR_SIGNING_KEY }} | |
agree_to_license: 1 | |
env: | |
CONVEYOR_MSSTORE_CLIENT_ID: ${{ secrets.CONVEYOR_MSSTORE_CLIENT_ID }} | |
CONVEYOR_MSSTORE_CLIENT_SECRET: ${{ secrets.CONVEYOR_MSSTORE_CLIENT_SECRET }} | |
CONVEYOR_MSSTORE_TENANT_ID: ${{ secrets.CONVEYOR_MSSTORE_TENANT_ID }} | |
- name: Upload Conveyor log | |
if: always() && inputs.msstore_release | |
uses: actions/upload-artifact@v3 | |
with: | |
name: conveyor-ms-store-release | |
path: ~/.cache/hydraulic/conveyor/logs/log.latest.txt |