Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Restructure docker compose files #226

Merged
merged 8 commits into from
Dec 16, 2024
Merged

Restructure docker compose files #226

merged 8 commits into from
Dec 16, 2024

Conversation

FelixFrizzy
Copy link
Collaborator

@FelixFrizzy FelixFrizzy commented Oct 17, 2024

  • Move dev setup into seperate docker compose overrite file
  • Add env vars for skosmos BaseHref URI

Summary by CodeRabbit

  • New Features

    • Introduced new services for development and live environments, including web, skosmos-dev, and skosmos-live.
    • Added a new configuration template for Skosmos to enhance customization options.
    • Added a proxy service to the testing environment.
  • Enhancements

    • Improved health check configurations for various services.
    • Updated the DEBUG setting to be configurable via an environment variable.
    • Enhanced environment variable handling for service configurations, allowing for dynamic port and URL settings.
    • Added gettext-base package for improved localization support.
    • Implemented dynamic base URL configuration for Skosmos.
    • Updated service configurations to utilize environment variables for better flexibility.
  • Bug Fixes

    • Clarified comments and reorganized environment variable declarations for better understanding.
  • Documentation

    • Added configuration templates outlining necessary settings for Skosmos operation.

- Remove ports from .env and docker compose because reverse proxy is used
- Adjust evoks starting command for development mode
- Add proxy port to .env
- Add service_healthy check to proxy
- Adjust web service health check
- some docker compose versions dont accept "no" without quotes
- BaseHref of Skosmos is needed for reverse proxies
- web service is perfoming the env var substitution
Copy link

coderabbitai bot commented Oct 17, 2024

Walkthrough

The pull request introduces modifications across multiple configuration files, focusing on environment variables, service configurations, and health checks. Key changes include the installation of the gettext-base package in the Dockerfile, updates to the docker-compose files with new services and health checks, and enhancements to dynamic configurations for Skosmos. The DEBUG setting in Django is now retrieved from an environment variable, improving flexibility. Overall, these changes enhance the configurability and robustness of the application.

Changes

File Change Summary
.example.env - Removed variables: EVOKS_PORT, SKOSMOS_DEV_PORT, SKOSMOS_LIVE_PORT
- Added variable: PROXY_PORT
- Updated comments and reordered variables.
Dockerfile - Installed package: gettext-base.
docker-compose.custom-test.yml - Changed restart policy for several services to "no" (string format).
- Added new service: proxy.
docker-compose.dev.yml - Added new services: web, skosmos-dev, skosmos-live with specific commands and port configurations.
docker-compose.yml - Updated proxy service port mapping to use ${PROXY_PORT}.
- Added health checks for postgres and other services.
- Updated skosmos services for dynamic port mappings.
evoks/evoks/settings.py - Updated DEBUG setting to retrieve from environment variable DJANGO_DEBUG.
skosmos-dev/config-template.ttl - Introduced new configuration template with various properties for Skosmos.
skosmos-dev/config.ttl - Updated skosmos:baseHref to use ${BASEHREF}.
skosmos-live/config-template.ttl - Introduced new configuration template with various properties for Skosmos.
skosmos-live/config.ttl - Updated skosmos:baseHref to use ${BASEHREF}.
docker-compose.test.yml - Enhanced web service entrypoint to substitute BASEHREF in configuration templates using envsubst.

Possibly related PRs

🐰 In the meadow where bunnies play,
New configs hop in, brightening the day!
With ports and services all in line,
Skosmos dances, oh so fine!
Environment variables, clear and neat,
A joyful change, oh what a treat! 🌼


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🧹 Outside diff range and nitpick comments (18)
.example.env (3)

2-2: LGTM. Consider adding a comment for PROXY_PORT.

The addition of PROXY_PORT aligns well with the PR objectives of restructuring Docker Compose files and likely relates to the reverse proxy setup.

To improve clarity, consider adding a brief comment explaining the purpose and expected value of PROXY_PORT, similar to other variables in this file.


10-10: LGTM. Enhanced clarity in the comment.

The expanded comment provides more context about when the following variables are needed, aligning with the PR objectives of distinguishing between production and development environments.

Consider a minor grammatical improvement:

-# all following only needed for development and or for running without proxy:
+# all following only needed for development and/or for running without proxy:

This change replaces "and or" with "and/or", which is more commonly used and grammatically correct.


13-16: LGTM. Improved organization of port variables.

The reordering of FUSEKI_LIVE_PORT, EVOKS_PORT, SKOSMOS_DEV_PORT, and SKOSMOS_LIVE_PORT to the end of the file improves organization and groups related variables together, enhancing readability and maintenance.

For consistency with other variables in the file, consider adding empty lines between these port variables:

 FUSEKI_LIVE_PORT=
+
 EVOKS_PORT=
+
 SKOSMOS_DEV_PORT=
+
 SKOSMOS_LIVE_PORT=

This change would make the structure consistent with the rest of the file and improve readability.

docker-compose.dev.yml (2)

17-19: LGTM: skosmos-dev service configuration, but remove trailing space.

The configuration looks good, using an environment variable for flexible port configuration. However, there's a trailing space on line 18 that should be removed.

Remove the trailing space on line 18:

-  skosmos-dev:
-    ports: 
+  skosmos-dev:
+    ports:
     - "${SKOSMOS_DEV_PORT:-8001}:80"
🧰 Tools
🪛 yamllint

[error] 18-18: trailing spaces

(trailing-spaces)


21-23: LGTM: skosmos-live service configuration, but remove trailing space.

The configuration is consistent with skosmos-dev and uses environment variables for flexible port configuration. However, there's a trailing space on line 22 that should be removed.

Remove the trailing space on line 22:

-  skosmos-live:
-    ports: 
+  skosmos-live:
+    ports:
     - "${SKOSMOS_LIVE_PORT:-8002}:80"
🧰 Tools
🪛 yamllint

[error] 22-22: trailing spaces

(trailing-spaces)

docker-compose.custom-test.yml (3)

24-24: LGTM: Restart policy updated, minor formatting issue

The restart policy for the fuseki-dev service has been correctly updated to "no", consistent with other services and the PR objective.

There's a trailing space at the end of this line. Consider removing it to maintain consistent formatting:

-    restart: "no" 
+    restart: "no"

30-30: LGTM: Restart policy updated, minor formatting issue

The restart policy for the fuseki-live service has been correctly updated to "no", consistent with other services and the PR objective.

There's a trailing space at the end of this line. Consider removing it to maintain consistent formatting:

-    restart: "no" 
+    restart: "no"

22-22: Minor formatting improvements

There are a few minor formatting issues in the file that don't affect functionality but could improve readability and version control:

  1. Remove trailing spaces from lines 22, 25, and 28.
  2. Add a newline character at the end of the file (line 61).

Consider running a YAML linter or configuring your editor to automatically trim trailing whitespace and ensure files end with a newline to maintain consistent formatting across the project.

Also applies to: 25-25, 28-28, 61-61

🧰 Tools
🪛 yamllint

[error] 22-22: trailing spaces

(trailing-spaces)

skosmos-dev/config-template.ttl (2)

12-14: Consider configuring feedback properties.

The feedback-related properties (feedbackAddress, feedbackEnvelopeSender, feedbackSender) are currently set to empty strings. Consider if these should be configured or if they're intentionally left blank.


39-39: Consider increasing searchResultsSize.

The current searchResultsSize of 20 might be too low for some use cases. Consider increasing this value or making it configurable based on user preferences.

