name: Release on: push: branches: [ main ] permissions: contents: write issues: write pull-requests: write env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} jobs: build-and-test: name: Build and Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK uses: actions/setup-java@v3 with: java-version: '25' distribution: 'temurin' - name: Build with Gradle run: chmod +x ./gradlew && ./gradlew clean build test dockerize: name: Dockerize Application needs: build-and-test runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK uses: actions/setup-java@v3 with: java-version: '25' distribution: 'temurin' - name: Build run: chmod +x ./gradlew && ./gradlew build - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and Push Image run: | docker buildx create --use docker buildx build --platform linux/amd64,linux/arm64 -t lhamacorp/knotes:latest --push . # Disabled desktop release jobs # create-desktop-release: # name: Create Desktop Release # needs: dockerize # runs-on: ubuntu-latest # outputs: # release-tag: ${{ steps.get-version.outputs.tag }} # release-version: ${{ steps.get-version.outputs.version }} # steps: # - uses: actions/checkout@v4 # - name: Get version from package.json # id: get-version # run: | # VERSION=$(node -p "require('./desktop-app/package.json').version") # TIMESTAMP=$(date +%Y%m%d-%H%M%S) # TAG="v${VERSION}-${TIMESTAMP}" # echo "version=${VERSION}" >> $GITHUB_OUTPUT # echo "tag=${TAG}" >> $GITHUB_OUTPUT # - name: Create Desktop App Release # id: create-release # env: # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # run: | # TAG="${{ steps.get-version.outputs.tag }}" # VERSION="${{ steps.get-version.outputs.version }}" # # Create release notes # cat > release-notes.md << 'EOF' # ## 🚀 kNotes Release - Docker + Desktop Apps # This release includes both the deployed web application and desktop apps for all platforms. # ### 🐳 Docker Deployment: # - **Image**: `lhamacorp/knotes:latest` # - **Platforms**: linux/amd64, linux/arm64 # - **Deployed to**: https://notes.lhamacorp.com # ### 📱 Desktop Apps: # - **Windows**: Download the `.exe` installer # - **macOS**: Download the `.dmg` installer # - **Linux**: Download the `.AppImage` file # ### ✨ What's New: # - Latest frontend updates from the web application # - Automatic synchronization with deployed API # - Bug fixes and improvements # - Auto-update functionality for desktop apps # ### 📦 Installation: # 1. Download the appropriate desktop app for your operating system # 2. Install/run the application # 3. The app connects to the deployed API and will check for future updates automatically # **Built from commit**: ${{ github.sha }} # **Docker image**: `docker pull lhamacorp/knotes:latest` # EOF # # Create release using GitHub CLI # gh release create "$TAG" \ # --title "kNotes Desktop v${VERSION}" \ # --notes-file release-notes.md \ # --latest || { # echo "Release already exists, updating it..." # gh release edit "$TAG" \ # --title "kNotes Desktop v${VERSION}" \ # --notes-file release-notes.md \ # --latest # } # build-linux-desktop: # name: Build Linux Desktop # needs: create-desktop-release # runs-on: ubuntu-latest # steps: # - uses: actions/checkout@v4 # - name: Setup Node.js # uses: actions/setup-node@v4 # with: # node-version: '18' # cache: 'npm' # cache-dependency-path: desktop-app/package-lock.json # - name: Copy frontend files # run: | # cp -r src/main/resources/static/* desktop-app/ # - name: Install dependencies # run: | # cd desktop-app # npm ci # - name: Build Linux Desktop App # run: | # cd desktop-app # npm run build-linux # - name: Debug Build Output # run: | # cd desktop-app # echo "=== Build Output ===" # ls -la dist/ || echo "No dist directory" # echo "=== End Build Output ===" # - name: Upload Linux Build to Release # env: # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # run: | # cd desktop-app # TAG="${{ needs.create-desktop-release.outputs.release-tag }}" # echo "Uploading to release: $TAG" # # Check if AppImage exists # if ls dist/kNotes-*.AppImage 1> /dev/null 2>&1; then # echo "Found AppImage files:" # ls -la dist/kNotes-*.AppImage # gh release upload "$TAG" dist/kNotes-*.AppImage --clobber # else # echo "No AppImage files found" # fi # # Upload additional files if they exist # if [ -f "dist/latest-linux.yml" ]; then # gh release upload "$TAG" dist/latest-linux.yml --clobber # fi # build-windows-desktop: # name: Build Windows Desktop # needs: create-desktop-release # runs-on: windows-latest # steps: # - uses: actions/checkout@v4 # - name: Setup Node.js # uses: actions/setup-node@v4 # with: # node-version: '18' # cache: 'npm' # cache-dependency-path: desktop-app/package-lock.json # - name: Copy frontend files # run: | # xcopy "src\main\resources\static\*" "desktop-app\" /E /I /Y # - name: Install dependencies # run: | # cd desktop-app # npm ci # - name: Build Windows Desktop App # run: | # cd desktop-app # npm run build-win # - name: Debug Windows Build Output # run: | # cd desktop-app # echo "=== Windows Build Output ===" # ls -la dist/ || echo "No dist directory" # echo "=== End Windows Build Output ===" # - name: Upload Windows Build to Release # env: # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # run: | # cd desktop-app # TAG="${{ needs.create-desktop-release.outputs.release-tag }}" # echo "Uploading to release: $TAG" # # Check if EXE exists # if ls dist/*.exe 1> /dev/null 2>&1; then # echo "Found Windows installer files:" # ls -la dist/*.exe # gh release upload "$TAG" dist/*.exe --clobber # else # echo "No Windows installer files found" # fi # # Upload additional files if they exist # if [ -f "dist/latest.yml" ]; then # gh release upload "$TAG" dist/latest.yml --clobber # fi # build-macos-desktop: # name: Build macOS Desktop # needs: create-desktop-release # runs-on: macos-latest # steps: # - uses: actions/checkout@v4 # - name: Setup Node.js # uses: actions/setup-node@v4 # with: # node-version: '18' # cache: 'npm' # cache-dependency-path: desktop-app/package-lock.json # - name: Copy frontend files # run: | # cp -r src/main/resources/static/* desktop-app/ # - name: Install dependencies # run: | # cd desktop-app # npm ci # - name: Build macOS Desktop App # run: | # cd desktop-app # npm run build-mac # - name: Debug macOS Build Output # run: | # cd desktop-app # echo "=== macOS Build Output ===" # ls -la dist/ || echo "No dist directory" # echo "=== End macOS Build Output ===" # - name: Upload macOS Build to Release # env: # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # run: | # cd desktop-app # TAG="${{ needs.create-desktop-release.outputs.release-tag }}" # echo "Uploading to release: $TAG" # # Check if DMG exists # if ls dist/*.dmg 1> /dev/null 2>&1; then # echo "Found macOS installer files:" # ls -la dist/*.dmg # gh release upload "$TAG" dist/*.dmg --clobber # else # echo "No macOS installer files found" # fi # # Upload additional files if they exist # if [ -f "dist/latest-mac.yml" ]; then # gh release upload "$TAG" dist/latest-mac.yml --clobber # fi