Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
a203ee1
chore: update client deps at target level
thermcampos Sep 16, 2026
fce7080
chore: update client deps at minor level
thermcampos Sep 16, 2026
acdd307
fix: errors during unit tests in client
thermcampos Sep 16, 2026
158cf6f
chore: bump spring boot from 4.0.7 to 4.1.1
thermcampos Sep 16, 2026
ac5eabc
feat: update changelog
thermcampos Sep 16, 2026
4db15bf
chore: add reachability-metadata json file
thermcampos Sep 16, 2026
78c334d
fix: unauthorized to request health check
thermcampos Sep 16, 2026
492f569
chore: update application file with default values
thermcampos Sep 16, 2026
3a481a6
fix: attempt to fix native build
thermcampos Sep 16, 2026
4044ef8
chore: disable bytebuddy for hibernate to work on native graalvm
thermcampos Sep 16, 2026
14b2dcb
feat: refactor to replace hibernate by simple jdbc templates
thermcampos Sep 17, 2026
c9f3403
chore: fix styling and formatting issues
thermcampos Sep 17, 2026
877a978
chore: TaskService and TasksServiceTest passing
thermcampos Sep 21, 2026
0287710
chore: NoteService and NoteServiceTest passing
thermcampos Sep 21, 2026
4310c9b
test: fix homeServiceTests
thermcampos Sep 21, 2026
e0e3f1d
test: update integration tests to run using testcontainers
thermcampos Sep 21, 2026
1162900
feat: fix task-tags issues
thermcampos Sep 21, 2026
150d072
chore: fix styling issues
thermcampos Sep 22, 2026
5f02dc4
chore: fix validation reachability
thermcampos Sep 22, 2026
23afa7d
fix: patch urls failing for tasks
thermcampos Sep 22, 2026
451854d
fix: note tags and urls patching
thermcampos Sep 22, 2026
9cf9148
chore: remove comments and create new exception
thermcampos Sep 22, 2026
3d80394
feat: add scripts to test api locally
thermcampos Sep 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ jobs:
working-directory: ./server
run: ./mvnw --no-transfer-progress clean compile -DskipTests

- name: Run tests
- name: Run unit tests (skip integration on purpose)
working-directory: ./server
run: ./mvnw --no-transfer-progress clean verify -P tests --file pom.xml
run: ./mvnw --no-transfer-progress verify -P tests -Dskip.unit.tests=true -Djacoco.skip=true -Dcheckstyle.skip=true

build-frontend:
name: Build Frontend
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

## Developer workflows (use these first)
- Frontend quality gate: `bash tools/check-frontend.sh` (runs `npm ci`, `lint:fix`, `build`, `test:no-watch`).
- Backend quality gate: `bash tools/check-backend.sh` (runs checkstyle, compile, then `clean verify -P tests`).
- Backend quality gate: `bash tools/check-backend.sh` (runs checkstyle, compile, then `clean verify -P tests`). Integration tests (`*IntTest`) use Testcontainers with a `jdbc:tc:postgresql:15.8-bookworm` URL and real Flyway migrations, so Docker must be running; there is no H2 or test-only schema. Equivalent Taskfile tasks: `task test-api`, `task test-api-unit` (no Docker), `task test-api-it`.
- Backend dependency freshness check: `bash tools/check-be-deps.sh` (verifies that `failsafe`, `surefire`, `jacoco`, `checkstyle`, and Spring Boot plugin versions in `pom.xml` match the latest releases on Maven Central; must be run from the repo root or `server/`).
- Important Maven default: tests/checkstyle/jacoco are skipped unless profile `-P tests` is enabled (`server/pom.xml`).
- Dev stack via Docker Compose/Taskfile (`Taskfile.yml`, `docker-compose.dev.yml`): app `5000`, API `8585`, Java debug port `5005`, Postgres `5432`.
Expand Down
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## 2026-09-16

### Changed
- Client deps bumped to latest version in minor and patch targets.
- Server Spring Boot version bumped from 4.0.7 to 4.1.1