evoks/evoks/settings.py (3)

Line range hint 1-7: Approve changes with a minor suggestion.

The changes to the import statements and DEBUG setting are good improvements:

  1. Removing duplicate imports enhances code cleanliness.
  2. Using an environment variable for DEBUG allows for more flexible configuration across different environments.

However, I have a minor suggestion to improve code readability:

Consider moving the DEBUG setting closer to other environment-dependent configurations for better organization. For example, you could place it near the SECRET_KEY setting.

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-_91@mjc8g-&q_f9io$jmicovci2bilh#)ud3$^iqhj1wnccr%t'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = get_env('DJANGO_DEBUG', 'False') == 'True'

This change would group related configuration settings together, making the file easier to navigate and maintain.

Also applies to: 72-74


Line range hint 1-238: Summary of review and recommendations

Overall, the changes to the settings file are positive, improving configuration flexibility and code cleanliness. Here's a summary of the review and recommendations:

  1. Approved changes:

    • Removal of duplicate imports
    • Implementation of DEBUG setting using an environment variable
  2. Suggestions for improvement:

    • Reorganize the DEBUG setting for better readability
    • Use environment variables for sensitive information like SECRET_KEY
    • Make ALLOWED_HOSTS more flexible by supporting multiple values
  3. General recommendation:

    • Review the entire settings file to identify other hardcoded values that could benefit from using environment variables, enhancing the project's overall configurability and security.

Consider implementing a comprehensive environment variable strategy across the entire project. This would involve:

  1. Identifying all configuration values that might change between environments
  2. Creating a .env.example file with all possible configuration options
  3. Updating the deployment documentation to reflect these changes

This approach will make the project more maintainable, secure, and easier to deploy across different environments.


Security Improvements Needed in evoks/evoks/settings.py

Based on the verification:

  1. Hardcoded SECRET_KEY:

    • evoks/evoks/settings.py contains a hardcoded SECRET_KEY, which poses a security risk.
    • evoks/guardian/testapp/testsettings.py generates SECRET_KEY dynamically, but it's crucial to ensure that production settings do not expose it.
  2. Limited ALLOWED_HOSTS:

    • ALLOWED_HOSTS is set to [PUBLICURL], restricting deployment flexibility.

Recommended Actions:

  1. Use Environment Variables for SECRET_KEY:

    SECRET_KEY = get_env('DJANGO_SECRET_KEY', 'default-secret-key-for-development')
  2. Enhance ALLOWED_HOSTS Flexibility:

    ALLOWED_HOSTS = get_env('DJANGO_ALLOWED_HOSTS', PUBLICURL).split(',')

These changes will enhance security by keeping sensitive information out of the codebase and improve deployment flexibility by allowing multiple allowed hosts to be specified through environment variables.

🔗 Analysis chain

Line range hint 65-67: Address security concerns and improve configuration flexibility.

While reviewing the rest of the file, I noticed some areas that could be improved for better security and flexibility:

  1. The SECRET_KEY is hardcoded in the settings file. This is a security risk, especially if the repository is public.
  2. The ALLOWED_HOSTS setting uses a single value, which might limit deployment flexibility.

Consider the following improvements:

  1. Use an environment variable for SECRET_KEY:
SECRET_KEY = get_env('DJANGO_SECRET_KEY', 'default-secret-key-for-development')
  1. Make ALLOWED_HOSTS more flexible:
ALLOWED_HOSTS = get_env('DJANGO_ALLOWED_HOSTS', PUBLICURL).split(',')

These changes will enhance security by keeping sensitive information out of the codebase and improve deployment flexibility by allowing multiple allowed hosts to be specified through an environment variable.

To ensure these changes don't conflict with existing configurations, please run the following script:

This will help identify any other places in the codebase that might need to be updated if these changes are implemented.

Also applies to: 89-90

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if SECRET_KEY and ALLOWED_HOSTS are used in other parts of the project
echo "Checking SECRET_KEY usage:"
rg "SECRET_KEY" --type python
echo "Checking ALLOWED_HOSTS usage:"
rg "ALLOWED_HOSTS" --type python

Length of output: 256


Script:

#!/bin/bash
# Check if SECRET_KEY and ALLOWED_HOSTS are used in other parts of the project
echo "Checking SECRET_KEY usage:"
rg "SECRET_KEY" --type py
echo "Checking ALLOWED_HOSTS usage:"
rg "ALLOWED_HOSTS" --type py

Length of output: 460


Script:

#!/bin/bash
# Check if SECRET_KEY and ALLOWED_HOSTS are used in other parts of the project
echo "Checking SECRET_KEY usage:"
rg "SECRET_KEY" --type py
echo "Checking ALLOWED_HOSTS usage:"
rg "ALLOWED_HOSTS" --type py

Length of output: 460

docker-compose.yml (5)

42-44: LGTM with a minor suggestion: Improved change-vol-ownership service.

The changes to the change-vol-ownership service are good:

  1. The updated comments provide clearer explanation of the service's purpose.
  2. The simplified command maintains functionality while being more concise.
  3. The new health check directly verifies the success of the chmod operations.

These improvements enhance the service's clarity and reliability.

Consider using a more descriptive name for the exit status file, such as /tmp/chmod_fuseki_volumes_exit_status, to avoid potential conflicts with other operations that might use a similar approach.

Also applies to: 47-48, 56-59


65-73: LGTM with a suggestion: Enhanced web service configuration and health check.

The changes to the web service are beneficial:

  1. The addition of the BASEHREF environment variable allows for dynamic configuration of the base URL.
  2. The modified entrypoint command uses this variable to configure both skosmos-dev and skosmos-live, improving flexibility.
  3. The updated health check now checks the /login endpoint, which is more specific and likely more reliable than checking the root.

These modifications enhance the service's configurability and reliability.

Consider breaking down the long entrypoint command into a separate shell script for improved readability and maintainability. This script could be added to the Docker image during the build process and then executed in the entrypoint.

Also applies to: 102-106

🧰 Tools
🪛 yamllint

[error] 68-68: trailing spaces

(trailing-spaces)


[error] 69-69: trailing spaces

(trailing-spaces)


[error] 70-70: trailing spaces

(trailing-spaces)


[error] 71-71: trailing spaces

(trailing-spaces)


[error] 72-72: trailing spaces

(trailing-spaces)


189-190: LGTM with a suggestion: Improved configuration for skosmos-live service.

The changes to the skosmos-live service enhance its configurability:

  1. The addition of the BASEHREF environment variable allows for dynamic configuration of the base URL.
  2. The volume mapping for config-template.ttl enables external management of the configuration.
  3. The new command uses environment variable substitution, improving flexibility in service configuration.

These modifications make the service more adaptable to different deployment scenarios.

Consider using a multi-line YAML string for the command to improve readability:

command: |
  /bin/bash -c "export BASEHREF &&
  envsubst '$$BASEHREF' < /var/www/html/config-template.ttl > /var/www/html/config.ttl &&
  /usr/sbin/apache2ctl -D FOREGROUND"

This format is easier to read and maintain, especially for multi-line commands.

Also applies to: 197-197, 200-203


10-10: Fix indentation for improved YAML structure.

The static analysis tool has flagged an indentation issue on this line. For better readability and to ensure correct YAML structure:

Adjust the indentation to 8 spaces instead of 10:

-          condition: service_healthy
+        condition: service_healthy

