From 7754f5c7694bc4c77bee714fa78e7d20cb328082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C3=96zg=C3=BCr?= <226712+halilim@users.noreply.github.com> Date: Mon, 8 Sep 2025 04:07:54 +0300 Subject: [PATCH 1/8] feat(service): add Gramps Web template --- public/svgs/gramps-web.svg | 154 ++++++++++++++++++++++++++++++ templates/compose/gramps-web.yaml | 63 ++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 public/svgs/gramps-web.svg create mode 100644 templates/compose/gramps-web.yaml diff --git a/public/svgs/gramps-web.svg b/public/svgs/gramps-web.svg new file mode 100644 index 000000000..b5d79d76d --- /dev/null +++ b/public/svgs/gramps-web.svg @@ -0,0 +1,154 @@ + +image/svg+xml diff --git a/templates/compose/gramps-web.yaml b/templates/compose/gramps-web.yaml new file mode 100644 index 000000000..765a5321d --- /dev/null +++ b/templates/compose/gramps-web.yaml @@ -0,0 +1,63 @@ +# documentation: https://www.grampsweb.org/install_setup/setup/ +# slogan: Open Source Online Genealogy System. +# category: family +# tags: family, genealogy, personal +# logo: svgs/gramps-web.svg +# port: 5000 + +services: + grampsweb: &grampsweb + image: ghcr.io/gramps-project/grampsweb:latest + environment: + GRAMPSWEB_TREE: ${GRAMPSWEB_TREE:-Gramps Web} # will create a new tree if not exists + GRAMPSWEB_CELERY_CONFIG__broker_url: "redis://grampsweb_redis:6379/0" + GRAMPSWEB_CELERY_CONFIG__result_backend: "redis://grampsweb_redis:6379/0" + GRAMPSWEB_RATELIMIT_STORAGE_URI: redis://grampsweb_redis:6379/1 + GUNICORN_NUM_WORKERS: ${GUNICORN_NUM_WORKERS:-2} + depends_on: + - grampsweb_redis + volumes: + - gramps_users:/app/users # persist user database + - gramps_index:/app/indexdir # persist search index + - gramps_thumb_cache:/app/thumbnail_cache # persist thumbnails + - gramps_cache:/app/cache # persist export and report caches + - gramps_secret:/app/secret # persist flask secret + - gramps_db:/root/.gramps/grampsdb # persist Gramps database + - gramps_media:/app/media # persist media files + - gramps_tmp:/tmp + healthcheck: + test: wget -O - http://localhost:5000 > /dev/null 2>&1 + interval: 5s + timeout: 10s + retries: 3 + + grampsweb_celery: + <<: *grampsweb + container_name: grampsweb_celery + depends_on: + - grampsweb_redis + command: celery -A gramps_webapi.celery worker --loglevel=INFO --concurrency=2 + healthcheck: + test: SECRET_KEY="$(cat secret/secret)" celery -A gramps_webapi.celery status || exit 1 + interval: 5s + timeout: 10s + retries: 3 + + grampsweb_redis: + image: docker.io/library/redis:7.2.4-alpine + container_name: grampsweb_redis + healthcheck: + test: redis-cli ping | grep PONG + interval: 5s + timeout: 10s + retries: 3 + +volumes: + gramps_users: + gramps_index: + gramps_thumb_cache: + gramps_cache: + gramps_secret: + gramps_db: + gramps_media: + gramps_tmp: From f5a4c5ac3f8a4ecc1fac5679fdb65891eefc1b90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C3=96zg=C3=BCr?= <226712+halilim@users.noreply.github.com> Date: Tue, 9 Sep 2025 10:27:33 +0300 Subject: [PATCH 2/8] Improve service & update logo color --- public/svgs/gramps-web.svg | 26 +++++++++++----------- templates/compose/gramps-web.yaml | 36 ++++++++++++++----------------- 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/public/svgs/gramps-web.svg b/public/svgs/gramps-web.svg index b5d79d76d..eeef33047 100644 --- a/public/svgs/gramps-web.svg +++ b/public/svgs/gramps-web.svg @@ -73,7 +73,7 @@ inkscape:connector-curvature="0" id="path1087" d="m 175.2367,338.27684 h 31.47905 v -153.9548 h 60.76188" - style="fill:none;stroke:#795649;stroke-width:30;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> diff --git a/templates/compose/gramps-web.yaml b/templates/compose/gramps-web.yaml index 765a5321d..04a284ff2 100644 --- a/templates/compose/gramps-web.yaml +++ b/templates/compose/gramps-web.yaml @@ -6,17 +6,18 @@ # port: 5000 services: - grampsweb: &grampsweb + grampsweb: image: ghcr.io/gramps-project/grampsweb:latest environment: - GRAMPSWEB_TREE: ${GRAMPSWEB_TREE:-Gramps Web} # will create a new tree if not exists - GRAMPSWEB_CELERY_CONFIG__broker_url: "redis://grampsweb_redis:6379/0" - GRAMPSWEB_CELERY_CONFIG__result_backend: "redis://grampsweb_redis:6379/0" - GRAMPSWEB_RATELIMIT_STORAGE_URI: redis://grampsweb_redis:6379/1 - GUNICORN_NUM_WORKERS: ${GUNICORN_NUM_WORKERS:-2} + - SERVICE_URL_GRAMPSWEB_5000 + - GRAMPSWEB_TREE=${GRAMPSWEB_TREE:-Gramps Web} # will create a new tree if not exists + - GRAMPSWEB_CELERY_CONFIG__broker_url=redis://grampsweb_redis:6379/0 + - GRAMPSWEB_CELERY_CONFIG__result_backend=redis://grampsweb_redis:6379/0 + - GRAMPSWEB_RATELIMIT_STORAGE_URI=redis://grampsweb_redis:6379/1 + - GUNICORN_NUM_WORKERS=${GUNICORN_NUM_WORKERS:-2} depends_on: - grampsweb_redis - volumes: + volumes: &volumes - gramps_users:/app/users # persist user database - gramps_index:/app/indexdir # persist search index - gramps_thumb_cache:/app/thumbnail_cache # persist thumbnails @@ -32,10 +33,16 @@ services: retries: 3 grampsweb_celery: - <<: *grampsweb - container_name: grampsweb_celery + image: ghcr.io/gramps-project/grampsweb:latest + environment: + - GRAMPSWEB_TREE=${GRAMPSWEB_TREE:-Gramps Web} # will create a new tree if not exists + - GRAMPSWEB_CELERY_CONFIG__broker_url=redis://grampsweb_redis:6379/0 + - GRAMPSWEB_CELERY_CONFIG__result_backend=redis://grampsweb_redis:6379/0 + - GRAMPSWEB_RATELIMIT_STORAGE_URI=redis://grampsweb_redis:6379/1 depends_on: - grampsweb_redis + volumes: + <<: *volumes command: celery -A gramps_webapi.celery worker --loglevel=INFO --concurrency=2 healthcheck: test: SECRET_KEY="$(cat secret/secret)" celery -A gramps_webapi.celery status || exit 1 @@ -45,19 +52,8 @@ services: grampsweb_redis: image: docker.io/library/redis:7.2.4-alpine - container_name: grampsweb_redis healthcheck: test: redis-cli ping | grep PONG interval: 5s timeout: 10s retries: 3 - -volumes: - gramps_users: - gramps_index: - gramps_thumb_cache: - gramps_cache: - gramps_secret: - gramps_db: - gramps_media: - gramps_tmp: From 6a581b2759762560250613b57342c8f263c5e1bf Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:37:48 +0200 Subject: [PATCH 3/8] "Update Claude PR Assistant workflow" --- .github/workflows/claude.yml | 37 +++++++++++------------------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml index 9daf0e90e..b1a3201d7 100644 --- a/.github/workflows/claude.yml +++ b/.github/workflows/claude.yml @@ -16,8 +16,6 @@ jobs: (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) || (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) || (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) || - (github.event_name == 'issues' && github.event.action == 'labeled' && github.event.label.name == 'Claude') || - (github.event_name == 'pull_request' && github.event.action == 'labeled' && github.event.label.name == 'Claude') || (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))) runs-on: ubuntu-latest permissions: @@ -36,30 +34,17 @@ jobs: id: claude uses: anthropics/claude-code-action@v1 with: - anthropic_api_key: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} - + claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} + # This is an optional setting that allows Claude to read CI results on PRs additional_permissions: | actions: read - - # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4.1) - # model: "claude-opus-4-1-20250805" - - # Optional: Customize the trigger phrase (default: @claude) - # trigger_phrase: "/claude" - - # Optional: Trigger when specific user is assigned to an issue - # assignee_trigger: "claude-bot" - - # Optional: Allow Claude to run specific commands - # allowed_tools: "Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)" - - # Optional: Add custom instructions for Claude to customize its behavior for your project - # custom_instructions: | - # Follow our coding standards - # Ensure all new code has tests - # Use TypeScript for new files - - # Optional: Custom environment variables for Claude - # claude_env: | - # NODE_ENV: test + + # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it. + # prompt: 'Update the pull request description to include a summary of changes.' + + # Optional: Add claude_args to customize behavior and configuration + # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md + # or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options + # claude_args: '--model claude-opus-4-1-20250805 --allowed-tools Bash(gh pr:*)' + From af4ce5d1d2fc134f8da0babbde64eac5ed1dd313 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:37:50 +0200 Subject: [PATCH 4/8] "Update Claude Code Review workflow" --- .github/workflows/claude-code-review.yml | 40 ++++++------------------ 1 file changed, 9 insertions(+), 31 deletions(-) diff --git a/.github/workflows/claude-code-review.yml b/.github/workflows/claude-code-review.yml index a2c92df59..31c04fdf6 100644 --- a/.github/workflows/claude-code-review.yml +++ b/.github/workflows/claude-code-review.yml @@ -12,7 +12,6 @@ on: jobs: claude-review: - if: false # Optional: Filter by PR author # if: | # github.event.pull_request.user.login == 'external-contributor' || @@ -34,15 +33,13 @@ jobs: - name: Run Claude Code Review id: claude-review - uses: anthropics/claude-code-action@beta + uses: anthropics/claude-code-action@v1 with: claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} + prompt: | + REPO: ${{ github.repository }} + PR NUMBER: ${{ github.event.pull_request.number }} - # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4.1) - # model: "claude-opus-4-1-20250805" - - # Direct prompt for automated review (no @claude mention needed) - direct_prompt: | Please review this pull request and provide feedback on: - Code quality and best practices - Potential bugs or issues @@ -50,30 +47,11 @@ jobs: - Security concerns - Test coverage - Be constructive and helpful in your feedback. + Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback. - # Optional: Use sticky comments to make Claude reuse the same comment on subsequent pushes to the same PR - # use_sticky_comment: true + Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR. - # Optional: Customize review based on file types - # direct_prompt: | - # Review this PR focusing on: - # - For TypeScript files: Type safety and proper interface usage - # - For API endpoints: Security, input validation, and error handling - # - For React components: Performance, accessibility, and best practices - # - For tests: Coverage, edge cases, and test quality - - # Optional: Different prompts for different authors - # direct_prompt: | - # ${{ github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' && - # 'Welcome! Please review this PR from a first-time contributor. Be encouraging and provide detailed explanations for any suggestions.' || - # 'Please provide a thorough code review focusing on our coding standards and best practices.' }} - - # Optional: Add specific tools for running tests or linting - # allowed_tools: "Bash(npm run test),Bash(npm run lint),Bash(npm run typecheck)" - - # Optional: Skip review for certain conditions - # if: | - # !contains(github.event.pull_request.title, '[skip-review]') && - # !contains(github.event.pull_request.title, '[WIP]') + # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md + # or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options + claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"' From 7949c0613498fb2f125f459c91dc5b5686f0b1ff Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:53:35 +0200 Subject: [PATCH 5/8] Update .github/workflows/claude.yml Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .github/workflows/claude.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml index b1a3201d7..e93c95bff 100644 --- a/.github/workflows/claude.yml +++ b/.github/workflows/claude.yml @@ -34,9 +34,14 @@ jobs: id: claude uses: anthropics/claude-code-action@v1 with: - claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} - - # This is an optional setting that allows Claude to read CI results on PRs + - name: Run Claude Code + id: claude + uses: anthropics/claude-code-action@v1 + with: + claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} + # This is an optional setting that allows Claude to read CI results on PRs + additional_permissions: | + actions: read additional_permissions: | actions: read From c05ad62f8350188b53bc223f4d6b3f457dad7069 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:57:16 +0200 Subject: [PATCH 6/8] disable pr review for now --- .github/workflows/claude-code-review.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/claude-code-review.yml b/.github/workflows/claude-code-review.yml index 31c04fdf6..d73398046 100644 --- a/.github/workflows/claude-code-review.yml +++ b/.github/workflows/claude-code-review.yml @@ -12,6 +12,7 @@ on: jobs: claude-review: + if: false # Optional: Filter by PR author # if: | # github.event.pull_request.user.login == 'external-contributor' || From 354eadd02f18872ef9aa50476f689e5186fbba19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C3=96zg=C3=BCr?= <226712+halilim@users.noreply.github.com> Date: Thu, 9 Oct 2025 00:14:17 +0300 Subject: [PATCH 7/8] Gramps Web: Pin to a version --- templates/compose/gramps-web.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/compose/gramps-web.yaml b/templates/compose/gramps-web.yaml index 04a284ff2..fa3b02c6f 100644 --- a/templates/compose/gramps-web.yaml +++ b/templates/compose/gramps-web.yaml @@ -7,7 +7,7 @@ services: grampsweb: - image: ghcr.io/gramps-project/grampsweb:latest + image: ghcr.io/gramps-project/grampsweb:25.9.0 environment: - SERVICE_URL_GRAMPSWEB_5000 - GRAMPSWEB_TREE=${GRAMPSWEB_TREE:-Gramps Web} # will create a new tree if not exists @@ -33,7 +33,7 @@ services: retries: 3 grampsweb_celery: - image: ghcr.io/gramps-project/grampsweb:latest + image: ghcr.io/gramps-project/grampsweb:25.9.0 environment: - GRAMPSWEB_TREE=${GRAMPSWEB_TREE:-Gramps Web} # will create a new tree if not exists - GRAMPSWEB_CELERY_CONFIG__broker_url=redis://grampsweb_redis:6379/0 From ee6b8c9c042b746dcd39cdd1b1991b8efe4b8663 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C3=96zg=C3=BCr?= <226712+halilim@users.noreply.github.com> Date: Thu, 9 Oct 2025 00:19:17 +0300 Subject: [PATCH 8/8] Revert unintentional changes --- .github/workflows/claude-code-review.yml | 39 ++++++++++++++++----- .github/workflows/claude.yml | 44 +++++++++++++++--------- 2 files changed, 57 insertions(+), 26 deletions(-) diff --git a/.github/workflows/claude-code-review.yml b/.github/workflows/claude-code-review.yml index d73398046..a2c92df59 100644 --- a/.github/workflows/claude-code-review.yml +++ b/.github/workflows/claude-code-review.yml @@ -34,13 +34,15 @@ jobs: - name: Run Claude Code Review id: claude-review - uses: anthropics/claude-code-action@v1 + uses: anthropics/claude-code-action@beta with: claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} - prompt: | - REPO: ${{ github.repository }} - PR NUMBER: ${{ github.event.pull_request.number }} + # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4.1) + # model: "claude-opus-4-1-20250805" + + # Direct prompt for automated review (no @claude mention needed) + direct_prompt: | Please review this pull request and provide feedback on: - Code quality and best practices - Potential bugs or issues @@ -48,11 +50,30 @@ jobs: - Security concerns - Test coverage - Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback. + Be constructive and helpful in your feedback. - Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR. + # Optional: Use sticky comments to make Claude reuse the same comment on subsequent pushes to the same PR + # use_sticky_comment: true - # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md - # or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options - claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"' + # Optional: Customize review based on file types + # direct_prompt: | + # Review this PR focusing on: + # - For TypeScript files: Type safety and proper interface usage + # - For API endpoints: Security, input validation, and error handling + # - For React components: Performance, accessibility, and best practices + # - For tests: Coverage, edge cases, and test quality + + # Optional: Different prompts for different authors + # direct_prompt: | + # ${{ github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' && + # 'Welcome! Please review this PR from a first-time contributor. Be encouraging and provide detailed explanations for any suggestions.' || + # 'Please provide a thorough code review focusing on our coding standards and best practices.' }} + + # Optional: Add specific tools for running tests or linting + # allowed_tools: "Bash(npm run test),Bash(npm run lint),Bash(npm run typecheck)" + + # Optional: Skip review for certain conditions + # if: | + # !contains(github.event.pull_request.title, '[skip-review]') && + # !contains(github.event.pull_request.title, '[WIP]') diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml index e93c95bff..9daf0e90e 100644 --- a/.github/workflows/claude.yml +++ b/.github/workflows/claude.yml @@ -16,6 +16,8 @@ jobs: (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) || (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) || (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) || + (github.event_name == 'issues' && github.event.action == 'labeled' && github.event.label.name == 'Claude') || + (github.event_name == 'pull_request' && github.event.action == 'labeled' && github.event.label.name == 'Claude') || (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))) runs-on: ubuntu-latest permissions: @@ -34,22 +36,30 @@ jobs: id: claude uses: anthropics/claude-code-action@v1 with: - - name: Run Claude Code - id: claude - uses: anthropics/claude-code-action@v1 - with: - claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} - # This is an optional setting that allows Claude to read CI results on PRs - additional_permissions: | - actions: read + anthropic_api_key: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} + + # This is an optional setting that allows Claude to read CI results on PRs additional_permissions: | actions: read - - # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it. - # prompt: 'Update the pull request description to include a summary of changes.' - - # Optional: Add claude_args to customize behavior and configuration - # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md - # or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options - # claude_args: '--model claude-opus-4-1-20250805 --allowed-tools Bash(gh pr:*)' - + + # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4.1) + # model: "claude-opus-4-1-20250805" + + # Optional: Customize the trigger phrase (default: @claude) + # trigger_phrase: "/claude" + + # Optional: Trigger when specific user is assigned to an issue + # assignee_trigger: "claude-bot" + + # Optional: Allow Claude to run specific commands + # allowed_tools: "Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)" + + # Optional: Add custom instructions for Claude to customize its behavior for your project + # custom_instructions: | + # Follow our coding standards + # Ensure all new code has tests + # Use TypeScript for new files + + # Optional: Custom environment variables for Claude + # claude_env: | + # NODE_ENV: test