---

## 2026-08-31

### Fixed
Expand Down
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,14 @@ task docker-build-web
./tools/check-backend.sh
```

Integration tests (`*IntTest`) run against a real PostgreSQL instance via Testcontainers, so a running Docker daemon is required. Unit tests alone do not need Docker:

```bash
task test-api-unit # unit tests only, no Docker
task test-api-it # integration tests only, Docker required
task test-api # full backend gate (same as tools/check-backend.sh)
```

## 🤝 Contributing

We welcome contributions from the community! This project follows the **Fork & Merge** workflow.
Expand Down
131 changes: 93 additions & 38 deletions Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,56 +5,111 @@ version: '3'
tasks:
docker-build-web:
desc: Build the tasknote-web prod-ready docker image, tagging it as candidate
cmd: docker build --no-cache --build-arg VITE_BUILD="v999-$(date '+%Y-%m-%d-%H%M%S')" --build-arg SOURCE_PR="v999-123456789-$(date '+%Y-%m-%d-%H%M%S')" -t rmcampos/tasknote-app:latest ./client
cmd: docker build --no-cache --build-arg VITE_BUILD="v999-$(date '+%Y-%m-%d-%H%M%S')" --build-arg SOURCE_PR="v999-123456789-$(date '+%Y-%m-%d-%H%M%S')" -t ghcr.io/thermcampos/tasknote/client:latest ./client

docker-build-api:
desc: Build the tasknote-api prod-ready docker image, tagging it as candidate
cmd: cd server && ./mvnw -Pnative -DskipTests spring-boot:build-image -Dspring-boot.build-image.imageName=rmcampos/tasknote-api:latest -Dspring-boot.build-image.builder=paketobuildpacks/builder-jammy-tiny:0.0.505
cmd: cd server && ./mvnw -Pnative -DskipTests spring-boot:build-image -Dspring-boot.build-image.imageName=ghcr.io/thermcampos/tasknote/server:latest -Dspring-boot.build-image.builder=paketobuildpacks/builder-jammy-tiny:0.0.505

prod-up-web:
desc: Speed up the tasknote-web prod-like image, building it if required
cmd: docker compose -f docker-compose.prod.yml up -d tasknote-web
db-up:
desc: Starts Postgres database container
cmd: docker compose -f compose.dev.yaml up -d tasknote-db

prod-up-api:
desc: Speed up the tasknote-api prod-like image, building it if required
cmd: docker compose -f docker-compose.prod.yml up -d tasknote-api
db-down:
desc: Stops and remove Postgres database container
cmd: docker compose -f compose.dev.yaml down tasknote-db -v --remove-orphans

prod-up-db:
desc: Start the database container
cmd: docker compose -f docker-compose.prod.yml up -d tasknote-db
schemaspy-up:
desc: Starts database, API, SchemaSpy containers and a Python http server
cmd: docker compose -f compose.schemaspy.yaml up -d

prod-up:
desc: Speed up the prod-like images for both tasknote-api and tasknote-web, building them if required
cmd: docker compose -f docker-compose.prod.yml up -d
schemaspy-down:
desc: Stops and remove database, API, SchemaSpy and the Python http server
cmd: docker compose -f compose.schemaspy.yaml down -v --remove-orphans

prod-stop:
desc: Stop prod containers
cmd: docker compose -f docker-compose.prod.yml stop
dev-up:
desc: Starts database, API and web app locally
cmd: doppler run --project tasknote --config dev -- docker compose -f compose.dev.yaml up -d

prod-tier-down:
desc: Stop and remove prod containers
cmd: docker compose -f docker-compose.prod.yml down --remove-orphans
dev-down:
desc: Stops and remove database, API and web app containers
cmd: export NGROK_AUTHTOKEN=1 && docker compose -f compose.dev.yaml down -v --remove-orphans

dev-run-web:
desc: Get the tasknote-web up and running locally inside docker ready for development
cmd: docker compose -f docker-compose.dev.yml up -d tasknote-web
prod-like-up:
desc: Starts Postgres, GraalVM API and Docker web app using prod images
cmd: docker compose -f compose.prod-like.yaml up -d

dev-run-api:
desc: Get the tasknote-api up and running locally inside docker ready for development
cmd: docker compose -f docker-compose.dev.yml up -d tasknote-api
prod-like-down:
desc: Stops and remove Postgres, GraalVM API and Docker web app using prod images
cmd: docker compose -f compose.prod-like.yaml down -v --remove-orphans

dev-run-db:
desc: Get the tasknote-db up and running locally inside docker ready for development
cmd: docker compose -f docker-compose.dev.yml up -d tasknote-db
# prod-up-web:
# desc: Speed up the tasknote-web prod-like image, building it if required
# cmd: docker compose -f docker-compose.prod.yml up -d tasknote-web

dev-run:
desc: Get both tasknote-web and tasknote-api up and running locally inside docker ready for development
cmd: docker compose -f docker-compose.dev.yml up -d
# prod-up-api:
# desc: Speed up the tasknote-api prod-like image, building it if required
# cmd: doppler run --project tasknote --config dev -- docker compose -f docker-compose.prod.yml up -d tasknote-api

dev-stop:
desc: Stop dev containers
cmd: docker compose -f docker-compose.dev.yml stop
# prod-up-db:
# desc: Start the database container
# cmd: doppler run --project tasknote --config dev -- docker compose -f docker-compose.prod.yml up -d tasknote-db

dev-tier-down:
desc: Stop and remove dev containers
cmd: docker compose -f docker-compose.dev.yml down --remove-orphans
# prod-up:
# desc: Speed up the prod-like images for both tasknote-api and tasknote-web, building them if required
# cmd: docker compose -f docker-compose.prod.yml up -d

# prod-stop:
# desc: Stop prod containers
# cmd: docker compose -f docker-compose.prod.yml stop

# prod-tier-down:
# desc: Stop and remove prod containers
# cmd: docker compose -f docker-compose.prod.yml down --remove-orphans

# dev-run-web:
# desc: Get the tasknote-web up and running locally inside docker ready for development
# cmd: docker compose -f docker-compose.dev.yml up -d tasknote-web

# dev-run-api:
# desc: Get the tasknote-api up and running locally inside docker ready for development
# cmd: docker compose -f docker-compose.dev.yml up -d tasknote-api

# dev-run-db:
# desc: Get the tasknote-db up and running locally inside docker ready for development
# cmd: doppler run --project tasknote --config dev -- docker compose -f docker-compose.dev.yml up -d tasknote-db

# dev-run:
# desc: Get both tasknote-web and tasknote-api up and running locally inside docker ready for development
# cmd: docker compose -f docker-compose.dev.yml up -d

# dev-stop:
# desc: Stop dev containers
# cmd: docker compose -f docker-compose.dev.yml stop

# dev-tier-down:
# desc: Stop and remove dev containers
# cmd: docker compose -f docker-compose.dev.yml down --remove-orphans

test-api:
desc: Run all backend checks (checkstyle, build, unit and integration tests). Integration tests run on Testcontainers PostgreSQL, so Docker is required
cmd: bash tools/check-backend.sh

test-api-unit:
desc: Run backend unit tests only (no Docker required)
cmd: cd server && ./mvnw --no-transfer-progress test -P tests -Dskip.integration.tests=true

test-api-it:
desc: Run backend integration tests only (Testcontainers PostgreSQL, Docker required)
cmd: cd server && ./mvnw --no-transfer-progress verify -P tests -Dskip.unit.tests=true -Djacoco.skip=true -Dcheckstyle.skip=true

run-native-tracing:
desc: Buidl and run with native agent to trace reflections
deps: [db-up]
cmds:
- |
cd server && \
./mvnw clean package -DskipTests && \
doppler run --project tasknote --config dev -- java \
-agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image \
-jar target/tasknote-api.jar
File renamed without changes.
Loading
Loading