This change will align the indentation with the YAML best practices and resolve the warning from the static analysis tool.

🧰 Tools
🪛 yamllint

[warning] 10-10: wrong indentation: expected 8 but found 10

(indentation)


68-72: Remove trailing spaces for code cleanliness.

The static analysis tool has flagged multiple instances of trailing spaces in the file. While these don't affect functionality, removing them improves code cleanliness and version control efficiency.

Please remove the trailing spaces from the following lines:

  • 68-72
  • 99
  • 163
  • 191

You can use a text editor with a "trim trailing whitespace" feature or a command-line tool like sed to automatically remove these spaces.

Also applies to: 99-99, 163-163, 191-191

🧰 Tools
🪛 yamllint

[error] 68-68: trailing spaces

(trailing-spaces)


[error] 69-69: trailing spaces

(trailing-spaces)


[error] 70-70: trailing spaces

(trailing-spaces)


[error] 71-71: trailing spaces

(trailing-spaces)


[error] 72-72: trailing spaces

(trailing-spaces)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between a3cc6b2 and 29843f1.

📒 Files selected for processing (10)
  • .example.env (1 hunks)
  • Dockerfile (1 hunks)
  • docker-compose.custom-test.yml (2 hunks)
  • docker-compose.dev.yml (1 hunks)
  • docker-compose.yml (6 hunks)
  • evoks/evoks/settings.py (1 hunks)
  • skosmos-dev/config-template.ttl (1 hunks)
  • skosmos-dev/config.ttl (1 hunks)
  • skosmos-live/config-template.ttl (1 hunks)
  • skosmos-live/config.ttl (1 hunks)
🧰 Additional context used
🪛 yamllint
docker-compose.custom-test.yml

[error] 22-22: trailing spaces

(trailing-spaces)


[error] 25-25: trailing spaces

(trailing-spaces)


[error] 28-28: trailing spaces

(trailing-spaces)


[error] 41-41: duplication of key "services" in mapping

(key-duplicates)


[error] 61-61: no new line character at the end of file

(new-line-at-end-of-file)


[error] 61-61: trailing spaces

(trailing-spaces)

docker-compose.dev.yml

[error] 7-7: trailing spaces

(trailing-spaces)


[error] 18-18: trailing spaces

(trailing-spaces)


[error] 22-22: trailing spaces

(trailing-spaces)

docker-compose.yml

[warning] 10-10: wrong indentation: expected 8 but found 10

(indentation)


[error] 68-68: trailing spaces

(trailing-spaces)


[error] 69-69: trailing spaces

(trailing-spaces)


[error] 70-70: trailing spaces

(trailing-spaces)


[error] 71-71: trailing spaces

(trailing-spaces)


[error] 72-72: trailing spaces

(trailing-spaces)


[error] 99-99: trailing spaces

(trailing-spaces)


[error] 163-163: trailing spaces

(trailing-spaces)


[error] 191-191: trailing spaces

(trailing-spaces)

🔇 Additional comments (32)
.example.env (2)

8-9: LGTM. Improved comment consistency.

The update to the comment for EVOKS_URL improves consistency in capitalization, enhancing readability without affecting functionality.


1-16: Overall, the changes to .example.env are well-structured and align with the PR objectives.

The modifications improve the organization of environment variables, enhance clarity through updated comments, and provide better separation between general and development-specific configurations. The addition of PROXY_PORT and the reordering of port-related variables at the end of the file contribute to a more logical structure.

These changes should facilitate easier configuration management for both production and development environments, as well as scenarios with or without a proxy.

Dockerfile (1)

9-9: Addition of gettext-base package: Potential impact on internationalization

The addition of the gettext-base package suggests an intention to support internationalization (i18n) in the application. This aligns with the PR objective of enhancing configurability, particularly in relation to the Skosmos BaseHref URI mentioned in the PR summary.

Considerations:

  1. The placement of the package installation is appropriate, grouped with other package installations.
  2. This addition may introduce new capabilities for handling translations and localized content.

To ensure this change doesn't introduce any unintended side effects, please run the following verification:

This script will help us understand if the gettext-base package is being utilized in the codebase and if there are any translation files present.

✅ Verification successful

Addition of gettext-base package: Verified

  • Confirmed that gettext functions are utilized across the codebase.
  • Detected existing translation files (.po and .mo), indicating active internationalization support.
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the usage of gettext functions in the codebase

# Test: Search for gettext function usage
echo "Searching for gettext function usage:"
rg --type python '\bgettext\b|\b_\b|\bngettext\b'

# Test: Check for .po or .mo files
echo "Checking for translation files:"
fd -e po -e mo

Length of output: 931


Script:

#!/bin/bash
# Description: Verify the usage of gettext functions in the codebase

# Test: Search for gettext function usage in Python files
echo "Searching for gettext function usage in Python files:"
rg '\bgettext\b|\b_\b|\bngettext\b' --type py

# Test: Check for .po or .mo files
echo "Checking for translation files:"
fd -e po -e mo

Length of output: 4150

docker-compose.dev.yml (4)

Line range hint 1-4: LGTM: Postgres service configuration looks good.

The use of an environment variable for the port (POSTGRES_PORT) with a default value is a good practice, allowing for easy configuration changes without modifying the compose file.

🧰 Tools
🪛 yamllint

[error] 7-7: trailing spaces

(trailing-spaces)


[error] 18-18: trailing spaces

(trailing-spaces)


[error] 22-22: trailing spaces

(trailing-spaces)


Line range hint 25-32: LGTM: fuseki-dev and fuseki-live service configurations look good.

Both fuseki services are consistently configured, using environment variables for flexible port configuration. The use of non-standard ports (8003 and 8004) is suitable for a development environment to avoid potential conflicts.

🧰 Tools
🪛 yamllint

[error] 7-7: trailing spaces

(trailing-spaces)


[error] 18-18: trailing spaces

(trailing-spaces)


[error] 22-22: trailing spaces

(trailing-spaces)


Line range hint 1-32: Overall, the docker-compose.dev.yml file is well-structured and aligns with development needs.

The file consistently uses environment variables for port configuration, providing flexibility. The separation of development services in this file aligns well with the PR objective of restructuring Docker Compose files.

A few points to consider:

  1. Address the trailing spaces in the YAML file for better formatting.
  2. Review the web service configuration, particularly the entrypoint override and debug setting, to ensure they meet the intended development setup.

These changes enhance the configurability and separation of development and production environments, which is a positive improvement to the project structure.

🧰 Tools
🪛 yamllint

[error] 7-7: trailing spaces

(trailing-spaces)


[error] 18-18: trailing spaces

(trailing-spaces)


[error] 22-22: trailing spaces

(trailing-spaces)


5-15: Review the entrypoint override and debug setting.

  1. The entrypoint is set to an empty array, which overrides any default entrypoint. Ensure this doesn't skip any necessary setup steps.

  2. DJANGO_DEBUG is set to True, which is suitable for development but should not be used in production.

To ensure DJANGO_DEBUG is not set to True in the production configuration, run:

If this script returns any results, it indicates that DJANGO_DEBUG might be set to True in a production configuration, which should be addressed.

🧰 Tools
🪛 yamllint

[error] 7-7: trailing spaces

(trailing-spaces)

docker-compose.custom-test.yml (4)

7-7: LGTM: Restart policy updated correctly

The restart policy for the postgres service has been updated to "no", which is the correct YAML syntax for string values. This change aligns with the PR objective of restructuring Docker Compose files.


