Skip to content

feat: optimize TXT chapter parsing algorithm to filter empty chapters… #49

feat: optimize TXT chapter parsing algorithm to filter empty chapters…

feat: optimize TXT chapter parsing algorithm to filter empty chapters… #49

name: Test Build (feat/test)
on:
push:
branches:
- "feat/test"
workflow_dispatch:
permissions:
contents: write
jobs:
build-desktop:
name: Build Desktop (${{ matrix.platform }})
strategy:
matrix:
include:
- os: macos-latest
platform: mac
command: build:mac
files: |
apps/desktop/release/*.dmg
exts: dmg
- os: windows-latest
platform: win
command: build:win
files: |
apps/desktop/release/*.exe
exts: exe
- os: ubuntu-latest
platform: linux
command: build:linux
files: |
apps/desktop/release/*.AppImage
apps/desktop/release/*.deb
exts: AppImage deb
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: "pnpm"
- name: Install dependencies
env:
NPM_CONFIG_REGISTRY: https://registry.npmjs.org/
run: pnpm install --no-frozen-lockfile
- name: Build Desktop App
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: pnpm --filter @bookdock/desktop run ${{ matrix.command }}
- name: Upload Release Assets (Draft)
uses: softprops/action-gh-release@v2
with:
tag_name: test-build
name: Test Build (feat/test)
draft: true
files: ${{ matrix.files }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set version
id: version
shell: bash
run: echo "version=$(node -p "require('./apps/desktop/package.json').version")" >> $GITHUB_OUTPUT
- name: Upload artifacts to Minio
shell: bash
env:
MINIO_ENDPOINT: ${{ secrets.MINIO_ENDPOINT }}
MINIO_BUCKET: ${{ secrets.MINIO_BUCKET }}
MINIO_ACCESS: ${{ secrets.MINIO_ACCESS }}
MINIO_SECRET: ${{ secrets.MINIO_SECRET }}
MINIO_REGION: ${{ secrets.MINIO_REGION || 'us-east-1' }}
run: |
export AWS_ACCESS_KEY_ID="${MINIO_ACCESS}"
export AWS_SECRET_ACCESS_KEY="${MINIO_SECRET}"
export AWS_DEFAULT_REGION="${MINIO_REGION}"
mkdir -p release-upload
for ext in ${{ matrix.exts }}; do
cp apps/desktop/release/*.$ext release-upload/ 2>/dev/null || true
done
aws s3 sync release-upload/ "s3://${MINIO_BUCKET}/bookdock/releases/${{ steps.version.outputs.version }}/" --endpoint-url "${MINIO_ENDPOINT}"
build-android:
name: Build Android
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: "zulu"
java-version: "17"
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: "pnpm"
- name: Install dependencies
env:
NPM_CONFIG_REGISTRY: https://registry.npmjs.org/
run: pnpm install --no-frozen-lockfile
- name: Build Android APK
run: |
cd apps/mobile/android
chmod +x gradlew
./gradlew assembleRelease
- name: Rename and Prepare APK
id: prepare_apk
run: |
VERSION=$(node -p "require('./apps/mobile/app.json').expo.version")
OLD_PATH="apps/mobile/android/app/build/outputs/apk/release/app-release.apk"
NEW_NAME="BookDock-${VERSION}-test.apk"
NEW_PATH="apps/mobile/android/app/build/outputs/apk/release/${NEW_NAME}"
mv "$OLD_PATH" "$NEW_PATH"
echo "apk_path=$NEW_PATH" >> $GITHUB_OUTPUT
echo "apk_name=$NEW_NAME" >> $GITHUB_OUTPUT
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Upload Release Assets (Draft)
uses: softprops/action-gh-release@v2
with:
tag_name: test-build
name: Test Build (feat/test)
draft: true
files: |
${{ steps.prepare_apk.outputs.apk_path }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Upload APK to Minio
env:
MINIO_ENDPOINT: ${{ secrets.MINIO_ENDPOINT }}
MINIO_BUCKET: ${{ secrets.MINIO_BUCKET }}
MINIO_ACCESS: ${{ secrets.MINIO_ACCESS }}
MINIO_SECRET: ${{ secrets.MINIO_SECRET }}
MINIO_REGION: ${{ secrets.MINIO_REGION || 'us-east-1' }}
run: |
export AWS_ACCESS_KEY_ID="${MINIO_ACCESS}"
export AWS_SECRET_ACCESS_KEY="${MINIO_SECRET}"
export AWS_DEFAULT_REGION="${MINIO_REGION}"
aws s3 cp "${{ steps.prepare_apk.outputs.apk_path }}" "s3://${MINIO_BUCKET}/bookdock/releases/${{ steps.prepare_apk.outputs.version }}/${{ steps.prepare_apk.outputs.apk_name }}" --endpoint-url "${MINIO_ENDPOINT}"
build-server-docker:
name: Build & Push Server Docker (feat-test)
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Log in to Harbor
uses: docker/login-action@v3
with:
registry: ${{ secrets.HARBOR_REGISTRY }}
username: ${{ secrets.HARBOR_USERNAME }}
password: ${{ secrets.HARBOR_PASSWORD }}
- name: Set lowercase image name
id: image_name
run: |
REPO_LOWER=$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]')
NAME_LOWER=$(echo "${{ github.event.repository.name }}" | tr '[:upper:]' '[:lower:]')
OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
DOCKERHUB_USER_LOWER=$(echo "${{ secrets.DOCKERHUB_USERNAME }}" | tr '[:upper:]' '[:lower:]')
echo "ghcr=${REGISTRY}/${REPO_LOWER}" >> $GITHUB_OUTPUT
echo "dockerhub=${DOCKERHUB_USER_LOWER}/${NAME_LOWER}" >> $GITHUB_OUTPUT
echo "harbor=${{ secrets.HARBOR_REGISTRY }}/audiodock/${NAME_LOWER}" >> $GITHUB_OUTPUT
env:
REGISTRY: ghcr.io
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
target: runner
file: ./Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: |
${{ steps.image_name.outputs.ghcr }}:feat-test
${{ steps.image_name.outputs.dockerhub }}:feat-test
${{ steps.image_name.outputs.harbor }}:feat-test