18-18: Clarification needed: Command to Entrypoint switch

The restart policy has been correctly updated to "no", consistent with other services. The multi-line command has been moved to an entrypoint using the appropriate YAML block scalar syntax (>).

However, could you please clarify the reasoning behind changing from command to entrypoint? While both can be used to specify the command to run, they have different implications for how the container starts and handles signals. Ensuring this change aligns with the intended behavior is crucial.

Also applies to: 52-59


34-34: LGTM: Restart policy updated correctly

The restart policy for the skosmos-dev service has been updated to "no", which is consistent with other services and aligns with the PR objective of restructuring Docker Compose files.


38-38: LGTM: Restart policy updated correctly

The restart policy for the skosmos-live service has been updated to "no", which is consistent with other services and aligns with the PR objective of restructuring Docker Compose files.

skosmos-dev/config.ttl (1)

10-10: Approve the change to use an environment variable for baseHref

This change enhances the configurability of the application by replacing the hardcoded URL with an environment variable ${BASEHREF}. This aligns well with the PR objectives and follows good practices for configuration management.

To ensure this change is properly implemented, please verify the following:

  1. The BASEHREF environment variable is correctly set in the relevant Docker Compose file or environment configuration.
  2. Update any documentation or deployment scripts that may reference the old hardcoded URL.

Run the following script to check if the BASEHREF variable is defined in the Docker Compose files:

If the script doesn't return any results, ensure that the BASEHREF variable is properly defined in your Docker Compose setup.

✅ Verification successful

Verified that BASEHREF is properly defined in Docker Compose files

The BASEHREF environment variable is correctly set in all relevant Docker Compose files, ensuring that the application configuration is flexible and environment-specific. No further action is required.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if BASEHREF is defined in Docker Compose files

# Test: Search for BASEHREF in Docker Compose files
rg --type yaml 'BASEHREF' $(fd -e yml -e yaml)

Length of output: 1145

skosmos-live/config.ttl (1)

10-10: Approve change with clarification needed on variable interpolation

The change from a hardcoded URL to an environment variable (${BASEHREF}) aligns well with the PR objectives and enhances the configurability of the application. This is a good practice, especially in containerized environments.

However, there are a couple of points that need clarification:

  1. The syntax ${BASEHREF} is typically used in shell scripts or Docker Compose files, not in Turtle (.ttl) files. Can you please clarify how this variable will be interpolated into the .ttl file?
  2. Where is the BASEHREF variable defined? Is there a mechanism in place to ensure it's always set before this configuration is used?

To verify the usage and definition of the BASEHREF variable, please run the following script:

This script will help us understand how the BASEHREF variable is defined and used across the project, and if there's any mechanism in place to interpolate it into the .ttl file.

✅ Verification successful

BASEHREF Variable Interpolation Verified

The BASEHREF environment variable is correctly defined in docker-compose.yml with appropriate default values:

  • BASEHREF="${PUBLICURL:-http://localhost}:${PROXY_PORT:-9000}/skosmos-dev/"
  • BASEHREF="${PUBLICURL:-http://localhost}:${PROXY_PORT:-9000}/skosmos-live/"

Additionally, envsubst is effectively used in docker-compose.yml to interpolate BASEHREF into the config.ttl files during deployment. This ensures that the configuration is dynamically set based on the provided environment variables or defaults.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for BASEHREF definition and usage

# Check if BASEHREF is defined in any .env files
echo "Checking .env files for BASEHREF definition:"
rg -i '^BASEHREF=' --type env

# Check for BASEHREF usage in docker-compose files
echo "Checking docker-compose files for BASEHREF usage:"
rg -i '\${BASEHREF}' --type yaml

# Check if there's any mechanism to interpolate variables in .ttl files
echo "Checking for potential variable interpolation mechanisms:"
rg -i 'envsubst|sed|awk' --type dockerfile
rg -i 'envsubst|sed|awk' --type yaml

Length of output: 1268


Script:

#!/bin/bash
# Description: Check for BASEHREF definition and usage

# Check if BASEHREF is defined in any .env files
echo "Checking .env files for BASEHREF definition:"
rg -i '^BASEHREF=' .env.*

# Check for BASEHREF usage in docker-compose files
echo "Checking docker-compose files for BASEHREF usage:"
rg -i '\$\{BASEHREF\}' --type yaml

# Check if there's any mechanism to interpolate variables in .ttl files
echo "Checking for potential variable interpolation mechanisms:"
rg -i 'envsubst|sed|awk' --type Dockerfile
rg -i 'envsubst|sed|awk' --type yaml

Length of output: 1189


Script:

#!/bin/bash
# Description: Check for BASEHREF definition and usage

# Check if BASEHREF is defined in any .env files
echo "Checking for BASEHREF definition in .env files:"
rg -i '^BASEHREF=' --glob '*.env' .

# Check for BASEHREF usage in docker-compose files
echo "Checking docker-compose files for BASEHREF usage:"
rg -i '\$\{BASEHREF\}' --type yaml .

# Check if there's any mechanism to interpolate variables in .ttl files
echo "Checking for potential variable interpolation mechanisms:"
rg -i 'envsubst|sed|awk' --type dockerfile .
rg -i 'envsubst|sed|awk' --type yaml .

Length of output: 1172


Script:

#!/bin/bash
# Description: Verify the definition of BASEHREF in docker-compose.yml

echo "Searching for BASEHREF definition in docker-compose.yml:"
rg -i '^BASEHREF=' docker-compose.yml

echo "Checking environment variables section in docker-compose.yml for BASEHREF:"
rg -i 'BASEHREF' docker-compose.yml

Length of output: 1152

skosmos-dev/config-template.ttl (5)

1-7: LGTM: Prefix declarations are appropriate and well-structured.

The prefix declarations are standard for RDF configurations and include all necessary namespaces for the Skosmos configuration.


9-9: LGTM: Main configuration entity correctly declared.

The :config entity is properly declared as a skosmos:Configuration, which is essential for defining the Skosmos configuration.


10-10: LGTM: Dynamic configuration of baseHref.

The use of the ${BASEHREF} environment variable allows for flexible deployment across different environments.


46-46: Evaluate transitiveLimit value.

The transitiveLimit of 1000 might be too high and could impact performance for large datasets. Consider lowering this value or implementing pagination for transitive queries.

#!/bin/bash
# Description: Check for any custom transitive limit configurations in the codebase

# Test: Search for transitive limit configurations
echo "Searching for transitive limit configurations:"
rg --type-add 'config:*.{ttl,conf,yml,yaml,json}' --type config 'transitiveLimit|TRANSITIVE_LIMIT'

# Test: Search for transitive query implementations
echo "Searching for transitive query implementations:"
rg --type-add 'code:*.{php,js,py}' --type code 'transitive.*query|executeTransitiveQuery'

44-44: Verify SPARQL timeout duration.

The sparqlTimeout of 20 seconds might be too long for a responsive user interface. Consider reducing this value or implementing a mechanism to show partial results for long-running queries.

✅ Verification successful

SPARQL timeout duration verified.

The sparqlTimeout is set to 20 seconds in the configuration files. Ensure this value aligns with the desired user interface responsiveness and adjust if necessary.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any custom SPARQL timeout configurations in the codebase

# Test: Search for SPARQL timeout configurations
echo "Searching for SPARQL timeout configurations:"
rg --type-add 'config:*.{ttl,conf,yml,yaml,json}' --type config 'sparqlTimeout|SPARQL_TIMEOUT'

# Test: Search for SPARQL query execution in the codebase
echo "Searching for SPARQL query executions:"
rg --type-add 'code:*.{php,js,py}' --type code 'sparql.*query|executeSparqlQuery'

Length of output: 718


Script:

#!/bin/bash
# Description: Verify SPARQL timeout configurations and query executions in the codebase

# Test: Search for SPARQL timeout configurations
echo "Searching for SPARQL timeout configurations:"
rg --type-add 'config:*.{ttl,conf,yml,yaml,json}' --type config 'sparqlTimeout|SPARQL_TIMEOUT'

# Test: Search for SPARQL query execution implementations
echo "Searching for SPARQL query executions:"
rg --type-add 'code:*.{php,js,py}' --type code 'sparql.*query|executeSparqlQuery'

Length of output: 784

skosmos-live/config-template.ttl (9)

10-10: Good use of environment variable for baseHref.

The use of ${BASEHREF} placeholder for skosmos:baseHref aligns well with the PR objective of enhancing configurability. This allows for easy customization of the base URL across different environments.


12-14: Review empty feedback-related properties.

The feedback-related properties (feedbackAddress, feedbackEnvelopeSender, feedbackSender) are currently set to empty strings. If feedback functionality is intended to be used, consider populating these fields with appropriate values.

If feedback functionality is not required, you may want to remove these properties altogether. Please confirm the intended use of these properties.


16-16: Verify httpTimeout value.

The skosmos:httpTimeout is set to 5 seconds. While this might be sufficient for most cases, it's worth verifying if this timeout is appropriate for your specific use case, especially if there are any long-running queries or operations.

Consider running performance tests to ensure this timeout value is suitable for your expected workload and network conditions.


37-38: Review logging settings for production use.

The current configuration enables logging to the browser console and logging of caught exceptions. While this is excellent for development and debugging, it might not be suitable for a production environment.

Please review these settings and consider disabling or adjusting them for production deployment to avoid potential security risks or performance impacts.


39-39: Verify search results size with stakeholders.

The skosmos:searchResultsSize is set to 20. While this is a common default, it's worth verifying with stakeholders or UX designers if this number meets the specific needs of your users.

Consider conducting user testing or gathering feedback to ensure this setting provides the best user experience for your specific use case.


45-45: Review template cache location for production use.

The template cache is currently set to /tmp/skosmos-template-cache. While using the /tmp directory is common in development environments, it might not be the best choice for a production setup.

For production, consider using a more persistent location that won't be cleared on system reboot. Also, ensure that the chosen location has appropriate permissions and is backed up if necessary.


46-46: Verify transitive limit value.

The skosmos:transitiveLimit is set to 1000, which seems quite high. While this allows for deep transitive relationships, it might impact performance, especially for large datasets.

Please review this value and consider:

  1. Testing with your actual dataset to ensure it doesn't cause performance issues.
  2. Adjusting the value based on the typical depth of transitive relationships in your data.
  3. Implementing pagination or lazy loading for large result sets if necessary.

47-49: UI configurations look good, validate honeypot time.

The UI configurations, including the honeypot and language dropdown, are well set up:

  • Enabling the UI honeypot (skosmos:uiHoneypotEnabled) is a good security measure.
  • The language dropdown (skosmos:uiLanguageDropdown) aligns well with the extensive language support configured earlier.

However, please verify that the 5-second honeypot time (skosmos:uiHoneypotTime) is appropriate for your use case. It should be long enough to catch automated submissions but not so long as to frustrate legitimate users.

Consider A/B testing different honeypot times to find the optimal balance between security and user experience.


1-50: Overall, good configuration structure with room for fine-tuning.

This Skosmos configuration file is well-structured and covers all necessary aspects of the application setup. It aligns well with the PR objectives of restructuring Docker Compose files and enhancing configurability, particularly through the use of environment variables like ${BASEHREF}.

Key points to address:

  1. Review and adjust settings for production use, especially logging and caching configurations.
  2. Verify timeout values, search result sizes, and other numerical settings against actual use cases and performance requirements.
  3. Resolve the duplicate "en" language label.
  4. Consider the suggestions for improving the base URI and SPARQL-related settings.

Once these points are addressed, this configuration will provide a solid foundation for your Skosmos instance, balancing flexibility, performance, and security.

docker-compose.yml (5)

7-7: LGTM: Improved configurability and reliability for the proxy service.

The changes to the proxy service are beneficial:

  1. Using ${PROXY_PORT:-9000} for port mapping allows for easy configuration via environment variables.
  2. Adding condition: service_healthy to the web service dependency ensures the proxy only starts when the web service is fully operational.

These modifications enhance the flexibility and reliability of the service setup.

Also applies to: 9-10


Line range hint 34-39: LGTM: Added health check for postgres service.

The addition of a health check for the postgres service is a good practice:

  • It uses the appropriate pg_isready command to verify database readiness.
  • The configuration parameters (interval, timeout, retries, start_period) are reasonably set.
  • This health check will improve the overall reliability of the system by ensuring the database is fully operational before dependent services start.

Line range hint 124-129: LGTM: Improved health check for fuseki services.

The updates to the health check configurations for both fuseki-dev and fuseki-live services are beneficial:

  • The addition of a start_period: 2m allows the services more time to initialize before health checks begin.
  • This change can improve system reliability by reducing false negatives during startup, especially if these services take longer to become fully operational.

Also applies to: 151-156

🧰 Tools
🪛 yamllint

[warning] 10-10: wrong indentation: expected 8 but found 10

(indentation)


[warning] 13-13: wrong indentation: expected 6 but found 4

(indentation)


94-95: LGTM: Added volume mappings for configuration templates.

The addition of volume mappings for config-template.ttl files is a good change:

  • It allows the web service to access configuration templates for both skosmos-dev and skosmos-live.
  • This change supports the dynamic configuration approach implemented in the web service's entrypoint command.
  • It enhances the flexibility and maintainability of the service configuration.

Line range hint 1-236: Overall improvements with a request for clarification.

The changes in this file generally enhance the Docker Compose configuration:

  1. Improved use of environment variables for better configurability.
  2. Enhanced health checks for various services, improving overall system reliability.
  3. Better management of configuration files through volume mappings.

These modifications make the system more flexible and easier to maintain across different environments.

However, there are some inconsistencies between the skosmos-dev and skosmos-live services that warrant clarification:

  • The skosmos-dev service has several commented-out configurations, while similar configurations are active in skosmos-live.
  • The approach to setting the BASEHREF differs between these services.

Could you please explain the reasoning behind these differences? Are they intentional, perhaps to support different environments or use cases?

To help investigate this, we can compare the configurations:

#!/bin/bash
# Compare skosmos-dev and skosmos-live configurations
diff <(sed -n '/skosmos-dev:/,/skosmos-live:/p' docker-compose.yml) <(sed -n '/skosmos-live:/,/networks:/p' docker-compose.yml)

This will highlight the differences between the two service configurations, which can guide our understanding of the intentional variations.

🧰 Tools
🪛 yamllint

[error] 163-163: trailing spaces

(trailing-spaces)

docker-compose.custom-test.yml Outdated Show resolved Hide resolved
Comment on lines +17 to +36
skosmos:languages ( [ rdfs:label "en" ;
rdf:value "ar_AE.utf8" ] [ rdfs:label "da" ;
rdf:value "da_DK.utf8" ] [ rdfs:label "de" ;
rdf:value "de_DE.utf8" ] [ rdfs:label "en" ;
rdf:value "en_GB.utf8" ] [ rdfs:label "en_US" ;
rdf:value "en_US.utf8" ] [ rdfs:label "es" ;
rdf:value "es_ES.utf8" ] [ rdfs:label "fa" ;
rdf:value "fa_IR.utf8" ] [ rdfs:label "fi" ;
rdf:value "fi_FI.utf8" ] [ rdfs:label "fr" ;
rdf:value "fr_FR.utf8" ] [ rdfs:label "it" ;
rdf:value "it_IT.utf8" ] [ rdfs:label "nb" ;
rdf:value "nb_NO.utf8" ] [ rdfs:label "nl" ;
rdf:value "nl_NL.utf8" ] [ rdfs:label "nn" ;
rdf:value "nn_NO.utf8" ] [ rdfs:label "pl" ;
rdf:value "pl_PL.utf8" ] [ rdfs:label "pt" ;
rdf:value "pt_PT.utf8" ] [ rdfs:label "pt_BR" ;
rdf:value "pt_BR.utf8" ] [ rdfs:label "ru" ;
rdf:value "ru_RU.utf8" ] [ rdfs:label "sv" ;
rdf:value "sv_SE.utf8" ] [ rdfs:label "zh" ;
rdf:value "zh_CN.utf8" ] ) ;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Remove duplicate 'en' language entry.

There are two entries for the 'en' language code. Consider removing one of them to avoid potential conflicts or confusion.

Apply this diff to remove the duplicate entry:

    skosmos:languages ( [ rdfs:label "en" ;
-               rdf:value "ar_AE.utf8" ] [ rdfs:label "da" ;
+               rdf:value "en_GB.utf8" ] [ rdfs:label "da" ;
                rdf:value "da_DK.utf8" ] [ rdfs:label "de" ;
                rdf:value "de_DE.utf8" ] [ rdfs:label "en" ;
-               rdf:value "en_GB.utf8" ] [ rdfs:label "en_US" ;
+               rdf:value "en_US.utf8" ] [ rdfs:label "es" ;

Committable suggestion was skipped due to low confidence.

Comment on lines +1 to +7
@prefix : <file:///code/evoks/tests/skosmos/config.ttl#> .
@prefix dc: <http://purl.org/dc/terms/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skosmos: <http://purl.org/net/skosmos#> .
@prefix void: <http://rdfs.org/ns/void#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Consider using a more appropriate base URI for the configuration.

The current base URI uses a file path (file:///code/evoks/tests/skosmos/config.ttl#), which might not be suitable for a production environment. Consider using a more appropriate URI scheme, such as http:// or https://, that reflects your organization's domain or the Skosmos instance's location.

You could replace the first line with something like:

@prefix : <http://example.com/skosmos/config#> .

Replace http://example.com with your actual domain or a more suitable URI base.

Comment on lines +41 to +44
skosmos:sparqlCollationEnabled false ;
skosmos:sparqlDialect "JenaText" ;
skosmos:sparqlEndpoint <http://fuseki-live:3030/> ;
skosmos:sparqlTimeout 20 ;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Review SPARQL settings and timeout discrepancy.

The SPARQL configuration looks good overall, particularly the use of a Docker service name for the endpoint. However, there's a notable discrepancy between timeouts:

  • skosmos:httpTimeout is set to 5 seconds (line 16)
  • skosmos:sparqlTimeout is set to 20 seconds (line 44)

This discrepancy might lead to situations where SPARQL queries are still running but the HTTP connection has already timed out. Consider aligning these timeout values or ensuring that the HTTP timeout is always greater than or equal to the SPARQL timeout.

Also, verify that the "JenaText" SPARQL dialect is the correct choice for your Fuseki setup.

Comment on lines +17 to +36
skosmos:languages ( [ rdfs:label "en" ;
rdf:value "ar_AE.utf8" ] [ rdfs:label "da" ;
rdf:value "da_DK.utf8" ] [ rdfs:label "de" ;
rdf:value "de_DE.utf8" ] [ rdfs:label "en" ;
rdf:value "en_GB.utf8" ] [ rdfs:label "en_US" ;
rdf:value "en_US.utf8" ] [ rdfs:label "es" ;
rdf:value "es_ES.utf8" ] [ rdfs:label "fa" ;
rdf:value "fa_IR.utf8" ] [ rdfs:label "fi" ;
rdf:value "fi_FI.utf8" ] [ rdfs:label "fr" ;
rdf:value "fr_FR.utf8" ] [ rdfs:label "it" ;
rdf:value "it_IT.utf8" ] [ rdfs:label "nb" ;
rdf:value "nb_NO.utf8" ] [ rdfs:label "nl" ;
rdf:value "nl_NL.utf8" ] [ rdfs:label "nn" ;
rdf:value "nn_NO.utf8" ] [ rdfs:label "pl" ;
rdf:value "pl_PL.utf8" ] [ rdfs:label "pt" ;
rdf:value "pt_PT.utf8" ] [ rdfs:label "pt_BR" ;
rdf:value "pt_BR.utf8" ] [ rdfs:label "ru" ;
rdf:value "ru_RU.utf8" ] [ rdfs:label "sv" ;
rdf:value "sv_SE.utf8" ] [ rdfs:label "zh" ;
rdf:value "zh_CN.utf8" ] ) ;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Comprehensive language support, but check duplicate "en" label.

The configuration provides excellent support for multiple languages, which is great for internationalization. However, there's a potential issue:

  • The "en" label is used twice (lines 18 and 20). One of these should probably be changed to distinguish between different English variants (e.g., "en_GB" and "en_US").

Consider updating one of the "en" labels to be more specific:

-                rdf:value "en_GB.utf8" ] [ rdfs:label "en" ;
+                rdf:value "en_GB.utf8" ] [ rdfs:label "en_GB" ;

Overall, the comprehensive language support and use of UTF-8 locales is commendable and will greatly enhance the application's accessibility to a diverse user base.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
skosmos:languages ( [ rdfs:label "en" ;
rdf:value "ar_AE.utf8" ] [ rdfs:label "da" ;
rdf:value "da_DK.utf8" ] [ rdfs:label "de" ;
rdf:value "de_DE.utf8" ] [ rdfs:label "en" ;
rdf:value "en_GB.utf8" ] [ rdfs:label "en_US" ;
rdf:value "en_US.utf8" ] [ rdfs:label "es" ;
rdf:value "es_ES.utf8" ] [ rdfs:label "fa" ;
rdf:value "fa_IR.utf8" ] [ rdfs:label "fi" ;
rdf:value "fi_FI.utf8" ] [ rdfs:label "fr" ;
rdf:value "fr_FR.utf8" ] [ rdfs:label "it" ;
rdf:value "it_IT.utf8" ] [ rdfs:label "nb" ;
rdf:value "nb_NO.utf8" ] [ rdfs:label "nl" ;
rdf:value "nl_NL.utf8" ] [ rdfs:label "nn" ;
rdf:value "nn_NO.utf8" ] [ rdfs:label "pl" ;
rdf:value "pl_PL.utf8" ] [ rdfs:label "pt" ;
rdf:value "pt_PT.utf8" ] [ rdfs:label "pt_BR" ;
rdf:value "pt_BR.utf8" ] [ rdfs:label "ru" ;
rdf:value "ru_RU.utf8" ] [ rdfs:label "sv" ;
rdf:value "sv_SE.utf8" ] [ rdfs:label "zh" ;
rdf:value "zh_CN.utf8" ] ) ;
skosmos:languages ( [ rdfs:label "en" ;
rdf:value "ar_AE.utf8" ] [ rdfs:label "da" ;
rdf:value "da_DK.utf8" ] [ rdfs:label "de" ;
rdf:value "de_DE.utf8" ] [ rdfs:label "en_GB" ;
rdf:value "en_GB.utf8" ] [ rdfs:label "en_US" ;
rdf:value "en_US.utf8" ] [ rdfs:label "es" ;
rdf:value "es_ES.utf8" ] [ rdfs:label "fa" ;
rdf:value "fa_IR.utf8" ] [ rdfs:label "fi" ;
rdf:value "fi_FI.utf8" ] [ rdfs:label "fr" ;
rdf:value "fr_FR.utf8" ] [ rdfs:label "it" ;
rdf:value "it_IT.utf8" ] [ rdfs:label "nb" ;
rdf:value "nb_NO.utf8" ] [ rdfs:label "nl" ;
rdf:value "nl_NL.utf8" ] [ rdfs:label "nn" ;
rdf:value "nn_NO.utf8" ] [ rdfs:label "pl" ;
rdf:value "pl_PL.utf8" ] [ rdfs:label "pt" ;
rdf:value "pt_PT.utf8" ] [ rdfs:label "pt_BR" ;
rdf:value "pt_BR.utf8" ] [ rdfs:label "ru" ;
rdf:value "ru_RU.utf8" ] [ rdfs:label "sv" ;
rdf:value "sv_SE.utf8" ] [ rdfs:label "zh" ;
rdf:value "zh_CN.utf8" ] ) ;

@@ -163,18 +156,23 @@ services:
build:
context: https://github.com/NatLibFi/Skosmos.git#v2.17
dockerfile: dockerfiles/Dockerfile.ubuntu
ports:
- "${SKOSMOS_DEV_PORT:-8001}:80"
# to change port here, use .env file
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Commented-out configurations remain in docker-compose.yml

  • The following configurations are still commented out in docker-compose.yml:
    • Line 69: envsubst '$$BASEHREF' < /code/skosmos-dev/config-template.ttl > /code/skosmos-dev/config.ttl &&
    • Line 94: - ./skosmos-dev/config-template.ttl:/code/skosmos-dev/config-template.ttl

Please consider removing these commented-out lines if they are no longer needed or provide additional comments to clarify their purpose.

🔗 Analysis chain

Please clarify the intent behind the commented-out configurations.

Several configurations in the skosmos-dev service have been commented out:

  1. The port mapping comment suggests using the .env file for port configuration, which is a good practice.
  2. The BASEHREF environment variable is commented out.
  3. The volume mapping for config-template.ttl is commented out.
  4. The command for starting the service with environment variable substitution is commented out.

Could you please clarify the reasoning behind these changes? Are these configurations being moved to a development-specific override file? If so, it might be helpful to add a comment explaining this, or remove the commented-out lines if they're no longer needed.

To check if these configurations have been moved elsewhere, we can search for them in other files:

This will help us understand if these configurations have been relocated or if they're no longer needed.

Also applies to: 161-162, 169-169, 172-175

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for the commented-out configurations in other files
rg "BASEHREF.*skosmos-dev" --type yaml
rg "config-template.ttl.*skosmos-dev" --type yaml
rg "envsubst.*skosmos-dev" --type yaml

Length of output: 313


Script:

#!/bin/bash
# Search for the BASEHREF environment variable in YAML files related to skosmos-dev
rg -n "BASEHREF:.*skosmos-dev" --type yaml

# Search for the config-template.ttl volume mapping in YAML files related to skosmos-dev
rg -n "config-template\.ttl:.*skosmos-dev" --type yaml

# Search for envsubst commands in YAML files related to skosmos-dev
rg -n "envsubst.*skosmos-dev" --type yaml

Length of output: 372

- web service executes the tests
- env vars have to be set also in test setup
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (2)
docker-compose.test.yml (2)

14-16: LGTM with suggestions for robustness

The environment variable substitution setup looks good, but could benefit from some error handling.

Consider adding error checks:

   entrypoint: >
     sh -c "set -e &&
-            export BASEHREF && 
-            envsubst '$$BASEHREF' < /code/skosmos-dev/config-template.ttl > /code/skosmos-dev/config.ttl && 
-            envsubst '$$BASEHREF' < /code/skosmos-live/config-template.ttl > /code/skosmos-live/config.ttl && 
+            if [ -z "$${BASEHREF}" ]; then
+              echo "Error: BASEHREF environment variable is not set" >&2
+              exit 1
+            fi &&
+            export BASEHREF &&
+            for env in dev live; do
+              template="/code/skosmos-$${env}/config-template.ttl"
+              if [ ! -f "$${template}" ]; then
+                echo "Error: Template file $${template} not found" >&2
+                exit 1
+              fi
+              envsubst '$$BASEHREF' < "$${template}" > "/code/skosmos-$${env}/config.ttl"
+            done &&
🧰 Tools
🪛 yamllint (1.35.1)

[error] 14-14: trailing spaces

(trailing-spaces)


[error] 15-15: trailing spaces

(trailing-spaces)


[error] 16-16: trailing spaces

(trailing-spaces)


14-16: Remove trailing spaces

Minor formatting issue: remove trailing spaces at the end of these lines.

-            export BASEHREF && 
-            envsubst '$$BASEHREF' < /code/skosmos-dev/config-template.ttl > /code/skosmos-dev/config.ttl && 
-            envsubst '$$BASEHREF' < /code/skosmos-live/config-template.ttl > /code/skosmos-live/config.ttl && 
+            export BASEHREF &&
+            envsubst '$$BASEHREF' < /code/skosmos-dev/config-template.ttl > /code/skosmos-dev/config.ttl &&
+            envsubst '$$BASEHREF' < /code/skosmos-live/config-template.ttl > /code/skosmos-live/config.ttl &&
🧰 Tools
🪛 yamllint (1.35.1)

[error] 14-14: trailing spaces

(trailing-spaces)


[error] 15-15: trailing spaces

(trailing-spaces)


[error] 16-16: trailing spaces

(trailing-spaces)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 29843f1 and ada441d.

📒 Files selected for processing (1)
  • docker-compose.test.yml (1 hunks)
🧰 Additional context used
🪛 yamllint (1.35.1)
docker-compose.test.yml

[error] 14-14: trailing spaces

(trailing-spaces)


[error] 15-15: trailing spaces

(trailing-spaces)


[error] 16-16: trailing spaces

(trailing-spaces)

🔇 Additional comments (1)
docker-compose.test.yml (1)

14-16: Verify template files exist in the repository

Let's ensure the template files are present in the expected locations.

✅ Verification successful

Template files are present at the expected locations

The verification confirms that both template files exist exactly where they are referenced in the docker-compose file:

  • ./skosmos-live/config-template.ttl
  • ./skosmos-dev/config-template.ttl
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if the template files exist in the repository
fd --type f "config-template.ttl$" --exec echo "Found template: {}"

Length of output: 170

🧰 Tools
🪛 yamllint (1.35.1)

[error] 14-14: trailing spaces

(trailing-spaces)


[error] 15-15: trailing spaces

(trailing-spaces)


[error] 16-16: trailing spaces

(trailing-spaces)

- Reflects now the changes with env vars and envsubst
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (4)
docker-compose.custom-test.yml (4)

12-22: Fix trailing spaces in entrypoint script

The entrypoint script logic is good, but there are trailing spaces on lines 14-16 that should be removed.

-             export BASEHREF && 
-             envsubst '$$BASEHREF' < /code/skosmos-dev/config-template.ttl > /code/skosmos-dev/config.ttl && 
-             envsubst '$$BASEHREF' < /code/skosmos-live/config-template.ttl > /code/skosmos-live/config.ttl && 
+             export BASEHREF &&
+             envsubst '$$BASEHREF' < /code/skosmos-dev/config-template.ttl > /code/skosmos-dev/config.ttl &&
+             envsubst '$$BASEHREF' < /code/skosmos-live/config-template.ttl > /code/skosmos-live/config.ttl &&
🧰 Tools
🪛 yamllint (1.35.1)

[error] 14-14: trailing spaces

(trailing-spaces)


[error] 15-15: trailing spaces

(trailing-spaces)


[error] 16-16: trailing spaces

(trailing-spaces)


12-22: Consider adding healthcheck for the web service

Since this is a test environment running critical services, adding a healthcheck would help with container orchestration and debugging.

    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
🧰 Tools
🪛 yamllint (1.35.1)

[error] 14-14: trailing spaces

(trailing-spaces)


[error] 15-15: trailing spaces

(trailing-spaces)


[error] 16-16: trailing spaces

(trailing-spaces)


26-27: Remove trailing space after restart policy

There's a trailing space on line 27 that should be removed.

🧰 Tools
🪛 yamllint (1.35.1)

[error] 27-27: trailing spaces

(trailing-spaces)


1-38: Consider separating test-specific configurations

Given that this file contains both test and development configurations (e.g., coverage reporting alongside development services), consider further separating the configurations:

  • Move test-specific settings to a dedicated docker-compose.test.yml
  • Keep development settings in docker-compose.dev.yml
  • Maintain common settings in the base docker-compose.yml

This separation would align with the PR's objective of restructuring Docker Compose files and make the configuration more maintainable.

🧰 Tools
🪛 yamllint (1.35.1)

[error] 14-14: trailing spaces

(trailing-spaces)


[error] 15-15: trailing spaces

(trailing-spaces)


[error] 16-16: trailing spaces

(trailing-spaces)


[error] 27-27: trailing spaces

(trailing-spaces)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between ada441d and 58df10c.

📒 Files selected for processing (1)
  • docker-compose.custom-test.yml (1 hunks)
🧰 Additional context used
🪛 yamllint (1.35.1)
docker-compose.custom-test.yml

[error] 14-14: trailing spaces

(trailing-spaces)


[error] 15-15: trailing spaces

(trailing-spaces)


[error] 16-16: trailing spaces

(trailing-spaces)


[error] 27-27: trailing spaces

(trailing-spaces)

🔇 Additional comments (3)
docker-compose.custom-test.yml (3)

2-4: Verify proxy service configuration completeness

The proxy service definition appears incomplete. Typically, a proxy service requires additional configuration such as port mappings, network settings, and potentially health checks for proper functionality.

Would you like me to help generate a more complete proxy service configuration with the necessary settings?


8-8: LGTM! Proper YAML string formatting

The restart policy is correctly quoted as a string.


34-38: LGTM! Consistent restart policy

The restart policies are correctly quoted and consistent with other services.

- Tests failed because of service_healthy condition
- Solution: Remove depends_on condition for proxy service in tests compose file
- Do this by overriting the depends_on condition with emtpy values
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
docker-compose.test.yml (1)

16-18: Remove trailing spaces in entrypoint command

There are trailing spaces at the end of these lines that should be removed for better code cleanliness.

Apply this diff to fix the trailing spaces:

-             export BASEHREF && 
-             envsubst '$$BASEHREF' < /code/skosmos-dev/config-template.ttl > /code/skosmos-dev/config.ttl && 
-             envsubst '$$BASEHREF' < /code/skosmos-live/config-template.ttl > /code/skosmos-live/config.ttl && 
+             export BASEHREF &&
+             envsubst '$$BASEHREF' < /code/skosmos-dev/config-template.ttl > /code/skosmos-dev/config.ttl &&
+             envsubst '$$BASEHREF' < /code/skosmos-live/config-template.ttl > /code/skosmos-live/config.ttl &&
🧰 Tools
🪛 yamllint (1.35.1)

[error] 16-16: trailing spaces

(trailing-spaces)


[error] 17-17: trailing spaces

(trailing-spaces)


[error] 18-18: trailing spaces

(trailing-spaces)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 58df10c and 701bd1d.

📒 Files selected for processing (1)
  • docker-compose.test.yml (2 hunks)
🧰 Additional context used
🪛 yamllint (1.35.1)
docker-compose.test.yml

[error] 16-16: trailing spaces

(trailing-spaces)


[error] 17-17: trailing spaces

(trailing-spaces)


[error] 18-18: trailing spaces

(trailing-spaces)

🔇 Additional comments (2)
docker-compose.test.yml (2)

4-5: LGTM: Service dependency is correctly configured

The addition of the depends_on directive ensures proper service startup order, with the proxy service waiting for the web service to be available.


16-18: Verify environment variable handling and template processing

While the template processing logic is correct, consider adding safeguards:

  1. Validate BASEHREF environment variable
  2. Check for template file existence
  3. Verify generated config files

Let's check the template files and related configurations:

✅ Verification successful

Let me check the docker-compose files for BASEHREF definition since it wasn't found in .env files.


Environment variable and template processing are properly configured

The verification shows that:

  1. BASEHREF is properly defined in docker-compose.yml with a default value: "${PUBLICURL:-http://localhost}:${PROXY_PORT:-9000}/skosmos-dev/"
  2. Template files exist and contain the correct variable placeholder ${BASEHREF}
  3. The template processing is handled with proper fallback values for all dependent variables
  4. Generated config files are mounted correctly in the container volumes
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if template files exist and their content
echo "Checking template files..."
fd -t f "config-template.ttl" -x cat {}

# Check if BASEHREF is properly defined in environment files
echo "Checking environment variable definitions..."
fd -t f ".env" -x grep -l "BASEHREF" {}

Length of output: 4965


Script:

#!/bin/bash
# Check docker-compose files for BASEHREF
echo "Checking docker-compose files..."
fd -t f "docker-compose" -x cat {}

# Check if there are any other potential environment files
echo "Checking other environment files..."
fd -t f "env" -x cat {}

Length of output: 10710

🧰 Tools
🪛 yamllint (1.35.1)

[error] 16-16: trailing spaces

(trailing-spaces)


[error] 17-17: trailing spaces

(trailing-spaces)


[error] 18-18: trailing spaces

(trailing-spaces)

Copy link

codecov bot commented Dec 16, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 93.85%. Comparing base (e4ee911) to head (701bd1d).
Report is 14 commits behind head on development.

Additional details and impacted files
@@             Coverage Diff              @@
##           development     #226   +/-   ##
============================================
  Coverage        93.85%   93.85%           
============================================
  Files               49       49           
  Lines             1773     1773           
============================================
  Hits              1664     1664           
  Misses             109      109           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@FelixFrizzy FelixFrizzy merged commit 363a729 into development Dec 16, 2024
8 checks passed
@FelixFrizzy FelixFrizzy deleted the docker-compose branch December 16, 2024 10:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant